好吧,问题终于被我解决了! 在Ctrl+F5进入Debug模式后,可以看到一个Command窗口,这里给出了错误信息。
这里有好几个问题,先看第一个: *** error 65: access violation at0x0000000C : no 'read' permission 提示 Memory 的访问权限有问题,0x0000000C不可读。 那么,通过 Debug -> Memory Map… 菜单查看一下内存访问权限,如下图:
可见,对于地址 0x0000000C,当前的设置确实是不可读的。
解决方法: 在当前的对话框中,手动添加修改。 或者, 退出 Debug 模式,在 Optionsfor Target 对话框中的 Device 标签页,重新选择一个芯片即可。
解决第一个问题后,再次进入Debug模式。
单步运行,提示仍有错误。
*** error 65: access violation at0x0214F04E : no 'execute/read' permission提示地址 0x0214F04E 处不可执行/不可读。
为什么会去0x0214F04E地址读取并执行代码,它位于RAM内呀? 通过查看Register窗口,发现PC寄存器里的值确实是0x0214F04E!
检查一下汇编程序,原来是中断向量表中PC的初始值给错了。 AREA RESET, DATA, READONLY
DCD 0x20018000 ;MSP
DCD 0x08000008 ;Reset_Handler
通过Memory窗口查看0x08000000中存放的数据,的确是0x0214F04E。
解决方法: 将汇编代码中的DCD 0x08000008 ;Reset_Handler 改成DCD start ;Reset_Handler 重新编译链接,进入Debug模式,单步执行,程序正常运行,大功告成。
修改过后的工程文件在这里:
ASM_2.rar
(32.71 KB)
PS,其实这里用不到调试脚本,可以直接删除。将下图中Initialization File:中的文件路径删除即可。
分散加载文件,直接让KEIL生成就行了,不用自己写。将下图中的Use Memory Layout from Target Dialog前的复选框勾选上就行了。
|