代码之家  ›  专栏  ›  技术社区  ›  itsadok

飞思卡尔的CodeWarrior试图使用56800E模拟器调试一个简单的程序

  •  2
  • itsadok  · 技术社区  · 16 年前

    我刚刚开始学习飞思卡尔DSCs(MC56F800x系列)。我已经使用Windows上的AVR Studio和Linux上的Eclipse和AVR gcc对AVR做了一些工作。CodeWarrior没有那么直观。

    现在我一直在调试一个简单的程序。我使用内置模拟器启动调试器,但它从未到达main()的第一行。相反,它似乎陷入了一些初始化代码(MC56F8006_init.asm)中,具体如下:

        ;; Loop until OCCS_STAT[LCK0] = 1
    wait_for_lock: 
        brclr   #OCCS_STAT_LCK0,x:>OCCS_STAT,wait_for_lock
    

    我已经让它运行了很长一段时间,但它永远都不会过去。它显然在等待什么,但是什么?你会认为模拟器会正常工作。。。啊。也许我可以改变一些选项,让它通过这一步?

    • 片上时钟合成

    brclr

    • 如果位清除,则进行分支

    指令循环直到OCCS_STAT LCK0被设置。该寄存器表示片上振荡器的PLL已锁定(等待时钟稳定)。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Clifford    16 年前

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

    在大多数嵌入式开发系统中,运行时启动代码是作为源代码提供的,您可以对其进行修改(或者在项目中创建一个本地副本,并对其进行汇编和链接以覆盖默认启动)。或者,您可以简单地在此循环中放置一个断点,并推进程序计数器寄存器以使其退出循环。在许多调试器中,可以将脚本附加到断点以自动执行此操作。