裸机系统与多任务系统7.23

裸机系统与多任务系统

1、裸机系统

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

(1)轮询系统

轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。

轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

轮询系统伪代码如下所示:

int main(void){
  /* 硬件相关初始化 */
  HardWareInit();

   /* 无限循环 */
   for (;;) {
    /* 处理事情 1 */
    DoSomething1();

  /* 处理事情 2 */
    DoSomething2();

  /* 处理事情 3 */
    DoSomething3();
  }
}

(2)前后台系统

相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main 函数里面的无限循环我们称为后台。

前后台系统伪代码如下所示:

int flag1 = 0;
int flag2 = 0;
int main(void){
/* 硬件相关初始化 */
HardWareInit();
/* 无限循环 */
for (;;) {
	 if (flag1) {
    	/* 处理事情 1 */
  	  DoSomething1();
	  }
	 	if (flag2) {
  		  /* 处理事情 2 */
   		 DoSomething2();
	   }
   }
}

void ISR1(void) {
/* 置位标志位 */
flag1 = 1;
 /* 如果事件处理时间很短,则在中断里面处理
  如果事件处理时间比较长,在回到前台处理 */
   DoSomething1();
}

void ISR2(void) {
/* 置位标志位 */
flag2 = 1; 
/* 如果事件处理时间很短,则在中断里面处理
如果事件处理时间比较长,在回到前台处理 */
DoSomething2();
}

在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。

2、多任务系统

相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。

​ 在多任务系统中,任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的任务的优先级足够高,就会立马得到响应。

多任务系统伪代码如下所示:

int flag1 = 0;
int flag2 = 0;
int main(void){
/* 硬件相关初始化 */
HardWareInit();
/* OS 初始化 */
RTOSInit();    
/* OS 启动,开始多任务调度,不再返回 */
RTOSStart();
}

void ISR1(void) {
 /* 置位标志位 */
  flag1 = 1;
}

void ISR2(void){
/* 置位标志位 */
flag2 = 2;
}

void DoSomething1(void){
/* 无限循环,不能返回 */
for (;;) {
   /* 任务实体 */
   if (flag1) {    
   }
}
}

void DoSomething2(void){
/* 无限循环,不能返回 */
for (;;) {
   /* 任务实体 */
   if (flag2) {
   }
}
}

相比前后台系统中后台顺序执行的程序主体,在多任务系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为任务。

​ 每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。加入了操作系统,我们的编程反而变得简单了。整个系统随之带来的额外开销就是操作系统占据的那一丁点的 FLASH 和 RAM

轮询、前后台和多任务系统软件模型区别

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值