裸机系统与多任务系统

一、前言

为了方便理解和查阅本人所需的知识,在此做笔记。知识点来源书本与网络,如有侵权,联系删除。

二、裸机系统

裸机系统通常分为轮询系统和前后台系统。

2.1 轮询系统

在裸机编程时,先初始化相关的硬件,然后让主程序在一个死循环里不断循环,顺序地做各种事情。
轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

int main(void)
{
  /*硬件相关初始化*/
  HardWareInit();
  /*无限循环*/
  while(1)
  {
    DoSometing1();
    DoSometing2();
    DoSometing3();
  }
}

2.2 前后台系统

前后台系统在轮询系统的基础上加入了中断。
外部事件的响应在中断里面完成,事件的处理在轮询系统中完成。
中断称为前台,while(1)循环称为后台。
适合中小型系统。

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
  /*硬件相关初始化*/
  HardWareInit();
  /*无限循环*/
  while(1)
  {
    if(flag1)
    {
      DoSometing1();
    }
    if(flag2)
    {
      DoSometing2();
    }
    if(flag3)
    {
      DoSometing3();
    }
  }
}
void ISR1(void)
{
  /*置位标志位*/
  flag1=1;
  /*处理事件处理时间很短,在中断中处理
    处理事件处理时间较长,在回到后台处理*/
  DoSomething1();
}

三、多任务系统

多任务系统的时间响应也是在中断中完成,但事件的处理是在任务中完成的。
在多任务系统中,任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。
相比前后台系统,多任务系统的实时性又被提高了。

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
  /*硬件相关初始化*/
  HardWareInit();
  /*OS 初始化*/
  RTOSInit();
  /*OS启动,开始多任务调度,不再返回*/
  RTOSStart();
}
void ISR1(void)
{
  /*置位标志位*/
  flag1=1;
}
void DoSomething1(void)
{
  /*无限循环,不能返回*/
  while(1)
  {
    /*任务实体*/
    if(flag1)
    {

    }
  }
}
posted @ 2023-02-03 09:50  「后进生」  阅读(150)  评论(0)    收藏  举报