有网友问:单片机小项目,有必要做分层设计吗?
这个问题,主要看项目本身,以及公司管理。小项目,是有多小?公司对项目的管理是否看重?
正规一点的公司,从长远的角度来说,很有必要做好软件分层设计。下面就简单说两点编程分层的思想。
分层思想
嵌入式分层思想,可能初学者不太懂,但你肯定见到过很多类似下面这样的软件结构图。
比如,rt-thread nano内核结构:
stm32cube软件结构:
这种软件结构图,里面的东西可能有点多,可能你也看不懂。 但是,只要你仔细一看每个区域的划分,你就会发现,它们是把软件划分了多个区域,这里其实就是一种分层的思想。
举一个例子:一个遥控器控制一个小车运动,包含遥控器的按键(比如:前后左右),无线通信(比如:433),小车无线接收,电机驱动、电机控制算法等。
遇到这种嵌入式软件开发,你会怎么编程?
1.底层驱动层小车部分:电机驱动(比如io时钟、pwm配置)封装成一个函数、433驱动封装成一个函数。然后把这两个函数整理在一个driver(驱动)函数。
遥控部分同理:按键驱动(比如io时钟、配置)封装成一个函数、433驱动封装成一个函数。
2.中间层这里比如你电机用到了加减速、左右转向的一些算法,封装成对应middleware中间层模块函数(待应用层调用)。
3.应用层应用层就考验你业务逻辑的一层,也是整合软件资源的一层。如果你代码层次画分的话,业务逻辑代码就很容易。
反之,你代码很乱,要实现一个业务逻辑,可能连续加班多天,最后写出来的代码也是bug无数。
模块化
嵌入式编程,模块化相当重要,可以说,它会影响你代码质量、加班多少、甚至升职加薪。
还是上面那个例子:一个遥控器控制一个小车运动,包含遥控器的按键(比如:前后左右),无线通信(比如:433),小车无线接收,电机驱动、电机控制算法等。
如果你把所有代码都写在main函数,你说能实现吗?当然,肯定也能实现。 但是,你这样写,你的业务逻辑代码是不是很废脑、很费时间? 还有,你后续加修改按键方式、添加功能,你该怎么办?
所以,你需要模块化编程,把一些小模块分别封装成函数,提供给对应的应用层调用。
上面其实也说了:电机驱动(比如io时钟、pwm配置)封装成一个函数,这其实就是一个小模块。 当然,这里的驱动函数只是一个小模块,然后还需要进一步封装成“大模块”。
比如:我这里还引入一个编码器,闭环检测电机速度,通过底层电机驱动、加减速算法,编码器等整合成一个电机运动的函数(模块):motor_ctrl(速度,方向)。这就是一个大模块(当然,还可以结合需求再进一步封装)。
最后,还有很多重要的编程思想,需要开发者了解并掌握,在一定程度上,你的编程思想决定了你是新手级别,还是大神级别。
电源逆变器的作用是什么
热烈祝贺韩国Greenchip公司成功入驻ISweek工采网
2020年风电投资监测预警结果解读
高通转投台积电 三星7nm技术量产落后
推进新型城市基础设施建设,推动车联网和充电桩布局应用
单片机项目有必要分层设计吗?
VOCs在线监测仪有什么特点?
HD3SS3212IRKSR接口芯片的产品介绍
基于FPGA的视频应用OSD设计
浙江移动联合华为申报的5G-Advanced核心网解决方案荣获两项“ICT中国(2023年度)”创新应用杰出案例奖
富士康致力成为光学领域的台积电
如何一招辨别iPhone X山寨机
基于电阻平衡的大功率锂离子电池与超级电容器的直接混合充电优化
你还只知道大王卡就已经out了,中国电信推出“王中王”卡,颠覆你的想象
欣旺达东风宜昌动力电池生产基地项目签约
基于USB式的矢量网络测量天线解决方案
充电桩的业应用方案
ANSYS 17.0测试报告:电大尺寸天线罩与波导裂缝阵一体化仿真
通过CY7C68013微控制器实现数据低速控制、高速传输的设计
银联宝电子推出5V2A充电器芯片方案U6315A