嵌入式分为嵌入式硬件和嵌入式软件。所谓嵌入式,就是指软件在特定的嵌入式硬件开发完成后,最后被固化在此硬件平台中,当硬件启动后,自动执行软件,完成特定的功能。
嵌入式系统启动后,一般是没有人机交互界面的,但会留有调试接口,如RS232串口、网口,可以通过终端工具检测软件运行状态、下发控制指令等。
硬件工程师
嵌入式硬件工程师,主要掌握的是基于CPU设计计算主板的电路知识。所以模电、数电、EDA知识是这类工程师的基本功!除此之外,熟悉常用通信协议和总线,如CAN、SPI、I2C、PCIe、DDR,也是硬件工程师应该掌握的技能。
软件工程师
嵌入式软件工程师,编程语言、数据结构是其基本功,除此之外,还应该熟练掌握以下技能:
掌握多线程、多进程编程技术,理解各种线程同步机制,如临界保护、同步信号。知晓进程间通信技术,如共享内存、管道、套接字编程技术;
了解常见外设作用,如CPU、DDR、SDRAM、FLASH、串口、网口等;
了解常见总线或通信协议概念,如数据总线、地址总线、CAN总线、I2C总线、SPI总线等;
理解基于寄存器编程概念,也就是硬件驱动程序实现原理。无论什么硬件,不管函数接口如何封装,其内部一定是对硬件各个寄存器的操作;嵌入式编程由于受限于硬件资源的大小,所以在内存使用上并不像桌面软件那么灵活。比如,在windows下编程,函数中的数组变量可以分配很大的内存,这是因为其栈空间默认很大。但是在嵌入式环境中,最好把这些内存大的变量定义到外部存储硬件中,如SDRAM或DDR,这是因为嵌入式处理器的片内RAM都很小!
从这里可以看出,嵌入式软件工程师与其他类型软件工程师有一个很大的不同点,就是需要掌握很多硬件知识,这是由嵌入式开发的特点来决定的。