- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式移植实验三
实验三 uC/OS II任务间通信实验
一、实验目的
回顾uC/OS II 在Cortex-M3(LM3S9B2芯片)平台上的移植,以及RS232串口、TFT显示等驱动程序的加载。
回顾μC/OS-II任务管理的基本函数调用,任务堆栈、任务控制块、任务就绪表的结构和作用。
掌握嵌入式操作系统任务间通信的基本原理,熟练使用μC/OS-II中的消息邮箱和消息队列进行任务间的数据交换、数据通信。
掌握消息邮箱和消息队列相关的基本函数以及相关原理。
应用μC/OS-II中的消息邮箱和消息队列处理简单的实际问题。
二、预习要求
1. 基本概念
消息邮箱:多任务操作系统中,需要在任务间传递消息以实现通信,在内存创建一个消息缓冲区用来存放该消息,任务间传递消息时只需要传递消息缓冲区的指针,用来传递消息缓冲区指针的数据结构叫做消息邮箱。
消息队列:它属于间接通信方式,所谓消息就是在内存空间中一段长度可变的缓冲区,其长度和内容均可以由用户定义,其内容可以是实际的数据、数据块的指针或空。对消息内容的解释由应用程序完成。从操作系统观点看,消息没有定义的格式,所有的消息都是字节流,没有特定的含义。从应用观点看,根据应用定义的消息格式,消息被解释成特定的含义。应用可以只把消息当成一个标志,这时消息机制用于实现同步
队列控制块
队列控制块
队列长度
QCB1
队列名或ID
Task3
Task4
……
接收任务等待列表
Task1
Task2
……
发送任务等待列表
最大
消息
长度
QCB2
……
消息队列及其相关的参数和支持数据结构
2. 相关函数介绍
1). 创建消息邮箱 OSMBoxCreate()
函数原型:
OS_EVENT * OSMboxCreate( void * msg );
其中:-msg 是消息指针
2). 向邮箱发送消息 OSMboxPost() 和 OSMboxPostOpt()
函数原型:
INT8U OSMboxPost(
OS_EVENT * pevent, //消息邮箱指针
void * msg //消息指针
);
INT8U OSMboxPostOpt(
OS_EVENT * pevent, //消息邮箱指针
void * msg //消息指针
INT8U opt //广播选项
);
其中: opt=OS_POST_OPT_BROADCAST,则广播消息;
opt=OS_POST_OPT_NONE,则把消息只向最高优先级等待任务发送
3). 读取消息邮箱 OSMboxPend() 和 OSMboxAccept()
函数原型:
void * OSMboxPend(
OS_EVENT * pevent, //请求消息邮箱指针
INT16U timeout, //等待时限
INT8U * err //错误信息
);
void * OSMboxAccept(
OS_EVENT * pevent //消息邮箱指针
);
它们的区别在于OSMboxAccept()是无等待的读取模式。
4). 查询邮箱的状态 OSMboxQuery()
5). 删除邮箱 OSMboxDel()
函数原型:
OS_EVENT *OSMboxDel(
OS_EVENT * pevent, //消息邮箱指针
INT8U opt, //删除选项
INT8U *err //错误信息
);
6). 和消息队列相关的函数
和详细队列相关的函数与消息邮箱相关的函数类似,罗列如下:
创建消息队列 OSQCreate( );
请求消息队列 OSQPend( ) 和 OSQAccept( );
向消息队列发送消息 OSQPost( ) 、OSQPostFront( ) 和 OSQPostOpt(),;
清空消息队列 OSQFlush( );
删除消息队列 OSQDel( );
查询消息队列 OSQQuery( );
三、实验内容
1. 基本部分:主要包括消息队列和消息邮箱的创建、发送消息、接收消息、消息邮箱的查询与删除;消息队列的创建、发送消息到消息队列、从消息队列中接收消息、消息队列的查询与删除等。在它们的创建、删除、查询的过程中,请注意事件控制块ECB的变化,并通过单步调试跟踪变化,并说明理由。
1)在Cortex-M3系统下,移植μC/OS-II操作系统,并通过调整os_cfg.h中的宏定义,裁剪/增加μC/OS-II的相关组件;
2)消息邮箱和消息队列的创建,并通过ECB查看,理解μC/OS-II中消息队列和消息邮箱的工作原理;
3)设计一个多
文档评论(0)