单片机怎么实现模块化编程?思维+实例+系统教程

发布者:备战最新更新时间:2022-12-27 来源: zhihu关键字:单片机  模块化编程 手机看文章 扫描二维码
随时随地手机看文章

在刚开始从事研发工作的那几年,我主要做单片机软件开发的工作,虽然功能吧都能实现,但是总觉得缺了点什么。

总是感觉自己写的程序不够完美,移植性不够好,功能也不好扩展,每次写完程序最怕的就是客户要改功能。

如果程序架构写的不好,一改会影响到很多功能,哪怕原来是灯每秒闪1次,改成每秒闪3次这种看起来很简单的功能。

对于程序提升这块,如果没有人一个厉害的人带你,真的很难提升。

主要难在两个方面:

1.你的认知

有时候不是你做了越久,写的代码就越好,因为你一直在自己的认知水平内写代码。

如果不提升你的认知,代码自然也不会提升,所以想要提升代码水平,首先要提升的是你的认知。

2.找不到好的教程或实例

终有一天你要做中大型项目的时候就会发现,自己的代码水平和思维要提升了,但是找不到好的教程和方法。

这块最好的提升办法就是去找那些大佬写的代码,比如说公司比较资深的工程师,有事没事多请他们吃吃饭,喝喝水搞好点关系。

一般来说都愿意把自己的代码分享给你,然后你再看他们写的代码,有哪些是值得学习的,最重要的是他们实现功能的思维,然后用代码怎么去实现?

如果别人不愿意分享给你,那可以去挖一下现成稳定的,比如说STM32的标准库,蓝牙协议栈等等。

我当初的提升方法是在某个公司做产品的时候,正好有个工程师离职了,老大把他写的代码给我来维护。

当我第一眼看到他代码的时候,觉得写的很复杂,感觉在秀技术,完全没必要这样去写。

然后我用他的代码拿配套的产品来测试,发现很稳定,我尝试按照我的思维改了以后,就出现了各种问题。

慢慢地,研究越深,我越是深刻体会这位工程师为什么要那样去写,自己跟他完全不是一个级别的。

其实他的就是基于模块化编程的思维去做的,当时还没吃透他的代码,我是从那家公司离职后又过了几年才彻底领悟他的代码。

一、单片机模块化编程怎么实现?

基于他的这种思维和实现方法,再结合我自己多年经验,最后自己又创新了一个全新的架构。

这个架构分为2个部分:

1.内核

内核主要是用来管理任务的,除了管理还提供了一些队列算法接口,方便产品使用。

2.模块化编程思维

对于单片机产品开发来说,我觉得可以分为3层:硬件层、中间层、应用层

我们先来说说中间层应用层

中间层:就是不算是真正产品的功能代码,比如说解析某种自定义协议,协议解析完以后的数据才是真正产品功能数据。

上图就是对云平台协议进行解析,比如说解析wifi是否连接的命令的程序,相对应用层来说,我们只需要”wifi已连接”和”wifi未连接”这两个明确的数据,而不做具体解析程序。

这样做最大的好处就是,假设我们换了一家云平台,应用层的程序不用改,只需要改硬件层和中间层程序即可,不至于因为换了一家云平台,导致整个产品程序崩盘的问题

一般来说,如果不是中大项目,我都直接省略中间层,毕竟代码量大了,会浪费批量生产时的时间也浪费单片机资源

硬件层:我们重点来说说这个,这个真的是很多人痛到不能再痛的痛点,也是很多工作几年工程师一直不知道怎么解决的问题,专门是用来采集单片机输入数据,或者控制硬件电路输出。

采集信号有很多类型,比如说按键检测、ADC检测、红外信号接收、串口接收、SPI、IIC等这种就是属于硬件层输入数据。

我拿按键输入来举例,先来看看原理图:

电路非常简单,就几个按键串上电阻接了单片机引脚,按键按下就会有一个低电平的信号给到单片机,单片机就是通过检测对应引脚是否低电平来判断按键是否按下。

回到我们程序部分,按键检测过程我就不讲解了,我们的关键在于检测到某个按键按下以后,要怎么把这个值传给应用层。

