1.1:嵌入式软件的特点
嵌入式软件除了具有计算机软件的一般特性外,还具有一些与嵌入式系统特性密切相关的特点。因此,嵌入式系统与通用计算机软件有所不同:
1:软件与硬件一体化,软件固化存储。
在嵌入式系统中,操作系统和应用系统集成与计算机硬件系统中,系统软件、应用软件和系统的硬件一体化,我们为了提高系统的启动、执行速度和系统的可靠性,嵌入式系统一般都固化与半导体存储器中,也大可以认为是压缩后存储在内存之中,而不会存储与磁盘等外存储器之中。
2:软件代码时空效率要求高,实时性要求高。
3:软件的应用环境复杂,开发的难度大。
4:软件具有较长的生命周期。
1.2:嵌入式系统的软件结构
1:简单的轮询(Round-Robin)结构
最简单的软件结构就是轮询结构,其工作原理就可以类比高级语言中C语言的for循环,重复循环检查每个外部输入条件,一旦有需要或者说是达到标准的任务时,就进行相关的处理。
//初始化
while(TRUE)
{
if(I/O设备1需要服务);//执行设备1服务函数
if(I/O设备2需要服务);//执行设备2服务函数
if(I/O设备3需要服务);//执行设备3服务函数
if(I/O设备4需要服务);//执行设备4服务函数
... ...
if(I/O设备n需要服务);//执行设备n服务函数
}
2:带中断的轮询结构
这种结构在简单的轮询结构的“主循环”基础上增加中断服务程序(ISR)
BOOL SA=FALSE; //A状态标志初值 BOOL SB=FALSE; //B状态标志初值 ... ... //事件A中断服务程序 { 事件A紧急操作; SA=TRUE; } //事件B中断服务程序 { 事件B紧急操作; SB=TRUE; } ... ... void main(void) { while(TRUE) { if(SA) { SA=FALSE; 事件A非紧急操作; } if(SB) { SB=FALSE; 事件B非紧急操作; } .... ... } }
3:监控式操作系统+应用软件结构
事件B中断服务程序
{
事件B紧急操作;
发送信号T;
}
......
void task1( void)
while(TRUE){
等待信号S; 事件A非紧急操作;
}
}
1.3:引导加载程序
1.3.1:引导加载程序的概念和功能
引导加载程序(引导程序)bootloader是底层软件的一部分。嵌入式系统上电复位后首先运行引导加载程序,它负责系统的上电自检、硬件初始化、建立存储空间映射、配置系统参数、建立上层软件的运行环境,并加载和启动操作系统。
1.3.2:嵌入式操作系统的加载方式
1):在Rom中直接运行操作系统代码
2):在Ram中运行操作系统代码
3):从外存储器加载操作系统代码运行
4):从通信端口加载操作系统代码(下载)