查看: 272|回复: 0
打印 上一主题 下一主题

【MAPS四色板试用】14 飞思卡尔四色板:uCOSII事件操作

[复制链接] qrcode

35

主题

44

帖子

127

积分

注册会员

Rank: 2

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


一、 uCOSII事件封装

1 事件概念

    在uCOSII中,有一个事件标志组的概念,即当任务要与多个事件同步时,就要使用事件标志组。一个事件标志就是一个二值信号,事件标志组是若干二值信号的组合。使用事件标志组同步任务分为独立性同步和关联性同步。假设一个任务与3个事件标志有关,

    

    可以用多个事件的组合发信号给多个任务,典型的有8个、16个或32个事件可以组合在一起,取决于用的是哪种内核。

2 事件封装

    在ksdk_ucosii_lib库项目下的fsl_os_abstraction.h里,定义了5个任务相关的接口:

osa_status_t OSA_EventCreate(event_t *pEvent, osa_event_clear_mode_t clearMode);
osa_status_t OSA_EventWait(event_t       *pEvent,
                        event_flags_t  flagsToWait,
                        bool           waitAll,
                        uint32_t       timeout,
                        event_flags_t *setFlags);
osa_status_t OSA_EventSet(event_t *pEvent, event_flags_t flagsToSet);
osa_status_t OSA_EventClear(event_t *pEvent, event_flags_t flagsToClear);
osa_status_t OSA_EventDestroy(event_t *pEvent);
    而在fsl_os_abstraction_ucosii.h文件中,进行了具体实现:


(1) 事件创建函数,封装了uCOSII中的OSFlagCreate函数。


(2) 事件等待函数,封装了uCOSII中的OSFlagAccept函数和OSFlagPend函数。


(3)事件置位函数,封装了uCOSII中的OSFlagPost函数。


(4)事件清零函数,封装了uCOSII中的OSFlagPost函数

(5)事件销毁函数,封装了uCOSII中的OSFlagDel函数


二、uCOSII中事件的使用

1 示例

    为了说明如何使用标志事件组实现任务与若干个事件同步,我们设计一个系统,当时间到且独立按健被按下过,让LED1闪耀一下。假设TaskLED为高优先级任务,三个任务的处理流程如图。

2 代码实现

(1)创建3个任务

分别创建3个任务,来管理Led的亮灭、按键的捕获和闲置延时消息的发送。



(2)按键任务

捕获按键,发送消息事件,标志位2置1



(3)Led任务

接收消息事件,两个任务都置1时,Led闪烁。



(4)闲置任务

定时发送消息事件,标志位1置1。



3 效果

当按键任务和闲置任务,都发送消息时,Led任务闪烁一次。

(1)串口信息

(2)MAPS-Dock


本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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