ucosii之事件标志组管理
2012-05-04 08:49
274 查看
ucosii的事件标志组有2部分组成:一是用了保存当前事件组中各事件状态的一些标志;二是等待这
些事件标志位置位或清除的任务列表。
OSFlagWaitList 指针指向一个事件标志组的等待任务列表。
ucosii 定义了两个对等待任务列表的操作:添加节点OS_FlagBlock()和删除节点OS_FlagUnlink。
一个例子
些事件标志位置位或清除的任务列表。
OSFlagWaitList 指针指向一个事件标志组的等待任务列表。
ucosii 定义了两个对等待任务列表的操作:添加节点OS_FlagBlock()和删除节点OS_FlagUnlink。
一个例子
#include "includes.h" #define TASK_STK_SIZE 512 OS_STK StartTaskStk[TASK_STK_SIZE]; OS_STK MyTaskStk[TASK_STK_SIZE]; OS_STK YouTaskStk[TASK_STK_SIZE]; OS_STK HerTaskStk[TASK_STK_SIZE]; char*s1="MyTask is runing"; char*s2="YouTask is runing"; char*s3="HerTask is runing"; INT16S key; INT8U y=0; INT8U err; INT32U Times=0; OS_FLAG_GRP *Sem_F; void StartTask(void *data); void MyTask(void *data); void YouTask(void *data); void HerTask(void *data); /***************************************************/ void main(void) { OSInit(); PC_DOSSaveReturn(); PC_VectSet(uCOS,OSCtxSw); Sem_F=OSFlagCreate(0,&err); OSTaskCreate(StartTask, (void*)0, &StartTaskStk[TASK_STK_SIZE-1], 0); OSStart(); } /**********************************************************/ void StartTask(void *pdata) { #if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #endif pdata=pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08,OSTickISR); PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit(); OSTaskCreate(MyTask, (void*)0, &MyTaskStk[TASK_STK_SIZE-1], 3); OSTaskCreate(YouTask, (void*)0, &YouTaskStk[TASK_STK_SIZE-1], 4); OSTaskCreate(HerTask, (void*)0, &HerTaskStk[TASK_STK_SIZE-1], 5); for(;;) { if(PC_GetKey(&key)==TRUE) { if(key==0x1B) { PC_DOSReturn(); } } OSTimeDlyHMSM(0,0,3,0); } } /********************************************************/ void MyTask(void *pdata) { #if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #endif pdata=pdata; for(;;) { OSFlagPend(Sem_F, (OS_FLAGS)3,OS_FLAG_WAIT_SET_ALL, 0,&err); PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE); OSTimeDlyHMSM(0,0,2,0); } } /***************************************************************/ void YouTask(void *pdata) { #if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #endif pdata=pdata; for(;;) { PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_WHITE); OSTimeDlyHMSM(0,0,8,0); OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_SET,&err); OSTimeDlyHMSM(0,0,2,0); } } /************************************************/ void HerTask(void *pdata) { #if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #endif pdata=pdata; for(;;) { PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_WHITE); OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_SET,&err); OSTimeDlyHMSM(0,0,1,0); } }结果
相关文章推荐
- UCOS事件标志组管理笔记
- 对uC/OSII 事件标志管理的理解
- UCOS事件标志组管理笔记
- 从零开始学习UCOSII操作系统9--事件标志组
- ucosIII 事件标志组、同时等待多个内核对象、存储管理
- UCOSII操作系统之事件管理机制探究
- UC/OS II 事件标志组管理(一)
- ucosII的事件标志组的使用心得
- UC/OS II 事件标志组管理(二)
- ucosii学习 事件标志组
- 第九章 事件标志组管理
- Nginx学习之十-超时管理(定时器事件)
- 46、实例 使用jQuery管理事件之事件触发
- 4.0 事件管理数据结构
- outlook中“约会”、“事件”和“任务”的概念及论“时间管理
- SDUTOJ 2087 离散事件模拟-银行管理(队列)
- uC/OS事件标志组(event flag
- ASP.NET 页面基类设计—防止2次提交和事件统一管理
- Yii框架组件和事件行为管理详解
- PowerShell 2.0管理事件日志(一)查看和读取事件日志