嵌入式软件开发常用的三种架构

1、前后台顺序执行法

这是初学者常用的程序设计方案,不用考虑太多东西,代码简单,对系统是整体实时性和并发性要求不高。初始化后通过while(1){}或for(;;){}循环不断调用自己编写完成的函数,也基本不考虑每个函数执行所需要的时间,大部分情况下函数中都存在毫秒级别的延时等待

优点:对于初学者来说,这是最容易也是最直观的程序架构,逻辑简单明了,适用于逻辑简单,复杂度低的软件开发。

缺点:实时性低,由于每个函数或多或少存在毫秒级别的延时,即使是1ms,也会造成其他函数间隔执行时间的不同,虽然可通过定时器中断的方式,但是前提是中断执行函数花的时间必须短。

2、时间片论法

介于前后台顺序执行法和操作系统之间的一种程序架构设计方案。在嵌入式开发过程中,若遇到以下几点,那么该设计方案可以说是最优选择,适用于程序较为复杂的嵌入式系统。

  • 目前的需求设计需要完全没有必要上操作系统。
  • 任务无需时刻执行,存在时间间隔(比如按键,一般情况下,都需要软件防抖,初学者的做法通常是延时10ms左右再去判断,但10ms极大浪费了CPU资源,在这段时间内CPU完全可以处理很多其他事情)。
  • 实时性有一定要求。

该设计方案需要一个定时器,一般情况下定时1ms即可(定时时间可以随意定,但中断过于频繁效率低,中断太长,实时性差),因此考虑到每个任务函数的执行时间,建议不能超过1ms(能通过程序优化缩短执行时间则最好优化,如果不能优化的,则必须保证该任务的执行周期必须远大于任务所执行的耗时时间),同时要求主循环或者任务函数中不能存在毫秒级别的延时。

“如何确定每个函数的任务周期呢?根据任务的耗时和效果决定、如按键扫描任务周期为 10ms(为了提高响应),指示灯控制任务周期为 100ms(通常情况下最高100ms的闪烁频率正好,特殊需求除外),LCD/OLED 显示周期为 100ms(通过这种通过SPI/IIC等接口的方式耗时大约在 1~10ms,甚至更长,所以任务周期必须远大于耗时,同时为了满足人眼所能接受的刷屏效果,也不能太长,100ms 的任务周期比较合适)等。”

3、操作系统

嵌入式操作系统EOS(Embedded OperatingSystem)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域,而对于单片机来说,比较常用的有UCOS、FreeRTOS、RT-Thread Nano和RTX 等多种抢占式操作系统(其他如Linux等操作系统不适用于单片机)

操作系统和“时间片论法”,在任务执行方面来说,操作系统对每个任务的耗时没有过多的要求,需要通过设置每个任务的优先级,在高优先级的任务就绪时,会抢占低优先级的任务;操作系统相对复杂,因此这里没有详细介绍了。

关于如何选择合适的操作系统(uCOS、FreeRTOS、RTThread、RTX等)实时操作系统:

uCOS:网上资料丰富,非常适合学习,产品上需要收费。
FreeRTOS:使用免费,很多产品都在用。
RT-Thread:国产物联网操作系统,有着十分丰富的组件,也免费,资料:RT-Thread文档中心。
RTX:为ARM和Cortex-M设备设计的免版税,确定性的实时操作系统。
 

你可能感兴趣的:(单片机,嵌入式硬件)