打印
[其他ST产品]

嵌入式软件分层和模块化

[复制链接]
1110|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-12-5 09:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
嵌入式开发,除了掌握基本的编程语法之外,编程的思想也是很关键,下面说两点编程思想。


1分层思想嵌入式分层思想,可能你不懂,但你肯定见到过很多类似下面这样的软件结构图。
比如,RT-Thread Nano内核结构:


STM32Cube软件结构:


这种软件结构图,里面的东西可能有点多,可能你也看不懂。
但是,只要你仔细一看每个区域的划分,你就会发现,它们是把软件划分了多个区域,这里其实就是一种分层的思想。
举一个例子:一个遥控器控制一个小车运动,包含遥控器的按键(比如:前后左右),无线通信(比如:433),小车无线接收,电机驱动、电机控制算法等。
遇到这种嵌入式软件开发,你会怎么编程?
1.底驱动小车部分:电机驱动(比如IO时钟、PWM配置)封装成一个函数、433驱动封装成一个函数。然后把这两个函数整理在一个Driver(驱动)函数。
遥控部分同理:按键驱动(比如IO时钟、配置)封装成一个函数、433驱动封装成一个函数。
2.中间层这里比如你电机用到了加减速、左右转向的一些算法,封装成对应Middleware中间层模块函数(待应用层调用)。

3.应用层应用层就考验你业务逻辑的一层,也是整合软件资源的一层。如果你代码层次画分的话,业务逻辑代码就很容易。

反之,你代码很乱,要实现一个业务逻辑,可能连续加班多天,最后写出来的代码也是bug无数。

2模块化嵌入式编程,模块化相当重要,可以说,它会影响你代码质量、加班多少、甚至升职加薪。
还是上面那个例子:一个遥控器控制一个小车运动,包含遥控器的按键(比如:前后左右),无线通信(比如:433),小车无线接收,电机驱动、电机控制算法等。
如果你把所有代码都写在main函数,你说能实现吗?当然,肯定也能实现。

但是,你这样写,你的业务逻辑代码是不是很废脑、很费时间?
还有,你后续加修改按键方式、添加功能,你该怎么办?

所以,你需要模块化编程,把一些小模块分别封装成函数,提供给对应的应用层调用。
上面其实也说了:电机驱动(比如IO时钟、PWM配置)封装成一个函数,这其实就是一个小模块。
当然,这里的驱动函数只是一个小模块,然后还需要进一步封装成“大模块”。
比如:我这里还引入一个编码器,闭环检测电机速度,通过底层电机驱动、加减速算法,编码器等整合成一个电机运动的函数(模块):MOTOR_Ctrl(速度,方向)。这就是一个大模块(当然,还可以结合需求再进一步封装)。
最后,还有很多重要的编程思想,需要开发者了解并掌握,在一定程度上,你的编程思想决定了你是新手级别,还是大神级别


使用特权

评论回复
沙发
MessageRing| | 2022-12-6 13:52 | 只看该作者
模块化移植起来确实挺方便

使用特权

评论回复
板凳
LLGTR| | 2022-12-6 14:03 | 只看该作者
分层思想,是开发必备的,不管是软件开发还是单片机开发。

使用特权

评论回复
地板
Stahan| | 2022-12-6 15:18 | 只看该作者
高内聚低耦合是合格程序

使用特权

评论回复
5
Henryko| | 2022-12-6 15:45 | 只看该作者
编程思想很重要

使用特权

评论回复
6
天天向善| | 2022-12-6 16:21 | 只看该作者
最主要的就是驱动层的代码,这样非常方便移植!

使用特权

评论回复
7
Bowclad| | 2022-12-6 18:19 | 只看该作者
驱动代码写起来真是麻烦

使用特权

评论回复
8
Undshing| | 2022-12-6 19:27 | 只看该作者
模块分别封装成函数,提供给对应的应用层调用

使用特权

评论回复
9
AloneKaven| | 2022-12-6 20:07 | 只看该作者
模块化编程是一个程序的基础

使用特权

评论回复
10
MessageRing| | 2022-12-7 18:45 | 只看该作者
减少各个模块之间的关联性

使用特权

评论回复
11
公羊子丹| | 2024-10-21 07:01 | 只看该作者

主电路那些环路产生的噪声会加到控制信号上

使用特权

评论回复
12
万图| | 2024-10-21 08:04 | 只看该作者

多次检查也会给单片机带来负荷,对功耗不利

使用特权

评论回复
13
Uriah| | 2024-10-21 09:07 | 只看该作者

在GR-SAKURA中,从IO30引脚到IO35引脚接收来自外部的中断信号

使用特权

评论回复
14
帛灿灿| | 2024-10-21 11:03 | 只看该作者

在掌握对象的变化频度时是有效的

使用特权

评论回复
15
Bblythe| | 2024-10-21 12:06 | 只看该作者

中断信号直接从各外部设备通知中断控制器

使用特权

评论回复
16
周半梅| | 2024-10-21 14:02 | 只看该作者

通过交流电源插头从产品中流走

使用特权

评论回复
17
Pulitzer| | 2024-10-21 15:05 | 只看该作者

来自单 片机内部的定时器和GPIO、串行通信设备UART等外设机器的中断被称为外部设备中断

使用特权

评论回复
18
童雨竹| | 2024-10-21 17:01 | 只看该作者

交流电压在发射EMI

使用特权

评论回复
19
Wordsworth| | 2024-10-21 18:04 | 只看该作者

中断产生于单片机内部和外部的各种设备

使用特权

评论回复
20
Clyde011| | 2024-10-21 19:07 | 只看该作者

这样的设定只需在setup()中定义一次便能在整个程序中有效

使用特权

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

本版积分规则

1510

主题

4547

帖子

6

粉丝