s32k312之Relocating the stack in DTCM

为了获得更好的MCU性能,有时可以将堆栈从SRAM重新定位到DTCM。操作步骤如下:

第一步:默认DTCM和堆栈内存区域定义如下。

int_dtcm : ORIGIN = 0x20000000, LENGTH = 0x00020000 /* 64K */

int_sram_stack_c0 : ORIGIN = 0x2042E000, LENGTH = 0x00001000 /* 4KB */

我们需要从DTCM重新定义新的堆栈区域

int_dtcm : ORIGIN = 0x20000000, LENGTH = 0x00020000 - 0x1000 /* 64K - 0x1000*/

int_stack_dtcm : ORIGIN = 0x20020000-0x1000, LENGTH = 0x1000/*Set last 4KB DTCM as stack*/

第二步:将默认SRAM地址的符号更改为DTCM地址。__Stack_start_c0将在启动代码中分配给MSP。

Old:

__Stack_end_c0 = ORIGIN(int_sram_stack_c0); __Stack_start_c0 = ORIGIN(int_sram_stack_c0) + LENGTH(int_sram_stack_c0);

New:

__Stack_end_c0 = ORIGIN(int_stack_dtcm); __Stack_start_c0 = ORIGIN(int_stack_dtcm) + LENGTH(int_stack_dtcm);

第三步:最后,我们需要更新用于ECC初始化的DTCM结束地址__INT_DTCM_END的边界。

Old:

__INT_DTCM_START = ORIGIN(int_dtcm); __INT_DTCM_END = ORIGIN(int_dtcm) + LENGTH(int_dtcm);

New:

__INT_DTCM_START = ORIGIN(int_dtcm); __INT_DTCM_END = ORIGIN(int_dtcm) + LENGTH(int_dtcm) + LENGTH(int_stack_dtcm);

现在我们可以从映射文件中看到,堆栈的起始地址就是DTCM的结束地址。

0x2001f000 __Stack_end_c0 = ORIGIN (int_stack_dtcm)

0x20020000 __Stack_start_c0 = (ORIGIN (int_stack_dtcm) + LENGTH (int_stack_dtcm))

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜗牛慢慢爬123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值