打印
[APM32F0]

基于APM32F072VB如何将程序代码放入RAM中运行

[复制链接]
252|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lc115647 于 2024-8-13 10:48 编辑

前言
在使用MCU的过程中可能会存在flash块存在异常的现象,导致程序出现跑飞或者读取到的数据错误,我们可以通过将程序放入RAM执行,通过写读验证flash上的数据是否存在异常,排查故障。下面介绍如何基于APM32F072VB实现在RAM运行程序。
1、设置代码区和程序变量区大小
在工程的Options for Target ->Target中将IROM1,和IRAM1都修成在RAM区间,注意按芯片RAM大小来设置,并根据程序大小及变量多少来划分,本例MCU为APM32F072VB,芯片有16k RAM,将前12k设成IROM1用来放代码,将后4k用来当IRAM1存程序变量,堆和栈。

2、定义VECT_TAB_SRAM
在工程的Options for Target ->C/C++选项卡中加入VECT_TAB_SRAM宏定义:

3、定义USE MEMORY LAYOUT FROM TARGET Dialog
Linker选项卡中先不勾选USE MEMORY LAYOUT FROM TARGET Dialog,并设置R/O Base 和R/W Base 如下 :

修改完毕后勾选USE MEMORY LAYOUT FROM TARGET Dialog

4、新建CpuRAM.ini文件(文件名随意),内容如下:
FUNC void Setup (void) {  SP = _RDWORD(0x20000000);                                // 设置堆栈指针PC = _RDWORD(0x20000004);                                                   // 设置PC指针
_WDWORD(0xE000ED08, 0x20000000);                                              // 设置中断向量表地址
}
//LOAD CpuRAM\obj\output.axf INCREMENTAL         
// 先装载代码到CPU内部RAM  (工程选项中就不要选Load Application ar Startup)
LOAD $L%L INCREMENTAL
Setup();                                                        // 再调用Setup函数修改堆栈和PC指针(因为SP的值需要从目标代码中读取)
g, main                                                         // 运行到main()函数
5、在工程的Options for Target ->Debug选项卡中先加入刚新建的CpuRam.ini文件作为仿真初值化文件:同时去掉Load Application at Startup勾选

6、在工程的Options for Target ->Debug->Settings选项卡中按下图配置烧录规则/算法:

7、完成上述配置程序编译完对应的地址空间就在SRAM区间,对工程进行仿真调试就可以直接看到效果
   









cpuram.rar

670 Bytes

F072_RunRAM.rar

205.57 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