ca13734bf0
Add kernel (Cortex-M0/M3/M4, Tricore, S32K, RISC-V ports), drivers, middleware (CAN stack, diagnostics, safety), applications, board support, build/test tooling, and documentation.
212 lines
6.6 KiB
C
212 lines
6.6 KiB
C
/**
|
|
* @file memory_config.h
|
|
* @brief Memory configuration for automotive RTOS
|
|
*/
|
|
|
|
#ifndef MEMORY_CONFIG_H
|
|
#define MEMORY_CONFIG_H
|
|
|
|
#include <stdint.h>
|
|
|
|
/* ============================================================================
|
|
* Memory Map Configuration
|
|
* ============================================================================ */
|
|
|
|
/* Flash memory configuration */
|
|
#define FLASH_BASE_ADDRESS 0x08000000U
|
|
#define FLASH_SIZE 0x00100000U /* 1 MB */
|
|
#define FLASH_PAGE_SIZE 0x00002000U /* 8 KB */
|
|
#define FLASH_SECTOR_SIZE 0x00010000U /* 64 KB */
|
|
|
|
/* RAM memory configuration */
|
|
#define RAM_BASE_ADDRESS 0x20000000U
|
|
#define RAM_SIZE 0x00020000U /* 128 KB */
|
|
|
|
/* CCM RAM (Core Coupled Memory) */
|
|
#define CCM_RAM_BASE_ADDRESS 0x10000000U
|
|
#define CCM_RAM_SIZE 0x00010000U /* 64 KB */
|
|
|
|
/* External RAM configuration */
|
|
#define EXT_RAM_BASE_ADDRESS 0x60000000U
|
|
#define EXT_RAM_SIZE 0x00800000U /* 8 MB */
|
|
|
|
/* ============================================================================
|
|
* Memory Regions
|
|
* ============================================================================ */
|
|
|
|
/* Kernel memory region */
|
|
#define KERNEL_MEMORY_START FLASH_BASE_ADDRESS
|
|
#define KERNEL_MEMORY_SIZE 0x00040000U /* 256 KB */
|
|
|
|
/* Application memory region */
|
|
#define APP_MEMORY_START (KERNEL_MEMORY_START + KERNEL_MEMORY_SIZE)
|
|
#define APP_MEMORY_SIZE 0x00080000U /* 512 KB */
|
|
|
|
/* Calibration data region */
|
|
#define CALIBRATION_MEMORY_START (APP_MEMORY_START + APP_MEMORY_SIZE)
|
|
#define CALIBRATION_MEMORY_SIZE 0x00020000U /* 128 KB */
|
|
|
|
/* Bootloader region */
|
|
#define BOOTLOADER_MEMORY_START FLASH_BASE_ADDRESS
|
|
#define BOOTLOADER_MEMORY_SIZE 0x00010000U /* 64 KB */
|
|
|
|
/* ============================================================================
|
|
* Stack Configuration
|
|
* ============================================================================ */
|
|
|
|
/* Main stack (MSP) */
|
|
#define MAIN_STACK_SIZE 0x00001000U /* 4 KB */
|
|
|
|
/* Process stack (PSP) */
|
|
#define PROCESS_STACK_SIZE 0x00000800U /* 2 KB */
|
|
|
|
/* ISR stack */
|
|
#define ISR_STACK_SIZE 0x00000800U /* 2 KB */
|
|
|
|
/* Exception stack */
|
|
#define EXCEPTION_STACK_SIZE 0x00000400U /* 1 KB */
|
|
|
|
/* ============================================================================
|
|
* Heap Configuration
|
|
* ============================================================================ */
|
|
|
|
/* Heap region */
|
|
#define HEAP_START (RAM_BASE_ADDRESS + 0x00010000U)
|
|
#define HEAP_SIZE 0x00010000U /* 64 KB */
|
|
|
|
/* Heap alignment */
|
|
#define HEAP_ALIGNMENT 8
|
|
|
|
/* Minimum heap block size */
|
|
#define HEAP_MIN_BLOCK_SIZE 16
|
|
|
|
/* Enable heap poisoning */
|
|
#define ENABLE_HEAP_POISONING 1
|
|
|
|
/* Heap poison value */
|
|
#define HEAP_POISON_VALUE 0xDEADBEEF
|
|
|
|
/* ============================================================================
|
|
* Memory Protection Units (MPU)
|
|
* ============================================================================ */
|
|
|
|
/* Number of MPU regions */
|
|
#define MPU_REGION_COUNT 8
|
|
|
|
/* MPU region definitions */
|
|
typedef struct {
|
|
uint32_t base_address;
|
|
uint32_t size;
|
|
uint8_t permissions;
|
|
bool executable;
|
|
bool cacheable;
|
|
bool bufferable;
|
|
} MpuRegionConfig_t;
|
|
|
|
/* Default MPU configuration */
|
|
static const MpuRegionConfig_t mpu_regions[] = {
|
|
/* Kernel code region (read-only, executable) */
|
|
{
|
|
.base_address = KERNEL_MEMORY_START,
|
|
.size = KERNEL_MEMORY_SIZE,
|
|
.permissions = 0x05, /* Read-only */
|
|
.executable = true,
|
|
.cacheable = true,
|
|
.bufferable = false
|
|
},
|
|
/* Application code region (read-only, executable) */
|
|
{
|
|
.base_address = APP_MEMORY_START,
|
|
.size = APP_MEMORY_SIZE,
|
|
.permissions = 0x05, /* Read-only */
|
|
.executable = true,
|
|
.cacheable = true,
|
|
.bufferable = false
|
|
},
|
|
/* RAM region (read-write, non-executable) */
|
|
{
|
|
.base_address = RAM_BASE_ADDRESS,
|
|
.size = RAM_SIZE,
|
|
.permissions = 0x03, /* Read-write */
|
|
.executable = false,
|
|
.cacheable = true,
|
|
.bufferable = true
|
|
},
|
|
/* Peripheral region (read-write, non-executable) */
|
|
{
|
|
.base_address = 0x40000000U,
|
|
.size = 0x10000000U, /* 256 MB */
|
|
.permissions = 0x03, /* Read-write */
|
|
.executable = false,
|
|
.cacheable = false,
|
|
.bufferable = true
|
|
},
|
|
/* External memory region */
|
|
{
|
|
.base_address = 0x60000000U,
|
|
.size = 0x10000000U, /* 256 MB */
|
|
.permissions = 0x03, /* Read-write */
|
|
.executable = false,
|
|
.cacheable = true,
|
|
.bufferable = true
|
|
}
|
|
};
|
|
|
|
#define MPU_REGION_COUNT_CONFIGURED (sizeof(mpu_regions) / sizeof(MpuRegionConfig_t))
|
|
|
|
/* ============================================================================
|
|
* Memory Pools
|
|
* ============================================================================ */
|
|
|
|
/* Memory pool configurations */
|
|
#define MEMORY_POOL_COUNT 4
|
|
|
|
typedef struct {
|
|
uint32_t block_size;
|
|
uint32_t block_count;
|
|
uint32_t total_size;
|
|
} MemoryPoolConfig_t;
|
|
|
|
static const MemoryPoolConfig_t memory_pools[MEMORY_POOL_COUNT] = {
|
|
{.block_size = 32, .block_count = 64, .total_size = 2048},
|
|
{.block_size = 64, .block_count = 64, .total_size = 4096},
|
|
{.block_size = 128, .block_count = 32, .total_size = 4096},
|
|
{.block_size = 256, .block_count = 16, .total_size = 4096}
|
|
};
|
|
|
|
/* ============================================================================
|
|
* DMA Configuration
|
|
* ============================================================================ */
|
|
|
|
/* DMA channels */
|
|
#define DMA_CHANNEL_COUNT 8
|
|
|
|
/* DMA buffer sizes */
|
|
#define DMA_BUFFER_SIZE_CAN 512
|
|
#define DMA_BUFFER_SIZE_UART 256
|
|
#define DMA_BUFFER_SIZE_SPI 1024
|
|
#define DMA_BUFFER_SIZE_ADC 512
|
|
|
|
/* DMA priorities */
|
|
#define DMA_PRIORITY_LOW 0
|
|
#define DMA_PRIORITY_MEDIUM 1
|
|
#define DMA_PRIORITY_HIGH 2
|
|
#define DMA_PRIORITY_VERY_HIGH 3
|
|
|
|
/* ============================================================================
|
|
* ECC Configuration
|
|
* ============================================================================ */
|
|
|
|
/* Enable ECC */
|
|
#define ENABLE_ECC 1
|
|
|
|
/* ECC protected regions */
|
|
#define ECC_FLASH_ENABLED 1
|
|
#define ECC_RAM_ENABLED 1
|
|
|
|
/* ECC error handling */
|
|
#define ECC_SINGLE_ERROR_CORRECT 1
|
|
#define ECC_DOUBLE_ERROR_DETECT 1
|
|
|
|
#endif /* MEMORY_CONFIG_H */
|