1.6 嵌入式操作系统的使用
操作系统是什么?能完成什么样的功能?这在人们的印象中并不陌生,然而嵌入式初学者不禁要问:为什么嵌入式系统需要操作系统?在大多数工程师脑海里,好像操作系统只是PC上的事情。对于很多处理器,如单片机、DSP等,运行类似Windows的操作系统是不可思议的事情,而且好像也没有必要,系统只需要在加电或者复位后,从0地址执行程序,再加上一些必不可少的中断即可。
对于简单的硬件和任务,确实不需要专用的操作系统,实际上工程师在写软件时已经把应用程序和操作系统结合到了一起。任何程序都是先进行各种初始化(相当于操作系统),然后再执行应用程序。然而随着系统的复杂程度和用户需求的提高,就可能需要一个操作系统来完成诸如内存管理、多任务管理、周边资源的管理等工作,以使程序员能够专注于系统的功能和应用的开发。
我们下面讨论一个例子:要在一个ARM上开发一个TCP/IP网络,是否可以不用操作系统?答案当然是可以的,但会很困难,而且开发出来的程序面临稳定性差、移植困难等问题,可以想到TCP/IP网络遇到的常见问题:
● 必须随时“知道”网络数据是否进入了目标平台;
● 必须随时“知道”用户是否打算停止数据的传输;
● 必须随时“知道”某个网络状态是否超时。
不必说用户打开两个以上的浏览器,单就上述三个问题,如果没有操作系统,只有程序员去检查这些状态,就已经是一项非常可怕的事情了。如果要对这个程序进行移植,则是每个程序员都想回避的事情,更不必说系统中有USB、声卡等的情况了。但是,如果采用操作系统,这一切就会变得很简单,这相当于把应该由原来程序员做的事情进行了分解,产生了操作系统程序员和应用程序程序员。很明显,采用操作系统使得系统的设计和开发变得简捷和容易,加快了开发速度。
小资料
说到嵌入式操作系统,我们就有必要先来谈谈操作系统的发展史。
早期的计算机没有操作系统。用户有单独的机器,他(她)会带着记录有程序和数据的卡片(Punch Card)或较后期的打孔纸带去操作机器。程序读入机器后,机器就开始工作直到程序停止。由于程序难免有误,所以机器通常都会中途崩溃。程序一般通过控制板的开关和状态灯来调试。据说图灵能非常熟练地用这种方法操作Manchester Mark I机器。
后来,机器引入帮助程序输入、输出等工作的代码库,这是现代操作系统的起源。然而,机器每次只能执行一个任务。在英国剑桥大学,这些任务的磁带从前是排成一排挂在衣钩上的,用衣钩的颜色代表任务的优先级。
概念意义上的操作系统和通俗意义上的操作系统差距越来越大。为了方便,通俗意义上的操作系统把最普通的包和应用程序的集合包括在操作系统内。随着操作系统的发展,一些功能更强的“第二类”操作系统软件也被包括进去了。在今天,没有图形界面和各种文件浏览器的操作系统已经不能称为一个真正的操作系统了。