如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第九章任务的同步与通信1.信号量2.消息邮箱3.消息队列三、事件控制块四、事件控制块的基本操作函数2.使一个任务进入等待状态的函数当一个任务在请求一个事件而不能获得时,应把次任务登记在时间的等待任务列表中,并把任务控制块中的任务状态置为等待状态和吧任务置为非就绪任务3.正在等待的任务进入就绪状态当一个正在等待的任务具备了可以运行的条件,这时需调用此函数来使它进入就绪状态。该函数的作用就是把调用这个函数的任务在任务等待表中的位置清O后,再把任务子啊任务就绪表中的对应位置1,然后引起一次任务调度。五、空事件控制块的的组织§9.1信号量及其操作二、信号量的操作2.等待一个信号量,OSSemPend()/OSSemAccept()3.发送一个信号量,OSSemPost()§9.3任务优先级反转和互斥型信号量voidTaskA(void)二、互斥型信号量3.发送互斥型信号量5.删除互斥型信号量§9.4消息邮箱及其操作二、消息邮箱的操作2.发送一个消息到邮箱中:OSMboxPost()/OSMboxPostOpt()3.等待一个邮箱中的消息:OSMboxPend()/OSMboxAccept()4.查询一个邮箱的状态,OSMboxQuery()§9.5消息队列及其操作1.消息指针数组OSQPtr在空闲队列控制块中链接所有的队列控制块。一旦建立了消息队列,该域就不再有用了。OSQStart是指向消息队列的指针数组的起始地址的指针。用户应用程序在使用消息队列之前必须先定义该数组。OSQEnd是指向消息队列结束单元的下一个地址的指针。该指针使得消息队列构成一个循环的缓冲区。OSQIn是指向消息队列中插入下一条消息的位置的指针。当OSQIn和.OSQEnd相等时,OSQIn被调整指向消息队列的起始单元。OSQOut是指向消息队列中下一个取出消息的位置的指针。当OSQOut和OSQEnd相等时,OSQOut被调整指向消息队列的起始单元。OSQSize是消息队列中总的单元数。该值是在建立消息队列时由用户应用程序决定的。在µC/OS-II中,该值最大可以是65,535。OSQEntries是消息队列中当前的消息数量。当消息队列是空的时,该值为0。当消息队列满了以后,该值和OSQSize值一样。在消息队列刚刚建立时,该值为0。系统把消息指针数组的基本参数都记录在一个叫做队列控制块(OS_Q)的结构中。并用队列控制块中的指针OSQPtr将所有队列控制块链接为链表。一、消息队列的操作3.向消息队列发送一个消息(FIFO),OSQPost()和OSQPostOpt()INT8UOSQPost(OS_EVENT*pevent,void*msg)INT8UOSQPostOpt(OS_EVENT*pevent,void*msg.INT8Uopt)5.删除一个消息队列,OSQDEL()OS_EVENTOSQDel(OS_EVENT*pevent);6.查询消息队列,OSQQuery()OS_EVENTOSQQuery(OS_EVENT*pevent,OS_Q_DATA*pdata);