首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeWarrior for FreeScale试图使用56800 E模拟器调试一个简单的程序

CodeWarrior for FreeScale试图使用56800 E模拟器调试一个简单的程序
EN

Stack Overflow用户
提问于 2009-12-28 02:16:28
回答 1查看 1.3K关注 0票数 2

我刚刚开始学习FreeScale DSCs (MC56F800x系列)。我在Windows上使用AVR Studio和Eclipse以及Linux上使用avr-gcc做了一些工作。CodeWarrior只是没有那么直观。

现在,我正试图调试一个简单的程序。我使用内置模拟器启动调试器,但它从未到达main()的第一行。相反,它似乎被某些初始化代码(MC56F8006_init.asm)卡住了,特别是这一行:

代码语言:javascript
复制
    ;; 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代码进行黑客攻击(这是代码库的一部分,而不是我的项目)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-28 10:12:45

我不熟悉该部分或模拟器,但似乎模拟器是指令集,不模拟PLL硬件。

在大多数嵌入式开发系统中,运行时启动代码都是作为源代码提供的,您可以修改它(或者在您的项目中创建一个本地副本,并组装并链接它以覆盖默认的启动)。或者,您可以简单地在这个循环中放置一个断点,并提前将程序计数器寄存器从循环中取出。在许多调试器中,可以将脚本附加到断点以自动完成此操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1967714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档