嵌入式应用之-任务进程框架

举报
内核笔记 发表于 2021/06/09 01:30:51 2021/06/09
【摘要】 程序框架 : 这里用到的是任务进程的思想 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。