一文了解嵌入式开发的必备知识点
EDN电子技术设计
昨天
嵌入式
操作系统
简介
嵌入式
操作系统
(EmbeddedSystem)是指以应用为中心、以计算机技术为基础,
软件
硬件可裁剪、适应应用系统对功能、
可靠性
、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散
控制系统
和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端
设备
的键盘、鼠标、硬盘、Modem等均是由
嵌入式
处理器控制的。
嵌入式系统
无疑是当前最热门最有发展前途的IT应用领域之一。
嵌入式
系统用在一些特定专用
设备
上,通常这些设备的硬件资源(如处理器、
存储器
等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,
嵌入式
更显重要。像我们平常常见到的手机、
PDA
、电子字典、可视电话、VCD/DVD/
MP3
Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set TopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、
路由器
、数控
设备
或仪表、
汽车电子
、家电
控制系统
、医疗仪器、
航天
航空
设备
等等都是典型的
嵌入式
系统。
为什么要学
嵌入式
软件
开发?好处是什么?
(1)目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层
软件
(例如
操作系统
级、
驱动程序
级
软件
),对软件专业水平要求较高(
嵌入式系统
对
软件
设计
的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如
ARM处理器
、
嵌入式
操作系统
、
MPEG
技术、无线
通信协议
等),掌握这些新技术的人当然很找。
嵌入式
人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和
软件
,另外需要有经验的人进行指导开发流程。
(2)与
企业计算
等应用
软件
不同,
嵌入式
领域人才的工作强度通常低一些(但收入不低)。搞企业应用
软件
的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而言,搞
嵌入式系统
的公司,都有自己的产品计划,按自己的节奏行事。所开发的产品通常是通用的,不会因客户的不同而修改。一个产品型号开发完了,往往有较长一段空闲时间(或只是对
软件
进行一些小修补),有时间进行充电和休整。另外,从事
嵌入式
软件
的每个人工作范围相对狭窄,所涉及的专业技术范围就是那些(ARM、
RTOS
、
MPEG
、802.11等),时间长了这些东西会越搞越有经验,卖卖老本,几句指导也够让那些初入道者琢磨半年的。若搞应用
软件
,可能下一个客户要换成一个完全不同的软件开发平台,那就苦了。
(3)哪天若想创业,搞自已的产品,那么
嵌入式
是一个不错的主意,这可不像应用
软件
那样容易被盗版。土木学院有一个叫启明星的公司开发出一个好象叫“工程e”的掌上
PDA
(南校区门口有广告),施工技术人员用该PDA可当场进行土木概预算和其它土木计算,据说销路特好。我认识的某大学老师,他开发的饭馆用的点菜PDA(WinCE平台,可无线连网和上网),据他说销路不错,饭馆点点PDA让客户点菜,多显派头档次。我记得00级2+2班当年有一组同学在学Windows程序
设计
课程时用VC++设计了一个功能很强的点菜系统做为课程项目,当时真想建议他们将这个
软件
做成PDA,估计会有些销路(上海火车站南广场的Macdonald便使用很漂亮的PDA给用户点食品,像摸像样的)。这些PDA的硬件
设计
一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
八大入门的知识点
1、
C语言
嵌入式
Linux工程师的学习需要具备一定的
C语言
基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。
2、Linux基础
Linux
操作系统
的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI ,编译器GCC,调试器GDB和 Make 项目管理工具, Shell Makefile脚本编写等知识,
嵌入式
开发环境的搭建。
3、Linux系统编程
重点学习标准I/O库,Linux多任务编程中的多进程和
多线程
,以及进程间通信(pipe、
FIFO
、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。
4、Linux网络编程
计算机网络在
嵌入式
Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理及编程方法,掌握混合C/S架构网络
通信系统
的
设计
,熟悉HTML,Javascript等Web编程技术及实现方法。
5、数据结构与
算法
数据结构及
算法
在
嵌入式
底层驱动、
通信协议
、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮性。此阶段的学习要重点理解数据结构与
算法
的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其
C语言
实现过程。
6、C++ 、QT
C++是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C++的重要内容。图形界面编程是
嵌入式
开发中非常重要的一个环节。由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。
7、Cortex A8 、Linux 平台开发
通过基于ARM Cortex-A8处理s5pv210了解芯片手册的基本阅读技巧,掌握s5pv210系统资源、
时钟
控制器、
电源管理
、异常中断控制器、
nand
flash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在s5pv210实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解
Android
操作系统
开发流程。Android系统是基于Linux平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用
软件
组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、
PDA
等
消费类电子
产品。
8、驱动开发
驱动程序
设计
是
嵌入式
Linux开发工作中重要的一部分,也是比较困难的一部分。本阶段的学习要熟悉Linux的内核机制、驱动程序与用户级应用程序的
接口
,掌握系统对
设备
的并发操作。熟悉所开发硬件的工作原理,具备ARM硬件
接口
的基础知识,熟悉ARM Cortex-A8处理器s5pv210各资源、掌握Linux设备驱动原理框架,熟悉工程中常见Linux高级字符设备、块设备、网络设备、
USB
设备
等驱动开发,在工作中能独立胜任底层驱动开发。
十大课本上学不到的妙招
1、离开舒适圈
虽然当了多年的工程师、但自认是系统与
软件
技术“通才”的
DSP
与
嵌入式
软件
开发顾问公司Jetperch创办人MattLiberty建议,不断更新并提升原本擅长的技术虽然很重要,但
嵌入式
工程师若能扩展自己的知识领域会更有益。走出舒适圈,挑战自我、去学习原本不熟悉的东西,包括工程以外的知识,例如与客户、同事之间的互动,将会收获良多。
2、学习利用搜索引擎
当了多年工程师、自认是“看得懂系统架构的
软件
人”的PTRGroup首席科学家MichaelAnderson认为,不要闭门造车,要善用开放源码世界的信息,很多常见的
设计
问题其实透过因特网就能找到同领域菁英贡献的程序代码;
嵌入式
工程师们要走出自己的小世界拥抱社群,与同领域的其他工程师们相互交流、互相帮助,而这也是开放源码世界的精神。
3、学习那些让因特网实现的技术
具备多年
嵌入式
工程师经验的独立产品
设计
与顾问公司AuriumTechnologies总经理KenWada认为,多数嵌入式领域工程师都知道如何撰写C或C++语言程序,但有时候这样的技能是不够的;他建议嵌入式工程师学习因特网有关的技术,对职业生涯发展会有加分效果,例如他目前负责的几个开发案,都是在
嵌入式系统
中嵌入虚拟(virtual)的XML,好让一些小型连网
设备
能具备“即插即用”的运作模式。
4、熟悉
实时
操作系统
(
RTOS
)
在工程人才招募机构RandstadTechnologies负责
嵌入式
产业领域的解决方案经理HenryWintz表示,目前产业界对于熟悉
RTOS
的工程师需求很高,也愿意提供更高的薪资水平;因此他鼓励没有接触过RTOS的
嵌入式
工程师从一些较小型的系统着手,累积相关技术经验。此外他也发现产业界对嵌入式Linux人才有不少需求,主要是因为这种
操作系统
具备较大的
设计
弹性。
5、了解最新的处理器
有超过多年
嵌入式软件
工程师经验的
Embedded
.fm工程师EleciaWhite表示,除了要深入了解C或C++等基本程序语言,有时也要认识一些热门的新程序语言以因应特殊
设计
需求,但更重要的是了解最新的处理器技术;处理器才是
嵌入式系统
的本质。因为我们的系统资源有限,我们需要了解可用的资源有哪些。
6、培养多元化技能与系统观
担任近多年工程师、具备许多不同领域技术经验的技术顾问公司Rebelbot顾问JenCostillo建议,原本从事较小型系统架构(例如
MCU
)开发的工程师,可以开始去熟悉更大的系统(例如Linux
驱动程序
),反之亦然。尝试着去开发手机应用程序、或者是学习后端服务器的相关技术,能让你开启完全不同的观点;他并建议工程师去熟悉开放性硬件,现在市面上有不少现成的开发板,能让工程师专注于学习独特
算法
的开发。
7、要能熟悉开放源码
软件
拥有多年工程师经验的FreescaleSemiconductor数字网络全球
软件
开发部门总监RobOshana表示,客户往往会要求在系统中整合一大堆软件,因此所有的
嵌入式
工程师需要熟悉各种
软件
;他建议工程师避免只专长单一领域,因为那可能会阻碍你的成长。对嵌入式工程师来说,确保自己对软硬件技术都很了解,是非常宝贵的价值。
8、建立系统级的工程思维
自诩为高信赖度
嵌入式系统
专家、担任了多年工程师的E2V电子系统总工程师AdamTaylor认为,
嵌入式
工程师拥有系统导向的思维是很重要的,有不少开发案遇到问题,就是因为没有在开发初期充分考虑基准、
验证
策略以及
兼容性
验证
计划等项目;此外每个嵌入式工程师都应该具备优良的项目管理技巧,力求准时完成负责的项目。具备能明智因应技术与项目风险的能力,对职业生涯发展会很有帮助。
9、学习无线连结技术
自认是低阶
嵌入式
工程师、有多年工作经验的iRobot资深首席
软件
工程师ChrisSvec建议,嵌入式工程师需要在接下来1~3年学习无线连结技术,特别是
Wi-Fi
与
蓝牙
低功耗
(
BLE
);因为现在的
嵌入式
设备
(至少各种消费性电子都是)与使用者智能手机连结的主要(或唯一)方式,就是透过这些无线技术,虽然
Wi-Fi
与
BLE
不一定会是
嵌入式系统
的标准配备,但熟悉这些技术对
嵌入式
工程师来说会很实用。
10、要能明确表达自己的想法与意见透过文字或绘图
Micrum总裁JeanLaBrosse认为,无论是哪一种工程师,都需要能有效表达自己的想法与意见;往往有些菜鸟工程师无法清晰表达自己的想法,因为抓不到重点,而最好的解决方法是练习将之图形化,例如画出流程图。这听起来好像有点过时,但有时利用各种图框组合来整理自己的思绪、表达想法会是很有用的,例如iPad的iThoughts应用程序。
阅读原文
阅读
在看
已同步到看一看
写下你的想法
前往“发现”-“看一看”浏览“朋友在看”
前往看一看
看一看入口已关闭
在“设置”-“通用”-“发现页管理”打开“看一看”入口
我知道了
已发送
取消
发送到看一看
发送
一文了解嵌入式开发的必备知识点
最多200字,当前共
字
发送中