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.

[参考译文] TMS570LS1224:"如何在已经运行基于 RTOS 的任务结构的系统上实现引导加载程序

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1510409/tms570ls1224-how-can-i-implement-the-bootloader-on-top-of-a-system-that-already-runs-an-rtos-based-task-structure

器件型号:TMS570LS1224

工具/软件:

尊敬的 TI 团队:

这是我当前针对 TMS570LS1224的存储器布局计划:

移动数据

矢量(X):origin=0x00000000 length=0x00000020 /* 32 B→扇区0 (0x00000–0x0001F)*/
内核(RX):origin=0x00000020 length=0x00007FE0 /*→32 KB–32 B ~扇区0–1 (0x00000–0x07FFF)*/
BOOTLDR (RX):origin=0x00008000 length=0x00010000 /* 64KB→扇区2–5 (0x08000–0x17FFF)*/
配置(RWX):origin=0x00018000 length=0x00008000 /* 32KB→扇区6 (0x18000–0x1FFFF)*/
OTA_INFO (RX):origin=0x00020000 length=0x00004000 /* 16KB→扇区7 (0x20000–0x23FFF)*/
filesys (RWX):origin=0x00024000 length=0x0001C000 /*112KB→扇区7 (0x24000–0x3FFFF)*/
APP_A (RX):origin = 0x00040000 length = 0x00080000 /*512KB→扇区8–11 (0x40000–0xBFFFF)*/
APP_B (RX):origin=0x000C0000 length=0x00080000 /*512KB→扇区12–15 (0xC0000–0x13FFFF)*/

栈(RW):origin=0x08000000 length=0x00000800 /* 2 KB SRAM */
Kram (RW):origin=0x08000800 length=0x00000800 /* 2 KB SRAM */
RAM (RW):origin=(0x08000800+0x00000800) length=(0x0002F800 - 0x00000800)/* SRAM */
}

我目前正在设计一个系统、其中包括:

  • a. 引导加载程序

  • 应用程序分区 (APP_A 和 APP_B)、都是使用 驱动程序 (FreeRTOS)

  • a 共享 内核 向量 部分

  • 的共享区域 配置 文件

我有几个关键问题:


  1. 如何在运行基于 RTOS 的任务的系统上正确实现引导加载程序?
    大多数 TI 示例(如 CAN 引导加载程序)都没有展示如何将引导加载程序与 RTOS 上下文切换相集成、或者如何在跳转到该应用之前准备 RTOS 环境。

  2. 是否可以让 APP_A 和 APP_B 共享相同的VECTORSKERNEL存储器区域?
    如果是、如何配置链接器和运行时、以避免重新初始化或损坏共享存储器区域?

  3. 对于CONFIG和等区域FILESYS、两个应用程序共享和访问它们是否有效和安全?
    为避免在运行时或 OTA 更新期间发生冲突或损坏、您建议采取哪些预防措施或模式?

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

    [五月七日至九日]

    我们成功地将应用程序编程到其指定的闪存分区、并观察到跳转已正确执行。 但是、与向量相关的问题仍未解决、这继续妨碍任务的创建。

    [五月9]

    通过查看 Memory Browser 和 CPU 寄存器、我们确认了这两组代码都有各自独立的矢量段且没有重叠。
    在配置位置 引导加载程序是非 RTOS、App-A 使用 RTOS 、由于prvRaisePrivilege()函数未能触发vPortSWI(SVC 处理程序)、任务创建失败。 这导致执行在svcEntry引导加载程序部分内无休止地循环。
    然后我们修改了架构、以便做到这一点 引导加载程序和 App-A 都基于 RTOS 。 在此设置下、SVC 呼叫成功转移了控制权、系统不再进入svcEntry循环。 但是、当系统到达时vTaskStartScheduler()、由于未知原因而未输入该功能。 我们在汇编级别确认函数已编译并存在于流程中、但在执行期间跳过了该函数。

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

    最终、我们通过明确的方式解决了该问题 在引导加载程序中禁用 FIQ 和 IRQ ,并在以后的 App-A 中重新启用它们 通过这种调整、整个系统都能够正常运行。

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

    尽管系统当前正在运行、但我们仍在验证应用程序的全部功能。
    如果有任何关键注意事项或我们应遵循的最佳实践(尤其是在整个引导加载程序和应用程序的中断启用/禁用处理和矢量管理方面)、我们将衷心感谢您的指导。

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

    此外、我要强调的是、当前稳定设置涉及以下方面 引导加载程序和 App-A 都基于 RTOS
    如果引导加载程序未运行 RTOS 并尝试启动基于 RTOS 的应用程序、则系统在 SVC 转换阶段仍然失败prvRaisePrivilege()vPortSWI、具体而言、它无法从正确分支到、从而导致持久循环在svcEntry

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

    您好、

    对延迟的回复深表歉意。

    遗憾的是、我没有现成的关于这一要求的示例。

    不过、我过去帮助过一些客户开发了 Bootloader+RTOS 应用程序、我会在这里分享这些线程、我想推荐一次这些线程。 因为这些线程可能对您有用。

    (+) TMS570LC4357:TMS570LC43x 引导加载程序过渡到 RTOS 应用:意外进入 SVC -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (+) TMS570LS3137:引导加载程序 FreeRTOS 程序-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (+) TMS570LC4357:I2C 中出现问题的 FreeRTOS 引导加载程序应用-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --
    此致、
    Jagadish。