查看: 1022|回复: 0

优化LPC55(S)06内存管理机制,打造高效连续大Heap区间配置策略

[复制链接]
  • TA的每日心情
    开心
    2025-7-10 13:07
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    56

    主题

    549

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1531

    热心会员

    最后登录
    2025-10-22
    发表于 2024-9-30 13:55:52 | 显示全部楼层 |阅读模式
    本帖最后由 y369369 于 2024-9-30 15:04 编辑

    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利用起来,今天为各位看官逐一分析。

      划重点
    微信图片_20240930134925.png


    微信图片_20240930134922.png
    LPC55(S)06的内存地址分配图


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

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

    2. RESET_PeripheralReset(kSRAM2_RST_SHIFT_RSTn);

    3. RESET_PeripheralReset(kUSB1RAM_RST_SHIFT_RSTn);

    4. CLOCK_EnableClock(kCLOCK_Sram1);

    5. CLOCK_EnableClock(kCLOCK_Sram2);

    6. CLOCK_EnableClock(kCLOCK_UsbRam1);
    复制代码

    微信图片_20240930134903.png

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

    微信图片_20240930134841.png

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

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

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

    微信图片_20240930134831.png
                        分散加载文件

    微信图片_20240930134826.png
                  编译后STACK和HEAP的地址空间

    如果一切正常,则用如下测试代码就会毫无问题。就此,咱们就可以完整的使用80KB连续的SRAM区间了~

    1. uint8_t *malloc_buf;

    2. malloc_buf = malloc(70*1024);

    3. memset(malloc_buf, 0x00, 70*1024);
    复制代码
    转载自: 恩智浦MCU加油站
    如有侵权请联系删除


    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-10-27 01:12 , Processed in 0.297516 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表