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.

[参考译文] TMS320F280049:LDFU 代码启动

Guru**** 2810285 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1389416/tms320f280049-ldfu-codestart

器件型号:TMS320F280049
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我有一个与 codestart 段相关的问题。 具体而言、我将查看 C:\ti\c2000\C2000Ware_5_00_00_00\driverlib\f28004x\examples\flash 下的示例代码 flashapi_ex2_sci_kernel、但更一般而言、我想了解器件启动后和退出引导 ROM 后的代码执行流程。

文件"flashapi_ex2_codestartbranch.asm"中的注释表明、"code_start 是退出引导 ROM 代码后执行的第一个代码。"

但是、在检查链接器标志集(属性--> C2000链接器-->标志集摘要)时、我看到标志"--entry_point=_bankSelect"。

这与相一致

#pragma CODE_SECTION (bankSelect、"codestart");

文件 flashapi_ex2_ldfu.c 中的代码。

那么、如果 entry_point 不是 code_start、而是 bankSelect、那么何时调用 code_start、以及何时初始化 C 运行时环境(_c_int00)?

如果 codestart 段在多个位置定义(在 flashapi_ex2_ldfu.c 和 flashapi_ex2_codestartbranch.asm 中)、哪个将胜出? bankSelect 似乎胜出、因为这是入口点、但 bankSelect 是 C 代码、并且 C 运行时环境尚未初始化。

您能解释一下代码执行流程吗?

此致!

Laszlo

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

    Laszlo、您好!

    感谢您的提问。  我将在下周早些时候提供详细的答案。

    此致、

    Charles

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

    您好!

    根据当前组选择逻辑调用 Codestart。  _c_int00仍然在 main 之前初始化。

    有关更多信息、请参阅 具有器件复位的实时固件更新 应用手册中所述的流程。

    谢谢。此致、

    Charles

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

    尊敬的 Charles:

    谢谢你。 我熟悉您链接的文档。 我的问题是关于一个没有解释的主题,你的答复也没有解决它。 请您再看一下这些问题吗?  

    谢谢你。

    Laszlo

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

    Laszlo、您好!

    >那么、如果 entry_point 不是 code_start、而是 bankSelect、那么何时调用 code_start、C 运行时环境(_c_int00)何时初始化?

    首先通过 f28004x_codestart.asm 文件为库管理器初始化_c_int00运行时环境。 则它不会针对 LFU 进行初始化  BankSelect 逻辑函数、因为函数中不存在全局变量。

    >如果 codestart 段在多个地方定义(在 flashapi_ex2_ldfu.c 和 flashapi_ex2_codestartbranch.asm 中),哪一个会胜出?

     分配了两次 Codestart、首先是银行管理器、然后是应用程序代码。 首先考虑银行管理器的 codestart、然后考虑应用的 codestart。 您还可以查看为 LFU 闪存内核生成的工程.map 文件、以查看生成的 codestart 地址。  

    谢谢!

    Charles