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:具有 CAN 引导加载程序的 UC/OS-III 简单闪烁应用程序卡在 OS_CPU_ExceptHndlr 中

Guru**** 2534270 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1556873/tms570lc4357-uc-os-iii-simple-blink-application-with-can-bootloader-stuck-in-os_cpu_excepthndlr

器件型号:TMS570LC4357


工具/软件:

我目前正在根据集成应用程序 UC/OS-III (Micrium) 引导加载程序 在 A 上 TMS570LC43x LaunchXL2 开发套件

该应用是一个简单的 LED 闪烁演示。 直接编程(没有引导加载程序)时、它会正常运行、LED 会按预期闪烁。 但是、当通过引导加载程序进行刷写时(修改后 intvects.asm link.cmd )、则应用程序无法启动、执行被卡住 OS_CPU_ExceptHndlr

我已经在论坛上查看了类似的问题、并找到了【本次讨论】。 但在我的例子中、执行会停止 更改此杂散电容 、具体来说 才能到达第一个OSTimeDly呼叫

设置详细信息:

  • MCU: TMS570LC43x(LaunchXL2 开发套件)

  • 操作系统: UC/OS-III (Micrium)

  • 应用: 简单的 LED 闪烁任务

  • 引导加载程序: 基于 CAN(源自 TI TMS570LC43xx 示例)

观察到的行为:

  • 直接闪烁: 应用程序正常运行(LED 按预期闪烁)。

  • 通过引导加载程序进行刷写: 应用程序无法启动 (LED 不闪烁、卡在中 OS_CPU_ExceptHndlr )。

需要的问题/支持:

  1. 使用时是否有已知的注意事项或限制 UC/OS-III、带有引导加载程序 寄存器命令?

  2. 此行为可能与此相关 矢量表重定位 启动代码修改 VIM(中断)调度器 配置问题?

  3. 要确保的建议方法是什么 任务调度和系统节拍初始化 通过引导加载程序启动应用程序时工作正常?

  4. 有任何问题 参考示例、文档或指南 调整 uC/OS-III 启动代码、以便在 Cortex-R 器件上的引导加载程序后可靠工作?

提前感谢您的支持。

e2e.ti.com/.../source_5F00_app_5F00_BL.zip

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

    您好、

    根据提供的技术文档、您遇到的问题可能与应用程序的存储器映射以及由引导加载程序启动应用程序时异常矢量的处理有关。 uC/OS-III 内核依赖于监控调用 (SVC) 等异常来实现其运行、这些异常必须从引导加载程序正确转发到应用程序。

    下面详细说明了在 Hercules TMS570 微控制器上将引导加载程序与应用程序一起使用的注意事项和建议方法。

    创建应用程序以与引导加载程序配合使用

    要由引导加载程序启动、必须对应用程序固件进行编译和链接、使其驻留在闪存存储器中的特定偏移处、从而为引导加载程序留出较小的存储器空间。 应用程序的默认起始地址为 0x10020

    这需要修改应用程序的链接器命令文件以调整存储器映射。

    链接器命令文件存储器映射

    应用程序的链接器文件应按如下方式定义内存区域:

    MEMORY { VECTORS (X) : origin=0x00010020 length=0x00000020 /*sector 4/5 are used for application */ FLASH_CODE (RX) : origin=0x00010040 length=0x80000-0x40 fill=0xFFFFFFFF FLASH0 (RX) : origin=0x00018000 length=0x00200000 FLASH1 (RX) : origin=0x00200000 length=0x00200000 STACKS (RW) : origin=0x08000000 length=0x00001500 RAM (RW) : origin=0x08001500 length=0x0007EB00 }

    链接器命令文件段配置

     .intvecs 包含应用程序异常矢量表的段必须放置在 VECTORS 存储器区域的开头。

    SECTIONS { .intvecs: { } > VECTORS .text align(32) : { } > FLASH_CODE .const align(32) : { } > FLASH_CODE .cinit align(32) : { } > FLASH_CODE .pinit align(32) : { } > FLASH_CODE .bss : { } > RAM .data : { } > RAM .sysmem : { } > RAM }

    异常向量表处理

    ARM Cortex-R 架构在存储器 (0x00000000) 的开头有一个固定的异常矢量表、该表被引导加载程序占用。 复位矢量必须指向引导加载程序的入口点。 对于对操作系统至关重要的其他例外、例如 UNDEF、SWI/SVC、PABT 和 DABT、 必须配置引导加载程序的矢量表、以将控制权转移到应用程序相应的异常处理程序。

    推荐的解决方案是修改引导加载程序的异常矢量表、直接跳转到应用程序的处理程序。 提供的示例使用的应用程序起始地址为 0x10020。 引导加载程序的矢量表分支到应用程序空间中的相应地址。

    引导加载程序矢量表示例 (.intvecs)

    ; application start address is 0x10020 b _c_int00 ; 0x00 Reset vector points to bootloader start b #0x10018 ; 0x04 UNDEF; application start address - 0x08 b #0x10018 ; 0x08 SVC; application start address - 0x08 b #0x10018 ; 0x0C PABT; application start address - 0x08 b #0x10018 ; 0x10 DABT; application start address - 0x08 reservedEntry b reservedEntry ; 0x14 ldr pc, [pc, #-0x1b0] ; 0x18 IRQ ldr pc, [pc, #-0x1b0] ; 0x1C FIQ

    关于中断的重要说明 (IRQ/FIQ):  VIM 将 IRQ 和 FIQ 处理程序的地址直接加载到 PC 中。 因此、就是这样  无必要  重定向引导加载程序矢量表中的 IRQ 和 FIQ 矢量。 您的应用程序负责在 VIM 启动后为其自己的中断(如操作系统节拍)配置它。

    引导加载程序执行和设置

    引导加载程序在将控制权转移到应用程序之前执行多项操作、这可能会影响应用程序的启动代码。

    • 中断已禁用:  示例引导加载程序代码在分支到应用程序之前禁用中断。 您的应用必须初始化其自己的中断环境 (VIM)、并根据需要重新启用中断。 如果在启用中断源(如操作系统节拍计时器)之前未能这样做、可能会导致异常。
    • MCU 模式:  引导加载程序在 Supervisor 模式下运行。 应用程序代码将在此模式下进入。
    • 时钟配置:  引导加载程序可配置和维护 MCU 时钟设置。 对于 TMS570LCCx、系统时钟 (HCLK) 设置为 150MHz。

    参考示例和文档

    应用报告本身是此过程的主要文档。 此外、该报告还提供了下载工程配套资料和源代码的链接、其中包括引导加载程序工程并可用作参考。

    通过确保为内存重定位正确配置应用程序的链接器脚本、并确保引导加载程序的矢量表正确地将 SVC 等异常转发到应用程序、您应该能够解决应用程序卡在中的问题 OS_CPU_ExceptHndlr

    --
    此致、
    Jagadish。

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

    您好 Jagadish、

    感谢您的详尽解释。 我将再次验证我的设置并确保考虑您的建议。

    此致、