//

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的内存

 

posted @ 2025-01-20 14:57  一只鱼在水杯里  阅读(260)  评论(0)    收藏  举报