本文几乎浓缩了我从业10几年的精华,内容涵盖我转行、打工、创业的经历。
建议从头到尾不要错过一字一句,因为字里行间的经验之谈,或许能成为你人生重要转折点。
全文3700多字,写了6个多小时,如果你赶时间,建议先点赞+收藏防止找不到。
很多人痛苦的根源,就是怕吃苦。
相信,我比你们的年纪都大,虽然我一直觉得自己才20多岁。
人生上半场已过,我最大的感触就是只要还活着,就是不断碰到问题,然后解决问题的过程。
问题只会迟到,不会缺席,今天你逃避的问题,以后会以另一种更残酷的形式出现。
借此机会,我简单回顾下我这12年,看完以后你会觉得,原来不是你比较倒霉,每个人都是这么苦过来的。
只是有些人,选择在一条赛道,坚持苦下去,直到突破瓶颈,有了更高造诣。
有些人中途放弃,换一条新赛道,刚开始确实很容易,越往后发现也是很难,最终陷入苦的恶性循环。
我2011年入行至今,做了单片机开发有12年时间了,在这期间遭了不少罪。
先从入行开始说起,我是电气专业,实习看到那些师兄工作,不是灰头土脸,就是满头大汗,全身充满了屌丝的气息,关键工资还低,狗看了都摇头。
我对这种付出和回报严重不成正比的工作,充满了排斥。
但没黑这个行业的意思,这是20岁出头时对行业的认知。
我寻思,起码找个工作环境好一点的,比如坐在办公室玩玩电脑,工资又高的。
这种职业,或许只有程序员比较适合我。
刚开始,我并不知道单片机,而是选了java,因为当时真的很火。
以前穷学生,没钱报课,只能买一本书,网上看一些免费的教程入门。
自学了几个月,把Java SE学完了,也学了mysql和oracle,但感觉云里雾里,似懂非懂,反正就是什么项目都做不出来。
和现在很多新手学单片机一样的,学完c语言、单片机,一做项目就一脸懵逼,写程序没思路。
现在做了技术10几年,才明白这个再正常不过了,每个工程师都会经历的。
解决办法就是多做项目,先做点小项目,再做复杂的,慢慢积累。
这是个转折点,很多人就是没跨越这一步,以为自己不适合,就放弃了。
或许当初我再坚持一下找点项目做,就成功了。
后面我研究了一下,原来Java SE只是基础,学完这个只是开始,还得选Java EE和Java ME继续学习。
我TM心态有点崩了,耗了几个月时间,好像连门都没入。
然后我也不管了,尝试去找工作,一直碰壁,当时连找啥职位都不知道。
后面有个培训机构叫我去面试,正庆幸终于有眼瞎的。
去到以后,一波套路下来,我算搞明白了,原来是招生的。
就是先用你的缺点打击你,你这种水平找工作没竞争力,需要去他们那里再培训提高才好就业。
我说没钱,他说没关系,可以先贷款,等你找到工作再还。
听起来不错,最后我还是走了,因为这个“老师”给我的感觉就像个骗子。
迷茫焦虑、浑浑噩噩不知道多久后…
生活所迫,不得不继续折腾。
如果经历过诺基亚时代的人,应该知道,当时手机的应用一片蓝海。
所以,我尝试选择Java ME这条路走下去。
现实比我想象要复杂太多了,教程少,又没师傅带路,新手靠自学根本入不了行。
误打误撞,我就是通过Java ME慢慢了解到单片机的。
深入了解了一下,发现这个东西好像比java简单,只需要会c语言。
后面,我买了一块STC89C52的开发板,有java基础很快就点亮了第一个LED。
顿时激起了我的兴趣,感觉比java有意思多了,竟然还能通过程序控制硬件。
相信很多单片机工程师入行时,也是和我一样,纯粹就是兴趣驱使。
如果看工资的话,很多人不愿意学,因为当年做单片机的工资比纯软件低很多。
大概学了几个月我忘记了,但是应该不超过3个月。
学习过程也没那么顺利,特别是学模拟电路那块,根本学不懂,差点放弃。
还好学开发板的时候,模拟电路很多知识用不上,只需要大概看懂原理图就行了。
我学了c语言、51单片机、基础电路、Protell99SE就去找工作了。
当时还不流行网上投简历,都是去人才市场,买门票进去投简历,然后现场HR面试这种。
事与愿违,不出意外的话,我能找到工作肯定是个意外。
拒绝理由基本就是学历、专业、工作经验、项目经验这些。
连续被10几家拒绝以后,是一种怎样的体验?
当时和一个朋友一起去找的,两个难兄难弟都没找到,然后我们去烤鱼店点了一份烤鱼,啤酒干了2,3瓶(不胜酒力),两个人大男人一条烤鱼一半都没吃完。
都焦虑到吃不下饭,然后不断在质疑自己,像我这种是不是不可能转行成功?
朋友也劝我,别人本专业都找不到,你怎么可能找得到。
我要不要先进场打螺丝,积累点工作经验再转会不会好一点?
后面我还真这样做了,我去找了一个修DVD的公司,每天像机器人一样,测试机器,听DJ舞曲。
做了一个星期,我就提桶跑路了,因为有一个同事给我洗脑,说我会单片机做这个干嘛,浪费时间。
辞职后,我冷静了一段时间,思考如何才能入行。
后面想通了,学历、专业、工作经验我都没法改变。
但是项目经验可以改啊,谁规定只有工作才能有项目经验,哪怕是业余项目,也比没有强。
找到这个切入点,我选了个智能小车的项目。

