rt-thread 如何使用多块sram
芯片:STM32F407芯片
rtt版本:5.1.0
STM32F407 有两块内存
0x20000000 开始128K
0x10000000 开始64K
首先 配置内存管理,方式使用Use memheap objects as heap

然后在board.h中增加RAM2的定义如下
/*-------------------------- ROM/RAM CONFIG BEGIN --------------------------*/ #define ROM_START ((uint32_t)0x08000000) #define ROM_SIZE (1024 * 1024) #define ROM_END ((uint32_t)(ROM_START + ROM_SIZE)) #define RAM_START (0x20000000) #define RAM_SIZE (128 * 1024) #define RAM_END (RAM_START + RAM_SIZE) #define RAM2_START (0x10000000) #define RAM2_SIZE (64 * 1024) #define RAM2_END (RAM2_START + RAM2_SIZE)
在board.c中void rt_hw_board_init()中调用初始化sram2的函数
int system_sram2_init(void) { static struct rt_memheap memheap_sram2; /* Heap initialization */ #if defined(RT_USING_HEAP) rt_memheap_init(&memheap_sram2, "sram2", (void *)RAM2_START, (rt_size_t)RAM2_SIZE); #endif return 0; } rt_weak void rt_hw_board_init() { extern void hw_board_init(char *clock_src, int32_t clock_src_freq, int32_t clock_target_freq); /* Heap initialization */ #if defined(RT_USING_HEAP) rt_system_heap_init((void *) HEAP_BEGIN, (void *) HEAP_END); system_sram2_init(); #endif hw_board_init(BSP_CLOCK_SOURCE, BSP_CLOCK_SOURCE_FREQ_MHZ, BSP_CLOCK_SYSTEM_FREQ_MHZ); /* Set the shell console output device */ #if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE) rt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif /* Board underlying hardware initialization */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif }

当通过rt_malloc申请内存时,如果默认heap中的申请完了会自动取申请sram2的内存

浙公网安备 33010602011771号