美文网首页
LPC55(S)06配置RAM连续支持大区间的Heap

LPC55(S)06配置RAM连续支持大区间的Heap

作者: MagicoePaper | 来源:发表于2024-07-21 15:39 被阅读0次

    LPC55(S)06拥有96KB的SRAM,分成了SRAM0,SRAM1,SRAM2,SRAM3和SRAM X 五个分区。

    其中SRAM0,1,2,3为连续的RAM区域,总计可达80KB。近日有客户,希望malloc能支持70KB,Stack同时支持8K。

    故在LPC55(S)06上需要一定的技巧把SRAM0,1,2,3利用起来,这里为各位看官 分析一二。

    知识点1,LPC55(S)06的SRAM1,2,3默认的clock配置是disable的。

    知识点2,重新调配HEAP,STACK的地址和大小,也要注意剩余地址的连续性

    知识点3,用于HEAP和STACK的SRAM段落应在系统heap和stack初始化之前完成该SRAM段落的使能,不然会fault。

    LPC55(S)06的内存地址分配图

    IDE,咱们用的是KEIL。IAR和MCUXpresso同理。

    首先我们需要在system_lpc55s06.c文件中的SystemInit()函数中使能SRAM1,2,3。这里SRAM 3 被SDK定义为了USB SRAM1。

    RESET_PeripheralReset(kSRAM1_RST_SHIFT_RSTn);

    RESET_PeripheralReset(kSRAM2_RST_SHIFT_RSTn);

    RESET_PeripheralReset(kUSB1RAM_RST_SHIFT_RSTn);

    CLOCK_EnableClock(kCLOCK_Sram1);

    CLOCK_EnableClock(kCLOCK_Sram2);

    CLOCK_EnableClock(kCLOCK_UsbRam1);

    SystemInit是在startup.s被调用的,调用的时候MCU系统的STACK和HEAP还没有被初始化,

    完成好SRAM的使能后,我们需要去调整分散加载scatter文件。

    这里我们隐掉了之前SDK的设置,我们调正了HEAP区占用SRAM的最高区0x20014000,而不是STACK区区占用SRAM的最高区0x20014000, 如果STACK设置到了SRAM3则会在boot过程中产生HardFault。

    所以这里我们调成了HEAP和STACK区间的位置顺序,变成了"code可用的RAM空间" - STACK - HEAP 而不是"code可用的RAM空间"-HEAP-STACK。

    分散加载文件 编译后STACK和HEAP的地址空间

    如果一切正常,则用如下测试代码就会毫无问题

    uint8_t *malloc_buf;

    malloc_buf = malloc(70*1024);

     memset(malloc_buf, 0x00, 70*1024);

    就此,咱们就可以完整的使用80KB连续的SRAM区间了。

    相关文章

      网友评论

          本文标题:LPC55(S)06配置RAM连续支持大区间的Heap

          本文链接:https://www.haomeiwen.com/subject/jawshjtx.html