嵌入式系统的学习困惑、知识体系、及学习建议

情景知识了解:嵌入式分类
Ⅰ.    电子系统智能化类(微控制器类):
应用领域:
主要用于工业控制、现代农业、家用电器、汽车电子、测控系统、数据采集,一般称为微控制器(MCU)。
技能要求:
注重软件、硬件协同开发,开发者必须掌握底层硬件接口、底层驱动、软硬件密切结合的开发调试技能。
操作系统:
通常使用实时操作系统(RTOS),如MQXLite、MQX、FreeRTOS、uCOS-III、uCLinux、VxWorks、eCos
总结:
微控制器是嵌入式系统的软硬件基础,是学习嵌入式系统的入门环节,且是最重要的一环。此类嵌入式系统可以不使用操作系统。
Ⅱ.    计算机应用延伸类(应用处理器类)
    应用领域:
平板电脑、智能手机、电视机顶盒、企业网络设备等,一般称为应用处理器。    
技能要求:
终端产品开发者大多购买厂家制作好的硬件实体在嵌入式操作系统下进行软件开发,有时还需要掌握少量的对外接口方式,对硬件的要求相对较少。
操作系统:
使用非实时嵌入式操作系统,通常称为嵌入式操作系统(EOS),如Android、Linxu、iOS、Windows CE
总结:
要想全面学习掌握嵌入式系统,应先学习掌握微控制器,在此基础上进一步学习掌握应用处理器编程,不要倒过来学习。
一、    嵌入式的学习困惑
a)    基本原则:
入门时间较快、硬件成本较少、软硬件资料规范、知识要素较多,学习难度较低。
b)    入门芯片的选择——微控制器还是应用处理器?
性能角度:
微控制器频率低、计算能力弱、稳定性高、可靠性强
操作系统系统角度:
    微控制器一般使用RTOS,也可不使用操作系统。
    应用处理器程序一般使用非实时操作系统。
知识要素角度:
开发微控制器程序:
    更需要了解底层硬件。
开发应用处理器程序:
一般在厂家提供的驱动基础上基于操作系统开发,更像开发一般PC软件方式。
    工作频率:
嵌入式系统设计不是追求芯片的计算速度、工作频率、操作系统等因素,而是追求稳定可靠、维护、升级功耗、价格等指标。
    总结:
