「Learning」- 嵌入式

  CREATED BY JENKINSBOT

简单理解:我们平时使用较多的为 x86 平台,比如笔记本、台式机。而嵌入式,则为其他硬件平台,与 x86 类似,也需要在其上运行操作系统、驱动程序、软件服务来使用该硬件;

演进方向

简述嵌入式软件开发到底是做些什么的 – 知乎

1)以单片机为核心、可编程控制器存在形式 —— 针对硬件,直接开发运行在其上的应用程序;
2)以嵌入式 CPU 为基础、简单操作系统为核心;
3)以嵌入式操作系统为标志,兼容性好,适用于不同平台,系统开销小,效率高,具有高度模块化及拓展性;
4)以物联网为标志,将传感器技术、互联网技术及传统嵌入式技术综合联系

岗位分类

终于搞清楚嵌入式开发工程师是干什么的了? – 知乎
嵌入式工程师在企业工作的真实内容 – 知乎
有工作后的大佬来指导一下嘛,嵌入式工作是什么样的,要学什么? – 知乎
请问各位硬件工程师们如何储备自己的硬件知识? – 知乎

嵌入式硬件开发

嵌入式硬件开发这是硬件工程师来做,一般出身为自动化,电子,通信等专业,他们要求熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力,熟悉硬件开发模式和设计模式,熟悉各种芯片及外围设备,熟悉 8 位 16 位 32 位处理器嵌入式硬件平台开发。有的要求有 FPGA 的开发经验,精通常用的硬件设计工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般要有 4~8 层高速 PCB 设计经验;

设计原理图(涉及模电,数电,高频),画 PCB 板等,他们只负责硬件,和软件有关的都由嵌入式软件工程师来负责,所以通常一个新产品研发,需硬件工程师和软件工程师密切的配合,才能出成果;

嵌入式驱动开发

编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如 I2C 协议)、系统调度、信号量、锁机制等等,开发难度最大;

嵌入式驱动开发这个可以硬件工程师来做,也可以软件工程师来做,主要还是取决于设备。目前驱动开发,除非是简单的设备驱动,实际上很多时候都是移植,所以更多的是需要掌握目标平台的硬件和系统特性。所以至少得掌握一些操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式 ARM/MIPS/PowerPC 架构。具有单片机、某种或多种 32 位嵌入式处理器的移植开发能力,熟悉 bootloader 过程,具有扎实的硬件知识,理解硬件原理图,能独立完成相关硬件驱动调试,能够根据芯片手册编写软件驱动程序。如果涉及到网络设备,或许还要掌握很多高层的网络协议的原理。个人感觉这一块虽然大部分不是很难,但却是极为重要的。当然如果要在这一层次提供对上层的多线程支持,某些驱动也是很难写的;

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

嵌入式系统开发

主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的;

嵌入式系统开发这个没听说硬件工程师来做的。做这块,熟悉操作系统的原理是必不可少的,比如内存管理,比如线程调度,比如文件系统等等;还要精通处理器体系结构、指令集、寻址方式、调试、汇编和混合编程等方面的内容;熟悉操作系统启动流程。对于 linux,要熟悉 Linux 配置文件的修改,掌握内核裁减、内核移植、交叉编译、内核调试、启动程序 Bootloader 编写、根文件系统制作和集成部署 Linux 系统等整个流程。这一块要是真写起来,困难程度那是相当恐怖的,好在大多都是移植,很少听说有公司要去开发个操作系统的,没 Google 的实力啊;

嵌入式软件开发

编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用 C 语言开发,但经常会涉及 C++、Java、python、JavaScript、PHP 等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念;

嵌入式软件开发这个嘛,没有操作系统的话,程序一般不会特别复杂,如果有操作系统的支持,又和一般的软件开发很接近,所以尽可以看作是搞桌面开发。这个要求就是熟悉系统的 API,精通 C 语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识、数据结构的基础内容;掌握面向对象编程的基本思想,以及 C++语言的基础内容;精通嵌入式 Linux 下的程序设计,精通嵌入式 Linux 开发环境,包括系统编程、文件 I/O、多进程和多线程、网络编程、GUI 图形界面编程、数据库;熟悉常用的图形库的编程,如 QT、GTK、miniGUI、fltk、nano-x 等,掌握各种应用层的网络协议使用,以及各种音视频技术等;