嵌入式工程师学习路线(软件类)
时间:2022-08-10 19:30:00
目录
- 一、软件嵌入式工程师的意义
- 二、目前嵌入式市场规模
- 三、社会需求
- 四、学习目标
-
- 编程基础
- 数据库开发
- 嵌入式设备及GUI开发
- ARM系统结构编程
- 构建嵌入式系统
- 嵌入式Linux开发应用程序
- 物联网开发
- 完成一个综合项目
- 五、对嵌入式工程师的建议
一、软件嵌入式工程师的意义
嵌入式软件工程师的职责主要是根据产品的功能要求设计软件,使硬件工作。
二、目前嵌入式市场规模
近年来,嵌入式系统产品逐渐完善,并广泛应用于世界各行各业。2004年,全球嵌入式系统产品产值达到2000亿美元,国内嵌入式软件产值达到600亿美元。目前,嵌入式系统产品的开发和应用已成为我国信息化推动工业化和工业化发展的新的国民经济增长点。随着消费家电的智能化,嵌入式更为重要,就像我们通常看到的手机一样,PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机 (DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪器、汽车电子、家电控制系统、医疗仪器、航天设备等,都是典型的嵌入式系统。据预测,跟着Internet随着廉价微处理器的快速发展和出现,嵌入式系统将在日常生活中形成更大的应用领域
三、社会需求
嵌入式电子产品的硬件分硬件都是一样的,核心是由CPU、RAM和FLASH 大部分组成,软件差别很大。产品的具体功能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4-5倍。因此,一般来说,一家公司的软件工程师数量是硬件工程师的4~嵌入式软件工程师的需求是硬件工程师的5倍
四、学习目标
编程基础
本阶段重点关注嵌入式软件编程,包括学习Linux系统的基本应用,Linux常用命令,C语言编程基础,常用数据结构。
1.嵌入式C语言高级编程
2、C数据类型,控制语句
3、C程序结构设计、数组、函数、预处理:
4.指针和字符串操作
5、结构体、共用体、宏、枚举
6、文件I/O操作
特别是C语言对指针的理解和应用。本阶段的主要目的是学习编程语言,发展环境,培养自己的编程思维,为进一步学习嵌入式发展奠定良好的基础。
本阶段推荐的嵌入式学习书籍如下:
《C编程语言,《C语言核心技术,数据结构C语言描述,《C和指针》,《C陷阱与缺陷,《C++ Primer》
数据库开发
1、数据库概念、数据库类型
2、SQLite数据库介绍及安装和移植
3、SQL数据库语言( 语言的数据定义(DDL)、数据操作语言(DML)、数据查询语言(DQL)、语言的数据控制(DCL) )
4、sqlite数据库C语言编程中的各种数据库SQL对数据库进行控制。
嵌入式设备及GUI开发
操作系统嵌入式系统的构建,包括熟悉系统启动过程的使用。编写嵌入式环境配置和开发工具学习。本阶段的主要目的是掌握带有操作系统的嵌入式系统的构建和燃烧过程,对嵌入式系统软件的整体组成有全面的了解,为我们学习嵌入式应用和驱动开发奠定坚实的基础。
1、Linux以下项目管理工具Make以及Makefile工作原理及其编写
2、Linux下shell脚本相关知识及其编写
3.嵌入式开发环境的基本概念及其构建
4、A53开发板介绍,设备使用,A53开发板与计算机通信交叉编译
GUI开发图形界面
1、常用控件——button、label、text edit等
2、水平布局、垂直布局、固定布局、网格布局、相对布局等
信息回调、鼠标、键盘事件等。
4、时间编程、数据存储、绘图机制、定时器处理、多任务处理等
本阶段推荐的嵌入式学习书籍:
1、《Linux与Unix Shell 编程指南》
2、《嵌入式Linux应用程序开发详解
ARM系统结构编程
这一阶段是真正的嵌入式编程。首先,我们应该选择嵌入式编程CPU目前还有嵌入式开发平台ARM 嵌入式CPU最广泛的应用是学习嵌入式CPU裸机编程,熟悉中断,定时器,串口,NAND FLASH、网络控制器,LCD嵌入式外围设备的硬件工作原理,如屏幕和触摸屏,以及如何使用C语言编程和控制这些硬件。
在这个阶段,除了学习硬件编程外,我们还需要学习嵌入式硬件的知识,但对于嵌入式软件工程师来说,重点是学习硬件的工作原理,并在掌握硬件工作原理的基础上控制硬件。这不同于硬件工程师学习的重点。本阶段对应的学校课程主要包括模拟电路、数字电路、微机原理和单片机。这一阶段的重点是看CPU芯片手册,大部分参考书也是芯片手册的翻译。
推荐参考书如下:
《ARM嵌入式系统开发-软件设计与优化,
《ARM详解处理器开发 基于ARM Cortex-A88处理器的开发设计
构建嵌入式系统
本阶段主要学习带有操作系统的嵌入式系统的构建,包括系统的启动过程,Bootloader工作流程,UBOOT的编译、裁剪与移植、嵌入式Linux切割、移植和编译内核,定制嵌入式根文件系统,BootLoader、内核和根文件系统的烧写。 本阶段的主要目的是掌握带有操作系统的嵌入式系统的构建和烧写过程,全面了解嵌入式系统软件的整体组成,为我们学习嵌入式应用和驱动开发奠定坚实的基础。
这一阶段推荐的书籍如下:
构建嵌入式Linux实战核心软件系统
嵌入式Linux开发应用程序
本阶段主要学习上层嵌入式Linux包括应用程序开发基于Linux多过程、多线程、网络、文件和目录QT编程。掌握嵌入式Linux应用程序开发技术环境下的技术开发。
本阶段推荐的书籍有:
《UNIX高级环境编程
《Unix网络编程》
《Qt Creator快速入门
《精通Qt4编程》
##嵌入式Linux开发驱动程序
本阶段主要学习底层嵌入式Linux设备驱动程序设备驱动程序常用的字符设备驱动、块设备驱动、LCD设备驱动、触摸屏设备驱动和驱动程序开发的核心技术。
本阶段推荐的参考书有:
《Linux设备驱动程序
《Linux设备驱动开发详解
物联网开发
1.了解物联网、泛在网和互联网的基本要领及其关系
2、熟悉RFID从低频到高频的基本工作原理,RFID读卡器类型和行业应用、读卡器原理和通信过程
3、熟悉TI的cc2530的基本应用包括三种网络结构:基本硬件资源、协议栈相关接口的使用、点对点通信、星形通信、广播通信和绑定通信star、tree、mesh,掌握zibgee相关微控制处理芯片
4、了解zigbe协议栈组成,以及zigbee不同应用于通信、组网、摇控等领域
5、通过Bluetooth、wifi和zigbee技术比较各自的优缺点,重点介绍zigbee的各种应用
6.掌握温度、湿度、光照PH二氧化碳等传感器的工作原理及通信接口
7、了解NB-IOT基本概念及运输BC95模块
8、熟悉CoAP协议在NB-IOT中的应用
9、掌握常用AT指定集
完成综合项目
嵌入式技术的关键在于理论与实践的结合。我们需要完成一个全面的嵌入式培训项目,以应用我们所学到的知识来解决实际发展中的问题。
例如:
项目1:智能家居项目1:智能家居项目1:
本项目实现了设备的本地控制和远程控制。对于开关设备,可以控制温湿度等信息采集设备,可以控制视频监控等监控设备,外人入侵等安全系统可以自动通过GPRS报警。本项目涉及技术c语言、多任务开发、网络socket开发、boa网络服务器,CGI编程、html网页设计等
项目2:智能人脸识别项目
本项目首先通过opencv使用图书馆实现人脸基础训练模型检测,然后通过人脸识别和实时图像分析识别进行深入学习,了解和理解opencv、dlib等开源工具
项目三:RFID智能门禁项目
本项目实现RFID卡识别、用户信息注册、修改、删除、语音广播提示可根据不同的查询条件查询,可实现考勤
项目4:多媒体播放器项目
实现音乐播放、暂停、上一首歌、下一首歌、歌曲列表歌词同步等具有图形界面的播放功能,涉及c语言、数据结构链表等知识点Linux多过程、多线程、过程间通信、同步互斥等
项目五:智能手机设计项目
本项目可实现智能手机电话、电话显示、中英文短信收发、短信查看、信号强度检测、运营商检测。本项目涉及的技术GPRS AT指令集、Linux多过程、多线程、过程间通信、同步互斥GUI图形开发等
本项目可通过NB-IOT等标准物联网通信协议是实现现代化资源统筹管理,基本功能是实现教室灯控、空调、通风、窗帘、门禁、人流等实时远程监控,以实现联动、手动控制和数据采集分析
五、对嵌入式工程师的建议
1.学习那些让因特网实现的技术具备30年嵌入式工程师经验的独立产品设计与顾问公司Aurium Technologies总经理Ken Wada认为,多数嵌入式领域工程师都知道如何撰写C或C++语言程序,但有时候这样的技能是不够的;他建议嵌入式工程师学习因特网有关的技术,对职业生涯发展会有加分效果,例如他目前负责的几个开发案,都是在嵌入式系统中嵌入虚拟(virtual)的XML,好让一些小型连网设备能具备“即插即用”的运作模式。
2.学习利用搜索引擎当了35年工程师、自认是“看得懂系统架构的软件人”的PTR Group首席科学家Michael Anderson认为,不要闭门造车,要善用开放源码世界的信息,很多常见的设计问题其实透过因特网就能找到同领域菁英贡献的程序代码;嵌入式工程师们要走出自己的小世界拥抱社群,与同领域的其他工程师们相互交流、互相帮助,而这也是开放源码世界的精神。
3.离开舒适圈!虽然只当了18年工程师、但自认是系统与软件技术“通才”的DSP与嵌入式软件开发顾问公司Jetperch创办人Matt Liberty建议,不断更新并提升原本擅长的技术虽然很重要,但嵌入式工程师若能扩展自己的知识领域会更有益。走出舒适圈,挑战自我、去学习原本不熟悉的东西,包括工程以外的知识,例如与客户、同事之间的互动,将会收获良多。
4.熟悉实时操作系统(RTOS)在工程人才招募机构Randstad Technologies负责嵌入式产业领域的解决方案经理Henry Wintz表示,目前产业界对于熟悉RTOS的工程师需求很高,也愿意提供更高的薪资水平;因此他鼓励没有接触过RTOS的嵌入式工程师从一些较小型的系统着手,累积相关技术经验。此外他也发现产业界对嵌入式Linux人才有不少需求,主要是因为这种操作系统具备较大的设计弹性。
5.培养多元化技能与系统观担任近20年工程师、具备许多不同领域技术经验的技术顾问公司Rebelbot顾问Jen Costillo建议,原本从事较小型系统架构(例如MCU)开发的工程师,可以开始去熟悉更大的系统(例如Linux驱动程序),反之亦然。尝试着去开发手机应用程序、或者是学习后端服务器的相关技术,能让你开启完全不同的观点;他并建议工程师去熟悉开放性硬件,现在市面上有不少现成的开发板,能让工程师专注于学习独特算法的开发。
6.了解软件也要了解最新的处理器有超过15年嵌入式软件工程师经验的Embedded.fm工程师Elecia White表示,除了要深入了解C或C++等基本程序语言,有时也要认识一些热门的新程序语言以因应特殊设计需求,但更重要的是了解最新的处理器技术;处理器才是嵌入式系统的本质。因为我们的系统资源有限,我们需要了解可用的资源有哪些。
7.要能熟悉开放源码软件拥有31年工程师经验的Freescale Semiconductor数字网络全球软件开发部门总监Rob Oshana表示,客户往往会要求在系统中整合一大堆软件,因此所有的嵌入式工程师需要熟悉各种软件;他建议工程师避免只专长单一领域,因为那可能会阻碍你的成长。对嵌入式工程师来说,确保自己对软硬件技术都很了解,是非常宝贵的价值。
8.建立系统级的工程思维自诩为高信赖度嵌入式系统专家、担任了15年工程师的E2V电子系统总工程师Adam Taylor认为,嵌入式工程师拥有系统导向的思维是很重要的,有不少开发案遇到问题,就是因为没有在开发初期充分考虑基准、验证策略以及兼容性验证计划等项目;此外每个嵌入式工程师都应该具备优良的项目管理技巧,力求准时完成负责的项目。具备能明智因应技术与项目风险的能力,对职业生涯发展会很有帮助。
9.要能明确表达自己的想法与意见透过文字或绘图) Micrum总裁Jean LaBrosse认为,无论是哪一种工程师,都需要能有效表达自己的想法与意见;往往有些菜鸟工程师无法清晰表达自己的想法,因为抓不到重点,而最好的解决方法是练习将之图形化,例如画出流程图。这听起来好像有点过时,但有时利用各种图框组合来整理自己的思绪、表达想法会是很有用的,例如iPad的 iThoughts应用程序。
10.学习无线连结技术自认是低阶嵌入式工程师、有13年工作经验的iRobot资深首席软件工程师Chris Svec建议,嵌入式工程师需要在接下来1~3年学习无线连结技术,特别是Wi-Fi与蓝牙低功耗(BLE);因为现在的嵌入式设备(至少各种消费性电子都是)与使用者智能手机连结的主要(或唯一)方式,就是透过这些无线技术,虽然Wi-Fi与BLE不一定会是嵌入式系统的标准配备,但熟悉这些技术对嵌入式工程师来说会很实用。
大家还有什么见解可以在评论区讨论,让我们也一起进步,迈向嵌入式工程师的领域吧!