一.前言
猛然发现,自从三年前跳槽来到现在就职的半导体企业,这三年公司都没有要求做年终总结,往年这个时候的年终总结项目居然有荒废三年没做了,以前总是觉得年终的这个项目意义不大,无非就是上一年的总结改个年号今年继续用,但是这三年没有做总结又感觉少了点什么,总觉的自己一年也不知道做了什么。作为每天必须要到面包板社区逛一会的老坛友,刚好看到了【2024年末活动】这个活动,就借着面包板社区的这个活动也好好总结下今年吧。
二.2024在面包板社区的足迹
既然是从面包板社区看到的这个活动,那么就先来总结下在面包板社区的足迹吧。
在面包板社区今年参加了芯语专栏,开发板测评,图书测评,拆解活动等。逐一回忆下各个板块的足迹。
2.1 芯语专栏
其中芯语专栏累计发表了172篇文章,到目前累计了110545阅读。这些都是个人工作中相关内容的一些总结,不像其他博主一样的简单搬运整理,这都是个人实际工作中相关内容全原创一点点写出来的,有自己的思考与总结,所以都是干货。把它分享出来一方面可以加深自己的理解,一方面也可以作为知识积累,备忘,构建自己的知识库。这也是作为嵌入式老鸟一直推荐嵌入式开发者去做的,知识,能力和技术就是不断点滴积累的,分享文章是一个很不错的方式。做嵌入式开发不可能某一天跌入某个峡谷捡到一本武林秘籍就可以天下无敌,嵌入式开发是需要点点滴滴积累的,遇到的问题越多,遇到的新技术越多,解决的问题越多,功力就会越强,当然这是需要自己实实在在消化积累的,而不是简单的经历过的,经历过和经验是两码事。而分享总结文章就是一个不错的消化吸收,积累的方式。
2.2 文章博客分享
主要是测评,拆解等活动的文章分享
2.3拆解活动
个人觉得拆解活动是一个很不错的活动,本人从小也对各种电器比较很感兴趣。拆解能激发人的求知欲,一拆一探究竟,抱着学习探知的欲望去拆解,可以学习别人的长处,学习新的技术等。其实在工作中产品开发中,借鉴,分析竞争对手,类似产品等也是一个必要的开发过程和手段。
个人要重点分享的是【拆解】+什么?智能锁也能玩游戏-智能锁超级详细拆解分析与改造玩转NES游戏完全实录 https://mbb.eet-china.com/forum/topic/142340_1_1.html 这一篇的诞生过程。
这一篇可以说实打实的花费了自己将近两个月的空余时间。因为对目前市面上的智能门锁方案比较感兴趣,于是抱着学习的态度去拆解了一款智能门锁的方案,从这个拆解也让自己对这个方案有了一个整体的了解,这就是对未知领域了解的一个很好的手段。这篇文章发布之后,甚至很多想进入或者就是从事智能门锁行业的朋友都私下找我聊问我是不是就是从业人员,其实个人并不是这个行业的,只是兴趣求知欲使然去探究了一番。最后脑洞大开,激发了将其改造为nes游戏机的点子,并且付诸行动,完成了改造,最后自己在上面玩起儿时的冒险岛,魂斗罗时感觉这就是技术与兴趣结合的乐趣与浪漫。这篇文章在微信中阅读也都是过万的,说明好玩有内容的分享大家都是很认可的。还有其他多篇文章微信公众号也是超过万的阅读。
总共参加了两期拆解活动,两期分别获得了二,三等奖,
这里要感谢面包板社区提供好的分享平台。
2.4 开发板测评
开发板测评也是一个学习接触新技术的很不错的方式,记得早在大学期间,就省吃俭用买了各种二手的DSP,ARM,CPLD开发板,也正是当时一点一点慢慢积累,走向了嵌入式开发的门。当时虽然不一定研究的有多深,但是至少那时就了解了DSP,CPLD,ARM等技术,并且有了一些基本的开发经验。现在去参加测评也是类似的,希望能去接触到新的东西。
比如RISCV,ARM等不同平台的技术,比如不同厂家的SDK风格,不同厂家的设计思路等,这些都是可以自己参考学习,学习人家的长处为己所用,这才是目的。
2.4.图书测评
个人也比较喜欢买书,虽然不一定每一本都看完,但是个人觉得只要一本书能了解,学习到一个知识点,技术点,觉得就值。在面包板社区也申请了如下图书测评,大部分是和行业相关的,也分享了一些和个人工作相关的理解与思考。
三.2024工作总结
现在就来不如正文,分享下今年一年的工作究竟做了什么。
3.1本职工作部分
先来总结下本职工作一年的产出。
虽然公司没有要求日报周报,但是自己还是有习惯简单记录下每天的工作,看到下拉下来的这个文本,感叹一年真的过的很快,仔细浏览下这个记录发现其实一年也是波澜不惊,但是,产出还是不少的,总的来说就是一年又一年,逐步成熟,积累,有机会就迈入新的领域。
最大的成果是,去年的ai soc项目大部分驱动和demo完善,该解决的bug已经解决,已经开始支持客户量产。 新的项目进入,进入了linux开发领域,完全从0完成了新的soc的linux平台的sdk搭建。之前主要集中在MCU,RTOS等领域,对linux有些了解但是没有全新从0开始过,这是一个新的开始。
2024年本职工作还是SDK开发,再来翻翻随手记的每天的工作记录发现其实也做了很多事情。
涉及USB相关的各种demo的开发UVC/UAC/CDC/WINUSB等等,涉及USB驱动性能优化等,甚至为了测试方便还设计了一款USB调试上位机(整个过程分享在了微信公众号上),还将该上位机软件申请了软件著作权,公司还给了5000的奖励。
H264/MJPEG编解码驱动
GDC驱动等
最记忆尤新的是过完年,就火急火燎跑到客户那去调试UVC的问题,我们的主机接客户的显示屏,始终有问题,而客户适配的其他家的主机没问题。最终抓包对比整个过程,才发现描述符有一处不一样导致,客户的显示屏某个描述符必须是指定值才能工作,而客户这部分驱动也是第三方的,他们自己也不知道有这个限制,所以我们花了很大时间去调试。虽然说根本上来说不是我们的问题,但是实际嵌入式开发中会遇到很多类似的问题,尤其是作为乙方,所以这个时候好的心态,丰富的经验就很重要了,相信很多同行会深有同感。抛开问题本身,作为乙方换言之通过类似问题,提升自己公司的形象,专业态度也是很重要的,虽然不是自己的问题,积极主动替客户解决问题也是商务上的考虑,所以往往不要限制在技术角度考虑问题,同时还要站在更高更宽的角度去考虑问题。
然后适配了一整套音频方案demo,包括ADC/IIS外置编解码芯片采集方案,PDM/PWM/IIS外置编解码芯片播放方案。
然后做了更详细的USB的PHY,BIST测试,理论上这个不属于本职工作,应该术语芯片设计和验证的事,但是既然做了USB驱动就主动更深入一点。这也是个人额外能力积累提升的一环。当然相关的内容也都分享了文章。然后重构了原来的USB驱动完善了USB设备协议栈。
然后就是配合客户的各种方案,文件系统,GUI等各种方案适配和Demo。
后面就是开发了一套USB的上位机开发环境,用于提供USB通讯链路,给构建ISP的上位机提供基础。
然后就是各种驱动的BUG修改,发现原来的DMA,SPI,IIC发每一个驱动居然都有问题,性能问题,边界条件时问题等,又花了一段时间把所有相关驱动问题都解决掉。
然后又是客户的SDIO适配客户的WIFI的问题,尤其客户的WIFI没有文档,甩了一个代码包,于是又花了大量时间吭呲吭呲把客户的WIFI代码梳理清除画了流程图说明文档,抓了包,一点点完成适配。经此一折腾,客户自己都没有我理解客户的代码了。
然后是以太网驱动适配调试,demo开发等。
下半年开始接全新的项目,RISCV64位平台soc的linux sdk开发,这对于个人来说也是全新的,之前也没有完全从零做过类似的工作。 从opensbi适配,到buildroot,到linux 各驱动调试,到linux内核仿真调试,到目前已经可以跑起内核,相当于迈出了一小步。
总结一下一年的工作就是,各种驱动的开发完善bug解决,demo的开发,客户的支持,这部分内容都很充实,算下来几乎所有的驱动都是自己一手调下来的,下半年新的领域linux开发,得益于自己对芯片架构,bsp开发非常熟悉,所以迁移到完全独立主导一个新的soc平台的linux开发也难度不是很大, 花了点时间熟悉相关工具和套路也基本玩的差不多了。 后面就是适配pcie等业务相关的驱动,然后现在立个目标,到时在再重点研究下性能优化,希望这个项目在性能上有惊艳的提升。
3.2 私人部分
主要还是公众号的分享上,目前公众要已经积累了接近5000的粉丝,文章也还是平常工作中相关的干货分享,
今年总共发表了大概150篇文章,平均两三天就有一篇
同时还玩转了一下fpga,搭建了基于玄铁开源c900的riscv环境,主要是有时候一些内核级别的内容个人想深入了解一下想问同事,但是大部分可能理解也不是很深入,于是想着直接自己上手搭建环境,这样可以从代码仿真级别去了解,这又有助于自己软件驱动的编写与理解。
四.2025年展望
2025年希望去年开始开发今年客户持续支持维护的AI SOC项目,能全面开花量产,今年已经开始有一些项目量产了,然后能平台持续优化做到好用稳定。
2025年完成新的高性能SOC项目,linux sdk开发工作,因为主要是用于高性能通讯领域,其实个人心里积蓄了一个小目标,希望到时能在性能方便做到惊艳的优化,能震惊一下各方。
个人经历分享和给嵌入式开发者的一些建议
总结到了这里,其实不由得想要回忆下自己的嵌入式开发的生涯。最开始在大学时得益于一个好朋友的提起,接触到了单片机开发,从此对此产生了浓厚的兴趣。在大学时最开始购买51开发板学习,然后是接触到ARM,购买ARM9的开发板,同时DSP和CPLD等都产生了兴趣,也都买过开发板了解了基本的开发环境。
然后是毕业,第一份工作,其实找的不是很对口,去了一家摩托车主机厂负责电子仪表开发,实际上也不负责具体的开发,主要还是结构方面开发,电子方便是对接各种供应商。所以当时还去东莞培训了三个月的模具设计,而自己只对编程感兴趣,刚好发现UG可以编程开发插件,于是捣鼓了三个月的UG编程。回到公司实际也是改改图纸,测试等,其实和自己感兴趣的电子开发没太大关系,但是个人还是将兴趣应用到了工作,虽然自己不开发仪表,但是基于uCGUI做了液晶仪表的Demo,当时还得到部门经理和自己师傅的支持,用这个作为Demo和供应商日本精机探讨电子仪表的开发,当时还去了他们上海的办公点,在我们还是机械式,指针式仪表时,看到他们新概念的3D,液晶仪表很是羡慕,希望如果能在这样的企业工作就好了。在这个公司虽然不对口,但是还是尽量和自己的兴趣应用起来,比如自己设计指针式速度表的步进电机驱动方案,研究如何实现细分驱动,如何实现加减速跟随平滑等,研究车载充电,燃油表等方案。然后不到三年觉得工作不对口,最终还是辞职了,这一段时间其实自己大部分时间还是在自学,比如stm8,stm32,rtos等,也有一些简单的实践。这一段时间把ucOS的代码每一行都研究透了,把大部分ARM的手册规格书都看了至少一遍,把stm8,stm32所有的手册规格书都翻的很熟悉,每一个外设都根据寄存器直接编写过驱动测试。也是这一部分打下了坚实的基础。
辞职后跑到长沙找工作,由于之前工作不对口,其实不太好找电子相关行业工作,在长沙找了个做自动售卖机的小企业,呆了没几天觉得不靠谱,自己把电烙铁,一堆书,和被子等丢下不要,直接跑路了。 最终由于毕业学校还不错是985,去了衡阳某个做矿冶相关的检测设备的企业,当时由于对ARM比较熟悉,花了一两天就搭建了某个功能的demo,让当时的同事经验了,因为当时熟悉ARM的还不多,大部分都是用51,avr,pic等8位16单片机。然后老板也比较欣赏,直接就说给我3W块钱额外奖励搞一个单总线的产品方案,包括硬件设计和软件设计。当时由于家里出了些变故就从该公司离职了,工作了不到1年。
后来又去了重庆,重庆也找不到合适的工作,最终找了一个很小的企业,做在东北那种小铁路线上的道闸相关设备。只有我一个人,记得当时上下班要公交差不多单程两小时,自己就在公交车上看手册,玩windos phone升级,当时买的是诺基亚的920搭载wps系统。当时就业余学习自己设计at91的arm开发板。 工作就是基于stm32做的不是很复杂的产品,需要检测道口的关闭,火车是否到来,然后语音报警,通讯就是买的4G模块,当时经验不足稳定性总是有问题。还记得当时去东北出差,去道口安装行程开关,设备,去火车道轨上安装霍尔传感器等。说实话东北的环境真好,夏天去的,天很蓝小溪很清澈。这一段时间工资很低记得就5000,还没五险一金。但是这一段时间至少积累了一点项目经验,毕竟软硬件都是一个人做摸索,这一段时间个人成长不多,算是走了弯路,但是弯路也算是经验也是成长。
最终还是觉得不合适,跑到了长沙找工作,凭着之前自己的自学和一些之前的项目经验,虽然不是高大上,但是好在都是自己实打实做的,所以进入了长沙一家头部电力企业。其实从这里开始才算自己真正的进入了嵌入式开发行业,所以对这一段经验很是感激的。这个企业给我提供了很好的平台,自己学习能力技术能力也得到了很好的发挥,尤其是对软硬件都比较熟悉是一个很好的优势,从这里开始负责MCU的BSP平台开发,解决各种技术问题。记忆最深的是解决一个文件系统损坏的问题,使用nandflash,记得当时是使用的rtthread前身提供的ftl层驱动,当时rtthread才创建不久,现在已经发展到家喻户晓了。记得当时解决这个问题也是惊心动魄,花费了很多精力,也是个人很大的一个工作亮点。慢慢的在这个公司就成为了技术比较厉害的人,包括现在还偶尔有前同事和我提起,这个公司还有大量代码都是留有我的名字,毕竟当时MCU平台几乎都是我做的。也是这一段时间买了个偏僻地方的房子。这一段时间对rtos和文件洗头膏,gui,以太网,usb等等各种驱动有了实践和更深入的理解,在工作方式方法上,技术能力上,解决问题能力分析问题能力上也有了很大提升。
当时在这家公司觉得薪资提升没有希望,于是又找工作,由于有这个电力行业企业比较出色的工作经验所以再找工作就顺利很多了。当时其实都准备签约中车了,机缘巧合又去了一家不大的汽车电子企业,因为恰好是这家公司要在长沙成立公司,可以在长沙办公。在这里薪资也有一些提升(比中车高),然后完全从0,开发水泵,车窗电机控制器等,防夹算法等,这一段也比较幸苦需要租车自己拆解安装测试,甚至去客户那里测试,一天就是呆在车上调代码,并且由于是做的配件市场,甚至协议都需要自己去破解,还记得和hr两个人一个办公室,天天在办公室测试防夹算法, 用自己的手指手臂测试玻璃的防夹,这一段实践也锻炼出来了能自己拆装车门换车窗控制器的能力,因为经常要租车测试都得自己动手。也是这一段时间交房,买车。总之这段不是很轻松,但是也算是行业经验增长,毕竟汽车电子行业还是不错的,这一段时间做的几个产品都量产了,也体现了个人的嵌入式开发的能力,薪资也有一些提升,但是终归觉得不是自己的归宿。
于是继续找工作,当时找了一家大长沙大家都知道的工程机械的国企,都准备过去了,又是机缘巧合,被一家商业航天企业hr找到,面试当天还车胎扎钉子修车去了,因为已经有offer在手,这家公司也不大不出名,都打算放弃去面试了。但是因为入职还有一段时间,后面还是和hr约了新的时间面试,去面试了才发现感觉不一样,完全是互联网的风格,以前都是制造企业完全不一样,这边完全是更自由地风,当然面试也体现了个人的能力,面试官意见很好,于是顺利就去了这家商业航天企业。待遇各方面也好了一些,在这里还是体现了个人软硬件都比较熟悉,然后对底层原理熟悉的优势,解决了大量的BUG,能力也得到了认可。这一段时间工作性质其实也是感觉很自豪的,去了文昌发射中心,去了北京,合肥各种所调试,看到新闻报道自己参与的第一颗商业sar卫星发射成功时还是很激动自豪的。在这一段时间,结了婚生了小孩,记得出差时媳妇怀孕大出血,当时正在安徽出差,晚上十一点火急火燎赶车回来。幸好媳妇很坚强,小孩也很给力,最终惊险一场小孩顺利出生。 由于家里一些新的状况原因感觉家里消费压力大,当时媳妇生娃在家修养,小孩请了保姆照顾,丈母娘生病住院请了陪护,全家多份支出,只有一个人工资,就觉得希望工资再高点,于是考虑去北上广深圳奔着高薪资拼一把。 也是机缘巧合,有猎头推荐的一家希望在长沙成立子公司的半导体企业,技术面试也是无问题。 但是后面又没消息了, 在准备要去外地找工作时,猎头又回过来找我说这家公司现在确定又要招人了,所以最后就去了现在所在的公司,可谓是好事多磨。
个人的经历其实走了很多弯路,但是也坚持了很多正确的路,弯路是毕业前几年,兜兜转转没有找对口的工作。正确的路是从大学开始,一直坚持兴趣导向,没有荒废技术,一直都在学习实践,哪怕是工作不相关,也是想办法学习新技术并实践。
所以从最开始的摩托车企业虽然不对口但是自己做一些相关的小项目demo保持学习,到后面去长沙,重庆一个人做小项目算是正是进入嵌入式开发的门口,然后去长沙电力企业,这里算是提供了好的平台正是入了嵌入式开发的行,得益于自己的不断努力,和能力体现以及公司的平台这里才算是正真的入了行,后面再各种原因跳槽其实也都是越来越好,比如出于薪资跳板考虑的汽车电子行业,出于行业考虑的商业航天企业,到目前最终选择的半导体行业。在每一行都得益于自己的技术积累,以及对技术,行业相关的热情,解决问题的能力,平台给了自己机会,自己也发挥了自己的优势有相应的产出。道路是曲折的,但是最终还是上升的,直到现在比较稳定在目前的企业,个人柑橘得益于对技术的热情与持续学习。
作为一个嵌入式老鸟,前面可以看到入这一行也是有过一些曲折,给一些嵌入式新手一些分享
- 保持学习热情,前面分享的这么多经历,个人唯一没有落下的是持续保持学习,在每个企业都是结合行业,工作内容,深入研究相关技术,保持学习,刨根究底了解根本南原理。所以每一段经验都是积累了很多扎实的经验能力。
- 积极分享,个人一直推崇一句话,自己觉得懂了不算懂,只有能用几句简单的话让非专业人士也懂,才能说明你懂了。这也是个人喜欢分享文章的原因。写文章分享的过程会让自己重新思考,在尝试让别人懂的时候,也会逼迫让自己去真正理解而不是一知半解。
- 构建自己的知识库,上述的分享文章总结也是一个方面,同时我在公众号里也会分享制造自己轮子的一系列文章其实都是自己知识库积累的过程。平常遇到的问题等都可转化为自己的知识库积累。
- 保持对技术等持续的热情,作为嵌入式开发者尤其是如此,一定要又深究底层原理,从思想层面去理解一件事,而不简单的从某个技术细节侧面理解。
- 有深度,保持广度,在某一个方面持续投入,保持自己的深度这是不可替代的一个杀手锏,哪怕裁员自己也会有不可替代性,自己肯定是最后一个被裁的。当然保持广度是让自己有更大的空间,哪怕全公司裁员,比只限制在某一技术领域和行业的人也会有更大的机会。比如我从事过电力,汽车电子,商业航天,半导体,但是每一家嵌入式相关核心技术都是相通的,保持核心技术能力,但是在各个行业都有一些横向积累,比如商业航天的可靠性等应用到电力汽车行业,汽车行业成熟的开发模式应用到商业航天领域等,这就使得自己不限定于某个行业,在任何其他行业都可以发挥能力而不会被淘汰。