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.

[参考译文] RTOS/TM4C1294NCPDT:线程间通信+队列

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/709554/rtos-tm4c1294ncpdt-inter-thread-communication-queue

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

您好!

我正在尝试了解 TI RTOS 并参加 TI RTOS 技术讲座。 我有几个问题想弄清楚。

1) 1)为了将数据从 Hwi 传递到 Swi 或任务、唯一的方法是使用本实验课程第9章(线程间通信)中解释的任何机制。  如果您不想使用这些机制中的任何一种,那么只能使用全局;不建议使用。。。 如果我错了、请纠正我、或者让我对这一理解的完整性发表意见。

2) 2)为使用队列或邮箱定义的结构是全局结构(如实验9中所示)。 如果定义的结构已经是全局结构,那么我们有什么好处(例如,对于要传递的数据来说,使用队列/邮箱比使用直接相同的结构在不同线程之间传递信息而不使用队列/邮箱简单2 int)?

请在此问题上提供一些信息。

提前感谢。

Pranav。

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

    第一。 没错。 您应该使用 TIRTOS 已经定义的数据结构之一。

    2。 TIRTOS 提供的数据结构、如队列、信标和邮箱、有助于防止并发访问和竞争条件。 如果您只拥有一个超过1个线程的全局变量、您将如何阻止对其进行并发访问? 不用说无法完成、只需了解与在 RTOS 环境中编写全局变量相关的问题。

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

    感谢您的回复。 这提高了我的理解。

    您能不能再确认我有以下疑问:

    我们为队列/邮箱定义的结构,必须定义为全局结构,对吧?



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

    Pranav、

    它们不一定要被定义为全局变量。  这取决于您如何使用它们、但通常您需要将它们定义为全局变量
    因此、您可以在不同的线程中使用它们。

    犹大

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

    感谢您的回复。

    如果你能给我指出一些我能阅读的文献来透彻理解的话,我将不胜感激。

    谢谢、此致、

    Pranav。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否已经阅读了 TI-RTOS 内核(SYS/BIOS)用户指南? 我将从那里开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我 已经浏览过内核 UG 的章节队列,但它没有谈到关于结构定义的任何问题...

    BR

    Pranav。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定为您提供什么建议。 这是一般 RTOS 信息。 局部变量存储在堆栈上(任务或系统、具体取决于您的上下文)。 全局变量存储在特定的存储器段中...(例如".bss")。 如果您计划跨不同线程(如任务)共享队列/邮箱,则无法将....it 存储在堆栈中,因为堆栈只能由一个任务"可见",所以它必须是一个全局变量,以便它对多个线程"可见"。 使用应用程序中的全局变量没有任何问题、实际上在许多情况下都是必需的。

    现在、可以只在 task...in 中使用队列、这样就不需要全局队列了。 本地邮箱不太常见、因为邮箱通常用于在不同线程之间共享数据。

    队列是不同的基本数据结构...基本上是一个双链接列表。 它有一个 next 和 prev 指针。 通常、您希望在数据结构的顶部嵌入队列、以便可以使用队列 API 来插入/删除/删除等。