This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28034:使用仿真器在线运行与不使用仿真器离线运行之间的差异

Guru**** 2540720 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1045580/tms320f28034-the-difference-between-running-online-with-an-emulator-and-running-offline-without-an-emulator

器件型号:TMS320F28034
主题中讨论的其他器件:C2000WARE

最近、我发现使用仿真器在线执行相同的代码与在没有仿真器的情况下脱机执行代码不同。  这是 我 的代码。

  图1.

 图2.

如图1所示、函数指针在结构体的初始位置定义。  图2显示了如何在函数中初始化结构 、其中 LINE_STRTUCT_DEFALUTS 是宏定义、对应于(void (*)(void *)) LineCalc。  通过这种方式初始化函数指针后、我看到实际函数指针中的值仍然是0x00000000、而不是0x3EA0A6。 因此,在执行 aiLine.calc 之后,程序将跳转到非法 ISR。

稍后 、在我修改了如图3所示的函数指针初始化之后、程序正常运行。 因此可以说、在在线运行时进入非法中断的原因是初始化错误。

  图3.

这是我的谜题!  使用原始函数指针初始化方法、在线运行将进入非法中断、但在离线运行时运行正常。 为什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    AiLine 可以在代码中的其他位置写入吗?  当我看到初始化问题时、有时会被写入存储器中变量的代码屏蔽、当存在 XRSn (RESET)时、该值会在存储器中持续存在、因此之后的操作正常。  只有在上电后、事情才会变得不好。

    另一种情况是、您在连接仿真器(获取非法 ISR)的情况下完成了上述操作、然后如果您断开仿真器并只发出 XRSn 来重新启动、那么该值仍然存在于内存中、因此一切正常。

    您还可以尝试确保代码独立于断电/上电事件正常工作;我认为这可能会失败。

    话虽如此、这也取决于非法 ISR 中的代码。  如果仍填充默认 ISR (来自 C2000Ware)、则这些通常只是一个无限等待循环。  在连接仿真器的情况下、这将保持该状态、但如果您启用了看门狗、则会处于独立状态、最终会超时并发出 XRSn。  第二次、如果变量最终被写入、它将以与上述相同的原因工作。

    希望这为您提供了一些想法、请告诉我、如果您仍然看到一些无法解释的行为、我们可以更深入地探讨一下。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Matthew!

       在初始化 和 ailine.calc ()执行之间没有关于 aiLine 的任何其他代码。 图2中的定义是一个局部变量、因此 外部代码也不能屏蔽它。

    我在没有仿真器的情况下尝试掉电/上电事件中的代码、效果很好。 只有 在我通过仿真器导出代码 时,它才会出现问题。

    在非法 ISR 中只有一个无限等待循环、并且看门狗被禁用。

    最棒的

    HJC

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HJC、

    当您连接到仿真器时、在我们认为出现问题之前设置一条断点指令、然后打开一个拆分窗口(View->Disassembly)、然后将该拆分的屏幕截图重新添加到 E2E、我可以查看它、我们可以从中进行调试。  

    最棒的
    Matthew