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:无法使用 FreeRTOS 同时初始化超过1个字节

Guru**** 2611325 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/767630/rm57l843-cannot-initialize-more-than-1-byte-at-the-same-time-with-freertos

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

e2e.ti.com/.../7875.Test.zipHello社区、

将 应用程序与 FreeRTOS 合并时遇到问题。 应用 本身运行良好 的裸机。  

我为 合并的版本创建了一个新的 CCS 工程(v7.4)和一个新的 HALCoGen 文件。  现在、每当我尝试初始化栈中 大小超过1字节(例如 int)的变量时、程序会崩溃并在 HL_sys_intvecs.asm 的"DataEntry"行结束。  我检查了 MPU 设置、根据这些设置、RAM 应从0x08000000开始、并在0x0807FFFF 结束。 由于某种原因、初始 SP 被设置为0x07FFFAA00等地址。 因此、它超出了 RAM 的范围。 如果我手动将 SP 地址更改为接近0x08000000的值、则初始化有效(但这当然不是解决方案)。 在反汇编过程中、我注意到、通过向 strb 指令传递大偏移量、可以在 RAM 边界内分配和初始化 Vols、unit8_ts 和其他一个字节长的数据类型:

strb      R12、[sp、#0x8a4]

这是初始化的第一个布尔值。

但是、以下是初始化 int 时执行的指令:

STR       R12、[sp](无偏移、SP 被设定为 RAM 之外的地址)

该程序随后崩溃、因为它尝试 写入被禁止的位置。

在我看来、某项操作在配置方面是不明智的...但我已经比较了我的两个项目之间的 CCS 和 HALCoGen 设置、到目前为止还没有找到与此相关的任何操作。 此外、我使用 TMS57板在 FreeRTOS 上运行了相同的应用程序、它运行良好。 对于这两种情况、我都使用了 TI v16.9.6.LTS 编译器。

我附加 了 HALCoGen 文件、以防有人 查看。

感谢 您提供的任何帮助和指导。

谢谢、

Surialic  

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

    请查看以下备注:
    www.freertos.org/Free_RTOS_for_TI_RM48_and_TMS570.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ Wang、您好!

    我们在为 TMS570电路板构建应用时参考了该链接、该链接有效。 但是、当我们在 RM57上运行应用程序时、我们遇到了上述问题。 我使用 HALCoGen 重新生成了 FreeRTOS 和外设文件、基本上从 TMS570项目中导入了所有其他内容。 在调用 main()之前,是否有任何方法可以看到初始化代码? 这可能会为我提供更多信息、说明为什么堆栈指针设置为超出范围的内容。

    谢谢、

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

    复位后、MCU 寄存器被初始化。 通过调用以下函数将 R[14:1]初始化为0:
    _coreInitRegisters_();

    SP 由_coreInitStackPointer_()初始化,初始化的 SP 为0x0800xxxx。

    如何在堆栈中初始化变量? 为什么要将变量放置在堆栈中? 您的变量是否覆盖堆栈中的内容?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ Wang、

    感谢您的回复和提供信息。 我刚刚通过放大 HALCoGen 中堆栈的用户部分来解决了这个问题。 RM57_FreeRTOS > RAM

    我将其从0x00000300放大到0x00008000。 我很确定我不需要这么多、但至少现在我会这样保留。

    我不太理解为什么它仍然会分配一个字节变量、并且在我分配了2/4字节1后立即崩溃。 但我想我稍后可以对此进行调查。

    谢谢、

    Surialic

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这可能是一个问题、但这只是一个不知情的猜测。 您是否正在初始化2字节和4字节对齐地址上的2字节和4字节值?