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:在启用 MPU 的 FreeRTOS 下使用 HalCoGen 的正确方法

Guru**** 2126830 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/793781/tms570ls1224-correct-approach-for-halcogen-usage-with-mpu-enabled-freertos

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

您好:)

启用 MPU 时、使用 HalCoGen 生成的驱动程序的正确方法是什么?

例如,当我尝试使用 SCI 驱动程序通过中断接收某些数据时,我可以调用 sciReceive()函数。 调用 sciReceive()函数的普通非特权 FreeRTOS 任务仅有权访问其自身的堆栈和其他特定于任务的存储器区域(如果已定义)。 问题是,HalCoGen 使用 一些 sciReceive()引用的静态全局结构(在本例中为 g_sciTransfer),但这些静态全局结构超出了此默认任务的内存访问权限。 调用 sciReceive()后,数据中止。 因此、要么需要在用户代码开始之外修改 HalCoGen 生成的源代码-用户代码结束段、要么需要在用户代码中添加一些额外的逻辑、 或者用户需要编写自己的不使用 HalCoGen 全局结构的 sci 驱动程序或者它必须是一个特权任务(当然不需要最后一个选项)。

谢谢、

Adam

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

    我不是 FreeRTOS 人员。 我知道、将任务切换到权限对您来说不是一个好选择。 您能否尝试使用队列在任务之间交换信息?

    在 SCI ISR 中,使用 xQueueSendToBackFromISR() API 将全局变量(g_sciTransfer)发送到预创建的队列
    2.您的任务使用 xQueueReceive() API 从队列读取变量
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许我应该多等一些时间、让一些对 FreeRTOS-MPU/HalCoGen/Hercules 组合有一定经验的人来体验一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Adam:

    您可以编写一个简单函数来使用中断模式接收字节、但不能使用用于定义数据长度的全局变量。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="QJ Wang ]Hi Adam、

    您可以编写一个简单函数来使用中断模式接收字节、但不能使用用于定义数据长度的全局变量。

    [/报价]

    那么、建议基本上是编写我自己的 SCI 驱动程序函数、而不是使用 HalCoGen 生成的函数? 如果 HalCoGen 团队考虑到这些问题并在下一个版本中使 HalCoGen 更易于使用 FreeRTOS - MPU、那将是很棒的。

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

    HALCOGen 可生成基本的低级硬件驱动程序、您可以修改应用程序的代码。 我将向 HALCogen 开发人员反馈您的建议。