还好,某宝还保留着10几年前我的订单信息,不然大家还以为我在吹牛逼。
这个项目的图纸和程序,都还保留了一部分。

做完以后,我嫌还不够牛逼,后面又自学了VB,做了一个上位机,用上位机去控制小车,不过这块资料已经丢失了,当时记录笔记的网站也关闭了。

这个项目让我顺利地找到了工作,成功入行,虽然月薪只有1.8K。
我来对这个阶段性总结:
如果你还在这个阶段,不妨坚定一点,感性一点,定了目标拼命往前冲就行了,事在人为。
为什么你会觉得很难?
我觉得大概率是走了弯路,因为你没经历过,没经验,所以出现问题不知道怎么解决,不知道自己能不能解决。
如果有一个经历过的人,直接告诉你,他曾经也碰到过这种问题,并且告诉你,他是怎么解决的,我相信你会像开挂一样成长。
虽然入行了,但是麻烦还是很多,而是换了一种形式。
在前1-2年的时候,自己独立实现产品功能程序都有问题,我的目标就是能达到独立开发软件的水平。
到第3,4年的时候,基本大多数产品程序都能独立开发了,又觉得自己代码写得很烂。
最怕就是好不容易测试稳定,领导又说要改功能,看着乱七八糟的代码,都有想辞职的冲动。
这个阶段,我又有了新目标,就是把代码架构写得更好,扩展功能和移植到别的项目上都很方便。
这个阶段花费的时间最长,因为市面上没这样的教程,身边也没有什么好的师傅带。
后面突破这个阶段,就是完完全全靠时间和项目堆积出来的。
关于程序架构,我在2019年的时候也录了一套比较系统的视频,当时本来想卖的,后面工作一忙耽误了,现在直接开源回馈下粉丝。

是不是干货,够不够硬核,自己去看一下就知道了。
可以在小破站直接找无际单片机编程,就能看了。
具备程序架构设计能力以后,我的日子好过多了,因为做新项目就是复制粘贴,然后再增加一些产品特定的功能代码。
来新项目了,老板问我多久做出来,我一般回答3,4个月,然后可能1个月就做完了,剩下2,3个月摸鱼。
以上就是技术面。
但是工作又不止技术面,其它方面的烦恼也非常多,比如说在小公司里没量,供应商不鸟我们,做项目频频受阻,大公司又勾心斗角,拉帮结派,请个假要”一村人”签字才能批。
比如我总是一边靠这门技术吃饭,一边骂这个行业垃圾(工资低),总是比做java的同学低几千。
不过这些都是小问题,最困难的问题就是技术面和突破收入瓶颈。
技术面就不说了,我们无际单片机有项目实战特训营,拿出我们研发生涯里对我们提升最大的项目,信就干,不信也别喷,毕竟没强迫你,想学我们还得看缘分,看素质。

