UCOSII实验

一、初始化函数

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_CFG.H文件中的配置常数OS_MAX_EVENTS设定。
任务或者中断服务子程序都可以调用函数OSMboxPost(),OSMboxPostOpt() ,而只有任务可以调用OSMboxDel()
OSMboxPend(), OSMboxQuery()。
void *OSMboxAccept (OS_EVENT *pevent)

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)//释放信号量


      

你可能感兴趣的:(单片机)