历史上的今天
今天是:2025年12月16日(星期二)
2022年12月16日 | 我是怎么提高单片机编程能力的?
2022-12-16 来源:zhihu
我对编程的兴趣源于黑客…
没想到最后竟然走了单片机开发的路线,或许是现实不允许我有梦想。
黑客的成长过于漫长,而我当务之急是找份工作糊口。
我并不是计算机专业,临近毕业对编程也一窍不通。
第一次自学的是java,学完基本语法,好像懂了,又好像啥都不懂。
通俗点讲,就是做项目毫无思路。
后面接触到了单片机,深入了解后,发现这个编程简单,有java基础学c语言也贼快。
就是电路比较复杂,特别是模电,还好后面发现并不需要太深的模电功底。
果断买了块开发板,按着教程顺藤摸瓜,一个多月基本把开发板上的功能都实现了一遍。
历史总是惊人的相似,虽然单个外设功能都会用,但一做项目就一脸懵。
后面又做了一个智能小车项目,买了配件,也没视频教程,就看商家提供的教程死磕。
最后又自己独立写了一遍,做完以后明显感觉自己水平提升了。
主要有几方面的提升:
1.学会看别人的项目代码了
这个能力特别重要,虽然看的过程比自己写还痛苦,实际工作中也经常要去看别人写的代码。
刚开始公司也不会让你去研发产品,会让你维护老产品,改代码。
后面你想提升,也需要有这项能力。
2.编程思维
也就是实现功能的思维,这个也是非常重要的。
如果你没做过这种功能,最好的方法就是学习别人的实现的思路。
一般某种功能,你做过了,下次做就懂了。
这个只能不断通过项目去积累,在开发板上学不到。
3.编程水平
懂实现的思路和你能用代码写出来又是两码事。
我的办法还是先模仿别人的代码,然后分析他这样写有什么好处。
过程也是比较痛苦的,但是随着你经验的积累,后面会越来越轻松,最终达到望眼欲穿的高度。
做完智能小车不久,我就找到工作了。
刚开始接触最多的是STC51和NXP的单片机。
工作了2,3年左右,基本大多数的单片机产品我都能把代码独立写出来。
那个时候感觉自己已经很牛逼了,单片机编程太简单不能满足自己了。
直到后面去到一家做导航的公司,有涉及到GPS、菜单、雷达检测等功能。
我才知道自己的水平有多渣,才知道以前做的产品都太简单了。
这家公司让我的水平也提升了不少,以前一直不知道多级菜单怎么做,从那以后知道了。
主要还是看老工程师代码学出来的,掌握看懂别人代码的能力很重要,能贯穿你整个职业生涯。
可以说那1年不到的时间顶我前面做2,3年。
有时候不是说你做的越久,水平越厉害,关键还是看你周边有没有高手可以学习。
你在公司做1年,基本对公司产品就很熟悉了,都是同类型的,可能改改电路改改代码就是一款新产品了。
呆久了,对你来说基本都是重复工作,水平提升也很缓慢。
这是我第一次水平有较大的提升,也重新刷新了对单片机编程的认知,并没想象简单。
第二次是后来跳槽到一家做物联网网关的公司,有语音、菜单、无线数据软解码、OTA、4G、Wifi之类的功能。
这应该是我有史以来碰到过最复杂的一个产品了。
类似于我们无际单片机编程实战课程里的第三个项目。

只是为了很多基础差的学员能快速上手,我把一些产品功能简化了,尽量留下最常用最核心的东西。
虽然做了这么多年,但是让我独立去做这个产品还是很吃力的。
主要是功能太多了,脑子就容易乱,不知道该怎么整合。
做这个项目之前,我还把以前上班那些老工程师的代码又重新研究了一下,看有没有什么能用的东西。
就这样,一个地方拼凑一点,最后再慢慢消化创新形成了自己的东西。
这个项目我大概做整整一年,最后还是没做稳定,因为那个时候第三方云平台都不成熟。
主要是底层协议有漏洞,还有app不是很给力,导致用户体验感很差。
比如做离线推送功能,总是有很多型号的手机推送不了的。
所以,做物联网的产品,很难做稳定就是这个原因。
涉及的东西太多,不是硬件稳定就行,还得看云平台和做app的经验是否足够丰富。
再加上联调都是远程沟通,很多细节很难理解到位,开发周期也长。
这个项目对我的成长是最大的,就是有点费红牛。
只要没特别的事,每天早上我基本都是最先到公司,公司也是初创公司。
老板每次看到我都很感动,这么上进的员工不多了。
其实我是对这个项目很感兴趣,一直想做这种中大型项目,就是没机会。
我和大家的想法其实是一样的,就是想尽快让自己具备独立做项目的能力,不管大小项目。
有时候,我经常在想,如果第一份工作那2年,就能接触到这种项目并有人带。
或许我2年就能达到别人5年甚至以上的水平。
再后面,就是接触了蓝牙协议栈之类的开发,有了前面的沉淀以后,研究起来轻松多了。
蓝牙协议栈的系统算是我目前接触到比较好的非RTOS了。
所以,我决定把它精简以后,移植到STM32上面来,以后为我所用。

虽然之前也写过一个经过批量验证的程序架构,但毕竟还是简陋了一点。
比如说队列功能,只能入列和出列字节数据,如果能传输任意数据类型就更灵活了。
这个架构也是开源的,并在19年随便录了套视频,有兴趣可以去看看,对编程水平提升还是有挺大帮助。

教程已上传各大平台,直接找无际单片机编程就有了,全网同名的。
最后总结:想快速提升自己编程能力,还是得不断通过项目积累,但也是有捷径可走的,就是跟资深工程师做项目,同样是积累,效率天差地别。
上一篇:关于单片机应用系统架构的几点见解
史海拾趣
|
如题: 如何让U盘里的东西,只能看,但却不能复制出U盘????? 要针对不同的机器不同系统都要这个效果。 有什么办法可以实现么???急,急,急,急,急.... (关键字:c# c++ c mfc 驱动) … 查看全部问答> |
|
关于在ce5.0下使用adoce.net操作sql ce 2.0的程序问题 您们好! 如标题。我一定套路的模式配好了所有的东西,就差用程序实现访问ce2.0了~但是我怎么写也无法读取~ 我用的公布的VORecordset类和voconnection类。我没有对他进行任何修改 我得程序是这样子的 ...… 查看全部问答> |
|
WM5 PPC SDK的目录C:\\Program Files\\Windows CE Tools\\wce500\\Windows Mobile 5.0 Pocket PC SDK\\Activesync\\Activesync stock portfolio sample\\下,有一个Stockpor示例代码,看了下好迷惑!有谁看过并成功和WM5 PPC模拟器跑起来的,说下它的工 ...… 查看全部问答> |
|
三星的系列NandFlash有什么区别?K9F1G08/2G08/4G08/8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用? 三星的系列NandFlash有什么区别?K9F1G08/K9F2G08/K9F4G08/K9F8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?还是不同芯片驱动要进行不同的修改?… 查看全部问答> |
|
呵呵。书本上很多理论介绍P0口。把P0口当稀奇。所以很多初学者,是谈P0色变啊。。首先40个引脚的51内核单片机 32个IO口包括 P0口 都可以在程序控制下输出高低电平。。。。但P0口有什么稀奇的。。稀奇之处在于它输出高电平 ...… 查看全部问答> |
|
我建了一个新工程,也建了一个快捷方式,可是双击它的时候却显示:\"用户未在安全中注册\"?我就是建了一个空的工程,什么也没有动啊,怎么出这个问题呢...望高手指点..… 查看全部问答> |
|
以前一直不大相信MCU的内部看门狗,可用软件开关的不可靠。 一个独立看门狗 + 窗口型看门狗,看起来比以前随意喂狗要好,对程序的设计也和以前有不同的要求。 现在主要是关心 ...… 查看全部问答> |
|
最大的区别是在工艺上,其他的区别也都是建立在工艺的基础上 CycloneII采用90nm技术,CycloneIII采用65nm技术, CycloneIII的密度是CycloneII的1.7倍,嵌入式存储器是3.5倍,乘法器是2倍 但功耗却只有二分之一, … 查看全部问答> |




