《SysDelay状态系统应用说明.docx》由会员分享,可在线阅读,更多相关《SysDelay状态系统应用说明.docx(3页珍藏版)》请在第壹文秘上搜索。
1、SysDeIay状态系统应用说明地址:https:一、好处:1、不受系统限制。2、不受硬件平台限制。3、资源占用小(每个线/协程基本功能小于44BYTERAM)。4、功能实用,多个线/协程协同工作CPU利用率最大化。5、具备线/协程定时器(无限扩充)。6、小巧嵌入任何有无系统设备中。7、提供方式目前以静态库*.a方式提供8、技持开发环境GCC,IAR,KElL等一、系统应用框架:1 .线程/协程格式此函数IMS打印一次intAction_Taskl(void*This)延时/信号/状态等待SysStart(This);while(1) SysDelay(This,l,NULL,NULL);pr
2、intf (,This: Action_Taskil- lrn);SysStop(Task);每个线/协程必须有开始每个线/协程必须有等待每个线/协程必须有结束2 .运行条件一个时钟信号一个循环调用void(*SysTimeSystick)(structTaskbj-n*ThisObj);void(*SysTaskLoop)(structTaskbj-n*ThisObj);3 .函数说明int(*SysTaskAdd)(structTaskbj-n*MainThis,Task_t*ThisObj);增加新任务void(*SysTaskLoop)(structTaskObj_n*ThisObj)
3、;循环调度void(*SysTimeSystick)(structTaskObj_n*ThisObj);系统基准时钟long(*SysGetTriggerSingnalMode)(structTaskObj_n*ThisObj);获得触发信号-1为时间触发void(*SysTimerAdd)(structTaskObj_n*ThisObj,Timers_t*uTimers);线程中开启定时器long(*SysGetTimer)(structTaskObj_n*ThisObj,Timers_t*uTimers);线程中获得定时器时间void(*SysTriggerSignal)(structTa
4、skbj-n*ThisOjb,longSingnal);线程中触发信号标志void(*SysTaskStop)(structTaskObj_n*ThisOjb,it(*Action)(void*This),longtim,SysTaskStopMode_emode);柱塞某个线程触发unsignedchar*(*SysGetVer)(structTaskObj_n*ThisObj);void(*CrossthreadingSySTriggerSignal)(Task_t*This,longSingnal);跨线程触发信号标志void(*CrossthreadingSysTaskSleep)(T
5、ask-t*This,longTim);long(*CrossthreadingGetTriggerSignal)(Task-t*This);跨线程获得该线程等待的信号信号标志void(*CrossthreadingTimerStart)(Task-t*This,Timers_t*uTimers);跨线程开启定时察long(*CrossthreadingGetTimer)(Task-t*This,longNum);跨线程获得定时器的值应用举例:Linux模拟#includeSysDelay.h#include#includeSysbj-tSysObjThisl;Task_tTask10;Tim
6、ers-tTasklTimers10;intAction_Taskl(void*This)SysStart(This);TasklTimers0.TimerMode=TimerUP-E;TasklTimers0.Timer=0;SysObjThis-SysTimerAdd(This,STasklTimers0);while(1)SysDelay(This,1000,1,NULL);printf(,ThiszAction-Taskil-lrn,);printf(Timers0:%ld,SysObjThis-SysGetTimer(This,STasklTimers0);)SysStop(Task
7、);)intAction_Task2(void*This)SysStart(This);while(1)SysDelay(This,1000,1,NULL);printf(ThiszAction-Taski2-lrn,);SysDelay(This,2000,1,NULL);printf(This:Action_Taski2-2rn);)SysStop(Task);)voidalarm_handle(intsig)SysobjThisosysTimeSystick(SysObjThis);单片机中此函数由定时器调用)voidset-time(void)structitimervalitv;it
8、v.it_interval.tv-sec=0;itv.it_interval.tv_usec=l;自动装载微值itv.it_value.tv_sec=0;itv.it_value.tv_usec=l;启动值1微秒Setitimer(ITIMER_REAL,&itv,NULL);)intmain()CreateSysObj(SysObjThis);Task.Action=Action_Taskl;SysbjThis-SySTaskAdd(SysObjThis,&Task0);Taskl.Action=Action-Task2;Sys0bjThis-SysTaskAdd(Sys0bjThis,8Taskl);signal(SIGALRM,alarm_handle);set_time();while(l)SysbjThis-SySTaskLoop(SysObjThis);循环调用)return0;)