常见的嵌入式软件体系结构

本文介绍常见的嵌入式软件体系结构。

在嵌入式开发过程中,尤其是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)利于扩展和移植。

开发建议:

可充分利用中断,操作系统事件,消息队列,信号量机制提高系统实时性。

有操作系统软件层次结构可参考如下图。

其中,

各层严格遵循上层调用下层的结构。

总结,本文介绍了常见的嵌入式软件体系结构。

相关推荐

  1. 嵌入软件测试

    2024-07-11 07:40:02       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 07:40:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 07:40:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 07:40:02       57 阅读
  4. Python语言-面向对象

    2024-07-11 07:40:02       68 阅读

热门阅读

  1. 在Linux上查找文件的2个好用的命令

    2024-07-11 07:40:02       24 阅读
  2. anaconda创建虚拟环境,指定路径

    2024-07-11 07:40:02       23 阅读
  3. npm、cnpm、pnpm、yarn的区别

    2024-07-11 07:40:02       22 阅读
  4. 使用标识符快捷登录远程SSH服务器

    2024-07-11 07:40:02       23 阅读
  5. ArcGIS Pro SDK (八)地理数据库 5 编辑

    2024-07-11 07:40:02       22 阅读
  6. 自动驾驶论文总结

    2024-07-11 07:40:02       27 阅读