查看: 391|回复: 1
打印 上一主题 下一主题

【MAPS四色板试用】15 飞思卡尔四色板:uCOSII消息队列操作

[复制链接] qrcode

29

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
楼主
跳转到指定楼层
发表于 2016-3-13 03:27 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一、 uCOSII消息队列封装

1 消息队列概念

    消息队列就象一个类似于缓冲区的对象,通过消息队列任务和ISR发送和接收消息,实现数据的通信和同步。消息队列具有一定的容量,可以容纳多条消息,因此可以看成是多个邮箱的组合。


    一般来说,消息队列有3种状态,即空状态(消息队列中没有任何消息)、满状态(消息队列中的每个存储单元都存放了消息)、正常状态(消息队列中消息但又没有到满的状态)

2 消息队列封装
    在ksdk_ucosii_lib库项目下的fsl_os_abstraction.h里,定义了4个消息队列相关的接口:
msg_queue_handler_t OSA_MsgQCreate(msg_queue_t *queue,
                                        
				uint16_t  message_number,
                                        
				uint16_t  message_size);
osa_status_t OSA_MsgQPut(msg_queue_handler_t handler, void* pMessage);
osa_status_t OSA_MsgQGet(msg_queue_handler_t handler,
                           
			void               *pMessage,
                           
			uint32_t            timeout);
osa_status_t OSA_MsgQDestroy(msg_queue_handler_t handler);
    而在fsl_os_abstraction_ucosii.h文件中,进行了具体实现:

(1)消息队列创建函数,封装了uCOSII中的OSQCreate函数。


(2)消息队列等待函数,封装了uCOSII中的OSQPend函数。


(3)消息队列发送函数,封装了uCOSII中的OSQPost函数。


(4)消息队列销毁函数,封装了uCOSII中的OSQDel函数。


二、uCOSII中消息队列的使用

1 示例

    让一个LED以传递过来的参数确定点亮时间,以此示例来说明如何使用消息队列来实现任务之间的数据通信,假设TaskLED为高优先级的任务。两个任务的处理流程如下。

2 代码实现

(1)在主函数中,创建两个任务,一个发送控制Led的闪烁频率,一个接收消息并控制Led的闪烁



(2)发送消息队列任务



(3)接收消息队列,控制Led



3 效果

(1)串口数据


(2)MAPS-K64


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

81

帖子

10

积分

新手上路

Rank: 1

积分
10
沙发
发表于 2016-3-13 06:35 PM | 只看该作者
赞一个,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表