烽火社区

标题: 【MAPS四色板试用】14 飞思卡尔四色板:uCOSII事件操作 [打印本页]

作者: qjf    时间: 2016-3-13 03:26 PM
标题: 【MAPS四色板试用】14 飞思卡尔四色板:uCOSII事件操作


一、 uCOSII事件封装

1 事件概念

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

    

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

[attach]30656[/attach]

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函数。

[attach]30657[/attach]


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

[attach]30658[/attach]


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

[attach]30659[/attach]


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

[attach]30660[/attach]

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

[attach]30661[/attach]


二、uCOSII中事件的使用

1 示例

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

2 代码实现

(1)创建3个任务

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

[attach]30663[/attach]


(2)按键任务

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

[attach]30664[/attach]


(3)Led任务

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

[attach]30665[/attach]


(4)闲置任务

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

[attach]30666[/attach]


3 效果

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

(1)串口信息

[attach]30667[/attach]

(2)MAPS-Dock

[attach]30668[/attach]







欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2