嵌入式软件工程师
我来介绍一下什么是嵌入式软件工程师。
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。嵌入式软件工程师就是编写嵌入式系统的工程师。
!!!!!!!!!!!!!!!!
想成为嵌入式工程师就要学习嵌入式,关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。
退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。
一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。
回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。
后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。
我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。
主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。
后来我又找到一份很好的视频,是在IT学习联盟推出的一份视频《零基础嵌入式就业班》(喜欢《零基础嵌入式就业班》的可以复制 sina.lt/qKh 粘贴浏览器按回车键即打开)。里面的教程还不错,很完整,可以让我从基础的开始学起。视频比较便宜。
下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。
收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。
接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。
这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。
最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右
我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。
后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。
把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。
!!!!!!!!!!!!!!!!!!!!!!!!!!!
嵌入式软件工程师创业
嵌入式系统设计师考试大纲
一、考试说明
1、考试要求:
(1)掌握科学基础知识;
(2)掌握嵌入式系统的硬件、软件知识;
(3)掌握嵌入式系统分析的方法;
(4)掌握嵌入式系统设计与开发的方法及步骤;
(5)掌握嵌入式系统实施的方法
(6)掌握嵌入式系统运行维护知识;
(7)了解信息化基础知识、信息技术引用的基础知识;
(8)了解信息技术标准、安全,以及有关法律的基本知识;
(9)了解嵌入式技术发展趋势;
(10)正确阅读和理解计算机及嵌入式领域的英文资料。
2、通过本考试的合格人员能根据项目管理和工程技术的实际要求,按照系统总体设计规格进行软、硬件实际,编写系统开发规格说明书等相应的文档;组织和指导嵌入式系统靠法实施人员实施硬件电路、编写和调试程序,并对嵌入式系统硬件设备和程序进行优化和集成测试,开发出符合系统总体设计要求的高质量嵌入式系统;具有工程师的实际工作能力和业务水平。
二、考试范围
考试科目1:嵌入式系统基础知识
1.计算机科学基础
1.1数制及转换
o 二进制、八进制、十进制和十六进制等常用数制及其相互转换
1.2数据的表示
o 数的机内表示(原码、反码、补码、移码,定点和浮点,精度和溢出)
o 字符、汉字、声音、图像的编码方式
o 校验方法和校验码(奇偶验码、海明校验码、循环校验码)
1.3算术和逻辑运算
o 计算机中的二进制数运算方法
o 逻辑代数的基本运算和逻辑表达式的化简
1.4计算机系统结构和重要部件的基本工作原理
o CPU和存储器的组成、性能、基本工作原理
o 常用I/O设备、通信设备的性能,以及基本工作原理
o I/O接口的功能、类型和特点
o 虚拟存储存储基本工作原理,多级存储体系
1.5安全性、可靠性与系统性能评测基础知识
o 诊断与容错
o 系统可靠性分析评价
o 计算机系统性能评测方法
2.嵌入式系统硬件知识
2.1数字电路和逻辑电路基础
2.1.1组合电路和时序电路
2.1.2总线电路与电平转换电路
2.1.3可编程逻辑器件
2.2嵌入式微处理器基础
2.2.1嵌入式微处理器体系结构
o 冯.诺伊曼结构与哈佛结构
o CISC与RISC
o 流水线技术
o 信息存储的字节顺序(大端存储法和小端存储法)
2.2.2嵌入式系统处理器的结构和类型
o 常用8位处理器的体系结构和类型
o 常用16位处理器的体系结构特点
o 常用32位处理器的体系结构特点
o 常用DSP处理器的体系结构特点
o 多核处理器的体系结构特点
2.2.3异常
o 同步异常(陷阱、故障、终止)
o 异步异常(中断)
o 可屏蔽中断、不可屏蔽中断
o 中断优先级、中断嵌套
2.3 嵌入式系统的存储体系
2.3.1存储器系统
o 存储器系统的层次结构
o 高速缓存(Cache)
o 内存管理单元(MMU)
2.3.2 ROM的种类与选型
o 常见ROM的种类
o PROM、EPROM、E2PROM型ROM的典型特征和不同点
2.3.3 Flash Memory的种类与选型
o Flash Memory的种类
o NOR和NAND型Flash Memory的典型特征和不同点
2.3.4 RAM的种类与选型
o 常见RAM的种类
o SRAM、DRAM、DDRAM、NVRAM的典型特征和不同点
2.3.5 外存
o 常见外存的种类
o 磁盘、光盘、CF、SD等的典型特征和不同点
2.4 嵌入式系统I/O接口
2.4.1 定时器和计数器基本原理与结构
2.4.2 GPIO、PWM接口基本原理与结构
2.4.3 A/D、D/A接口基本原理与结构
2.4.4键盘、显示、触摸屏接口基本与结构
2.4.5嵌入式系统音频接口
2.5嵌入系统通信及网络接口
o PCI、USB、串口、红外、并口、SPI、IIC、PCMCIA的基本原理与结构
o 以太网、CAN、WLAN、蓝牙、1394的基本原理与结构
2.6嵌入式系统电源分类及电源原理
2.7电子电路设计
2.7.1电子电路设计基础知识
o 电子电路设计原理
o 电子电路设计方法及步骤
o 电子电路设计中的可靠知识
2.7.2 PCB设计基础知识
o PCB设计原理
o PCB设计方法及步骤
o 多层PCB设计的注意事项及布线原则
o PCB设计中的可靠性知识
2.7.3电子电路测试基础知识
o 电子电路测试原理与方法
o 硬件抗干扰测试
3. 嵌入式系统软件知识
3.1嵌入式软件基础知识
3.1.1嵌入式软件的分类(系统软件、支撑软件、应用软件)
3.1.2无操作系统支持的嵌入式软件体系结构(轮询、中断、前后台)
3.1.3有操作系统支持的嵌入式软件体系结构
3.1.4板极支持包基础知识(系统初始化、设备驱动程序)
3.1.5嵌入式中间件(GUI、数据库)
3.2 嵌入式操作系统基础知识
3.2.1嵌入式操作系统体系结构
o 单体结构、分层结构和微内核结构
3.2.2任务管理
o 多道程序技术
o 进程、线程、任务的概念
o 任务的实现(任务的层次结构、任务控制块、任务的状态及状态转换、任务队列)
o 任务调度(调度算法的性能指标、可抢占调度、不可抢占调度、先来先服务、短作业优先算法、时间片轮转算法、优先级算法)
o 实时系统及任务调度(RMS、EDF算法)
o 任务间通信(共享内存、消息、管道、信号)
o 同步与互斥(竞争条件、临界区、互斥、信号量、死锁)
3.2.3存储管理
o Flat存储管理方式
o 分区存储管理(固定分区、可变分区)
o 地址重定位(逻辑地址、物理地址、地址映射)
o 页式存储管理
o 虚拟存储技术(程序局部性原理、虚拟页式存储管理、页面置换算法、工作集模型)
3.2.4设备管理
o 设备无关性、I/O地址、I/O控制、中断处理、缓冲技术、假脱机技术)
3.2.5文件系统基础知识
o 文件和目录
o 文件的结构和组织
o 存取方法、存取控制
o 常见嵌入式文件系统(FAT、JFFS、YAFFS)
3.2.6操作系统移植基础知识
3.3 嵌入式系统程序设计
3.3.1嵌入式软件开发基础知识
3.3.2嵌入式程序设计语言
o 汇编、编译、解释系统的基础知识和基本工作原理
o 汇编语言
o 基于过程的语言(过程/函数、参数传递、全局变量、递归、动态内存分配、数据类型)
o 面向对象的语言(对象、数据抽象、继承、多态、自动内存管理)
o 各类程序设计语言的主要特点和适用情况
3.3.3嵌入式软件开发环境
o 宿主机、目标机
o 编辑器、编译器、链接器、调试器、模拟器
o 常用嵌入式开发工具(编程器、硬件仿真器、逻辑分析仪、示波器)
o 集成开发环境
o 开发辅助工具
3.3.4嵌入式软件开发
o 软件设计(模块结构设计、数据结构设计、内存布局、面向对象的分析与设计)
o 嵌入式引导程序的设计、设备驱动程序设计、内核设计、网络程序设计、应用软件设计)
o 编码(编程规范、代码审查)
o 测试(测试环境、测试用例、测试方法、测试工具)
o 下载和运行
3.3.5嵌入式应用软件移植
4.嵌入式系统的开发与维护知识
4.1系统开发过程及其项目管理
o 系统开发生命周期各阶段的目标和任务的划分方法
o 系统开发项目挂你基础知识及其常用管理工具使用方法
o 主要的系统开发方法
o 系统开发工具与环境知识
4.2 系统分析基础知识
o 系统分析的目的和任务
o 系统分析方法
o 系统规格说明书的编写方法
4.3 系统设计知识
o 传统系统设计方法
o 软硬件协同设计方法
4.4 系统实施知识
o 系统架构设计
o 系统详细设计
o 系统调试技术
o 系统测试
4.5 系统维护知识
o 系统运行管理知识
o 系统维护知识
o 系统评价知识
5.安全性知识
o 安全性基本概念
o 加密与解密机制
6.标准化知识
o 标准化的概念
o 国际标准、国家标准、行业标准、企业标准基本知识
o 代码标准、文件格式标准、安全标准、软件开发规范和文档标准知识
o 标准化机构
o 嵌入式系统相关标准
7.信息化基础知识
o 信息化和信息系统基本概念
o 有关的法律、法规
8.嵌入式技术发展趋势
9.计算机专业英语
o 正确阅读和理解相关领域的英文资料
考试科目2:嵌入式系统设计应用技术
1.嵌入式系统开发过程
1.1系统需求分析方法与步骤
1.2系统设计
o 系统硬件配置
o 系统功能组成分配
o 软硬件功能的分配
o 可行性验证及设计审查
o 系统规格
o 周期,成本及工作量估计
o 开发计划
1.3软硬件协同设计
1.4硬件设计
1.5软件设计
o 软件结构
o 设计评审
o 软件详细设计
1.6系统测试
o 测试环境
o 测试计划(内容、方法、标准、过程、检验)
o 硬件测试
o 软件测试(单元测试、集成测试)
o 软硬件联合测试
o 实施测试
1.7系统评估
1.8 软件维护
2.嵌入式系统硬件设计
2.1嵌入式系统硬件基本结构
2.1.1嵌入式微处理结构与应用
2.1.2 异常及中断处理技术
2.1.3 DMA技术
2.1.4 多处理系统
o 多处理器系统特点
o 多处理器系统构建技术
2.1.5 总线架构
o 应用系统中的总线配置
2.1.6 内存种类及架构
o 存储器系统接口设计
2.1.7数字电路和逻辑电路
o 专用集成电路
o 可编程逻辑控制器件
2.2输入/输出接口设计
2.2.1 输入/输出接口
o 接口信号电平转换
o 接口驱动电路设计
2.2.2输入/输出接口应用技术
o 外围设备
o 串口通信
o 并口通信
o 模拟接口
o 通信接口设备
o 通信标准和协议
o 数据传输方式
2.3外围设备接口应用技术
2.3.1 外围存储设备
o 存储卡,记忆棒,IC卡,MMC卡,SD卡
o DVD 、CD-R 、CD-RW
2.3.2外围输入/输出设备
o 键盘,鼠标,触摸屏
o 液晶板、LED、7段数码管、蜂鸣器
2.3.3电源设计技术
2.4可靠性与安全性设计技术
2.4.1 错误检测与隔离技术
2.4.2 冗余设计
2.4.3 系统恢复设计
2.4.4 诊断技术
2.4.5常用安全标准
2.4.6 抗干扰设计
2.4.7电磁兼容设计
2.4.8系统加密
3.嵌入式系统软件设计
3.1嵌入式系统软件结构设计
3.2嵌入式操作系统应用技术
3.2.1 时间管理
o 系统时间
o 时钟中断
3.2.2内存管理
o 静态内存管理
o 动态内存管理
3.2.3任务管理和任务间的通信
o 任务间的通信机制
o 信号量
o 邮箱
o 消息队列
3.2.4异常处理
o 异常处理方法
o 中断优先级处理方法
o 系统调用
3.2.5嵌入式文件系统应用技术
3.2.6嵌入式系统图形用户接口(GUI)应用技术
3.2.7嵌入式系统数据库应用技术
3.3嵌入式软件设计技术
3.3.1汇编语言设计
o 数据类型
o 汇编语言程序结构
o 汇编语言程序设计及优化
o 子程序调用
3.3.2嵌入式C语言设计
o ANSI-C的数据类型
o C程序结构
o C语言程序设计及优化
o 程序的编译与链接
3.3.3面向对象程序设计与开发
o 面向对象的分析与设计方法UML
o 面向对象的编程语言
o 使用C++进行嵌入式系统开发
o 使用Java进行嵌入式系统开发
3.4 系统级软件设计技术
o 嵌入式系统固件与系统初始化设计
o 设备驱动程序设计
o 硬件抽象层、板级支持包设计
o 嵌入式软件的移植技术
4.嵌入式系统开发技术
4.1系统开发环境
4.1.1开发工具
o 文本编辑器
o 汇编、编译和连接程序
o ICE和ICE监控器
o 配置管理工具
o 逆工程工具
4.1.2平台
o 操作系统
o 分布式开发环境
4.1.3开发环境创建方法及评估
o 开发工作分析
o 开发环境的建立
o 维护、管理、使用开发环境的方法
o 开发环境的评测
4.2实时系统的分析技术
4.2.1实时系统的分析技术
o 结构化分析方法
o 面向对象分析方法
4.2.2实时系统的设计技术
o 结构化分析方法
o 面向对象分析方法
4.3硬件设计环境
4.3.1硬件描述语言
o 硬件开发设计过程
o 硬件描述语言的种类与特点
4.3.2仿真技术
o 逻辑仿真方法
o 逻辑仿真工具
4.3.3大规模集成电路系统的开发方法
o ASIC开发方法
o FPGA设计方法
o IP(intellectual property)
4.4协同设计
o 软硬件任务工和切调
o 设计评审
4.5嵌入式系统低功耗设计技术
o 低功耗系统工作机制
o 低功耗系统模型结构
o 低功耗的硬件设计技术
o 低功耗的软件设计技术
4.6分布式嵌入系统设计
o 分布式系统设计原理
o 分布式系统的通信技术
o 分布式系统设计应用
5.嵌入式系统应用
5.1嵌入式系统在控制领域中的应用
5.2嵌入式系统在手持设备中的应用
5.3嵌入式系统在模式识别中的应用
三、题型举例
1、选择题
若嵌入式系统中采用I/O地址统一编址模式,访问内存单元和I/O设备是通过 (1) 来区分的。
(1) A.数据总线上输出的数据
B.不同的地址代码
C.不同的地址总路线
D.不同的指令
2、问答题
在某个嵌入式操作系统中,任务的状态转换图(不完整)如下,请阅读该图以及下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。
〔说明〕
任务总共有五个状态:休眠状态、就绪状态、运行状态、中断服务状态和等待状态,在任何时候,一个任务只会处于其中的某一个状态。
〔问题1〕(3分)
在单个CPU的系统中,处于运行状态的任务最多有多少个?
〔问题2〕(3分)
对于运行状态、就绪状态和等待状态这间的相互转换,图中并没有画出来,请补充。用文字处理的形式来进行描述,格式形如"运行状态→中断服务状态"。
〔问题3〕6分)
从运行状态可以直接变为等待状态吗?如果不能为什么?如果能什么时候会发生这种转换?举例说明。
〔问题4〕(3分)
从就绪状态可以直接变为等待状态吗?如果不能,为什么?如果能,什么时候会发生这种转换?举例说明。
有接嵌入式开发私活的吗
接嵌入式开发私活的话你可以到21IC电子工程师论坛上去发布需求,会有大神根据你的要求和报价帮你完成的,当然的话一般来说自己就可以完成了,或者尽量找正规的开发公司合作,避免以后产品做好后出现产权纠纷。
嵌入式软件开发前景待遇如何?薪资高吗?
软件开发的薪资待遇水平都是很不错的,相比于其他行业还是很占优势的
嵌入式系统就业前景怎么样?薪资待遇如何?
嵌入式技术发展前景和发展方向
嵌入式技术可以说是当前最热门、最具发展前途的IT应用领域之一,嵌入式技术与应用专业遵循的是面向产业发展和定位人才培养的原则,培养学生在嵌入式领域进行软件开发、软/硬件测试、系统维护等等几方面的技能,随着嵌入式技术应用越来越广,嵌入式系统技术成为了当下具有非常广阔的应用前景,接下来简单了解下嵌入式技术就业前景以及发展方向的相关内容。
嵌入式技术前景:
嵌入式系统的广泛应用必然会带来相关技术人才的极大需求,国内嵌入式软件领域技术人员是相当匮乏的,中国的各跨国公司以及国内家电巨头都面临着嵌入式人才严重短缺的问题,据相关调查显示中国嵌入式软件行业每年至少存在50万人才的巨大缺口,并且这个数字还在以每年20%的速度显示增长,但国内嵌入式软件人才供应量真可谓是杯水车薪,远不能够满足行业的需求,主要有两方面的原因,1.需求的增长;2.掌握嵌入式软件开发技能的人才供应缺口巨大。
解读完以上内容之后,小编想跟大家来分享下嵌入式工程师的薪资待遇问题,相信这也是很多人关心的问题,一般来所,嵌入式人才可以说是当值无愧的白领,华清远见培训过的应届大学生薪资水平一般都能够达到1w+,几年工作经验的工程师薪资会更高,当然懂得嵌入式技术的人也非常适合创业,所以嵌入式的就业前景非常广。
嵌入式技术展方向:
嵌入式技术应用范围极广,日常生活中的手机、电子词典、可视电话、数字相机、汽车电子和家电控制系统等等都是典型的嵌入式系统,学生在毕业之后可选择从事家用电子、汽车电子、电信等行业的计算机应用设计开发,可以选择担任嵌入式产品及应用系统的设计与开发工程师,从事嵌入式技术的应用项目设计开发、产品维护和技术服务等相关工作。
以上就是嵌入式技术发展前景和发展方向,希望对你的选择有帮助。
怎样做一个优秀的嵌入式工程师?
一、嵌入式工程师必备技能总览
在介绍学习路径之前,我们先来了解一下要成为一个优秀的嵌入式开发工程师,需要具备哪些技能。我们从硬件和软件两部分来介绍。
v 硬件部分:
1. 了解主要器件(电阻、电容、电感、各类二极管、三极管、场效应管、逻辑门电路等)。
2. 熟悉万用表的用法,熟悉以上器件的测试方法和测试原理。
3. 了解器件封装的常见类型和特点(直插、表贴、QFNP、BGA、SOT等)。
4. 掌握使用示波器、逻辑分析仪进行测量的方法。
5. 熟知常见器件间通信方式和总线。
6. 能熟练阅读器件手册(datasheet)并根据项目需求对器件进行选型、电路原理图绘制、电路板布局布线,配合结构工艺完成电路板设计。
7. 能根据故障现象对电路板进行测量排查,找出错误并修正。
8. 掌握基本的手焊、拆焊、飞线技能。
v 软件部分:
1. 熟练掌握C语言,熟悉位操作,位段和对齐方式等概念。
2. 掌握基本的汇编语言。
3. 熟悉编译连接的过程和编译指令。
4. 理解程序运行中堆与栈的分配和使用。
5. 熟悉linux系统操作和gcc编译工具、Makefile编写。
6. 熟悉主流嵌入式CPU的架构(如ARM)
7. 熟悉内核态和用户态,了解不同程序运行的状态和编程注意事项。
8. 熟悉系统引导流程,能移植uboot和操作系统,构建根文件系统和设备树。
9. 掌握各类驱动程序模块的编写方法和编译方法。
10. 熟悉网络编程原理和数据库编程。
11. 了解UART,IIS,IIC,CAN,SPI等接口协议并能调试相关设备。
12. 了解至少一种物联网应用层协议如MQTT等。
13. 了解常见的低功耗无线通信模块的使用如wifi,蓝牙,ZigBee。
二、学习路径和重点
确实,我们嵌入式工程师需要掌握的知识很多,上述的每个知识点都可以展开作为一个单独学科或者专题进行讨论。上面繁多的技能要求可能让很多同学望而生畏,不过我们嵌入式工程师的任务主要是工程实现,而不是理论研究,因此对于上面的知识点,我们不需要特别深入的了解,只需要在概念、原理和实践方向进行理解和转化,让我们在工程实践中能受这些理论的指导,利用这些理论完成设计和调试即可。
有一些同学有这样的疑问:我以后的工作目标是嵌入式软件工程师,那我还需要硬件部分的知识吗?这个问题的答案是肯定的,主要有以下2个原因:
1. 嵌入式工程师没有严格的软硬件区分。
嵌入式工程师在实际工作中要不断和硬件打交道,硬件工程师提供了原理图和PCB布局布线图,我们嵌入式工程师要根据数据手册,器件编程指南以及硬件工程师提供的原理图进行软件设计,需要对设计进行上板验证,需要调试除错,这都需要我们有扎实的硬件设计功底,否则就需要不断的去找硬件工程师来咨询,必然会拖慢整个项目的进度。
2. 要想成为优秀的嵌入式软件工程师,一定要熟知硬件知识。
优秀的嵌入式工程师会参与项目的需求分析,器件选型等硬件设计工作,这不仅需要我们有丰富的行业经验,更需要我们有扎实的硬件基础。
另外,驱动编写等工作要求我们必须清晰的了解硬件的特性,如总线速度、时延、单双工模式、是否有缓冲、是否支持DMA等等,了解硬件的特性才能充分挖掘硬件潜力,提升速度和稳定性。
又如,在和硬件工程师一起调试设备问题时,嵌入式软件工程师需要根据硬件特点编写对应的测试程序,如并行总线的数据相位测试、串行差分信号的眼图测试,都需要嵌入式软件工程师编写对应的测试程序。如果嵌入式软件工程师没有相应的硬件知识,沟通成本会陡然增加,项目延期风险也就大大增加了。
综上,要做优秀的嵌入式工程师,而不是浑浑噩噩混日子的小工,就要严格要求自己,把硬件知识也补上来。