要想成为一名知识结构合理且比较全面全面额的嵌入式系统工程师应该选择一个比较经典的微控制器作为入门芯片,且从不带操作系统(NOS)学起,由浅入深,逐步推进。
c)    开始学习时,是无操作系统(NOS)、实时操作系统(RTOS),还是一般嵌入式操作系统(EOS)?
i.    初学者往往选择一个嵌入式操作系统就开始学习了,针对很多初学者选择“XXX嵌入式操作系统+XXX处理器”的嵌入式系统入门学习模式并不合适。
建议:
首先把嵌入式系统软件与硬件基础打好了,再根据实际应用需要,选择一种事实操作系统(RTOS)进行实践。要意识到,RTOS是开发嵌入式产品的辅助工具,是手段,不是目的,有些小型微型嵌入式产品并不需要RTOS。
ii.    选择RTOS还是EOS?
测控领域:选择RTOS——基础阶段主要学习RTOS的基本原理,并学习在RTOS之上的软件开发方法,而不是学习如何设计RTOS。
平板电脑、智能手机、电视机顶盒、电视机顶盒、企业网络设备等一般选择EOS。
iii.    嵌入式操作系统一定不要一开始就学,这样会走很多弯路。等软硬件基础打好了,再学习就感到容易理解。一定不要本末倒置,将过多的精力花在设计或移植RTOS、EOS上面。
d)    硬件软件如何平衡
选择任何型号的MCU,其芯片相关知识只占知识体系的20%左右,80%左右是通用知识。但是这80%的通用知识必须通过具体实践才能进行,所以学习嵌入式技术要选择一个系列的MCU。
仅仅从电子角度或者软件开发者角度认识嵌入式系统都不对,底层硬件驱动软件的开发若不全面考虑高层功能软件对底层硬件的可能调用,会使得封装或参数设计的不合理或不完备,导致高层功能软件的调用困难。
建议:
要想成为一名真正的嵌入式系统设计师,在初学阶段,必须重视打好嵌入式系统的硬件和软件基础。
美国学者John Catsoulis在Designing Embedded Hardware 一书中总结:嵌入式系统与硬件紧密相关,是软件与硬件的综合体,没有对硬件的理解就不可能写好嵌入式软件,同样没有对软件的理解也不可能设计好嵌入式硬件。
e)    整体总结
不能期望通过短期培训完成整体知识体系的建立,应该重视自身实践,全面地理解和掌握嵌入式系统的知识体系。
二、    嵌入式知识体系
a)    整体概括
i.    硬件
MCU的硬件最小系统、输入/输出外围电路、人机接口设计
ii.    软件    
固化软件的设计、可能有PC软件的设计
b)    知识体系详细说明
i.    掌握硬件最小系统与软件最小系统框架
1.    核心构件系统(硬件最小系统):
电源、晶振、复位、写入器调试接口。
2.    软件最小系统框架:
包含工程规范完整要素的可移植与可复用的工程模板。
ii.    掌握常用基本输出的概念、知识要素、构件及构件设计方法
1.    通用I/O(GPIO)
2.    魔术转换AD
3.    数模转换DA
4.    定时器模块
iii.    掌握若干嵌入式通信的概念、知识要素、构件使用方法及构件设计方法
1.    串行通信接口UART
2.    串行外设接口SPI
3.    集成电路互连I2C
4.    CAN
5.    USB
6.    嵌入式以太网
7.    无线射频通信
iv.    掌握常用应用模块的构件设计方法及使用方法及数据处理方法
1.    显示模块(LED、LCD、触摸屏)
2.    控制模块(控制各种设备,包括PWM等)
3.    数据处理(如图形、图像、语音、视频)
v.    掌握一门实时操作系统RTOS的基本用法与基本原理
vi.    掌握嵌入式软硬件的的基本调试方法
1.    断点调试
2.    打桩调试
3.    Printf调试方法
4.    正确软件环境调试未知硬件,正确硬件环境调试未知软件
三、    基础阶段学习建议
a)    由浅入深,打好软硬件基础
i.    要求
充分理解硬件基本原理
掌握功能模块的知识要素
掌握底层驱动构件的使用方法
掌握一两个底层驱动构件的设计过程与方法
熟练掌握在底层驱动构件基础上,利用C语言编程实践
ii.    汇编语言:
了解几个必须的汇编语句,必须通过第一个程序理解芯片初始化过程、中断机制、程序存储情况(最好认真理解一个真正的汇编实例)。
iii.    为了测试的需要最好最好掌握一门PC面向对象编程高级语言。
如C#。
b)    充分理解知识要素、掌握底层驱动构件的使用方法
i.    通用知识要素+底层驱动构件的基本方法
充分理解通用要素基础上,学会底层驱动构件使用方法
ii.    硬件:
深入理解MCU的硬件最小系统基础上,对GPIO、UART、定时器、PWM、AD、DA、Flash在线编程、USB等硬件模块逐个实验理解。
c)    基本掌握底层驱动构件的设计方法
i.    掌握GPIO构件的设计过程和设计方法
ii.    掌握UART构件的设计过程和设计方法
iii.    透彻理解构件化开发方法与底层驱动构件封装规范
d)    掌握单步跟踪调试、打桩调试、printf输出调试等调试手段
i.    单步跟踪调试:
充分利用单步跟踪调试了解与硬件打交道的寄存器值的变化,理解MCU软件干预硬件的方式,用于底层驱动构件设计阶段。不进入子函数内部执行的单歩跟踪调试,可用于整体功能跟踪。
ii.     打桩调试:
主要用于编程过程中,功能确认。编写几句后即可打桩调试观察。
iii.    printf输出调试:
串口printf输出信息在PC屏幕显示,与PC编程中Printf功能类似,只是嵌入式开发printf输出是通过串口输出到PC屏幕,PC上需用串口调试工具显示,PC编程中Printf直接将结果显示在PC屏幕上。
e)    日积月累、勤学好问
本文大部分摘自王宜怀老师(苏州大学计算机科学与技术学院教授、博士生导师、苏州大学嵌入式系统与物联网研究所所长)的《嵌入式技术基础与实践(第4版)——ARM Cortex-M0 + KL系列微控制器》一书。小编读完后收获很大,希望大家仔细阅读。
 

你可能感兴趣的:(嵌入式Linux)