如何在RAM中调试程序

如何在RAM中调试程序,第1张

1.Options for target->target 选项卡下,将IROM1地址空间设在RAM段内(如起始地址0x40000000,大小0x8000),将IRAM1地址空间设在剩余的RAM段内(如起始地址0x40008000,大小0x2000)。注意:确保程序大小小于设定的RAM空间,如果程序太大,超过RAM地址范围,则无法装载运行。

2.Options for target->Debug 选项卡下,选择ULINK等硬件调试器,同时在Initialization file下导入RAM初始化文件RAM.ini(见附件)。此文件用于装载目标文件到RAM中,并赋给程序运行的初始指针。

3.编辑RAM.ini,修改 “LOAD .\NorFlashMain.axf INCREMENTAL // Download”语句中的红色字体部分,将需要导入的文件名改为当前项目生成的目标文件名。当前项目生成的文件名在Options for target->Output中可设定。

4.确保程序运行后,中断向量REMAP到RAM。在旧的Startup.s下,是通过在target.c文件中设定的。

单片机上电后RAM的值是随机的,要想读出RAM的值,必须用汇编写程序才行。因为用keilc写的程序,在编译时,系统会自动加一个RAM请0的程序,将RAM的00H~7FH,共128个单元全部清0。这就足,用c语言写程序时,变量初值不用赋值时,默认全为0的原因。也是多数人误认为开机后RAM默认值为0的原因。可以肯定地说,RAM值是不会自动变成00H的。

用汇编汇写程序就可以避免开机清0,而真正读出RAM单元的上电的值。

下面就是用汇编写的测试程序,左边显示的是单元地址,右边显示的就是对应的RAM单元内的上电后的值。这是读出的3个单元内的值。

很简单..

如果是16K

char xdata *test

int i=0

void main()

{

while (i++<0x2000) {

*test = 0x5A

if (*test++ != 0x5A) {

break//错误,这里自己处理一下就好了

}

}

while(1)//正常过来是成功

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11992034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存