程序用的就是前面编译成功的汇编代码。
然后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
/*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年前了。。。那时候做毕业设计。。。