我是靠谱客的博主 糊涂饼干,最近开发中收集的这篇文章主要介绍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)//释放信号量


      

最后

以上就是糊涂饼干为你收集整理的UCOSII实验的全部内容,希望文章能够帮你解决UCOSII实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部