Keil ARM软件Debug温习

程序用的就是前面编译成功的汇编代码。

然后debug脚本的话用的下面的脚本

/*** <<<  Use Configuration !disalbe! Wizard in Context Menu >>>  ***/ 
/*
Name: DebugINRam.ini*/ 
 
FUNC void Setup (void) 

    // <o> Program Entry Point, .AXF File download Address 
    PC = 0x030000000
; 
}     
map 0x00000000,0x00200000 read write exec //Map this memory to be read、write 
and exec 
map 0x30000000,0x34000000 read write exec //Map this memeory to be read,write 
and exec 
Setup()
;                                       // Setup for Running 
//g, main 

调试脚本的编写可以搜到有文档介绍,而且uVersion help里面有很详细的使用介绍。所以,弄一两个脚本,对照着uVersion help改一两个出来,应该写调试脚本没什么问题了就。

编译成功后直接进debug。。。让人很崩溃的现实啊,设置断点,然后点击run。。。直接跳出error

*** error 65: access violation at 0x34000004 : no 'execute/read' permission

额。。。这个真是没法讲,因为很多程序编译都会出现这样的错误。。。所以,这样的错误也被埋在茫茫error中。。。所以,搜索无果。遂想自己解决。。。

第一个想到的其实是代码的问题,因为对arm汇编不熟,难道是程序调用了不该用的地址?一句句找下来。。。额,没发现啊。

然后,又开始单步调试。。。reset。。。单步调试。。。额,好像错误没了。。。怎么回事?

然后,看那个黄色的小箭头跑来跑去。。。终于发现。。。进入debug的时候,寄存器PC是直接指向0x300000的!!!o(>﹏<)o

也就是,刚进入debug模式的话,当前语句是指向0x300000的,MGD,那里是啥都没有的。。。我用“map 0x30000000,0x34000000 read write exec ”给这段地址给了读写权限,尽管什么也没有,但是傻瓜机纸还是一直会往下运行。。。然后。。。一直到没有read,write权限为止。。。

额。。。这时候才看出来,我的initial文件里不是有写PC=0x300000。。。凌乱啊。。。不过,靠自己找到了这个问题,还是比较开心哈!

好了,温习了一下keil的debug,上一次使用keil是2年前了。。。那时候做毕业设计。。。

——————
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
原文地址:https://www.cnblogs.com/pied/p/2050615.html