嵌入式应用之-任务进程框架
【摘要】 程序框架 :
这里用到的是任务进程的思想
typedef struct // 主任务进程结构体
{
uchar RunInPowerON:1; //上电是否运行 uchar RunInPowerOFF:1; //掉电运行
uchar HaveSubTask:1; //是否有子任务,GOL_YES,GOL_no
uchar SubT...
程序框架 :
这里用到的是任务进程的思想
typedef struct // 主任务进程结构体
{
uchar RunInPowerON:1; //上电是否运行 uchar RunInPowerOFF:1; //掉电运行
uchar HaveSubTask:1; //是否有子任务,GOL_YES,GOL_no
uchar SubTaskNomb:5; ///子任务个数31个 PEFUNCTION RunTask;///运行的任务名称
UCEFUNCTION ConditLim; ///运行的条件限制 }STR_RUN_TASK_TAB;
这里就是定义了一个函数指针。
typedef void (*PEFUNCTION)(void);
typedef uchar (*UCEFUNCTION)(void);
//要想调用任务进程结构体就需要有一个索引指针。
//任务的指针变
typedef struct
{
uchar RunNO;
uchar SubTask[sizeof(RunTaskTab)/sizeof(STR_RUN_TASK_TAB)];
}STR_RUN_TASK_NO;
//分任务进程结构体。
typedef struct
{
PEFUNCTION SubTask; 子进程
}STR_RUN_SUB_TASK_TAB;
主函数调度:
main{
///初始化任务指针
InitilaRunTask();
while
if(GAL_YES==TmpRunTureOrFal) //主任务上下电运行条件满足 { //运行其他条件满足 if(RunTaskTab[TaskRunMode.RunNO].ConditLim()==GAL_YES) { //有子任务 if (RunTaskTab[TaskRunMode.RunNO].HaveSubTask==GAL_YES) { //运行子任务(把主任务表格中的地址+子任务指针的偏移就是需要运行任务的函数地址) ((((STR_RUN_SUB_TASK_TAB*)(((uchar*)RunTaskTab[TaskRunMode.RunNO].RunTask)+sizeof(PEFUNCTION)*TaskRunMode.SubTask[TaskRunMode.RunNO])))->SubTask)(); TaskRunMode.SubTask[TaskRunMode.RunNO]++; //子任务号最大限制值判断 if(TaskRunMode.SubTask[TaskRunMode.RunNO]>=RunTaskTab[TaskRunMode.RunNO].SubTaskNomb) { TaskRunMode.SubTask[TaskRunMode.RunNO]=0; } } else { RunTaskTab[TaskRunMode.RunNO].RunTask(); } } TaskRunMode.RunNO++;
//END of the task table
if(TaskRunMode.RunNO>=RunTaskTabSize(sizeof(RunTaskTab),sizeof(STR_RUN_TASK_TAB)))
{ TaskRunMode.RunNO=0;
}
文章来源: xuesong.blog.csdn.net,作者:内核笔记,版权归原作者所有,如需转载,请联系作者。
原文链接:xuesong.blog.csdn.net/article/details/78142536
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)