2014年秋,我踏入了大学校门。进大学头一个月不是马上就开始上课,而是跟着学生会在学校里转转了解校园,然后就是在教室里听无聊的入学教育。在这期间我发现学校有这么几个有趣的地方:
1.机器人队
2.车队(玩方程式赛车)
3.飞思卡尔
4.创新实验室(玩无人机)
当时参观这些地方的时候感觉里面的人都好厉害啊,居然能让机器人自动在地上跑来跑去,还有巡线小车。当然会飞的无人机最吸引人了。于是我就了解了一下怎么样才可以加入他们。
半个月后,学校的百团大战开始了。在此有必要介绍一下百团大战,所谓百团大战就是学校的学生会和社团开始招新,他们在校园里骗大一的新生加入他们。当时我想参加机器人队,不过我落选了。然后退而求其次进了创新实验室,也就是玩无人机。进去才知道,原来飞机不是他们自己做的,他们真的只负责玩。我一下子兴趣就没了一半,不过他们给我指了一条明路就是让我知道了控制这些机器人或者小车跑的都是单片机,而要想给单片机编程就必须先学会C语言。
于是我在学校图书馆里借了一本宋岩写的一本C语言的书开始学习。这本书真的很好,虽然我忘了它的名字但是它让我从一开始就透彻的理解了机器以及编程的本质。我用了两个月的时间吧这本书读了两遍,并且亲手把书上的每一行代码敲进电脑并运行了一遍。然后收获颇丰,学编程跟学骑自行车是一样的,不能光看别人怎么骑,要自己也骑上去试试,要自己摔几次才能学会。两个月我从抄别人的代码都超不对到能准确无误的抄对别人的代码,这个过程是让自己能读懂代码。然后在抄的的过程中可以改别人代码的不足,这个过程就加入了自己的思考。最后就是自己可以用程序解决一个小问题来锻炼自己独立编写代码的能力。通过以上三步走的方式,我在C语言方面已经走在了前面。
2014年11月,我花了120块钱买了第一块开发板,是一款比较全面的51单片机的开发板。虽然照着教程了解了一点,但是一个月下来我只学会了点灯和数码管的静态显示,对数码管的动态扫描始终不得要领。
时光转眼来到2015年夏天,这才真正开启了我的嵌入式学习之路。我凭借扎实的C语言基础成功通过了学校机器人队的面试,在那个炎热的夏天和十几个人在学校机器人队的地下室开始了暑假集训。我只用了一个半月的时间就学会了51和stm32的库函数开发。虽然说是培训,其实是自学自练。
培训分为三个阶段:
11天学会51单片机基础,并独立完成8个编程训练任务。
一个星期了解基础的硬件知识,包括AD软件的使用,原理图的绘制,pcb的布线,焊接和做线。
20天学会stm32库函数开发,并独立完成6个编程训练任务。
培训介绍后,每个人对训练任务的完成效果则提现了每个人的能力,有一部分人完成的差就被淘汰了。
有人会问,11天学会51单片机可能吗?我的确做到了。这时就不得不提到祥哥和他的视频,郭天祥的11天学会单片机的教学视频给了我很大帮着,另外那8个编程认为更是关键所在,流水灯任务学会了IO的输出,按键任务学会了IO输入,以后的其他认为分别涉及到中断,定时器,串口,iic,屏幕等等。最后的认为这是把这一切结合起来的大任务。整个过程由浅入深很适合新手,给嵌入式路上打下了坚固的基础。
嵌入式就是要和硬件打交道,所以硬件知识很有必要,第二阶段也至关重要。
有了前面的基础,学习一个更复杂的单片机也显得不那么难了,还是先点灯,按键,中断,串口,定时器,iic,spi,can等等
好啦,今天就先写到这里,有时间我会把我的学习的部分资料分享出来。下面是一些单片机的资料
复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1ilZhs-Df03W9DxDaYi8ESg 提取码:r9o6
到2015年10月份,由于机器人实验室需要处理图像数据我第一次接触到了树莓派,从此一发不可收拾的喜欢上了Linux。最开始我连给树莓派装系统都不会,大概折腾了一个星期才重要成功的登录到树莓派的桌面系统当中。然后尝试用C语言给树莓派写第一个程序Hello world。
至今我仍然记得那个令人发指的vi编辑器以及树莓派的英式键盘把我搞得狼狈不堪,当时靠着最后一丝丝意志在百度中遨游,解决了许多自己从未接触过的古怪问题,终于发现其实给Linux写程序并不是一定要用VI,在windows的编辑器中编辑好代码在树莓派中编译也是可以的。
交叉编译,理解这个概念我花了很长时间。可能知道2018年毕业参加工作我才真正的了解,当时我为了实现交叉编译居然跟着教程交叉编译了Linux内核,关键是配置内核的时候用了Linux内核最原始的配置方法,就是每个参数都需要选择一遍的那种。可以想象。
。。那天下午我几乎抓狂。几百个选项终于选了一遍结果编译的过程中不断报错,然后我可能会再一次的选一遍参数。最后才了解到,居然有kconfig这种东西,我再一次的无语。。。。
就这样我走上了Linux之路:
vi编辑器
Make
Linux系统编程
Linux驱动编程
经历了几年慢慢的积累,虽然还不是特别的精通,但是仍然积累了很多的知识。
好,距离这篇文章发布又过去了几个月。现在是2020年9月,我已经工作了两年了。毕业后我进入北京一家做北斗的小公司工作,最开始做单片机然后是嵌入式Linux最后是Qt上位机,这两年的时间我几乎做了嵌入式的全栈。这当然要感谢大学时光中打下的坚实基础。最最重要的是我有了一种自学的能力以及解决问题的能力。这两个能力对于一个嵌入是程序员至关重要。下面我就举两个我最近遇到的例子。
1.年初的时候我们公司要做一个上位机,于是为了实现跨平台最终决定要有Qt做。于是经理决定招一个Qt方面的人才(其实我也会Qt)。经历了几个月的招人,项目都快接近尾声了,人还是没有招到(当然中间有疫情的影响),由于项目紧急于是经理随意的招了一个做C#的哥们儿。于是故事就从此开始了,我先介绍一下这哥们儿,他是93年的有三年工作经验(简历上是这么写的)面试的时候同意转到Qt(C++)。于是我就在想一个有三年工作经验的C#大佬应该各方面的能力都不错,知识应该很全面,转到C++虽然有困难但是应该可以克服,实在不行我可以帮帮他。。。。。。
然而,等他入职了我才发现完全不是想象中的样子,这哥们儿我不知道他工作三年是怎么度过的,他连我大二的水平都达不到,而且是个死脑筋完全不会变通。我就说三点就能说明他作为一个程序员是多么的不合格:1.有一天他问我什么是UDP和TCP,socket是干嘛的,我很吃惊问他大学学的是什么专业,他说是计算机。我问他你们学校计算机专业都不学计算机网络这门课吗?作为一个程序员我觉得基本的网络知识应该都懂一点吧。2.他完全不了解bit、byte、kb、Mb、Gb、Tb这些存储器单位的换算。有一天我们程序里面有一个数是两个字节的,高字节和低字节需要分开作为两个数据处理,他居然不知道什么是字节,这重新刷新了我对他的认知。2.有一天公司要换显示器,他居然不知道显示器和主机是完全分开的两个东西,他居然说我这个电脑好不容易配置好开发环境你不要换了我就用这个就行。我当时就无语了。另外他还不知道ESC键在键盘的哪里。。。。然后不久以后这个哥们儿就离职了。
我不知到这个哥们以前经历了什么,是不是真的有三年的工作经验。我只能说他不适合做程序员这个职业。作为一个程序员计算机硬件都是啥总要简单的了解一下吧。不追求成为行业的大神基础知识甚至是常识总要了解一下吧。对他我不想有再多的评价了,希望他以后的人生过的进取一些,可以找到一个适合的职业。
反正不管怎么说,他的工作转了一圈又回到了我的手里,然而老板并没有多给我发一分钱的工资,我很伤心也很累。
2.上一个哥们走后我又迎来了新的同事,他是做单片机的,这个哥们儿人很好,也有三年工作经验。按理说他的能力应该在我之上可是事实并非如此,虽然他比上一个哥们强好几个数量级,但是他一个简单的单片机串口通信的程序搞了半个月,最后还是我帮他找问题才搞定的。他和上一个哥们的共同点都是基础知识不扎实的问题。
说到这里我要喷一下某些培训机构了,这些黑心的培训机构就是变着法的骗那些刚毕业大学生的钱的,培训费好几万就培训三个月,三个月你把STM32培训到位了也行。结果你三个月除了培训STM32还要培训C语言、单片机、Linux系统编程、Linux驱动、Linux内核裁剪甚至有些培训几个还要培训物联网开发。我不知道啥是物联网开发,反正我大学专业就是物联网工程,我大学四年都没搞明白物联网到底是干啥的,你三个月就让学生学会这么多东西?我希望看到这篇文章的大四的小伙伴考虑清楚了,有个词叫贪多嚼不烂,我搞懂单片机用了1年的时间,学Linux和C语言用来5年的时间,到现在我都不敢说自己精通了那个。三个月连单片机的门都进不去,而且培训机构的教学方法还没有我在机器人队的教学方法有效,我们的实操贯彻整个培训始终而且是学员独立完成都需要近半年的时间才能把单片机的知识入门。我真心希望某些培训机构可以用点心,少赚点黑心钱。