其实自己在嵌入式软件学习上并没有啥特别的心得,只是从事过几年的嵌入式的学习和工作,写下来,供需要的人参考,也整理一下自己的思路。 这篇**也参考了之前写的一个答案(链接)。 我是从51开始学的,然后是STM32,然后开始接触Linux和C#、Qt等上位机开发。所以比较常用的编程语言是C,C++和C#。对于嵌入式来说,C是首选,工作了这几年,也都是靠C吃饭的。对于嵌入式编程来说,不在于我们掌握几款芯片,重要的在于精,精通一款就好,然后重要的是嵌入式编程的思想。比如如何处理中断,如何保证系统的实时性,如何高效的处理日志,如何通过串口解析协议,如何自己设计一个命令行解析程序...等等。 如何学习嵌入式软件开发呢?这个问题好从自己大学说起。记得大二的时候接触51单片机,感觉这个东西使用起来好费劲,还设置各种寄存器,配置各种参数。当有一本书出现的时候,我豁然开朗了。这本书的名字叫《嵌入式软件程序设计,使用MCS-51》。这本书上介绍了很多我们常用到的一些单片机的功能和外设的控制。我需要使用单片机实现一个什么样子的功能,只需要找出相关代码,组合一下就OK了。so easy! 貌似这本书已经买不到了,其他的书,应该也是可以的。单片机的路,就这么慢慢走着。比如控制步进电机、直流电机、舵机等。如何控制超声波测距、温度传感器等。这种设备的代码都是烂大街的,一抓一大把。 我们在知道模块的控制原理的基础上,参考例程代码,从读懂,到慢慢开始自己写。慢慢熟练,这些知识、这些代码就都变成自己的了。 顺便说一下,玩转嵌入式之前,C语言还是必须要搞定的。通过了计算机二级考试,可并不能证明你C语言合格。小平同志说过,实践是检验真理的唯一标准。多练手吧。《杜拉拉升职记》中也有一句话说的很正确,你能从书本上获得10%的经验,能够从前辈身上获得20%的经验,剩下的70%的经验都是从实践中得来的。 后面开始接触STM32和Atmel的一款ARM7芯片,一对比才发现,STM32的例程好丰富,各种都给你写好了,又和学51单片机一样,找到了诀窍了。瞬间就可以搞定各种功能,实现各种小玩意。大四的时候也参加了《CCTV机器人大赛》。 上了研究生之后,开始学习Linux,也不是自己想学,单纯是为了实验室项目的需要才不得不接触Linux,后面研究生也主要是在用Linux。期间也使用STM32做过一些项目。在这期间才学会了使用循环缓冲区的方式处理串口数据。此时,才真正静下心来思考,如何才能设计一个比较好的嵌入式软件架构。在代码编写中,也逐渐开始使用队列等结构。
有一次找工作面试,被面试官问到函数指针的用法,才把注意力放在函数的指针上。PS:函数指针和指针函数有啥区别呢。 -- 后续会有干货!
|