那我是使用了回调函数来传递的,这样做的好处就是,真正能做到这个按键硬件层检测代码和应用层产品程序独立,增强移植性。

我们要使用按键功能的时候,直接注册下按键回调函数就可以了,如下图:

这样做还是比较灵活的,不管是应用层,还是中间层,哪里需要用到按键功能,我就在哪里调用注册函数。

Ok,硬件层采集数据基本上都可以用这种方式来处理,这样就能做到真正的模块化,这个也是我以前一直想不通研究了很久的处理方式。

下面说说控制硬件电路输出,这种输出型的没什么好说的,不涉及到硬件层的采集数据传递到应用层,直接调用硬件层的控制接口就行了。

比如说我应用层要控制一个LED灯点亮,代码简单到令人发指!

由于文章篇幅有限,很多代码不方便展示,如果想学程序架构这块的系统教程可以找无际单片机编程拿。

这套课程的内容我个人认为至少价值3000以上,每节课都为解决产品痛点,没有一个知识点是多余的,凡是看过的小伙伴反馈都如获至宝,原本是录出来卖的,后面工作一忙就没时间去搞。

现在正好在做这块的,纠结了很久还是开源给大家学习,就当是对我铁粉的一些回馈,原创非常不易,如果你拿了,麻烦也给我点回馈,给我来个三连就行!


关键字:单片机  模块化编程 引用地址:单片机怎么实现模块化编程?思维+实例+系统教程

上一篇:学好单片机好找工作吗?单片机学到什么程度可以找工作?
下一篇:单片机项目经验到底是什么?项目开发培训真的靠谱吗?

推荐阅读最新更新时间:2024-11-09 12:35

