ucosii 任务的同步与通信复习



转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77891350

普通信号量:Sem

      互斥信号量可能出现优先级翻转,低优先级任务获得信号量还没有释放时发生任务切换,切换到高优先级任务,高优先级任务获得不了信号量而让出CPU,低优先级任务继续运行,从表象上看就是低优先级任务在获得信号量后优先级反而比高优先级任务优先级高,原因是:信号量的约束高于优先级的约束。

互斥型信号量:Mutex

      互斥型信号量是当任务获得信号量时暂时将该任务的优先级提升到最高,那么就不会发生任务切换,则这个任务可以一口气把任务执行完毕再释放信号量,避免了来回无用功的任务切换。、

消息邮箱:Mbox

      消息邮箱是指定一块内存,将内存地址发送出去,别人从这个地址里取出数据,一发一收,发了才能收,收了才能发。

消息队列:Q (用的最频繁)

      消息队列是多个邮箱的数组,可以看做是一个指针数组。

      创建一个消息队列首先要定义一个指针数组,把各个消息的数据缓冲区的首地址存入这个数组

例如

char *s;
char *s1 = "s1";
char *s2 = "s2";
char *s3 = "s3";
#define N_MESSAGES 3
void *MsgGrop[N_MESSAGES];

OS_EVENT *Str_Q;

Str_Q = OSQCreate(&MsgGrop[0],N_MESSAGES);

//发送消息
OSQPost(Str_Q,s1);
OSQPost(Str_Q,s2);
OSQPost(Str_Q,s3);
//接收消息
OSQPend(Str_Q,s);

信号量集:Flag

      信号量集是一个任务在同时满足几个信号的时候才运行,就是>2个任务之间的同步



总结:

ucosii 任务的同步与通信复习_第1张图片

 

 




你可能感兴趣的:(ucos,ii)