嵌入式开发门槛高,涉及的知识面广,既要求懂硬件,又必须能写软件,而软硬件涉及的知识体系却又是异常的庞大;并且学习这些短期内看不到成绩,需要坚持数年,执着在一个领域深耕。
具备基本的电路知识,了解常用元器件、芯片,能看懂原理图,作为嵌入式软件开发人员也必须懂一些硬件设计方面的知识;
具备一定的MCU设计与应用能力,从单片机到ARM再到DSP,能够根据客户要求设计产品;掌握至少一种单片机的编程与使用,比如常见的STM32,后期可以涉猎FPGA;
学习C语言,掌握基本的数据类型、指针、结构体等;了解基本的MCU外围模块,SPI、I2C、UART、GPIO、ADC、PWM、Timer、FLASH等原理,能根据硬件原理以及芯片手册编写裸机设备驱动程序;掌握常用工业通讯协议比如CAN、Modbus等;
学习至少一种操作系统,包括但不限于uCOS、FreeRTOS、RT-Thread、Vxworks等,并且一定要学习嵌入式linux的使用与编程,搞明白多任务调度、信号量、邮箱等的原理与使用;
学习linux平台下的设备驱动程序设计,掌握字符设备、块设备、网络设备的驱动框架,并能够熟练设计这些设备驱动,比如ADC、UART、SPI、GPIO、Camera等等,视频驱动框架一定要搞懂V4L2;
学习GUI设计,具备基本的嵌入式产品GUI设计能力,可以学习Qt,它的跨平台特性很适合嵌入式开发;当然也可以转到App设计开发;
学习多线程编程,搞明白线程池原理并应用到实际产品中;具备高并发网络通信编程能力,熟练掌握epoll以及libevent的使用和设计;
掌握至少一种数据库编程能力,嵌入式可以学习SQlite;
掌握C/C++编程语言,可以设计linux平台下的应用程序以及后台服务程序,并涉猎其他编程语言,可以学习Python;
修炼内功,学好数学,学习各种编程算法,掌握常用数据结构以及算法的原理和实现,链表、队列、排序、查找等;掌握常用滤波算法及其实现,比如一阶互补滤波、卡尔曼滤波等;掌握PID原理与算法实现;
以上即是嵌入式软件开发的路线,当然不一定适合每个人,但总体来讲掌握这些对以后的进一步发展有很大帮助。
嵌入式软件开发人员的从业范围也是异常的庞大,小到家用电器,大到工业航天设备等都有嵌入式的存在。比如手机、电视、冰箱,比如航天飞机、通信卫星、人工智能、无人机、移动机器人、无人驾驶、激光雷达、智慧医疗、医疗仪器、可穿戴设备、物联网等,也包括一些工业嵌入式产品,比如电力设备、新能源设备、汽车、发电、通讯等等,可以说只要需要微处理器的地方都离不开嵌入式。
对于嵌入式软件开发来讲,懂得必须要多,但更要专;要做T字形人才,在一个领域深耕,才能有好的发展,切勿浅尝辄止,好高骛远。
要找到自己的兴趣点,喜欢无人机,那就在飞行控制算法方面做深入研究;
喜欢图像处理,那就在图像处理算法方面多深入研究;
喜欢人工智能,那就在机器学习、深度学习方面做深入研究;
喜欢汽车电子,那就在汽车领域深入研究;
总之,嵌入式不是一蹴而就,需要数年的坚持与执着,要想在嵌入式任何一个领域精进,都不是一件容易的事。
选一个方向,沉下心来,做就是了。