单片机从零基础到独立开发,我经历了哪些阶段?

发布时间:2023-03-14  

总结出来的结果就是: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执行这段程序所花的时间可能不同的,时间越短,说明你这段程序写得越好。

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

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

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

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    理论是非常枯燥的,而且也是非常耗时的,时间太久了就失去了继续学习的兴趣和毅力。 我们学习的目的就是为了实战,那我们为何不去通过实战来掌握单片机程序开发的理论知识呢? 有了单片机程序开发的基础,和一些简单的单片机基础......
    程序中的ASCII字符怎么表示。如下面代码定义了字符0-9: unsigned char code ASCII0_9[10]=”0123456789”; //C51单片机 我们......
    增加了一些基本的指令,还有变量的赋值是16进制,当然单片机c语言只牵涉到普通c语言非常基础部分。 主要的差异具体体现在: 1、单片机中C的语法一般都对 ANSI C有些扩展,及一些特殊写法如C51扩展......
    STC单片机编程软件安装;STC单片机是由宏晶科技自主研发的可以款基于C51内核的单片机,在国内使用非常广泛。 STC在传统的C51单片机的基础上,性能设计得到了很大的提升,性能优越,而且......
    【零基础】彻底搞懂51单片机各种型号(ATMEL系列);零、前言   初学者开始学习51单片机时往往先是一愣,说好51单片机啊,咋个型号是AT89C52,这个S52又是咋回事?上学......
    增强型51单片机和传统51单片机对比分析;前面的内容,我们从传统的51单片机出发,从硬件的基础上,一步步衍生出了增强型51单片机所增强的地方。现在我们可以清楚地了解,增强型51单片机对比传统的51......
    学习,同时具有汇编语言的硬件操作能力。对于具有C语言编程基础的读者,能够轻松地掌握单片机C51语言的程序设计。   c51主要特点   单片机C51语言兼备高级语言与低级语言的优点。   语法结构和标准C......
    多年的开发经验,建议大家选择C51系列的STC89C52开始入手学习。 2.学习单片机C语言基础 单片机C语言是单片机开发的基础,所以学习单片机之前首先要掌握单片机C语言开发基础。 C语言......
    于交通灯显示控制,按键处理主要用中断的方式进行,特别加入了“看门狗”电路以保证该系统的稳定性。单片机基本外围电路如图2所示。 1.3、按键控制模块 按键控制模块由AT89C52芯片的P3口控制,电路如图2所示......
    M60 单片机的在线仿真与步进、日志调试;我们对M40 定时器0的代码进行步进调试,掌握调试技巧... 一、前期准备: 安装好keil C51 51单片机编程推荐软件,熟悉它,后续stm32同样......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>