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.

[参考译文] CCS/TMS320F28035:CAN 闪存内核在完成时不会跳转到应用程序

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/663895/ccs-tms320f28035-can-flash-kernel-not-jumping-to-application-upon-completion

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

工具/软件:Code Composer Studio

我有一个位于闪存扇区 A 的 CAN 闪存内核。 它的任务是将我的应用闪存到扇区 B - H。 器件在上电时直接引导至内核、 如果一段时间后应用程序未接收到基于 CAN 的外部触发信号、则会跳转到该应用程序。  我的应用程序中还具有可随时跳转到内核的逻辑。  在跳转到内核之前、应用程序将向 RAM 中的某个位置写入已知密码。  内核使用此密码来确定它是刚刚从应用程序调用、还是刚从冷启动中调用。

我的内核是使用 C2000Ware 中的 F2803x_flash_kernel 示例创建的。

这一切都很完美、只有一种奇怪的行为。  如果我从应用程序跳转到内核并通过 CAN 对新应用程序进行编程、内核所执行的最后一步是跳转到入口点、它就是这样做的。  但是、如果我通过冷启动进入内核、然后闪存应用程序、它将不会跳转到应用程序。  但是、如果我重启器件、则它将正常运行应用程序(在内核中花费一些时间直到超时)。

这两种情况之间不应有功能差异。  最后一步应始终是跳转到新编程的应用程序的入口点。

是否有什么想法会导致这种情况、或从何处开始寻找?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没关系、我明白了。 在冷启动时,闪存内核的入口点是 codestart 函数,它只调用_c_int00,但从 main()返回时不会转到任何位置。 应用程序跳转到 InitBoot 函数,该函数在从 main()返回时跳转到应用程序入口点。 我刚刚修改了 codestart 函数、以便它调用_InitBoot 而不是_c_int00。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴你能解决这个问题!