本文介绍常见的嵌入式软件体系结构。
在嵌入式开发过程中,尤其是MCU为主控的项目开发中,实时性是需要考虑的重要因素,本文介绍常见的2种嵌入式软件体系结构,并对其优缺点作简要分析,另外,还对它们的软件层次结构做了简要介绍。
1.无操作系统
1)轮询系统
将系统功能分解称若干个不同的任务,将其放置在一个无限循环中,按顺序循环执行。其伪代码如下。
int main(void)
{Hardware_Init();Task_Init();while (1){Task1();Task2();Task3();}return 0;
}
优点:
结构简单。
缺点:
实时性差。任务需延迟一个轮询周期才被执行,若其他任务耗时比较长,则任务无法及时处理某些事件。
开发建议:
可配合状态机和消息队列提高系统实时性
2)前后台系统
在轮询系统基础上增加了中断。其中前台为中断服务程序,后台为无限循环中的任务。为了避免中断占用过多时间而影响到其他中断(不复杂的也可以直接在中断中处理),一般在中断服务程序中置位相应标志位,而在无限循环任务中查询标志位再进行处理。其伪代码如下。
int main(void)
{Hardware_Init();Task_Init();while (1){Task1();Task2();Task3();}return 0;
}void Timer1_ISR(void)
{}
优点:
相比轮询系统改善了实时性。任务通过检查是否具备执行条件(标志位),避免轮询系统反复查询耗时,对实时性要求比较高的操作也可以直接在中断中执行。
缺点:
实时性较差。任务执行仍需延迟一个轮询周期才被执行(检查),若其他任务耗时比较长,则任务无法及时处理某些事件。
开发建议:
可配合状态机和消息队列提高系统实时性
无操作系统软件层次结构可参考如下图。
其中,
1)应用层即无限循环中的任务。
2)组件层是对驱动层的再封装。如读写EEPROM会用到GPIO,I2C总线这些驱动层的东西,将EEPROM器件放在组件层,它是对驱动层的再封装。
3)有时为了提高实时性,允许应用层直接操作驱动层。封装会增加函数调用,从而增加系统开销。
2.有操作系统
应用程序不再直接面向硬件开发,而在操作系统的基础上编写。
优点:
1)具有高实时性。
2)提高了开发效率,缩短了开发周期。
3)利于扩展和移植。
开发建议:
可充分利用中断,操作系统事件,消息队列,信号量机制提高系统实时性。
有操作系统软件层次结构可参考如下图。
其中,
各层严格遵循上层调用下层的结构。
总结,本文介绍了常见的嵌入式软件体系结构。