在讨论学习嵌入式之前,首先需要明确何为嵌入式,嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,嵌入式是一种专用的计算机系统,一般指非PC系统,它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件和应用程序编程。
对于零基础学习嵌入式的同学,建议可以看一下有关计算机操作系统工作原理以及计算机组成原理等方面的专业书籍。如果需要快速入门的同学,可以直接学习软件基础,比如C语言,汇编语言,熟悉linux操作系统。先对于进程、线程、任务调度、总线、I/O等基本概念及工作原理有一个初步的了解和掌握,这部分知识的准备对于后续更好地学习嵌入式Linux系统开发将会起到很好的帮助作用。
嵌入式系统分为硬件层、驱动层、操作系统层和应用层四个层次,关于硬件层,是整个嵌入式系统的根本,如果对于单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础;硬件层需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。
驱动层就比较难了,需要看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导致其它任务不能动行,嵌入式的驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。
操作系统层,对于操作系统层目前可能只能说是简单的移植,操作系统是负责系统任务的调试、磁盘和文件的管理。
应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。需要掌握基础算法,数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发,如MQTT等。
基于以上的介绍,对应于嵌入式各个层次的技术要求也不同,嵌入式的第一阶段建议大家学习Linux操作系统的使用,精通使用C/C++语言编程;第二阶段 精通嵌入式Linux下的程序设计,了解ARM体系结构和编程,掌握bootloader和kernel的移植技能和嵌入式Linux开发技术,第三阶段掌握嵌入式Linux驱动开发,掌握Qt应用开发、系统开发。
当然了,学习完理论,也需要结合实际的开发项目,并多加实践,循序渐进。