工具/软件:TI C/C++编译器
您好!
背景:
我尝试从闪存中运行代码、但为了获得更好的性能、某些函数正在从 RAM 中执行。 在 cmd 文件中、使用了 table 操作符和 BINIT、我希望引导加载程序的自动复制功能能够在引导期间将代码从闪存复制到 RAM。
问题描述:
当调试器被连接时、项目运行正常。 编译器在构建项目时没有任何错误消息、在点击"调试"按钮后、调试器可以自动将应用程序置于 main 中、代码可以在我按下"运行"后安全地从该处运行。
但是、如果我断开调试器的连接并按下复位按钮(板载)来复位器件、程序被卡住。 我在 main()中有一个 LED 闪烁功能,用于指示程序运行良好,但 LED 没有闪烁。 如果我关闭器件电源并再次上电(无论是否连接了调试器)、程序将不会仍然运行。
可能的原因:
我在论坛上看到一个主题与此类似。 在这种情况下、原因是需要复制的代码太大、因此引导加载程序复制它所用的时间太长、看门狗跳闸。 如果这也是我的问题的原因、我有一个问题、希望你们能帮我解决。
在 boot28.asm 中、我可以看到、如果使用 binit 和 table 运算符、在引导期间会有代码用于将相对函数从闪存复制到 RAM。 如果看门狗是导致此问题的原因、那么为什么在我的情况下、在连接调试器和调试器件时看门狗未跳闸? 看门狗仅在调试器断开连接或器件未被调试时跳闸、这难道不奇怪吗?
我是说、无论调试器是否已连接、还是器件是否正在调试、都应在所有条件下执行 code_start 函数和_c_int00函数以设置 C 环境。 那么、为什么在调试器件的情况下看门狗没有跳闸? 调试器件时、看门狗复位中断是否被调试器阻止? 感谢大家的帮助。
此致、
John