当前位置: 首页 > 科技观察

软件架构的意义

时间:2023-03-19 23:48:39 科技观察

在嵌入式软件开发中,包括单片机开发,软件架构是开发者必须认真考虑的问题。软件架构对系统的整体稳定性和可靠性非常重要。一个合适的软件架构不仅结构清晰,而且易于开发和维护。相信在早期的嵌入式或者单片机软件开发中,大部分开发者都是采用简单的前后端顺序执行架构(我就是这样做的)。在嵌入式软件开发中,程序架构主要分为三种类型。本文将详细讲解这三种程序架构。软件架构的含义可以说,一个好的程序架构是有经验的工程师和新手的分水岭。软件架构对开发者友好。你想先执行什么任务,然后执行什么任务,或者这个时间点执行什么任务,或者某个任务会同步什么事件等等,在不同的软件架构下,具体方法解决上述问题的方法各不相同。软件架构对开发者最大的帮助就是帮助开发者控制整个项目的框架。当你熟练使用其中一种程序架构时,你将能够快速定位和解决系统中的错误。当然我建议大家根据自己的需要选择合适的软件架构进行开发。具体原因会在文章后面介绍。介绍三种不同的程序架构常用的三种软件架构是:顺序前后端系统时间片轮询系统多任务操作系统为了让大家有一个更清晰的认识,我用三种软件架构来分析一个例子是介绍。本例如下:它有4个任务,这4个任务分别是按键扫描、声光报警、显示屏刷新、超声波测距。本例的具体功能是通过按键设置测量距离的阈值。当距离低于设定的阈值时,会触发声光报警,测量距离会实时显示在显示屏上(本应用为汽车倒车雷达的具体体现)。1.顺序执行的前后端系统在顺序执行的前后端系统中,我将键盘扫描放在while(1)中以查询的方式,同时屏幕刷新和超声波测距使用中断,在中断服务函数中获取到测量距离后进行显示,在主函数的循环中检测按键,声光处理也放在主循环中。这样整个程序在主循环和后台中断同步执行,标志位可变。对应的程序代码如图:前后台系统的main函数依次执行,前后台系统的中断服务函数依次执行。这种架构的优点是使用简单,容易理解,缺点是如果每个任务占用的CPU时间过长,会导致程序实时性差,比如按键检测。2、时间片轮询系统和多任务操作系统时间片轮询方式通常出现在操作系统中,也就是说属于操作系统,但这里说的是基于前后端的时间片轮询系统。时间片轮询方式的本质是选择一个定时器,在没有计划中断的情况下递增计数值,并在主循环中根据这个计数值执行任务。这个计数值也是任务轮询的时间片。本例中,如果采用时间片轮询系统,首先选择主控芯片的任意一个定时器,定时器的计时周期由我们决定。为了保证实时性和运行效率,这个值通常取10ms、30ms、50ms等,我将按键扫描旋转值设置为20ms,因为按键晃动的持续时间一般为20ms,这样处理可以达到消除抖动的目的,不会遗漏按键的检测;并且显示刷新设置为30ms,如果觉得刷新响应慢,也可以修改轮询值来改善;而超声波测距的轮询值设置为100ms,即每100个模式触发一次测距,这个测距频率可以满足大多数情况。程序代码如下:时间片轮询系统的主要功能时间片轮询系统的定时器中断函数可见,时间片轮询方式比顺序执行有很大的优势。它既有顺序执行的优点,又有运行系统的一些优点。3、多任务操作系统操作系统本身就是一个比较复杂的东西,底层的任务管理和调度是非常复杂和困难的。但是,我们一般把操作系统本身看成一个工具,一个平台,我们的目的是使用它的功能,而不是开发一个操作系统。我用过ucos和freertos小型实时操作系统,也用过linux大型操作系统。有了操作系统,无论是程序的稳定性,还是开发的效率都会好很多。我们在使用操作系统的时候,需要学习和了解它的一些调度和通信方式。其实,真正会用操作系统的人并不多。相反,大多数在裸机上运行。这也与产品的具体要求有关。很多简单的系统只需要裸机就可以满足。这里就不过多介绍操作系统本身了,因为操作系统真的很复杂。下图中的代码是在freertos中创建一个程序结构,通过按键来控制LED的亮灭。可以对比一下:Functionfreertos多任务操作系统中的任务回调函数如何选择合适的软件架构我用过各种不同的MCU进行项目开发,比如:STM32、STC15、Nuvoton等,也被接触到复杂的设计需求,例如:车载智能系统和智能家居,运行操作系统ucos、freertos和Linux等。当回到裸机开发时,你会不自觉地去思考整个系统的软件架构设计。相信广大读者都是裸机开发的。我认为没有最好的软件(程序)架构,只有最适合的软件架构。因为不同的程序设计适用于不同的应用场景,简单地比较哪种程序架构最好是没有意义的。那么我们来分析一下具体的应用场景。在一些逻辑清晰、功能单一的系统中,很适合选择顺序执行的前后端架构。这种软件架构往往可以满足我们的大部分需求,比如电饭煲、电磁炉和声控灯泡等;非常适合一些资源匮乏,对系统可靠性要求高的单片机,??因为这种方式的系统开销比较小,而且只牺牲了一个定时器,但是选择这种程序架构需要我们仔细划分时间片;最后,在一些功能复杂、逻辑控制困难的系统中,适合选择多任务操作系统,比如视频监控系统、无人机等应用场景。作为一名嵌入式软件工程师,掌握这三种软件架构是非常有必要的。它们让我们在设计程序时有更多的选择和思考,每一种不同的程序架构都有自己的优势。而不足之处,这就需要我们去苦练才能体会到它的奥妙。