福建安溪清水岩从单片机转嵌入式linux,一位嵌入式er分享自己的经历和经验-嵌入式ARM

作者:admin , 分类:全部文章 , 浏览:73
从单片机转嵌入式linux,一位嵌入式er分享自己的经历和经验-嵌入式ARM
本人在杭州,我本科毕业后在一家小公司,主要做针对物流监控管理这一块的硬件系统,主要是电子锁和配套系统设备,属于物联网范畴。工作期间表现不错也做出了一些成果,得到了总经理和公司其他骨干(主要做技术的)的认可,2014年因股东间纠纷公司不做了,在总经理的策划下,我们原来几个核心人员重新注册了一个公司将原来的产品继承过来继续做,因此我成了合伙人。公司开了差不多一年到现在,我因为技术方向问题和经济压力太大而退出了,现在开始自学linux这一块准备转职,我今年将满26周岁。
之前3年多的工作经历,大概是这样的。2012年刚毕业准备找工作时,成绩一般般,硬件方面不太会,板子没画过(现在也没画过),因为大学的时候搞过那个飞思卡尔智能车竞赛,所以对单片机的编程比较熟一点。然后准备考研,因复习时间不够加上心静不下来,考研失败,遂决定工作,其实毕业想从事嵌入式Linux方面的工作,但是苦于没那方面技能,基本不会被录取(还有可能会上培训机构的当)。后来我到了这家公司,面试时和总经理聊的挺开心的,关于技术方面的东西也没有聊特别多,就大概说了下当时在学校捣鼓那个智能车具体有些什么东西,后来就要我了,当时还面了一个中型公司,初次面试和技术笔试都过了,就剩最后一轮了,后来想了想那个中型公司主要做汽车仪表的,搞单片机的,然后这个小公司做物联网相关的,而且以后可能会接触linux,看总经理这么大诚意我就去了这家了。后面我将称这位总经理为“头儿”。
毕业头两年是我的技术成长期,最开始做单片机+RF模块这一块,拿的是电子锁的半成品程序,功能比较简单,机械解锁然后通过无线将数据传到配套的采集节点上,无线通讯也是单向的(节点到采集端),没多久头儿决定研发功能更多的锁,主要特点在保证低功耗的情况下能够实现节点和采集主机AP的双向通信,以便实现远程指令解锁,然后这个任务就由我承担了,刘虞佳花了2个多月吧,把硬件WOR(Wake On Radio)这个技术自己琢磨出来并开发调试出来了,主要就是节点平常都是低功耗状态,当主机有指令下发时会发送一些特殊的数据把节点唤醒,然后节点在很短时间内接收主机的指令并执行。后来经过和前辈交流,把这个硬件WOR又升级成了软件WOR,硬件WOR依托RF芯片的一些寄存器和集成在里面的WOR功能,而软件WOR则完全使用软件控制。因为我是一个比较喜欢做成架构的人,也为了以后功能拓展或移植方便,在那段时间我也在看TI公开的一个simpkiciTI无线协议栈来学习下国外人是怎么写代码的,就把simpliciTI的关于操作RF底层的MRFI层移植了过来,再根据自己产品的技术需求,设计了以星型拓扑为基础的网络层up值,最后形成了一个小的协议栈。该协议栈相对于TI的simpliciTI相比优势在于能够实现低功耗下的双向通讯,主要是把WOR集成了进去,通过调用API就能够实现所有功能,而且应用层不需要干预RF的底层操作,完全由协议栈控制;还有比如在发送数据时可以通过传入的API参数选择发送功能,比如发送数据是否需要接收方确认回复,如果是的话,协议栈会自动完成一些工作,上层只需要看API返回值就可以判断接受方是否确认收到等。这个协议栈是专门针对某一款比较老的RF芯片设计的,不过对一些新的性能更好的RF芯片刘凡菲,也可以用,只是需要硬件移植,这个我一直没做过,因为公司一直没有更换RF芯片的打算。
说了这个协议栈这么多,我只是想说明下这个是我最拿得出手的东西,也是对我的技术成长中贡献最大的东西,因为从那时开始,总经理对我编程这方面已经放心了,之前写的代码还要给他看过,现在他也不用看了。协议栈做出来基本稳定是在13年初了,之前都是自己偷偷写的,大概花了2~3个月时间,然后调试优化了一段时间。最后提出来的时候感觉头儿还有硬件主管还是眼前一亮的。
其实在此期间我也同时在做无线主机方面的开发工作,最开始用的单片机和节点的是一样的,后来因为主机功能定义修改,使用了NXP的芯片,我终于开始接触ARM架构Cortex-M3和OS有关的东西了——u/Cos。其实公司还有车载定位主机和平台,当时我不是负责那一块(后来也一直没有负责那一块,因为主机的代码不是我写的,编程规范不符合我的风格,缺少框架,很难看懂,其实自己也不想看,后来因为一些项目需求,我曾经两次看懂了然后一段时间全忘了),但是每天都看在眼里,也很想尝试下。之后,我从ARM官网下载文档把CM3架构弄懂了(当然现在都忘了),然后把u/Cos作者自己写的u/Cos英文文档也看了一遍,关于uCos大部分都比较熟悉了(有些没用到的就没怎么看),自己还根据文档写汇编语言移植过ucos系统。后来主机升级成跑ucos,然后移植了自己写的协议栈。产品在应用层上花的功夫,其实要比协议栈多蛮多,但毕竟是应用层的东西,也没什么好说的,能说一些的就是如何把框架设计好,能够提高软件效率,方便二次开发和修改,这个其实看个人,我属于那种喜欢做成规规矩矩的,当时没事就琢磨框架怎么搭比较好,还有就是多看别人的代码,尤其是外国人写的代码,启发挺大的。
到了2014年,公司换了一个比较大的地方,说大股东准备增加投资福建安溪清水岩 ,公司要扩大规模,当时头儿说准备让我接触linux,公司准备把一些产品进行升级跑linux,以便扩展更复杂的应用,我自然是欣喜,因为搞了单片机,又有一些os还有arm的基础,学起来应该不会费力,但是linux内容比较多,还是要花很多时间慢慢去啃。因为扩大规模,公司要招一些新员工,13年年底到14年年初,头儿让我去给应聘者面试,之后我接触过本科的,研究生的,见过牛人红崖天书,也见过一般般的,也见过来到公司面试后自己主动说无法胜任而离开的;关于linux方面的,因为我不懂,也只是顺带提一提,但是我发现要是做linux的,很多都是培训机构出来的,而且很多也只是草草学了下,不太像做技术的料,不过也见过一个牛人袁天凡,应届本科毕业,毕业前Linux已经玩得很熟了,说想去培训机构深造下金樱子酒,最后跟我说在培训机构也没有学到太多的东西。其实当时我想让公司招一个linux牛人,然后带带我,因为这东西自己学弯路会走很多,但是事与愿违,想要的人都不来(不知道是公司给太低还是觉得我们小公司没啥希望),结果招了一个应届的渣渣(反正每个月交给他的任务一个都没完成,都是应付式地工作,而且明知道任务没完成,还每天按时下班的那种)远古守卫者,我想我是被欺骗了,但是头儿似乎也被欺骗了,最后再次证明了便宜没好货的真理谭峻鹏。初次招聘这么难招到人,当时我开始有点怀疑总经理的想法和公司的财力了(我的工资也是比较偏低的,只是一直抱着某种期盼一直坚持着,不过从13年年中开始每个月递增)。到13年年底,事与愿违,头儿后来决定智能锁要和app结合起来,当时安卓已经很流行了,于是我开始接触的新东西不是Linux,而是支持低功耗硬件的蓝牙BLE4。
我们用的是TI的BLE4.0,然后我负责做蓝牙的智能锁。关于TI的BLE4.0,如果要钻的深,挺需要时间,但如果不是用到很复杂的功能,你也不想对蓝牙协议栈了解太多的话,相对来说2~3个月差不多了,不过我对这个热情不是很大,因为这个其实就是TI基于自己硬件平台上搭建的支持BLE4.0协议的软件架构,你只要读懂最上层的架构就行了,不需要去理解蓝牙更深层的协议,但是在开发过程中也遇到很多问题,因为当时这个东西刚出来没多久,而且到目前为止也是基于TI公布的示例工程的基础上进行修改和添加的,因此它无法满足各式各样的硬件需求,而且TI软件架构自带的驱动还有些问题,比如DMA支持的UART下在大流量数据下会出现数据不完整或篡改;再比如自己项目用到的串口不是示例工程的串口1而是串口2,那么你必须要去修改底层,这个花了我挺多时间,因为为了搞定这个,我花了很多时间去读底层代码和看相关资料还有调试;再比如,你的应用层代码不能占用MCU太多的时间,因为蓝牙协议栈底层需要充足的MCU时间,否则你的蓝牙连接就会断开而且不可恢复(只能重启)。因为这个东西比较新,兼容性还不太好,灵活性太差,最关键一点是,它还是单片机张婉如,总之,我实在不怎么感兴趣!
这个时候,公司内部开始闹矛盾了,主要是利益和权力的纠纷,头儿一方面想留住人,想和股东商量让我和同事A能够持有股份,另一方面要掌握公司的实权,因此他和另一个管财务的股东搞僵了(是女股东),最后的结果是公司不做了。在头儿策划下,我先辞职,然后几个核心人员都辞职了,我和头儿先到宁波另外一家公司上班(头儿带我过去的,在我看来,那家公司虽然是小公司,但是那个公司还是挺有钱的而且环境不错),之前说好我们暂时过去的,等这家公司在杭州成立子公司后再过去由我们头儿管理,但后来发现头儿被忽悠了(那家公司的总经理想让头儿担任分公司CTO然后自己当CEO,但是头儿要当分公司CEO而不是CTO),后来我们也就离职了。期间尽力了蛮多东西这里就不说了,总之我在那边待了一个月不到就回来了。
到最后,原来几个核心人员在杭州注册了一家公司,继续做原来的产品。也就四五个人,做硬件的只有一个,原来的硬件主管。从公司成立后,硬件主管工作了一个多月就开始生病,他身体不好,因为我不会硬件,我只看得懂原理图,因此项目就被严重耽误了,15年初,原来做的智能锁系统因为故障率比较大,加上商业上关系和客户处理的不好,把这个客户给丢掉了,公司比较大的利润来源没有了,到了今年5、6月份,公司把14年赚的钱也开销光了,已经快没钱重练葵花,因为当初股东有协定:资金不够时为了优先保证普通员工的工资的发放,股东是没有工资的。到6月底,我已经有2个月没拿到工资。因为13年年底,在家里人的支持下,我在杭州买了房,过起了房奴的生活,每个月5K多的房贷中,家里承担一半,我承担一半,自己也已经成了家。因为自己的工资本来就不高,而且成立公司的时候我把之前工作的一点点积蓄再加上老婆的继续都拿出来投到公司了,鉴于公司前景、自己的技术前景和经济压力,自己最终选择退出。目前无业在家,自学linux准备转职。
其实硬件主管生病影响确实挺大,我离开的时候只留下蓝牙锁半成品(支持低功耗、集成了GPS和GPRS模块),软件还没有最终定型和稳定测试,硬件还有些问题没解决。硬件主管后来因为比较严重的肺炎到我走之前为止都没有来公司正常上班过,只是偶尔过来帮我们解决下问题就回去了。我自己其实不喜欢放弃,但是现实情况的确十分糟糕:
1.头儿对公司产品定位目前就是蓝牙方向,和我技术期望方向不一致,而且目前做的东西对我技术方面的提高已经快到上限了,另外我也一直等着我能搞Linux的那一天(现在觉得我太单纯了,其实在公司组建之初就应该好好想想的,当时只是凭着和总经理的感情和创业的心情,实在不好意思拒绝);
2.公司近况堪忧,因为硬件没人做了,人手不够,团队也不是很和谐,原来的产品生产加工又复杂,成本大,到最后我基本沦为产品的生产者,做着一些和研发不相关的事情,比如焊接板子,排查解决不符合质量的硬件板子,总经理还让我负责和客户间联系生产安装的事宜,让我锻炼下比如沟通方面的能力,这都是现阶段我不喜欢做的事情,至此我的研发的心态已经荡然无存,再加上公司没钱,发不了工资,为了维持开支,公司慢慢沦为倒买倒卖的性质,公司研发几乎已经退化殆尽,感觉我这个研发的已经没有什么存在的价值了;
3.团队凝聚力不够,气氛不太好,几个股东:同事A,头儿,硬件主管(一直生病),同事A呢他主要负责公司杂七杂八的事情,之前他进原来的公司比我晚一年,但年龄比我大一点,刚进公司是技术支持。以前还好的,一起工作挺开心,可能因为他只是员工,而我当时在公司的地位还是挺高的,因此他并没有表现更多的东西出来。公司成立的时候为了想后面拿到大学生创业补助什么的,同事A变成了企业法人,但实际上头儿才是老大,同事A说难听点只是傀儡,同事A股份本来比我少的,后来总经理说为了公平一点让我和他股份一样,当时也是想也没想就同意了。到现在,可能因为同事A自觉是企业法人,公司的财政都是他和头儿在弄,经济命脉在他们手上,再加上之前做的产品故障率较高,因为他主要对外,产品故障多的话自然给他增添了很多麻烦,他现在对我的态度是越来越差,对我牛逼哄哄的,慢慢的他身上一些和我不太和谐的特征也慢慢体现出来,自己感觉和他一起工作很不开心。另外,我记得原来总经理找我单独谈话时说过一句话:现在你们研发为公司做的贡献还是0,因为产品研发进度慢罗通的儿子,问题多,无法作为产品公布,都是靠安装人员和业务人员跑一些其他单子很少的产品还有倒卖的一些产品赚的钱来养你们研发的(这不是原话,但是意思是这个意思),虽然这句话没错,但是觉得对自己的打击很大,感觉我这个做研发的已经没有什么在这里继续待下去的意义了;
4.个人经济问题,的确是没钱了,工资没得发,每个月房贷还得还,再这样下去两三个月,房贷我已经还不起了。
其实公司成立之后,自己慢慢对总经理的看法也变了,变差了,对他不再信任了.我想是我长大了,不幼稚了,但是为何都需要这么痛的领悟...另外,自己的思路和总经理也不一样,曾经在产品设计上提出很多的意见几乎没有被采纳,而自己其实还是挺倔的许西川,但是不想和合伙人争吵闹翻脸,也就算了。总之公司的实际控制人是头儿,我们只能提意见,接不接受是他的问题;至于同事A,我觉得他好像对总经理唯命是从,遇到我和总经理有分歧也是站在总经理那边,很多的无奈与委屈也只能默默承受。后来看了一篇文章,说创业合伙人最好不超过2人,文章说要是3人的话,就会出现2个人合伙把第三个人逼走;要是合伙人更多,那情况更糟,就是拉帮结派了。我这个情况,感觉和前者有点像。
总结起来,自己在最后快离开的时候自己做的不好,因为我做研发的,情商比较低,在最后一两个月里,因为我想退出又不知道如何开口,最后把自己内心摧残的比较消极,给公司其他人也带来了消极的影响,最后没有把自己分内的事情负责好炎帝传奇,加上沟通不及时,最后退伙的时候和头儿闹翻了。分手是很难好心的,撇开不说,其实想想在这2年技术成长期和1年多的社会经验体验期还是经历了其他同年龄人没经历到的东西,社会阅历也丰富了些,也明白了自己的一些缺点和认识到以后一些需要引以为戒的地方李汶桐。目前,我决定还是按照自己的规划去走。
自己咨询过一些同学和朋友,关于linux,目前做驱动的话,一般都是移植别人的驱动然后再改一改,相对来说做应用没那么枯燥,目前安卓也发展起来了,关于以后做不做安卓我现在还没有什么看法,目前把linux弄懂了再说。另外,自己属于那种如果不深入了解某个东西就很不舒服的人,所以我现在主要是在研读《understanding the linux kernel》这本书,教学视频还有自己动手实践没有太多去做,之前零零散散也实践过一些,但是也都只知道用而不明白更深的原理。以前看过一个大牛说自己辞职半年学linux,一开始也是先看内核的东西,关于linux的学习方法,还希望前辈多提提意见,个人觉得学习方法因人而异。
最后,自己觉得事业的开局是糟糕的,而且技术上自己和厉害的人比起来还是差了许多,很多东西因为工作的局限性我都没弄过,这段日子感觉也耽误了很多东西,把老婆也连累了,也让家人担心了,和其他同届的同僚们比起来自我觉得很苦逼,目前压力也比较大,留给我的时间也不多,总之相信事情会变的好起来。
自己目前的感悟是:
1.创业真的是风险太大,三思而后行;
2.有时候不能考虑太多,该果断就果断,关键问题要冷静思考不能被某些因素冲昏头脑,比如我当初就不应该选择跟随头儿去创业
3.脚踏实地,稳扎稳打,怎么也要保证生活,饭能吃饱再考虑规划更伟大的计划
4.最后,自己的命运把握在自己手中,不能过于把希望和幻想放在别人身上,说实在的我一直把个人希望寄托在头儿身上,但这真的不靠谱 5.合伙人之间要有领头的,但合伙人之间要平等,我感觉我创业就像是员工,我其实能对公司产生的影响非常非常小,几乎没有,公司完完全全是头儿控制的,说难听点就是他自己一个人在开公司,我们都是跑腿的。
在这里,希望我的经历能够给大伙儿以帮助,望大家引以为戒。



文章归档