单片机工程师的收入瓶颈是多少?
这个还真不好说,跟学历、能力、城市、行业、机遇都有关系,最靠谱的就是自己去相关平台搜单片机工程师,看看平均值是多少。
我给个参考值,一线城市,大概在25-40K之间。
我为什么要出来创业啊?
做了10年,工资早到瓶颈了。
很多人问我,做单片机开发有没有年龄危机,能不能干到45岁。
我说能干到你不想干为止,因为大多数人做到35岁,就做腻了,要么转管理、要么转销售、要么创业。
我就是活生生的例子,不想继续打工,是因为我觉得自己的时间应该可以更值钱。
我选择了创业这条路,技术创业,犹如赌狗,十赌九输。
如果你站在理性的角度,肯定不会选择创业,如果你去问身边的人,十有八九不建议,做技术工资高又稳定,不香吗?
所以刚开始,做一个感性的,能死磕的傻比,相对容易成功。
太聪明的、想法多的、奇技淫巧多的,大概率会失败。
回想我转行的时候,再到现在创业2年多,哪次不是满腔热血,管他三七二十一,像傻比一样在看不到希望的道路上死磕。
如果你事事都理性去分析利弊,你会发现,这世上就没有你适合玩的东西。
不过,不了解我的人,不要被我洗脑,也不要模仿,要知道自己能承担的风险阈值,平衡这个点也很重要。
创业初期,我是完全转行,做了别的行业。
很幸运从第二个月开始就有收入,虽然每个月只有几千块。
你可能会觉得很假,什么?刚创业第二个月开始就有收入?
我的方法是砸钱拜师、砸钱买项目、砸钱提升认知。
有些课,一时半会对我也没啥用,刚开始觉得不止,踩坑了。
但是后面通过不断项目实践,慢慢就领悟了,能把这些知识串起来,形成自己的知识体系,最后把这个体系套用在不同的项目里。
接触行业越多,我越发现各行各业内卷很严重。
现在我很庆幸掌握了这个技能,让我有竞争壁垒,进可攻退可守,创业失败也可以回去打工拿个高薪,稳得一批。
但这个技能,对我来说,也仅仅是个工具而已。
所以,很多人说,做单片机没前途,做单片机没Linux工资高。
我选择沉默,毕竟,每个人看到的世界不一样。
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S
我有这个可以为我生成一个超链接:我希望它显示在td标签中,所以我想使用这个content_tag来帮助我:"example")%>我想要我的td中的超链接,所以我有这样的东西:,:class=>"example")%>但是我收到语法错误,我该怎么办? 最佳答案 内联:'example')%>或block形式:'example')do%> 关于ruby-on-rails-如何在RoR中使用content_tag嵌入标签?,我们在StackOverflow上找到一个类似的问题:
目录SPI总线SPI总线概述 SPI总线分类SPI优点及缺点SPI接口硬件原理SPI四种工作模式 74HC595应用74HC595芯片概述74HC595封装及管脚功能74HC595工作原理 编辑 74HC595串行转并行点亮LED灯 程序实现 Proteus运行结构示意图SPI总线SPI总线概述 SPI(SerialPeripheralinterface):串行外围设备接口 用途:用来在微控制器与外围设备芯片之间实现数据交换 特点:高速、全双工、同步 SPI总线分类四线制全双工SPI(同时收发)MISO 主机输入/从机输出MOSI 主机输出/从机输入SCLK 串行时钟CS或
文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室
一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、设计原理1.DS1302介绍2.闹钟音乐播放原理二、程序设计1.DS1302.h2.ds1302.c3.music.h4.main.c三、电路图四、运行结果1.proteus仿真2.开发板实验五、总结六、附件提示:以下是本篇文章正文内容,下面案例可供参考一、设计原理1.DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。该芯片采用普通32.768kHz晶振,DS1302工作时功耗很
目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式 2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置 3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一
我需要快速可靠的Ruby键值存储。有没有类似的东西?要求它完全在Ruby进程内运行,不需要任何外部进程。它可能在显式磁盘刷新的内存中。它需要具有最小的键值检索时间,写入时间可能不太好。存储的数据量不会很糟糕,大约几十万个键,每个键都有~1kb的文本值。 最佳答案 事实证明,对我来说最好的选择是使用纯Hash和Marshal将其序列化到磁盘。对于那么多的对象,YAML肯定太慢了。感谢@ian-armit加强了我对核心Ruby库的信任。 关于ruby-Ruby是否有任何可嵌入的键值存储?,我
给定一个任意的mongoid文档,我如何将其转换为JSON并包含任何嵌入式结构,而不是在我的to_json语句中特别包含这些结构。例如:#!/usr/bin/envrubyrequire'mongoid'require'json'require'pp'classDocincludeMongoid::DocumentincludeMongoid::Timestampsfield:doc_specific_info,type:Stringembeds_many:personsendclassPersonincludeMongoid::Documentfield:role,type:Stri