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.

[参考译文] TMDX570LC43HDK:使用 GCC 工具链运行工程

Guru**** 2511985 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1541135/tmdx570lc43hdk-running-project-using-gcc-toolchain

部件号:TMDX570LC43HDK
主题中讨论的其他器件:HALCOGEN

工具/软件:

您好!

我尝试使用 GCC 工具链和 FreeRTOS 为 TMS570 微控制器运行工程。 我设法使项目编译,甚至运行一个简单的闪烁程序,但它在运行时失败时,试图做同样的 使用任务。

我通过下载大端字节序版本的 ARM gcc 编译器并在 CCS 中进行相应设置来执行编译。 我遵循了 Jonathon S.在 ARM 论坛上设定的步骤: https://community.arm.com/support-forums/f/compilers-and-libraries-forum/49616/latest-arm-gcc-compiler-for-big-endian-processors (也在 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1020406/tms570ls1224-how-to-build-and-link-workable-code-for-a-big-endian-system-such-as-a-hercules-tms570-mcu-using-a-gcc-toolchain/3771079?tisearch=e2e-sitesearch&keymatch=tms570%20gcc#中说明)

我遇到的第一个问题是os_mpu_wrappers.cprvRaisePrivilege()函数、因为ams( " swi 1 ")指令(在 HALCoGen 中选择 GCC 工具时添加)会启动汇编指令的无限循环。

我附上我一直在处理的项目。

e2e.ti.com/.../GCCMinimal.zip

提前感谢您!

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

    您好、

     swi 1 指令(软件中断 1、触发 SVC — 监控器调用)是 FreeRTOS 如何在 ARM Cortex-R/M 处理器上管理特权升级和任务切换的基础。 当该指令导致无限循环时、它几乎总是指向以下核心问题之一:

    1. SVC 处理程序设置不正确(很可能):  CPU 不会vPortSVCHandler swi 1 指令之后跳转到正确的 FreeRTOS SVC 处理程序 ()。
    2. SVC 处理程序内的故障:   vPortSVCHandler 本身会遇到一个异常(例如 MPU 故障,堆栈溢出,未对齐访问)、该异常随后会触发另一个异常、如果故障处理程序也配置错误或重新触发原始故障、则可能会导致循环。
    3. 上下文切换中的字节序不匹配:  FreeRTOS 端口内(具体或类似) port_asm.s 在 SVC 期间保存和恢复 CPU 上下文的汇编代码可能假设堆栈操作采用小端字节序的顺序、而系统为大端字节序。 这会损坏堆栈帧并导致不可预测的行为或循环。
    4. 从 SVC 返回错误:  SVC 处理程序未正确返回、导致 swi 1 重复重新执行指令。

    尝试以下操作一次:

    1. 从 SVC 矢量开始:  这是紧跟在 swi 指令之后出现无限循环的最常见原因。 使用调试器可以 准确地查看  PC 之后的位置 swi 1
    2. 检查 sys_startup.asm 确认 SVC 引导程序条目。
    3. 逐步执行 vPortSVCHandler 如果引导程序正确、请逐步完成 SVC 处理程序的组装、以确定错误所在。 密切注意堆栈操作和 MPU 相关指令。
    4.  port_asm.s 关于字节序的回顾:  如果问题仍然存在、请仔细比较 LDMIASTMDB  FreeRTOS 中的/指令和任何其他栈操作 port_asm.s 与已知的大端字节序 ARM 端口(如果您可以找到一个指令,或参阅 ARM 架构手册以了解大端字节序栈惯例)。

    --
    此致、
    Jagadish。