一、 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 |