大家好,欢迎来到IT知识分享网。
一、初始化函数
void OSStatInit (void)//初始化统计任务.这里会延时1秒钟左右
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
上面两个函数常用在建立新任务的时候。
INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)//建立一个新任务
任务创建后将会运行。void (*task)(void *p_arg)为函数指针,指向任务函数。void *p_arg为任务堆栈。 INT8U prio为任务优先级。任务优先级数字越大,优先级越低。
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务
任务优先级为START_TASK_PRIO的任务将会被阻塞
二、消息邮箱
消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。
OS_EVENT *OSMboxCreate (void *pmsg)创建消息邮箱
创建消息邮箱 返回值是指向创建消息邮箱的指针
该函数的参数为void *msg 是消息指针,在这里(void *)0表示初始值为NULL 这样也就表示。
新创建的这个消息邮箱里没有内容。
void *OSMboxPend (OS_EVENT *pevent, INT32U timeout, INT8U *perr)//申请消息邮箱
timeout为超时时间
INT8U OSMboxPost (OS_EVENT *pevent, void *pmsg)//发送消息邮箱
pmsg是个“通用”指针指向要发送的消息
三、信号量
当希望一次性向某个任务发送多则消息时,邮箱就有点见肘了。因为一个邮箱只能装一封信。把多上邮箱集中到一起管理和使用就变成了消息队列,所以消息队列的操作和邮箱很相似。可以简单地认为,消息队列是邮箱数组。 如果发送者是一对一的方式发送邮件,则等待列表中的优先级最高的任务将获取邮件;如果是以广播的方式发送邮件,则等待该邮件的所有任务将获得此邮件。
信号量由信号量计数器和等待任务表两部分组成:
信号量使用事件控制块的成员OSEventCnt作为计数器,而用数组OSEventTb1[]来充当等待任务表。
OS_EVENT *OSSemCreate (INT16U cnt)创建信号量
void OSSemPend (OS_EVENT *pevent, INT32U timeout, INT8U *perr)//等待一个信号量函数
INT8U OSSemPost (OS_EVENT *pevent)//释放信号量
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25206.html