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.

[参考译文] TMS570LC4357:引导加载程序和 FreeRTOS 应用程序问题

Guru**** 2471940 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1058387/tms570lc4357-issue-with-bootloader-and-freertos-application

器件型号:TMS570LC4357

尊敬的团队:  

在通过 CAN (如 spna241.pdf 中所述)运行引导加载程序和使用 FreeRTOS 内核运行演示应用程序时、我遇到了一个问题。

我已经创建了一个包含几个任务的应用程序、消息队列和计时器等 当基地址矢量地址保持在0x00000000时、应用程序可以成功运行。 当我尝试使用文档0x0010020中提到的新地址运行它时、它无法创建任务、队列等 在分析问题时,我发现它无法执行 BaseType_t xRunningPrivileged = prvRaisePrivilege () API。  

我尝试了不同 TI 论坛讨论中提供的一些解决方案。  

使用 intvecs.asm,如下所示:  

b _c_int00

b #0x0007fff8

b #0x0007fff8

b #0x0007fff8

b #0x0007fff8

b 相位中断

应用程序现在可以执行 SWI 并成功初始化任务、队列等。 但是、引导加载程序现在会在尝试启动应用程序时重新启动。 它卡在:  

G_ulTransferAddress =(uint32_t) APP_START_ADDRESS;
((void (*)(void)) g_ulTransferAddress)();

请提供您的意见以解决此问题。  

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

     您的代码中定义了什么 APP_START_ADDRESS?

    它应该是0x10020而不是0x10000。 BTW、0x0007fff8应为0x10020-0x8=0x10018。

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

    感谢您的意见。  

    APP_START_ADDRESS 为0x10020。  

    引导加载程序 intvecs.asm 如下所示:

    b _c_int00
    b #0x10018;0x0007fff8
    b #0x10018;0x0007fff8
    b #0x10018;0x0007fff8
    b #0x10018;0x0007fff8
    b 相位中断
    LDR PC、[PC、#-0x1b0]
    LDR PC、[PC、#-0x1b0]

    这在跳转到 APP_START_ADDRESS 时仍会在引导加载程序中挂起  

    当前观察结果是应用程序在从调试器启动时正常启动。 从引导加载程序引导应用程序时不工作。  

    请提供您的反馈。  

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

    一些新的观察结果:  

    resetEntry
       b #0x0010018;良好的黑客攻击:)

       b _c_int00

    UndefEntry
       b #0x0010018
    svcEntry
       b #0x0010018

    PrefetchEntry
       b #0x0010018
    DataEntry
       b #0x0010018
       b 相位中断
       LDR PC、[PC、#-0x1b0]
       LDR PC、[PC、#-0x1b0]

    这样、引导加载程序就可以在 POR (上电复位)之后在应用中跳转。 但我不理解逻辑。 请解释并指导正确的说明。

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

    尊敬的 QJ Wang:  

    我需要一些帮助、目前在引导加载程序 intvecs.asm 中进行了更改后、引导加载程序可以在 EVK 和我们的定制板中成功跳转到 RTOS 应用程序。  

    在 EVK 中、代码也通过 POR 成功执行、但在定制电路板中、此残桩在引导加载程序中发生、永远不会跳转到应用程序中。 我可以看到错误 LED 在我们的定制板上。  

    2.我在引导加载程序应用程序中尝试了未选中的自动 ECC 生成选项、但无法成功编译。 (我在你的其他一些答复中发现了这一建议)。  

    连接调试器时、引导加载程序和应用程序会在调试模式下成功加载并加载应用程序模式。  

    我们使用的 MCU 的器件型号为  TMS5704357BZWTQQ1。  

    您是否建议任何方法来解决此问题?  

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

    为什么有两条复位输入指令? b _c_int00不会被永远调用。 复位后、代码直接跳转到0x0010020 (应用)。

    resetEntry
       b #0x0010018;良好的黑客攻击:)

       b _c_int00

    请改回至:

    resetEntry
       b _c_int00

    复位后,代码跳转到引导加载程序中的_c_int00,然后引导加载程序 main()文件<您的 main()检查应用程序是否需要更新。 如果没有、代码将使用以下命令跳转到您的应用程序:

    ((void (*)(void)) g_ulTransferAddress)();

    应更改应用程序的链接器 cmd 文件:

    引导程序(X):origin=0x00010020 length=0x00000020