解析Ambiq超级低功耗MCU
Ambiq 是一家备受关注的初创公司。 最近,我和 Ambiq 的架构和产品规划副总裁 Dan Cermak 聊了下。他们做的产品对于这个世界上的英特尔和微芯片来说,这听起来可能并不多,但对于一家竞争激烈的领域中的小公司来说,这真是令人印象深刻。 Ambiq 成功的基础是公司获得专利的亚阈值功率优化技(subthreshold power optimization technology),简称 SPOT。您必须记住,我来自德州仪器 (TI) SN7400 系列晶体管-晶体管逻辑 (TTL) 设备的时代,其输出在 0V 和 5V 之间切换,这正是宇宙创造者想要的方式是。当第一批微处理器单元 (MPU) 出现时,它们的内核
[单片机]
解析Ambiq超级低功耗<font color='red'>MCU</font>
雅特力AT32A423全新车规级MCU新品发布
5月13日,雅特力推出全新车载型AT32A423系列 MCU ,高度整合各种外设资源,具有高效能、多尺寸 封装 和功能丰富等特点,并已通过AEC-Q100车规级可靠度认证,加强实现车载应用的功能性和可靠性。 AT32A423系列搭载ARM® Cortex®-M4内核,主频高达150MHz,内建单精度浮点运算FPU,带 MPU 和 DSP 指令集 ,提高数据处理效率;高达256KB Flash和48KB SRAM ,提供多容量存储空间,便于添加开发新功能,成为新能源车用 电子产品 中优化设备的理想选择,广泛用于行车记录仪、车用影音、 ADAS 辅助驾驶、360全景、汽车中控、脚踢尾门控制、 充电桩 等各式车用场景。 AT32
[汽车电子]
雅特力AT32A423全新车规级<font color='red'>MCU</font>新品发布
STC15单片机利用外部中断测频率
中断测频率 先来看张图 图中标明 ITx=0 时 下降沿触发中断; ITx=1 时 上升沿,下降沿均可触发中断,这里要注意不是随便一个IO口有上升沿或下降沿时都触发中断,比如我的INT0 对应的端口是P32 ,所以 只有P32端口有上升沿、下降沿时才会触发外部中断0。 #include stc15f2k60s2.h #include intrins.h typedef unsigned char uchar; typedef unsigned int uint; uchar code smg ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; i
[单片机]
STC15<font color='red'>单片机</font>利用外部中断测频率
具有高性价比的无线 MCU 如何帮助您将低功耗 Bluetooth®︎ 技术应用到更多产品中
具有高性价比的无线 MCU 如何帮助您将低功耗 Bluetooth®︎ 技术应用到更多产品中 环顾我们当前日常生活中的 Bluetooth® 应用,我们有理由期待未来世界能够实现更高程度的互联。 据蓝牙技术联盟(SIG)估计,蓝牙设备的年出货量将在 2026 年超过 70 亿。在医疗设备、玩具、个人电子产品、智能家居设备等领域,市场需要更高的蓝牙集成度。为满足该市场需求,富有创新精神的工程师将有机会大展拳脚。 蓝牙在医疗领域的发展趋势 蓝牙功能在医疗方面的应用越来越多,包括血糖监测仪、医疗传感器贴片,甚至还有智能牙刷。对于设计者来说,需要满足消费者对以下特性的需求: • 尺寸小巧且便于使用。没有人希望在使
[网络通信]
具有高性价比的无线 <font color='red'>MCU</font> 如何帮助您将低功耗 Bluetooth®︎ 技术应用到更多产品中
将基于8051的微控制器连接到SCI端口
本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的UART,以便与支持SCI的设备通信。它首先简要讨论了SCI和UART模块之间的差异,并以一个实际示例结束,说明如何配置基于8051的达拉斯半导体微控制器UART以与SCI模块通信。 介绍 串行通信接口 (SCI) 是一种高速串行 I/O 端口,允许设备之间的同步或异步通信。它允许微控制器连接到各种类似功能的外设,以及标准RS-232接口。SCI 的确切实现因设备制造商而异;许多器件都支持异步模式下的全双工通信、奇偶校验、错误检测以及 到 位的可编程字符长度等功能。 所有基于 8051 的达拉斯半导体微控制器都能够与支持 SCI 的设备进行通信,即使 SCI 功能
[单片机]
将基于8051的<font color='red'>微控制器</font>连接到SCI端口
STM32单片机内存管理器代码
本代码适用于无操作系统的STM32单片机开发,功能强大。 可申请到地址空间连续的不同大小的内存空间,且用户接口简单,使用方便。 memory.h: memory.c:
[单片机]
如何将AI集成到MCU中?
‍‍‍‍‍‍‍无AI,不终端。如今,AI向边缘下沉已成为大势所趋。想知道如何在嵌入式系统上快速部署AI应用?想知道如何将AI集成到MCU中? STM32Cube.AI开发者云是ST为开发人员和数据专家提供一套业界首创的免费在线开发工具和服务,能够针对所有STM32生成优化AI。无需安装软件,无需主板。登录即可创建、优化神经网络并对其进行基准测试。 STM32Cube.AI开发者云取得多项行业突破 STM32Cube.AI开发者云取得多项行业首创: ✦ 在线图形用户界面:针对STM32 微控制器优化神经网络模型,并生成在STM32 微控制器上高效运行的模型C 代码,无需事先安装软件。得益于经过业界验证的STM32Cube.A
[单片机]
如何将AI集成到<font color='red'>MCU</font>中?
分享一种基于航顺芯片车规级MCU的车窗升降防夹解决方案
电动车窗早已成为车辆的标配,然而,由于电动车窗上升速度快且驱动力较大(最强可达52.6公斤),在车窗升降过程中,很容易夹伤乘客,尤其对儿童乘坐会形成较大安全隐患。因此针对此风险,我国防夹法规(GB 11552-2009)明确要求,具备自动上升功能的车窗必须具备防夹功能。欧盟与美国颁布过相应法规。 目前市面上常见的车窗防夹方案是霍尔传感器方法,受限于其高昂的成本,此方案更适用于高端车型应用。基于航顺芯片M0系车规级MCU HK32A040C8T3的车窗玻璃升降防夹开关方案,无需专用传感器,可通过学习弥补多次运行带来的偏差,安全性高,同时可极大地降低车窗控制器总成本,已得到众多主机厂的青睐。 车身域控制器就选航顺M0系车规级M
[嵌入式]
分享一种基于航顺芯片车规级<font color='red'>MCU</font>的车窗升降防夹解决方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved