历史上的今天
返回首页

历史上的今天

今天是:2026年03月14日(星期六)

2023年03月14日 | 单片机从零基础到独立开发,我经历了哪些阶段?

2023-03-14 来源:zhihu

总结出来的结果就是:99%的初学者都走了弯路,而且都很迷茫,焦虑,不知接下来该做什么。

其中有很大一部分在初学者,在职业定位上,就存在严重问题,就是硬件和软件都想学到独立设计的水平。

抱歉,今天我要泼你们一身冷水:几乎不太可能!

这是全栈工程师的水平,新手想达到这个水平,没几十个项目以上的积累是很难做到的。

就拿硬件设计来说,哪怕做了10年,也不敢说什么产品硬件都能设计,换个没做过的产品,照样够你折腾的。

前期学习一定要有侧重点,不要有软硬通吃的想法。

在刚学单片机的时候,我也不知道还分硬件工程师和单片机工程师,我以为都是一个人完成的。

实际除了非常小的公司,大多数公司一个项目标配就是软硬两个职位,毕竟术业有专攻。

新手期,硬件工程师和单片机工程师,两个你只能先主攻一个。

如果是我,我会先选单片机工程师,因为大多数工资比硬件高点,有核心竞争力点。

这个方向,硬件是需要学,但是不需要学太深,这个度的把握很重要,过头了,就得多走几个月弯路

假设我回到11年前,零基础,我会怎么去学习,才快速达到我现在的水平?

很多人会好奇,我现在是什么水平?

先声明,我并不是什么大神,只是项目经验比较丰富。

目前只要不涉及复杂算法的单片机项目我都能做稳定,我是指软件方面,硬件不敢说。

能独立把产品软件做稳定,对我来说就够了,技术的终点是解决痛点,创造价值。

做好做稳定的背后,藏着很多学问,比如编程思维、程序架构设计,程序可扩展性和可移植性。

这些学问,只有做中大型项目才是刚需,否则做不稳定。

从零基础到独立开发项目代码的水平我大概经历了几个阶段

这个非常重要,只有认识到自己目前处于哪个阶段,才知道下一步该如何去提升。


第一个阶段:初级阶段

这个阶段就是零基础阶段入门。

1.第一个阶段学什么?

学习c语言、基础电路、51/STM32单片机外设之类的基础知识,但是让你做项目做不出来。


2.当初我是怎么学习的?

第一步:学STC89C52开发板

我的硬件基础知识、单片机、C语言主要是通过这个开发板学习的。

第二步:基于开发板做电子时钟

学完基础语法和单片机外设,我就在开发板上用数码管显示,做了电子时钟的功能,巩固我的编程基础,锻炼代码整合能力。

第三步:尝试找工作

没工作和项目经验,没人要。

第四步:做了智能小车项目,解决没项目经验的问题

这是我在2010年在某宝购买的智能小车套件。

做完这个项目,面试时带过去演示,顺利入职。

不过现在门槛高很多,只会这些,找工作基本没啥竞争力。


3.第一阶段推荐的学习方式有哪些?

如果回到10几年前,这个阶段我会怎么学习?

第一个阶段可以用两种方式学习:

①.开发板

优点:能更系统地学习单片机所有外设

缺点:代码不规范,做项目还是没思路,代码水平和整合能力无法提升。

②.项目

优点:让你学到单片机外设实际应用,能锻炼功能实现思路和代码水平。

缺点:项目没用到的外设学不到,基础差学习过程比较吃力。


4.第一个阶段最大的问题是什么?如何突破?

最大的痛点就是单片机外设都能用起来,整合起来做项目就做不出来。

为啥做不出来啊?最核心的是缺编程思路代码水平

突破第一个阶段的方法就是多做一些小项目,比如智能小车、电子时钟,商业化项目尤佳。


第二个阶段:普通单片机软件工程师

经历几个项目沉淀以后,单片机常用外设都在项目上应用过了,做一些基于单片机的小产品也够用了,特别是51、STM8单片机级别的项目。

但随之而来的就是另一个瓶颈期,你会碰到下面几个问题:

1.感觉自己代码写的不够好,很乱,逻辑不清晰,代码整合起来就做不稳定。

2.做大一点的项目就把控不住,比如做代码量在50kb以上的项目就有点吃力了。

3.写好的代码经不起折腾,如果要改功能或者换单片机,整个程序框架就崩溃了。

这些我都经历过,那些被领导催到头顶疼的场景还历历在目。

很多工程师做了几年依然处于这个阶段


1.为什么突破这个瓶颈很难?

想突破这个阶段是最难的,是思维和代码水平整体的提升,是经验积累到某个阶段的成果,不是学习某个技术点。

认知边界机遇、主动学习意识有关。


认知边界:就是你认知范围内的,如果你身边全是菜鸟,你的认知边界就局限于菜鸟阶段,如果你身边有厉害的,他会颠覆你的认知,原来程序还能这样写,这个大多数取决于你的圈子。

机遇:你的圈子决定你的眼界高度,你知道你代码写得烂,但是没渠道、没机会可以提升,你碰到的公司做的产品都比较简单的,你也接触不到比你更厉害的人,或者接触到,别人也不会系统地带你,这种情况你是一直无法提升的,跟工作年限无关

主动学习意识:有时工作稳定下来,人就懒得折腾了,几年时间一下混过去了,但你想混得更好,必须重视持续学习的重要性,主动去寻找渠道,寻找资源学习才会有更多机会。


2.我是怎么突破这个阶段的?

 . 跳出舒适圈,选择辞职

后面实在憋不住了,公司学不到东西工资又低,在激烈思想斗争后决定走出舒适圈:跳槽。

 . 碰到好的平台

好的平台不一定是BAT之类的大厂,大厂分工很细,机会反而更少,我觉得对自己成长最大的公司,就是最好的平台

后面我就去了一家做智能家居产品的公司,我从头到尾做了3款网关产品(代码量110KB以上),1个蓝牙,2个WiFi+GSM的。

 .碰到好的师傅

做这几款产品之前,很多功能我都毫无头绪,因为没做过,之前做的都是小项目。

幸运的是,公司之前有个非常厉害工程师做了过类似的产品,有现成的源码和图纸参考。

至今为止,他是我工作以来碰到过,代码水平最高,程序架构设计得最好,对我成长帮助最大的工程师,所以我一直认为,他是我”间接”的师傅。

为什么是”间接”的师傅?

因为我进去的时候他早已经离职了。

所以在开发过程,碰到很多技术难点只能靠自己摸索,硬着头皮去吃透他的编程思路和代码。

 .主动学习意识

当时对这个项目非常感兴趣,很好奇app控制硬件的整个流程是怎么样的,很好奇TFT屏的菜单UI是怎么做出来的,很好奇传感器和网关是怎么组网的等等。

兴趣驱使我那段时间,每天早上买一瓶红牛,8点第一个到公司,一直干到晚上8-9点。

不是为了在老板面前表现,也不是为了工资,就是纯粹想满足好奇。

项目从无到有的开发过程,对于工程师来说,成长才是最大的

在我的职业生涯里,大概前5年都一直处于第二个阶段。

我在想,如果能早点碰到好的平台、师傅、项目,成长是不是快很多?

我相信答案肯定是的!


3.突破第二个阶段有捷径吗?

以前我觉得哪有什么捷径,捷径就是想不劳而获。

后面发现我错了,捷径不是说你不用做,而是把时间精力放在最重要的事情上。

如果让我回到零基础,首先我会系统学下51开发板,然后就是不断找项目做、找更厉害的师傅带,从简单到复杂,把基础打牢,而不是去学更高性能的单片机,更复杂的RTOS。

项目数量决定成长速度,项目质量决定成长高度

我认为这就是捷径了,关键是看你能不能找到好的资源和渠道学习。

很可惜,市面上的大多数教程,哪怕是收费几千块的课程,都只是教你学单片机而已,完完整整做一个项目的很少,能突破第二个阶段的项目基本没有。

所以,在2021年的时候,我们开了项目实战特训营。

带着对我们成长最大的项目,复制我们成长的方法,教大家如何从无到有,一步步把项目做出来,带领认可我们价值的人穿越第一个阶段第二个阶段

我们不能保证每个人学了,都能成功突破第二个阶段,但突破第二个阶段的答案都在项目3和项目6里。

想完全吃透我们的思维和代码技巧,还得多实践,把我们的思维和代码框架举一反三,带入到你们以后的项目去应用。

只有突破第二个阶段,你能做的项目才越多,机会也更多,工资自然也越高。


第三个阶段:高级单片机软件工程师

这个阶段,你不仅能把功能实现,而是站在更高的维度去设计你的程序架构和代码细节。

这是做中大型项目必须具备的能力,否则你的产品很难做稳定,哪怕做稳定了,维护起来也很麻烦。

好的体现是什么?主要有两个层面:

1.好的程序架构

程序架构是一个很抽象的概念,主要体现在程序可扩展性可移植性

可扩展性:就是你的程序增加/修改功能方不方便?比如现在产品2个按键,如果增加到6个,需要改多少代码,简单来说改的越少肯定可扩展性就越好。

可移植性:在单片机开发领域,很多工程师对可移植性完全没概念,比如说你现在用STM32单片机做的产品,后面STM32涨价了,老板让你换成GD32的,需要改的代码越少代表程序移植性越好。

在写任何功能模块代码之前,都要考虑到这两点,主要为了加速产品开发周期,降低产品后期维护成本。

2.程序执行效率

同一个功能,不同的人写出来的代码,cpu执行这段程序所花的时间可能不同的,时间越短,说明你这段程序写得越好。

但是一般产品,对程序执行效率要求没那么苛刻,一般我们做到尽量用最少的代码去实现功能就够了。

越满足以上两点,代码越精简,你的编程思维和代码水平就越高

除此以外,其它能力也很重要,比如快速定位、解决问题的能力、电路调试能力,看数据手册能力等。

不过这些,你做项目过程中总能积累出来的,不像编程思维和代码水平那样,能提升到什么高度,跟时间无关,跟机遇有关。


推荐阅读

史海拾趣

CBM_America_Corporation公司的发展小趣事

在面临激烈的市场竞争时,CBM_America_Corporation选择与一家国际知名的电子制造商建立战略合作关系。通过共享技术资源和市场渠道,两家公司共同开发了一款具有竞争力的智能设备。这一合作不仅提升了CBM的品牌影响力,还为其带来了稳定的订单和利润增长。随着合作的深入,CBM逐渐在电子行业中占据了重要的地位。

AMOTECH(阿莫泰克)公司的发展小趣事

在多年的发展中,AMOTECH始终坚持以技术创新为核心竞争力。除了压敏电阻技术的突破外,公司还在多个领域取得了显著成果。例如,在LED照明和传感器领域,AMOTECH通过不断研发和创新,成功在韩国安山建立了第四工厂,进一步提升了公司的技术实力和产能规模。这些技术的不断突破和创新,使得AMOTECH在电子行业中始终保持领先地位。

Aavid Niagra公司的发展小趣事

近年来,电子行业正经历着深刻的变革,新兴技术的不断涌现对传统散热技术提出了严峻挑战。Aavid Niagra公司面对这一变革,积极调整战略方向,加大在新兴技术领域的研究力度。通过与高校、研究机构的合作,公司成功研发出了一系列适应新兴技术需求的散热产品,成功应对了行业变革带来的挑战。

FINTEK公司的发展小趣事

