公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

XMC实验分享之八十九: SRAM中调试程序

XMC实验分享之八十九: SRAM中调试程序

User12775
Level 5
Level 5
First solution authored First like received

之前发过在SRAM中运行程序的贴子, 总体来讲SRAM中运行程序是为了性能优化, 避免从Flash中读取代码时的延迟. 虽然某些特殊情况下, SRAM中运行的代码反而不如Flash中运行性能高, 比如SRAM中运行的代码频繁要存取Flash中的内容.


今天分享的是将整个程序全部放在SRAM中运行的例子. 注意要做这个例子中的实验,需要满足如下条件:

  1. 调试器可以将可执行代码下载到SRAM中去,并且从指定的位置开始运行

  2. 中断向量表可以偏移到SRAM中或者做二级跳转到SRAM中的代码

  3. SRAM足够大可以分为两部分分别放代码与数据


以上条件XMC1100 Bootkit全部满足, 所以使用这个开发板来完成实验. 其中第二条比较特殊, 本来Cortex M0的中断向量表是不能有偏移的(固定在代码空间, 一般设定在Flash的区域), 如果是按照这样的设计,那么需要做二次跳转. 但是由于XMC1系列的奇葩设计, 正好方便这个实验的进行. 因为它的向量表本来就是固定在SRAM当中的. 这个奇葩的设计之前已经发贴讲过多次,这次不在重复.

另外注意这个实验适合于连接了调试器的情况, 如果生产环境需要这样做, 还需要很多步骤.


首先将SRAM分为两部分, 一块用于CODE,也就是模拟之前Flash的用途, 一块还是用于数据区. 由于XMC1的向量表被固定在SRAM的前半部分, 为了方便将SRAM的后半部分用作CODE区间.

xmc1_sram_division.png

注意还有4 Byte空间用于存放no_init区间, 所以CODE区间: 0x20002000-0x20003FFC, RAM区间: 0x20000000-0x20002000.


0 点赞
1415 次查看
3 评论