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**** 2456490 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107608/tms570lc4357-freertos

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

大家好、团队、

我正在尝试在我们的软件中启用 FreeRTOS。 在开始时、我尝试运行" example_freeRTOSBlinky.c"。

在我对 CCS 执行复位之前、软件工作正常。 SW 卡在 UndefEntry 中。 我可以看到导致此问题的地址是"0x0000B97C"。

团队能否让我深入了解这种情况的发生原因以及如何解决这种情况。

谢谢、此致、

Sakti Kumar Padhy

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

    您好、Sakti、

    从快照中、模式位(M[4:0])的值为 b1000、这意味着处理器在用户模式下运行。

    生成的 UNDEF 中断地址位于 R14_UND - 0x4 = 0xB978 --> MRC...

    只有在 MCR 和 MRC 指令下才能访问 CP15寄存器、并且只能在特权模式下访问。 如果在用户模式下调用这些 ARM 指令、则会生成 UNDEF 中止。

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

    您好!

    1) 1) Undefined_Registers 中的模式指向 CPU 处于用户模式、但是 Core_Registers 中的模式显示为0x1B、这意味着未定义模式。 在这种情况下需要考虑哪些因素?

    2) 2) 为什么 CPU 不会根据代码切换到系统模式?

    此致、

    Sakti

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

    另一个问题:-特权模式除了用户模式之外的所有模式是否都正确??

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="505316" URL"~μ C/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107608/tms570lc4357-freertos/4104056#4104056"]另一个问题:-特权模式是除用户模式之外的所有模式、对吗?]

    是的、您完全正确。

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

    您好、Wang、

    您还能告诉我上述问题的答案吗?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="505316" URL"μ C/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107608/tms570lc4357-freertos/4104027#4104027"]) 为什么 CPU 不会根据代码切换至系统模式?[/引用]

    我不知道为什么不将模式切换到系统模式。 请添加一个断点、然后单步执行配置模式的指令、以检查模式是否已切换。 我记得我在另一个主题中回答了这个问题。

    [引用 userid="505316" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107608/tms570lc4357-freertos/4104027#4104027"]在这种情况下需要考虑哪些因素?

    这是发生中止后的模式。  

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

    您好!

     

    请添加一个断点、然后单步执行配置模式的指令、以检查模式是否已切换。 我记得我在另一个主题中回答了这个问题。

    ANS)我这么做了、我可以看到 CPU 没有从用户模式(SW 正在运行)切换到  _coreInitRegisters_函数中的任何其他模式。

    因此、由于 SW 在用户模式下尝试访问 CP15寄存器、SW 将进入第102行的 UNDEF 中止。

    您能否还向我指出您在前面讨论过此问题的帖子、因为我无法在论坛上发布帖子。

    谢谢

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

    默认情况下禁用 FIQ 和 IRQ、这就是为什么在快照中清除 F 和 I 位的原因。

    默认模式应为管理员模式(M[4:1]=b10011)、为什么快照中为用户模式(b10000)?

    您在调用_coreInitRegisters_()之前是否调用过其他函数?  

    能否重置设备(使用 CCS-->运行-->重置-->系统重置),然后检查 CPSR 是否恢复其默认值? 其默认值为0x000003D3。

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

    1) 1)默认情况下禁用 FIQ 和 IRQ、这就是为什么在快照中清除 F 和 I 位。

    默认模式应为管理员模式(M[4:1]=b10011)、为什么快照中为用户模式(b10000)?

    ANS)我不确定原因。

    2) 2)您在调用_coreInitRegisters_()之前是否调用过其他函数?

    ans)没有,我没有在_coreinitRegisters()之前添加任何内容。

    3)您能否重置设备(使用 CCS-->Run->Reset->System reset),然后检查 CPSR 是否恢复其默认值? 其默认值为0x000003D3。

    ANS)我执行了此操作,并观察到在 (使用 CCS->Run->Reset->System reset)和 (使用 CCS->Run->Reset->CPU reset)但使用 Restart (重新启动)按钮的情况下,会发生正确的模式更改序列。

    我的观察:-

    1. 使用 CCS-->Run->Reset->System reset = 通过触发抢先式 ISR,任务运行正常。 模式是 FPU 时的系统模式启用 _coreinitRegisters_()中的指令。

    2. 使用 CCS-->Run->Reset->CPU reset =通过触发抢先式 ISR,任务运行正常。  模式是 FPU 时的系统模式启用 _coreinitRegisters_()中的指令。

     3.重新启动=由于在用户模式下访问 CP15寄存器,在 FPU 时 UNDEF 中止_coreinitRegisters_()中的启用指令。

    谢谢你。

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

    您好、Sakti、

    我刚刚使用 HALCoGen 生成了一个 FreeRTOS 示例项目、并在 LC43x Launchpad 上进行了测试。 我没有看到任何问题。  

    您是否启用了 FPU 并选择了正确的 FPU 算法?

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

    您好!

    是的、它已启用、并且在"属性"中有完全相同的处理器选项。

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

    您好、Sakti、

    这是一个问题。  

    当您为器件加电时、CPU 应处于特权模式。 您可以决定保持此模式并在此模式下执行所有代码。 如果您要进入用户模式、您将对 CPSR 进行编程、以便轻松切换到用户模式。

    要从用户模式切换到特权模式、 您可以使用 SVC 调用或 使用 系统模块(SSI)的系统软件中断、该中断将为您生成 IRQ 中断并使您进入 IRQ 模式。 我不确定在加电期间如何执行此操作。

    您是否正在使用 TI EVM? 如果不是、您可以尝试其他电路板还是从 TI 订购的其他器件?

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

    您好!

    我已经在 TMS50LC4357 HDK TI EVM 和定制板上试用过它。 在这两种情况下、我会遇到相同的问题。

    我想我仍然可以继续 FreeRTOS 的开发、因为在 CCS 上重新启动而不是在系统复位或 CPU 复位的情况下会出现此问题。 请告诉我您的建议。 谢谢。

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

    您好!

    1) 1)您是否在 TI EVM 上遇到了同样的问题?  

    2) 2)固件中是否存在此问题? 因为问题可以在启动的第一行上看到?? (问题:从 CCS 重新启动时 CPU 不会返回到特权模式)

    谢谢

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

    您好、Sakti、

    是的、我使用 TI TMS570LC4357 HDK。

    在我擦除整个闪存后、我得到 CPSR=0x000003DB (UNDEF 指令模式)。 这是预期的、因为0x00000000处没有指令。 UNDEF 模式也是特权模式。

    在我将映像编程到闪存(rtiBlinky)后、CPSR=0x000003D3 (监控器模式)在系统复位(无代码被执行)后。

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

    您好!

    感谢您的观看。

    在 系统复位和 CPU 复位的情况下、我还可以看到 CPSR 为0x000003D3。

    我执行重新启动时不会出现这种情况。 在这种情况下、模式仍然是用户模式。

    您提到 过、如果系统复位、您会看到 CPSR 为0x000003D3。

    是否可以在执行重新启动时检查 CPSR?

    谢谢