打印
[应用方案]

嵌入式开发中的三种程序构架

[复制链接]
796|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mmbs|  楼主 | 2025-4-9 21:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。
软件架构对于开发人员是友好的,你希望先执行什么任务后执行什么任务,或者这一个时间点执行什么任务下一个执行什么任务,又或者什么事件会同步到某个任务等等,在不同的软件架构下,解决上述问题的具体方法都是有所区别的。软件架构对开发者最大的帮助是:
▲ 顺序执行前后台系统的主函数



▲ 顺序执行前后台系统的中断服务函数
这种架构的优点是使用简单易于理解,而缺点是每个任务所占的CPU时间过长的话,会导致程序的实时性能差,就比如按键的检测等。
2.2 时间片轮询系统
操作系统的本身是一个比较复杂的东西,任务的管理和调度实现的底层是很复杂和困难的。但是呢,我们一般都是把操作系统本身作为一个工具一个平台,我们的目的是使用它的功能而不是开发一个操作系统。
我使用过ucos和freertos小型的实时操作系统,也使用过Linux大型的操作系统,有了操作系统,不管是对于程序的稳定性和开发的效率都会好很多。我们在使用操作系统的时候更多的需要去学习和理解它的一些调度和通信的方式。
实际上真正能使用操作系统的人并不多,反而是跑裸机的占大多数,这也和产品的具体要求有关,很多简单的系统只需要裸机即可满足。
在这里本我不过多的介绍操作系统本身,因为操作系统确实挺复杂的,下面图例中的代码是在freertos中创建按键控制LED亮灭的程序结构,大家可以对比一下:



▲ freertos多任务系统中主函数



▲ freertos多任务操作系统中的任务回调函数
3、如何选择合适的软件架构
我使用过多种不同MCU做项目开发,例如:STM32、STC15、新唐等,也接触过复杂的设计需求,例如:车载智能系统和智能家居,跑过操作系统ucos、freertos和Linux等等,在回到裸机开发时,就会不然而然的去思考完整系统的软件架构的设计问题,相信在读者中开发裸机的也占大多数。
我认为没有最好的软件架构(程序架构),而是只有最合适的。因为在不同的应用场景中适合采用不同的程序设计,而单纯的去比较哪种程序架构是最好的没有什么实际的意义。
那接下来我们来对具体的应用场景进行分析,在一些逻辑清晰功能单一的系统中就很适合选择顺序执行的前后台架构,这个软件架构往往能够满足我们大部分的需求,比如电饭煲、电磁炉和声控灯泡等;
而在一些资源缺乏的单片机并且对系统可靠性要求较高的情况下非常适合,因为这种方法的系统耗费比较小,只是牺牲了一个定时器而已,但是选择此种程序架构需要我们对时间片进行深思熟虑的划分;

使用特权

评论回复
沙发
beacherblack| | 2025-4-17 21:16 | 只看该作者
结构简单,易于理解和实现,代码量少,对硬件资源的要求较低,适用于对系统复杂度和实时性要求不高的简单嵌入式系统。

使用特权

评论回复
板凳
chenci2013| | 2025-4-17 22:30 | 只看该作者
不需要复杂的机制来管理任务切换或优先级处理。

使用特权

评论回复
地板
janewood| | 2025-4-17 23:00 | 只看该作者
前后台系统是最简单的嵌入式软件架构之一。在这种架构中,前台负责处理实时事件和中断,而后台则执行非实时的任务。这种架构的优点是简单易懂,但在处理多个任务时可能会遇到优先级和抢占的问题。

使用特权

评论回复
5
everyrobin| | 2025-4-20 10:58 | 只看该作者
时间片轮询法              

使用特权

评论回复
6
robertesth| | 2025-4-20 12:37 | 只看该作者
​​单任务循环 + 中断驱动              

使用特权

评论回复
7
zerorobert| | 2025-4-20 12:48 | 只看该作者
复杂的嵌入式系统              

使用特权

评论回复
8
timfordlare| | 2025-4-20 14:12 | 只看该作者
使用实时操作系统(RTOS)管理多个任务,任务具有优先级,调度器根据优先级和时间片分配CPU时间。

使用特权

评论回复
9
hearstnorman323| | 2025-4-20 14:30 | 只看该作者
多任务操作系统具有高度的灵活性和可扩展性,能够处理复杂的任务和大量的数据。然而,它的复杂度也较高,需要更多的系统资源和开发经验来实现和维护。

使用特权

评论回复
10
tifmill| | 2025-4-20 14:49 | 只看该作者
时间片轮询系统提高了程序的实时性和响应性,因为它允许后台任务在需要时立即得到处理。然而,它仍然存在一定的局限性,例如难以处理复杂的任务调度和优先级管理。

使用特权

评论回复
11
averyleigh| | 2025-4-20 15:01 | 只看该作者
见的三种程序架构分别是前后台系统(轮询系统)、多任务系统(基于实时操作系统,RTOS)和事件驱动系统。

使用特权

评论回复
12
zerorobert| | 2025-4-20 15:28 | 只看该作者
主程序持续循环执行,负责处理系统的主要任务;而中断服务程序则在特定的中断事件发生时被触发,用于处理紧急的外部事件。

使用特权

评论回复
13
pmp| | 2025-4-20 15:56 | 只看该作者
轮询架构可能是最直接的选择。              

使用特权

评论回复
14
minzisc| | 2025-4-20 16:09 | 只看该作者
支持多个任务(Task)并发执行,通过​​抢占式调度​​或​​协作式调度​​分配CPU时间。

使用特权

评论回复
15
louliana| | 2025-4-20 16:21 | 只看该作者
相比前后台系统架构,循环队列轮询架构能够更好地管理任务,提高了系统的可维护性和扩展性。通过队列的方式,可以方便地添加、删除和调整任务的执行顺序。

使用特权

评论回复
16
backlugin| | 2025-4-20 16:42 | 只看该作者
嵌入式开发中的三种程序构架主要包括顺序执行的前后台系统、时间片轮询系统和多任务操作系统。

使用特权

评论回复
17
iyoum| | 2025-4-20 17:02 | 只看该作者
由于没有操作系统开销,内存和处理器资源使用较低。

使用特权

评论回复
18
janewood| | 2025-4-20 17:22 | 只看该作者
RTOS 还提供了丰富的系统服务和接口,方便开发者进行应用程序的开发和维护。

使用特权

评论回复
19
i1mcu| | 2025-4-20 17:36 | 只看该作者
中断驱动架构依赖于硬件中断来通知系统某个事件已经发生,而不是持续地检查状态。

使用特权

评论回复
20
1988020566| | 2025-4-20 17:51 | 只看该作者
常见的程序架构有三种,分别是前后台系统架构、循环队列轮询架构和实时操作系统

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

6758

帖子

3

粉丝