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.

[参考译文] TI-RTOS-MCU:线程切换

Guru**** 2575775 points
Other Parts Discussed in Thread: CC2652RB

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1192230/ti-rtos-mcu-thread-switching

器件型号:TI-RTOS-MCU
主题中讨论的其他器件:CC2652RB

我们正在尝试确保我们的应用程序是线程安全的、在某些情况下、我们对线程之间的执行路径有几个问题。  我已经查阅 过 SYS/BIOS (TI-RTOS 内核)用户指南、但仍不清楚。

  1. 假设我有优先级为2的任务 A、优先级为4的任务 B。  任务 B 运行直到它挂起一个信标、现在被阻止。  Taska 已准备就绪、现在正在运行、因为它是下一个最高优先级的线程。  发布了一个 SWI、该 SWI 会由于被启用而立即运行、并且其优先级高于任何任务、即使在 SWI 函数执行期间任务 A 仍保持运行状态。
    1. 问题: 如果 SWI 布置任务 B 挂起的信标、当 SWI 完成时、执行将返回任务 A 并使任务 B 保持就绪状态、直到任务 A 中调用另一个任务/信标等函数、该函数会导致上下文切换到更高优先级的任务 B、 或者、在 SWI 中发布信标是否会导致上下文切换和任务 B 挤占从 SWI 返回任务 A?
  2. 我们的印象是、只有当当前运行的线程遇到 TI-RTOS 特定的 Task_x ()、Semaphore_x ()、Mailbox_x ()等函数时、才会发生上下文切换到另一个更高优先级的任务。 但是 ,SYS/BIOS (TI-RTOS 内核)用户指南(修订版 V)在第3.6.2节“任务执行状态和调度”(第85页)中还指出:“正在运行的任务在调用导致当前任务暂停执行的函数(例如 Semaphore_pend()或 Task_sleep())时变为 Task_Mode_Blocked; 当任务执行某些 I/O 操作、等待某个共享资源的可用性或闲置时、它们可以进入此状态。"
    1. 问题:您能否详细说明这些"某些 I/O 操作"?  这是否意味着使用 PIN/GPIO 驱动程序函数也可能导致像挂起信号量一样的上下文切换?  或者这意味着什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    您在什么器件上使用 TI-RTOS?

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

    CC2652RB

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

    我会将您的查询发送给专家以获取评论。

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

    您好 Chris、

    您已经指向 了 TI-RTOS 内核用户指南、但是请注意 RTOS 内核概述RTOS SimpleLink Academy 实验

    1. 任务 B 将立即运行并挤占任务 A、因为任务 B 现在已准备就绪并且具有更高的优先级。
    2. 我认为这是指 TI 驱动 程序如何为其外设进入阻塞模式、例如、在发送/接收数据时、信标阻止进一步的任务操作的 UART。  因此、虽然未显式调用 RTOS 专用函数、但驱动程序使用会导致当前任务暂停执行。

    此致、
    Ryan

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

    有趣。  因此、我们绝不应假定任务中2个连续的非 RTOS 函数代码行被保证为连续执行、而另一个任务(显然 HWI 和 SWI 可以)在这两者之间获得优先级、 因为调用 RTOS 函数的 HWI 或 SWI 实际上可能会导致中断的任务在 任何时候都无法返回到更高优先级的任务?  了解相关信息、以及查找任何关键部分的时间...