浅析基于单片机的大型项目为何要引入操作系统

单片机相关 徐 自远 393℃

浅析基于单片机的大型项目为何要引入操作系统

原创 爱上半导体 2018-11-13 19:35:06

通常初学单片机的同学们,都是直接操作寄存器,控制IO高低电平变化,及配置中断处理函数,能够完成一个项目,一个产品,似乎操作系统并非那么重要。但是随着项目复杂程度越来越高,初学时的裸机编程已难以满足程序需要完成多样化任务的管理和调配,此时需要引入操作系统,对任务统一调度。

举个栗子,裸机编程,我们的代码结构通常如下:

while(1)

 A();

 B();

 ...

C();

而程序段A();B();C();中还存在各类时间长短不一的delay()函数,导致大循环周期过长,任务占用CPU时间过长,while(1)大循环中囊括的任务种类较少,尚且能够顺畅的运行,如果任务种类增加到了1000、10000、甚至千万数量级,那么此种程序结构会使cpu运行很卡,卡的让你想把它挫骨扬灰的冲动。这是便要换种思路调整程序结构,这就是我们所说的操作系统。此时引入三个概念:任务ID、消息、事件。

任务ID,其实就是一个全局数组变量,根据操作系统能够处理的最大任种类而定,比如,你想处理255种任务,你可以这样定义:

char taskID=255;

taskID的取值为0-255,每个数字代表一类任务,初值为255,可代表空闲状态。当前执行什么任务,便改变taskID为相应的数值,这个可以通过中断来实现。比如,现在我想通过敲击键盘,另屏幕显示相应的字符,可以通过键盘触发相关外部中断,进入中断函数后判断键盘的按下使得哪些IO口置0,由此判断该给taskID附何值,中断函数代码如下:

X() interrupt i //i为中断编号。

 if(!P0^0&&!P1^0)

taskID = 0;

此时,当中断返回后,taskID变为0,接下来执行大循环代码如下:

while(1)

 switch(taskID)

 case0:

 A();

 break;

 case 1:

 B();

 break;

 case 2:

 C();

 break;

 ...

 case 255:

 break;

 }

如此一来,程序运行的效率得到很大改善,由键盘敲击触发的中断叫做消息,而引发的taskID改变叫做事件。这是最原始的操作系统思想,但并非最完美最高效,因而后来引入了进程和线程的概念,预知其中玄妙,且听下回分析。

 

浅析基于单片机的大型项目为何要引入操作系统http://t.jinritoutiao.js.cn/RXnyDw/

转载请注明:徐自远的乱七八糟小站 » 浅析基于单片机的大型项目为何要引入操作系统

喜欢 (0)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号