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