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/TM4C129ENCPDT:来自不同线程的多个事件发布如何工作

Guru**** 2611705 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/583239/rtos-tm4c129encpdt-how-does-multiple-event-post-from-different-thread-work

器件型号:TM4C129ENCPDT

工具/软件:TI-RTOS

如果使用 或选项在多个事件上发生 i Event_pend  

在执行与每个事件相对应的操作时,如果某些其他线程在我的线程到达事件挂起之前布置了一个事件,将发生什么

例如、在以下示例中、如果其他某些线程在 我返回之前(处理接收到的事件之后)执行 Event_POST (myEvent、Event_ID_02)

 EVENT_PEND (myEvent、Event_ID_NONE、Event_ID_00 + Event_ID_01 + VENT_ID_02、BIOS_WAIT_FOREVE);

在下一次执行中处理它

EVENT_Handle myEvent;
task()


UINT 事件;
while (true){

事件= Event_pend (myEvent、Event_ID_none、
EVENT_ID_00 + Event_ID_01 + Event_ID_02、
BIOS_wait_forever);
/*处理已发生的所有事件*/
if (Events & Event_ID_00){
processISR0();

if (Events & Event_ID_01){
processISR1();

if (Events & Event_ID_02){
processISR2();


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

    Joseph、

    [引用 user="Joseph Xavier">Events = Event_pend (myEvent、Event_ID_none、
    EVENT_ID_00 + Event_ID_01 + Event_ID_02、
    BIOS_wait_forever);

    在您传递这一行代码(因为有人在其他位置发布了事件)后、'Events'变量将包含在 Event_pend 返回时发布的所有事件。

    [引用 user="Joseph Xavier">if (Events & Event_ID_00){
    processISR0();

    if (Events & Event_ID_01){
    processISR1();

    if (Events & Event_ID_02){
    processISR2();
    }[/报价]

    此时,'Events'包含导致 Event_pend()调用返回的所有事件。

    如果这个任务(A)被中断、并且在返回 A 之前运行另一个任务(B)(例如、由于它具有更高的优先级)、然后 B 再次发布一个事件、那么 A 中"事件"的值不会改变。  'Events'仍将包含有关已发布的事件的信息,这些事件导致 Event_pend()调用在 A 中解除阻止(在被中断和 B 被调度之前)。

    在 A 中 while 循环的下一次迭代(安排 A 并再次运行)期间、将在 A 中的'Events'变量中捕获来自 B 的新事件。

    Steve