嵌入式学习规划
1. 嵌入式岗位介绍
嵌入式类岗位大致分为以下几个类型:嵌入式软件开发工程师、驱动工程师、系统软件开发工程师、应用软件工程师、嵌入式测试工程师;还有一些:电子研发工程师、C/C++软件工程师(嵌入式)、智能驾驶软件工程师、机器人软件工程师、硬件产品经理等等。
1.1. 嵌入式软件开发工程师
A公司岗位描述:
1、负责设备软件的设计和交付,包括单片机嵌入式开发、DSP嵌入式软件开发、多线程多任务的动态调度、动态内存管理等软件关键技术研究;
2、负责设备软件研发及商用过程中的功能、性能、功耗、可靠性等问题的定位解决;
3、负责设备软件新技术的预研和产品实现,提升产品优势;
4、跟进行业新技术动态,参与新技术的研究,并能引入到产品开发中。
A公司任职要求:
1、熟练掌握汇编/C/C++编程语言和基本的常用数据结构,了解操作系统原理;
2、熟悉Linux系统编程,嵌入式系统,ARM或单片机,RTOS实时操作系统;
3、熟悉HTTP/TCP/UDP等网络协议,熟悉一种或以上接口协议优佳,如:USB、UART、Ethernet、PCIE、EMMC、I2C、SPI等;
4、有嵌入式系统或产品的开发项目经验优先;
小结:嵌入式软件开发工程师主要负责该部门嵌入式产品的研发工作,固件开发,单元测试,代码维护等,提升产品优势。很多公司都是大类嵌入式软件开发工程师,而不进行驱动、系统、应用工程师等区分。
1.2. 驱动工程师
B公司岗位描述:
1、负责底层驱动及上层应用的开发和调试,外设驱动的开发优化工作,比如Camera、LCD、Sensor等;
2、负责软硬件结合新器件技术预研和开发工作;
B公司任职要求:(与A公司要求相差不大)
C芯片公司驱动岗位描述:
1、设计和开发驱动程序(user mode, kernel mode, firmware etc),HAL/API,提供应用程序库的支持,提供包括内存管理,任务管理,硬件资源管理等功能;
2、建立驱动程序的开发环境,包括硅前和硅后测试和调试环境,以及相关驱动程序测试工具;
3、与硬件工程师和软件工程师协调提供解决平台中出现的问题。
C芯片公司任职要求:
1、精通C/C++编程,有Linux编程经验者优先;
2、熟悉计算机体系构架,算法设计等;
3、具备CUDA/OpenCL/GPU shader programming知识和经验者优先;
4、有较强学习新知识的能力;具备较强的沟通能力。
小结:驱动工程师主要是编写和移植各种芯片驱动,优化硬件设备驱动,一般驱动工程师指Linux上的驱动开发工程师,所以需要精通Linux驱动框架,结合芯片本身去编写驱动,所以芯片公司招聘嵌入式相关的岗位一般是驱动工程师。
1.3. 系统软件开发工程师
D公司岗位描述:
1、参与soc软件开发,包括soc bring up软件开发、IP驱动软件开发、bootloader软件开发、操作系统移植等;
2、参与soc 软件、硬件系统验证;
3、参与板级外设驱动软件开发与调试;
4、参与soc BSP 、soc SDK 软件开发、软件测试。
D公司任职要求: (与A公司要求相差不大)
小结:系统软件开发工程师主要是编写固件,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,是驱动和应用的基础。
1.4. 应用软件工程师
E公司岗位描述:
1、负责嵌入式系统的搭建与维护,熟悉芯片驱动、嵌入式OS、SD接口定义;
2、负责软件系统的跨芯片移植(如:NXP系列、STM32系列);
3、负责系统集成以及调试工作;
4、负责进行嵌入式软件系统的应用开发、优化。
E公司任职要求: (与A公司要求相差不大)
小结:应用软件工程师主要是编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及其它语言、数据库、前端后台、各种通讯协议等。
1.5. 嵌入式测试工程师
F公司岗位描述:
1、负责嵌入式项目功能测试、性能测试、SDK测试或者自动化测试;
2、根据产品需求制定测试方案、设计测试用例,搭建测试环境;
3、依据测试用例完成产品的功能测试、硬件指标测试等,记录测试结果,报告与跟踪产品缺陷,并协助研发人员进行缺陷定位与重现;
4、编写测试报告,根据测试结果评估软件质量;
5、进行测试总结,编写测试相关文档,对测试中存在的问题及时分析与解决,并提出改进建议
E公司任职要求:
1、有嵌入式软件开发的经验优先;
2、有脚本语言(如python/shell)的使用经验;
3、有Linux下的自动测试和测试开发的经验;
4、熟悉嵌入式调试技术及工具;
5、具备良好的沟通表达能力,良好的分析解决问题的能力;
2. 嵌入式应用工程师
3. 嵌入式产品工程师
4. 嵌入式高级工程师
5. 嵌入式物联网工程师
- 嵌入式系统设计和开发能力:掌握嵌入式系统的硬件、软件和通信接口等方面的知识,能够独立完成嵌入式系统的设计、开发、测试和维护。这包括熟悉各种处理器、控制器、嵌入式操作系统、外设等硬件和架构,以便能够对系统进行设计、调试和优化。
- 网络通信技术和协议:熟悉各种网络通信技术和协议,如TCP/IP、HTTP、WebSocket、MQTT等,能够实现物联网设备之间的数据传输和控制。这包括精通Linux网络编程,熟练掌握TCP/IP等网络协议,以及熟悉4G、WIFI、MQTT等物联网协议的调试和应用。
- 传感器和数据采集技术:了解各种传感器的工作原理和特点,能够选择合适的传感器进行数据采集和处理,以及对采集的数据进行分析和应用。
- 数据存储和管理技术:掌握各种数据存储和管理技术,如关系型数据库、NoSQL数据库、云端存储等,能够实现数据的持久化和共享。
6. 嵌入式AI人工智能工程师
- 嵌入式系统知识:嵌入式AI人工智能工程师需要深入理解嵌入式系统的基本原理,包括硬件架构、微处理器、内存管理、中断处理、实时操作系统(RTOS)、ROS(机器人操作系统)系统等。
- 人工智能和机器学习技术:他们需要熟悉各种AI和机器学习算法,如神经网络、深度学习、强化学习等,并了解如何在嵌入式系统中实现这些算法。
- 编程技能:嵌入式AI人工智能工程师需要精通C/C++等编程语言,用于编写嵌入式系统的代码。同时,还需要熟悉Python等语言,以便在开发和测试AI算法时使用。
- 算法优化和性能调优:在嵌入式系统中,资源(如计算能力和内存)通常有限。因此,嵌入式AI人工智能工程师需要能够优化他们的算法,以便在有限的资源下实现最佳性能。
- 硬件接口和传感器集成:嵌入式系统经常需要与各种硬件接口和传感器进行交互。因此,嵌入式AI人工智能工程师需要了解如何将这些硬件组件与他们的系统集成。
- 调试和测试:嵌入式AI人工智能工程师需要能够使用各种调试和测试工具来验证他们的系统和算法的正确性和性能。
- 持续学习和适应新技术的能力:由于AI和嵌入式技术都在不断发展,嵌入式AI人工智能工程师需要具备持续学习和适应新技术的能力。