总感觉自己写的程序不够完美,可移植性不够好,功能不容易扩展。 每次写程序,最担心的就是客户改变功能。
如果程序结构写得不好,一改就会影响很多功能,哪怕灯每秒闪一次,改成每秒闪三下这样看似简单的功能。
至于程序的改进,如果没有一个有实力的人来指导,真的很难改进。
主要困难在于两个方面:
1.你的知识
有时候并不是说做的时间越长,写出的代码就越好,因为你一直在自己的认知水平内写代码。
如果你的认知不提高,代码自然也提高不了。 所以想要提高代码水平,首先要提高认知。
2. 找不到好的教程或例子
有一天,当你要做中大型项目时,你会发现你的编码水平和思维有待提高,但却找不到好的教程和方法。
改善这方面最好的办法就是找大佬写的代码,比如公司里比较高级的工程师,没事的时候请他们吃饭喝酒,建立更好的关系。
一般来说,他们愿意与你分享他们的代码,然后你看他们写的代码。 有什么值得学习的? 最重要的是他们实现功能的思路,那么如何用代码来实现呢?
如果别人不愿意分享给你,你可以挖掘现成的、稳定的,比如STM32标准库、蓝牙协议栈等。
我原来的改进方法是,我在某公司做产品的时候,正好有一个工程师离职了,老板就把他写的维护的代码给了我。
当我第一次看到他的代码时,我觉得很复杂。 感觉像是在炫耀自己的技术,完全没有必要这样写。
然后我用他的代码测试了配套产品,发现非常稳定。 当我尝试按照自己的想法去改变之后,各种问题就出现了。
慢慢地,研究得越深入,我就越明白这位工程师为什么会这样写。 我和他不是一个级别的。
其实他所做的就是基于模块化编程的思想。 当时我还没有完全理解他的代码。 我从那家公司辞职后花了几年时间才完全理解他的代码。
1、如何实现单片机模块化编程?
基于他的思考和实现方法,结合我自己多年的经验,我最终创新了一个全新的架构。
该架构分为 2 部分:
1. 内核
内核主要用来管理任务。 除了管理之外,还提供了一些队列算法接口,方便产品使用。
2.模块化编程思想
对于单片机产品开发,我认为可以分为三层:硬件层、中间层、应用层。
先说中间层和应用层。
中间层:是功能代码,不被视为真正的产品。 例如,它解析某个自定义协议。 协议解析后的数据才是真正的产品功能数据。
上图是解析云平台协议的程序,比如解析wifi是否连接的命令。 与应用层相比,我们只需要两个明确的数据:“wifi已连接”和“wifi未连接”。 做具体的分析程序。
这样做最大的好处是,如果我们换成云平台,应用层程序不需要改动。 我们只需要更改硬件层和中间层程序即可。 这样不会因为云平台的变化而导致整个产品程序崩溃。 。
一般来说,如果不是中大型项目,我会干脆省略中间层。 毕竟代码量大,量产时会浪费时间,浪费单片机资源。
硬件层:我们重点关注这一点。 这确实是很多人的痛点。 这也是很多工作了几年的工程师都不知道如何解决的问题。 它专门用于收集来自微控制器或控制硬件的输入数据。 电路输出。
信号采集的类型有很多种,比如按键检测、ADC检测、红外信号接收、串口接收、SPI、IIC等,都属于硬件层输入数据。
让我以按键输入为例。 我们先看一下原理图:
电路非常简单。 只需将几个按钮与电阻串联,然后将它们连接到微控制器的引脚即可。 当按下按钮时,将向微控制器发送低电平信号。 单片机通过检测相应引脚是否为低电平来判断按钮是否被按下。 。
回到我们的程序部分,关键的检测过程我就不解释了。 我们的关键是在检测到某个按键被按下后,如何将这个值传递给应用层。
然后我使用回调函数来传递它。 这样做的好处是关键的硬件层检测代码可以真正独立于应用层产品程序,增强了可移植性。
当我们想要使用按键函数时,可以直接注册按键回调函数,如下所示:
这是相当灵活的。 无论是应用层还是中间层,哪里需要关键功能,我就调用注册函数。
好吧,硬件层采集到的数据基本上可以这样处理,这样才能真正实现模块化。 这也是我长期以来想不通的处理方法。
下面说说控制硬件电路输出。 对于这个输出类型没什么好说的。 它不涉及从硬件层收集数据并将其传输到应用层。 直接调用硬件层的控制接口即可。
例如,如果我的应用层想要控制LED灯亮起,代码就简单得离谱!
由于文章篇幅有限,很多代码不方便展示。 如果你想学习程序架构方面的系统教程,可以找《无极单片机编程》。
我个人认为这套课程的内容至少值3000元。 每个类都是为了解决产品的痛点而设计的。 没有一个知识点是多余的。 所有看过的朋友的反馈都如获至宝。 它最初被录制并出售。 当我工作忙的时候,我没有时间做这件事。
我现在正好在做这方面的工作,也奋斗了很长一段时间,把它开源出来供大家学习。 只是将其视为对我的忠实粉丝的一些反馈。 原创并不容易。 如果你收到了,请给我一些反馈,给我一个三合一。 就是这样!
最后的复活节彩蛋时间!!!
最近有同学向我要单片机的资料。 我花了一个月的时间总结了自己10年的产品开发经验,收集了史上最认真、最硬核、最实用的《高级单片机入门教程+工具包》。 +22个热门项目”,免费分享给大家。
资料包几乎涵盖了C语言、单片机、模拟与数字电子、原理图与PCB设计、单片机高级编程等内容,非常适合初学者入门进阶。
另外,我会在盒子底部泪流满面地分享我整理的22个热门开源项目,包括源码+原理图+PCB+文档,让你快速成为高手!
据说有朋友就是通过这个成功加入BAT的,一定要保存好,好好学习!
后期我也会成立一些技术交流群,让大家可以认识更多的大佬,有一个良好的圈子。 您对行业的了解将处于最前沿。
如果您想要上面的“MCU入门进阶教程工具包+进入MCU交流群”,可以点击下方⬇️卡片查看文章开头即可获取。
或者你可以寻找全网同名的“Boundless Microcontroller”。
以下是无极更多原创的个人成长经历、行业经验、技术秘诀。