如何实现模块话编程陈老师为你解答

a235267d295d069a491f4d52f173505d.png

原理图+源代码+开题报告+正文+外文资料

浏览这篇文章末尾有方式51单片机多机串口通信是如何实现的?陈老师一一道来_单片机陈老师的博客-CSDN博客

单片机怎么实现模块化编程?思维+实例+系统教程(实用程度令人发指)

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

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

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

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

主要难在两个方面:

一.你的认知

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

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

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

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

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

一般来说都愿意把自己的代码分享给你,其次你再看他们写的代码,有哪些是值得进修的,最重要的是他们达到功能的思维,其次用代码怎么去达到?

假如他人不愿意分享给你,那能够去挖一下现成稳定的,假如说STM32的规范库,蓝牙协议栈等等。

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

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

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

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

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

一、单片机模块化编程怎么达到?

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

这个架构分为2个局部:

一.内核

e41021c29065424639030034c507c7fa.png

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

二.模块化编程思维

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

cb0ffdcaeaae6c073b57f0b93982df4b.png

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

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

978736754ee187d4affe45fe73a1cdf9.png

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

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

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

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

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

我拿按键输写来举例,先来看看原理图:495b6a760ce5125412982782f08967ac.png

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

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

108601b635484a0d8734587cfaa0551a.png

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

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

48e76edb045523f9637dfbd854382fc7.png

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

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

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

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

7c8aaa090ae76fedd5acdc5b6a4a0ea5.png

由于文章篇幅有限,很多代码不方便展现。

aadfabcc33324b2997702942b127fbc5.png

这套课程的内容我个人认为至少价值3000以上,每节课都为攻克产品痛点,没有一个知识点是多余的,但凡看过的小搭档反应都如获至宝。

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

最后彩蛋时长!!!
据说有小搭档靠这份顺利入职BAT,所以一定要保存起来好好进修!

后期我也会组建一些技术交流群,让大家能认识更多的大佬,有个好的圈子,你对行业的认知将在最前沿。

大家想要上面「单片机入门到高级教程工具包 + 进入单片机交流群」,能够点击下方??的卡片扫码进群免费领取。



个人成长经历、行业经历、技术干货。

一.单片机入门到高级开挂进修路径(附教程+工具)

二.电子工程师的才能有多可怕?

三.为什么我学了几天 STM32 感觉一脸茫然?

四.谁能教教我怎么学单片机,先学什么,怎么入门?

五.Stm32学了良久了,感觉独立做项目还是有力不从心的感觉?

六.单片机怎么达到模块化编程

0f8e5c2c51e261103224200a46def1c6.pnge073b3df12d6fc60bd12d392e6e6007d.png

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值