嵌入式一般指嵌入式系统,英文叫作:Embedded System.嵌入式开发,其实就是对嵌入式系统的开发。
官方的讲嵌入式系统是以应用为中心,以计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。
简单来说,就是面向用户、面向产品、面向应用。
以应用为中心,说明嵌入式系统具有明确的实际用途;以计算机技术为基础,说明它就是一种特殊的计算机;软硬件可裁剪,说明它有很强的灵活性和可定制能力。
专用计算机系统,专用对应的是通用,我们常用的个人电脑,可用于办公、听歌、看视频等多种用途,就是通用计算机系统。
嵌入式系统的应用十分广泛,涉及智能制造、工业控制、航空航天、教育医疗等很多领域,如下:
个人通信与娱乐系统:手机、数码相机、智能音响、可穿戴电子产品、PSP游戏机等 家电类产品:数字电视、智能小家电产品、扫地机器人等
办公自动化:打印机、复印机、传真机等
医疗器械:生化分析仪、血液蛋白分析仪、CT等
网络通信类:通信类交换设备、网络设备(交换机、路由器、网络安全)等
汽车电子类:安全系统、引擎控制、汽车导航系统等
工业控制类产品:工控机、交互式终端(POS、ATM)、安全监控、数据采集与传输等
军事及航空类:无人机、雷达、作战机器人
以上领域,都使用了嵌入式系统,这还只是冰山一角。随着电子技术和计算机软件技术的发展,嵌入式技术不仅在这些领域达应用越来越深入,而且在其它传统的非信息类设备中也逐渐显现出其用武之地。
可以说,嵌入式系统完全的包围着我们,时刻影响着我们的工作与生活。
明白了什么是嵌入式,那学习嵌入式需要掌握什么呢?
嵌入式分为软件和硬件两个方向。做嵌入式软件,需要对硬件有一定的基础。下面列一下成为软硬件都会的嵌入式工程师的学习路径吧。
一、电子设计
首先要学习电路、模电、数电,认识电阻、电容、三极管,基础硬件要知道,放大电路、集成运放、时序电路基本电路能看懂,不然看电路图一定是云里雾里,也就无法进行后续的工作。硬件产品的设计实现,包括元器件选型、原理图和PCB设计、电路调试,都需要过硬的电路基础。
二、PCB设计
在电子设计中,PCB是我们设计内容的物理载体,所有我们设计意图的最终实现就是通过PCB版来实现的。
三、C语言
C语言是嵌入式开发中最重要的编程语言,要对这门语言有深入的理解,毕竟不仅仅要会写程序,看懂他人的程序也很重要。最基本的数据类型、数组、指针、链表、算法、结构体、文件操作等都要会,掌握基本语法和语句。
四、单片机
单片机入门相对简单,通过单片机的学习可以熟悉单片机的硬件结构,包括I/O口、AD转换、通信(串口、并口、IIC、CAN、USB、以太网、Zigbee技术等)、显示(LED、LCD等)、控制(PWM等控制技术)、数据处理(图形、图像、语言、视频等的处理识别)等,学好单片机可以为采用侵入式系统奠定良好的基础。
五、Linux
1,Linux基础
Linux操作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编程VI、编译器GCC、调试器GDB和Make项目管理工具,Shell Makefile脚本编写等知识,嵌入式开发环境的搭建。
2,Linux系统编程
重点学习标准I/O库、Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO消息列队、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。
3,Linux网络编程
计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理和编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML、javascript等Web编程技术及实现方法。
4,数据结构与算法
数据结构及算法在嵌入式底层驱动、通信协议及各种引擎开发中会得到大量应用,对其掌握得好坏直接影响程序的效率、简洁及健壮性。次阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。
5,C++、QT
C++是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C++的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。由于QT具有跨平台、面向读一对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广泛的应用,在本阶段通过基于QT图形库的学习使用员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。
6,Cortex-A8、Linux平台开发
通过基于ARM Cortex-A8处理s5pv210系统资源、时钟控制器、电源管理、异常中断控制器、nand flash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁剪、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在s5pv210实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解Android操作系统开发流程。Android系统是基于Linux平台的开源操作系统,该平台是有操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开发和完整的移动软件,目前他的应用不再局限于移动终端,还包括数字电视、机顶盒、PDA等消费电子产品。
7,驱动开发
驱动开发设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。本阶段的学习要熟悉Linux的内核机制、驱动程序和用户级程序的接口,掌握系统对设备的并发操作。熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识,熟悉ARM Cortex-A8处理器s5pv210各资源、掌握Linux设备驱动原理框架。熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发,在工作中能独立胜任底层驱动开发。
六、好用的嵌入式测试工具
ETest(嵌入式系统半实物仿真测试集成开发环境IDE),基于该IDE可以完成嵌入式系统测试软件的开发与部署。ETest系统提供图形化的测试用例开发环境,自动生成测试脚本;测试结果数据可以在线监控,同时生成测试结果信息,并自动生成符合要求的测试报告。自动化测试过程大大缩短产品研发周期,提高软件调试效率。
ETest兼容MFI标准模型,支持加载FMU模型至半实物仿真环境;运行实时硬件在环仿真的同时,支持动态调整模型参数;与Simulink、同元MWorks等建模工具无缝集成。
ETest的部署方式比较灵活,既可以是单机部署也可以是分布式部署。单机部署的时候,全部的功能模块都安装在一台主机当中;分布式部署的时候,设计器和执行器分别部署在独立的主机当中,通过网络进行连接。
ETest为开放性平台,提供C/C++, Python, JS,Lua, Java等API,图形化监控软件界面可以根据用户需求定制。ETest可以快速搭建各类专业化仿真测试工装。与传统模式开发对比,在时间、人力等成本上降低80%以上,扩展灵活,覆盖充分。ETest支持的操作系统除了中标麒麟、银河麒麟、统信软件外,还支持windows linux Mac以及实时的RT linux等。