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.

[参考译文] RM57L843:MPU 在通过 bootloader 为应用程序刷写之后会出现数据中止异常

Guru**** 1797640 points
Other Parts Discussed in Thread: RM57L843, HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392409/rm57l843-mpu-make-data-abort-exception-after-flash-the-application-through-the-bootloader

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

工具与软件:

我有一个在 FreeRTOS 上运行的应用程序、可作为独立程序平稳运行。 但是、当我通过引导加载程序对其进行刷写、重新启动以及从引导加载程序跳转到应用程序时、系统会在调度程序启动后发出数据中止异常。 这种异常发生在任务开始时、特别是在我定义和初始化小数组的行上。

经过全面调试后、我确定该问题与内存保护单元(MPU)有关。 在 FreeRTOS 中禁用 MPU 可解决该问题。 我的问题是、从引导加载程序跳转到应用程序时、什么可能导致 MPU 发生故障、以及为什么在没有引导加载程序的情况下直接刷写应用程序时不会出现此问题?

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

    尊敬的 Kamyar:

    您能否为引导加载程序和应用程序共享链接器 cmd 文件? 以便我可以快速验证它们。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Kamyar:

    我看不到您的链接器 cmd 文件有任何主要问题。 但是、我不明白您为什么不在闪存的起始位置启动引导加载程序代码。

    为什么不是从 0x00000020开始、而是从 0x00004000开始、执行此操作的目的是什么?

    我还建议您参考以下主题一次:

    在这里、您可以找到多个有效的引导加载程序示例代码、所以您只需检查一次即可

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    你好、Jagadish

    感谢您的观看。

    要从0x4000而不是0x20启动引导加载程序代码、我们需要将应用程序的异常矢量表复制到引导加载程序中。 这要求每次刷写新固件后擦除第一个扇区。  RM57L843不允许像 ARM Cortex M 系列中的 VTOR 那样重定位异常向量表地址。 有没有办法实现这一点? 此外、从0x4000开始是否会导致任何问题?

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

    Kamyar、

    [报价 userid="616432" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392409/rm57l843-mpu-make-data-abort-exception-after-flash-the-application-through-the-bootloader/5329953 #5329953"]  RM57L843不允许像 VTOR 在 ARM Cortex M 系列中那样重定位异常矢量表地址。 是否有实现这一目标的方法?

    您是正确的、向量重定位无法实现。

    此外、从0x4000开始是否会引发任何问题?

    不、不会导致任何问题。 甚至我创建了一个示例演示并测试了它是否正常工作、没有任何问题。

    e2e.ti.com/.../Application_5F00_at_5F00_0x4000_5F00_TEST_5F00_RM57.zip

    所以、问题应该是另一回事。 我需要您的完整引导加载程序和应用项目进行验证、是否可以共享它们? 或至少一个有此问题的最简单工程。 您甚至可以通过私人消息发送。

    ——
    谢谢、此致、
    Jagadish。

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

    Jagadish、

    应用程序和引导加载程序均独立工作、不会出现任何问题。 但是、从引导加载程序跳转到应用程序时、会发生数据中止错误。 似乎是由于某些初始化完成了两次(一次在引导加载程序中、一次在应用程序中)而导致了此问题。 您对这种双初始化导致问题的原因有何见解吗?

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

    尊敬的 Kamyar:

    (+)[常见问题解答] TMS570LC4357:Hercules 器件上的中止异常故障排除-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    在上面的常见问题解答中、我的同事讨论了如何解决异常问题、您能否参阅上面的主题、您能否尝试准确找出导致异常的地址。 并验证映射文件中的相应地址、然后您可以准确找到导致问题的函数。

    ——

    谢谢、此致、
    Jagadish。

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

    感谢链接、它非常有用。 但我们已经知道应用程序中的哪一行代码造成了问题、但我们不知道问题发生的原因。

    当我们独立运行应用程序、而不是通过引导加载程序运行时、该代码行可以顺利运行。

    当我们检查这些问题发生时,芯片启动两次:首先在引导加载程序,然后在应用程序.

    我的问题是为什么它使问题?

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

    尊敬的 Kamyar:

    您能否准确分享出现问题的哪一行和哪项功能的屏幕截图?

    此外、我需要引导加载程序和应用程序的 HALCoGen MPU 配置?

    ——
    谢谢、此致、
    Jagadish。