在快速发展的同时,FINTEK公司始终不忘履行社会责任和推动可持续发展。公司积极参与环保公益事业,致力于减少生产过程中的能源消耗和废物排放。同时,FINTEK还加大了对清洁能源和可再生能源技术的研发投入,以推动电子行业的绿色转型。此外,FINTEK还积极履行纳税义务,为社会创造更多的就业机会和税收贡献。这些举措不仅彰显了FINTEK作为行业领导者的责任感,也为公司的长远发展奠定了良好的社会基础。

Adaptive Networks Inc公司的发展小趣事

进入21世纪第二个十年,FINTEK公司开始实施国际化战略,以寻求更广阔的发展空间。公司首先在亚洲市场建立了多个销售和服务中心,随后又进军欧洲和北美市场。为了更好地服务国际客户,FINTEK还加强了与国际标准组织的合作,积极参与国际标准的制定和推广。这些努力使得FINTEK的产品和服务得到了全球客户的认可和信赖,公司的国际影响力也随之显著提升。

DB Unlimited公司的发展小趣事

随着公司业务的不断发展壮大,DB Unlimited开始将目光投向全球市场。公司积极开拓海外市场,通过参加国际展会、与海外客户建立合作关系等方式,成功将产品推向了全球各地。同时,公司还根据不同国家和地区的市场需求和文化差异,对产品进行本地化改造和优化,进一步提高了产品的市场适应性和竞争力。

问答坊 | AI 解惑

美国IC设计公司招人

公司从事多媒体及宽带通讯系统级芯片 (SOC) 设计的美国高科技企业。所研发生产的各类芯片大量地被思科,北电,朗讯,阿尔卡特,华为,联想等使用。主要产品包括宽带有线网络通讯,3G无线通讯基站以及多媒体电子领域的一系列模拟与数字系统级芯片。 ...…

查看全部问答>

[方案]某监狱闭路电视监控系统设计方案--3

4、显示与记录 显示与记录设备安装在控制室内,主要有监视器、硬盘录像机和一些视频处理设备。 现在有一种电视监控系统把云台、变焦镜头和摄像机封装在一起组成一体化摄像机。它们配有高级的伺服系统,云台具有很高的旋转速度,还可以预置监视点和 ...…

查看全部问答>

猎头急招!!知名公司(笔记本底层开发)

熟练掌握C / C++ /VS 的编程,并参与过大型软件的开发 具备Windows APP 和 Driver的产品开发经验和一定的硬件、固件知识 请联系 QQ :  314404285       email: lxd198409@163.com…

查看全部问答>

急问!IAR环境下参数的问题

我在IAR调试模式下,我的局部变量在locals窗口中总是显示unavailable,用watch窗口下也一样,一直没找到原因,请各位帮助一下!!!急用,谢谢!…

查看全部问答>

屏幕录像专家V7.5 Build20080428破解版

感觉挺好用的 网上做视频就是这个郭天祥的51的视频就是用的屏幕录像专家   内有使用文档,可以参考。    …

查看全部问答>

给程序挑错

library IEEE ;use IEEE.std_logic_1164.all ;use IEEE.std_logic_unsigned.all ;use IEEE.numeric_std.all ;entity key1 isport ( Clk_I   : in std_logic ;        Rst_I   : in std_logic ;& ...…

查看全部问答>

关于ADC的参数,我一直很费解!

###################################################################手册介绍:● ADC 转换时间:− STM32F103xx 增强型产品:ADC 时钟为56MHz 时为1μs(ADC 时钟为72MHz 为1.17μs)−& ...…

查看全部问答>

430焊好后发现有些管脚被接地了!!!

我P11.2口奇怪的被接地了!与它相连的管脚P11.2没接地,还有一个脚是电源脚,也没接地,但是就是发现它和地短了,除了这个IO不能用了外其他IO都可以用,求高手解释!是我芯片坏了吗?…

查看全部问答>

大家帮忙看一下,到底拿错了

#include #include #define         F_CPU        7372800                /* 单片机主频为7.3728MHz,用于延时子程序 */ #include #include ...…

查看全部问答>