请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TI-RTOS-MCU 主题中讨论的其他器件:CC2652RB
我们正在尝试确保我们的应用程序是线程安全的、在某些情况下、我们对线程之间的执行路径有几个问题。 我已经查阅 过 SYS/BIOS (TI-RTOS 内核)用户指南、但仍不清楚。
- 假设我有优先级为2的任务 A、优先级为4的任务 B。 任务 B 运行直到它挂起一个信标、现在被阻止。 Taska 已准备就绪、现在正在运行、因为它是下一个最高优先级的线程。 发布了一个 SWI、该 SWI 会由于被启用而立即运行、并且其优先级高于任何任务、即使在 SWI 函数执行期间任务 A 仍保持运行状态。
- 问题: 如果 SWI 布置任务 B 挂起的信标、当 SWI 完成时、执行将返回任务 A 并使任务 B 保持就绪状态、直到任务 A 中调用另一个任务/信标等函数、该函数会导致上下文切换到更高优先级的任务 B、 或者、在 SWI 中发布信标是否会导致上下文切换和任务 B 挤占从 SWI 返回任务 A?
- 我们的印象是、只有当当前运行的线程遇到 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 操作、等待某个共享资源的可用性或闲置时、它们可以进入此状态。"
- 问题:您能否详细说明这些"某些 I/O 操作"? 这是否意味着使用 PIN/GPIO 驱动程序函数也可能导致像挂起信号量一样的上下文切换? 或者这意味着什么?