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.

[参考译文] TMS570LS0914:AUTOSAR SPI MCAL 面临 undefEntry 问题

Guru**** 2689775 points

Other Parts Discussed in Thread: TMS570LS0914

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1597576/tms570ls0914-facing-undefentry-issue-with-autosar-spi-mcal

器件型号: TMS570LS0914

项目说明:

尝试通过 SPI1 将固件数据从主机 (TMS570LS0914) 推送到 PLC 芯片 (QCA7006)。 执行某些命令后、它将取消 defEntry。

undefEntry2.jpgundefEntry1.png

当达到 undefEntry 时、LR 始终指向此__TI_XML Decompress_None。

此问题会影响工程流程、解决此问题将有助于我们继续执行 PLC 芯片的固件下载活动。

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

    你好、Usha、

    对延迟的回复表示歉意!

    我以前从未遇到过这个问题。
    但是、我们有一个内部 AI、可以分析旧的数据 e2e 数据库以及与此控制器相关的所有文档。 当我提出这个问题时、我得到了以下有用的信息和解决方案。 请验证它们并使用一次。

    您遇到的问题__TI_Decompress_NoneundefEntry与指向和跳到的 LR 有关 BFI.W(位字段插入)指令不兼容

    根本原因

    BFI.W 指令是 Thumb-2 指令 就是这样 Cortex-R4F 内核不支持 TMS570LS0914。 此指令仅适用于:

    • Cortex-R5F 和更高版本的内核
    • 具有 Thumb-2 扩展的 Cortex-M3/M4 内核

    当处理器遇到 BFI.W 指令时、它会触发 未定义指令异常 、导致执行跳到 undefEntry

    为什么会发生这种情况

    该问题通常在以下情况下发生:

    1. 预编译库 (如 F021 闪存 API、TI_Fee 库或解压缩例程)是使用会生成 Thumb-2 指令(包括 BFI.W)的优化设置进行编译的

    2. __TI_Decompress_None函数是的一部分 由链接器生成的初始化/解压缩例程 在 C/C++引导时自动初始化期间使用

    3. 这些例程可能是针对不同的目标 (Cortex-R5F) 或使用不兼容的编译器标志进行编译的

    很高

    解决方案 1:使用正确的编译器标志重新编译库

    您需要确保所有库和代码都是专门为 Cortex-R4F 编译的、而无需 Thumb-2 高级指令:

    CCS 中的编译器设置:

    • 转至: Project Properties -> Build -> ARM Compiler -> Advanced Options -> Target
    • 设置--code_state=32(ARM 模式)或确保 Thumb 模式不使用高级指令
    • 添加到其他标志: --float_support=VFPv3D16
    • 确保优化级别适当(尝试或而不是) -O2-O3-O4

    对于 F021 闪存 API 库: 如果您使用的是预编译的 F021 闪存 API 库、可能需要:

    1. 获取 F021 闪存 API 的源代码
    2. 使用 TMS570LS0914 (Cortex-R4F) 的正确目标设置重新编译
    3. 链接到重新编译的库

    解决方案 2:检查链接器命令文件和初始化

    确保链接器命令文件正确处理初始化段:

    SECTIONS
    {
        .text:decompress : {} > FLASH  /* Decompression routines */
        .cinit : {} > FLASH            /* C initialization table */
        .pinit : {} > FLASH            /* C++ initialization */
    }

    确保解压缩例程放置在可执行存储器中并正确对齐

    解决方案 3:禁用压缩

    如果问题出在解压缩例程中、可以禁用链接器压缩:

    在链接器选项中、添加:

    --compress=off

    这可以防止链接器压缩初始化数据、从而无需解压缩例程

    解决方案 4:验证运行时库

    确保链接到 Cortex-R4F 的正确运行时支持库:

    • 使用rtsv7R4_T_le_v3D16_eabi.lib(适用于小端字节序,VFPv3D16、EABI)
    • 并不是为 Cortex-R5F 编译的库

    调试步骤

    1. 检查拆卸 在 LR 指向的地址:

      • 在 CCS 调试器中、转到 LR 寄存器中的地址
      • 查找仅限 BFI.W 或其他 Thumb-2 的指令
    2. 检查指令故障状态寄存器

      • 读取 Cortex-R4 IFSR 寄存器以确认未定义指令故障
    3. 验证库编译

      • 检查正在链接哪些库
      • 确保它们是针对 Cortex-R4F 而不是 R5F 编译的

    其他建议

    1. SPI 通信 :确保您的 SPI1 配置正确,并且不会导致内存损坏,从而导致执行无效指令

    2. 协议栈配置 :验证是否分配了足够的堆栈空间、因为堆栈溢出可能会导致类似的症状

    3. 存储器保护 :如果启用了 MPU 设置,请检查这些设置,因为它们可能会导致异常

    --
    此致、
    Jagadish。