江门网站建设推广策划,免费下载android,大连本站运营公司,做企业宣传网站目的#xff1a;【1】用C实现一个超轻量化任务管理系统 【2】具有任务suspend, resume, runonce ,auto loop ,task_delay功能 【3】易于移植#xff0c;不涉及硬件底层。
示例例码#xff1a; 利用switch case结构实现了单一层的 task_delay功能。弊端就是switch..case不…目的【1】用C实现一个超轻量化任务管理系统 【2】具有任务suspend, resume, runonce ,auto loop ,task_delay功能 【3】易于移植不涉及硬件底层。
示例例码 利用switch case结构实现了单一层的 task_delay功能。弊端就是switch..case不能再做嵌套了只能使用if语句。其实也不是不能实现多层switch..case嵌套只是那样系统变的复杂。失去我原来的目的。 任务分为三种 auto: 自动循环执行 runonce: 运行完一次后自动注销 manual: 任务的起停由状态信号控制自动循环执行
引入面向对像化的handle句柄策略这样方便操作单前task参数。 Task1:使用宏代码实现的:Task_delay Task2:switch...case原始代码实现的: task_delay
/*-------------------------------------------------------MOS_Queue_Add(task1,_TASK_AUTO ,20,_TASK_RUN);MOS_Queue_Add(task2,_TASK_RUNONCE,30,_TASK_RUN);MOS_Queue_Add(task3,_TASK_AUTO ,40,_TASK_RUN);MOS_Queue_Add(task4,_TASK_RUNONCE,40,_TASK_STOP);MOS_Queue_Add(task5,_TASK_MANUAL ,40,_TASK_STOP);
--------------------------------------------------------*/void task1(TMos_QueuePtr handle)
{static int x0;
_MOS_BEGINx0;FnDSP_Sci.send_message( task-1-case0,true);MOS_Delay(20); //delay 20msFnDSP_Sci.send_message( task-1-case1,true);MOS_Wait_Until(x,1000,50);{x;FnDSP_Sci.Send_Lable_Value(x:,x);if (x10){FnDSP_Sci.send_message(task1-Break!!!,true);MOS_Wait_Break; //Break from the current Loop.}}Wait_Timeout{FnDSP_Sci.send_message(task1-timeout!!!,true);}//MOS_Wait_Next;FnDSP_Sci.Send_Lable_Value(wait finished:,x);
_MOS_END
}
//----------------------------------------------------//
void task2(TMos_QueuePtr handle)
{switch(handle-task.line_idx){case 0:FnDSP_Sci.send_message( task-2-case0,true);handle-task.timer_dt10;handle-task.line_idx1;handle-task.delay_flgtrue;break;case 1:FnDSP_Sci.send_message( task-2-case1,true);MOS_Set_Task(task4,_TASK_RUN);MOS_Set_Task(task5,_TASK_RUN);break;default:break;}
}
//----------------------------------------------------//
void task3(void)
{FnDSP_Sci.send_message( task-3,true);
}
//----------------------------------------------------//
void task4(void)
{FnDSP_Sci.send_message( task-4,true);
}
//----------------------------------------------------//
void task5(void)
{FnDSP_Sci.send_message( task-5,true);
}
运行结果 系统间隔为 1ms时钟进行状态机的标志刷新。整个状态机可以理解为一个由多模块组成的大循环但是又解决了平时循序执行时的 delay 死等的问题。 这样系统处理能力就得到一定的提高。转为task化管理系统更加结构化。 task-1-case0task-2-case0task-3task-4task-1-case1task-2-case1x:1 task-3task-5x:2x:3x:4x:5x:6 task-3x:7task1-timeout!!!wait finished:7 task-1-case0task-3task-1-case1
下一章待续。。。。