概述
一、初始化函数
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)//释放信号量
最后
以上就是糊涂饼干为你收集整理的UCOSII实验的全部内容,希望文章能够帮你解决UCOSII实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复