我刚刚开始学习FreeScale DSCs (MC56F800x系列)。我在Windows上使用AVR Studio和Eclipse以及Linux上使用avr-gcc做了一些工作。CodeWarrior只是没有那么直观。
现在,我正试图调试一个简单的程序。我使用内置模拟器启动调试器,但它从未到达main()的第一行。相反,它似乎被某些初始化代码(MC56F8006_init.asm)卡住了,特别是这一行:
;; Loop until OCCS_STAT[LCK0] = 1
wait_for_lock:
brclr #OCCS_STAT_LCK0,x:>OCCS_STAT,wait_for_lock我已经让它运行了很长一段时间了,它从来没有过过这段时间。很明显是在等什么,但是什么?你会认为模拟器能正常工作..。啊啊。也许我可以改变一些选择让它通过这一步?
我要继续挖掘,如果我先找到答案,我会在这里发帖。
更新:
以下是我的发现:
OCCS
brclr
指令循环,直到设置OCCS_STAT LCK0为止。这个寄存器意味着片上振荡器的锁相环已经锁定(等待时钟稳定).
我仍然不知道为什么模拟器会永远运行在这条线上,以及如何解决这个问题,而不需要对init代码进行黑客攻击(这是代码库的一部分,而不是我的项目)。
发布于 2009-12-28 10:12:45
我不熟悉该部分或模拟器,但似乎模拟器是指令集,不模拟PLL硬件。
在大多数嵌入式开发系统中,运行时启动代码都是作为源代码提供的,您可以修改它(或者在您的项目中创建一个本地副本,并组装并链接它以覆盖默认的启动)。或者,您可以简单地在这个循环中放置一个断点,并提前将程序计数器寄存器从循环中取出。在许多调试器中,可以将脚本附加到断点以自动完成此操作。
https://stackoverflow.com/questions/1967714
复制相似问题