想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。嵌入式是单片机开发中一个比较大的类别,它包括的东西非常的多。下面我们就具体来了解一下。
一、嵌入式系统的知识体系
嵌入式系统的应用范围可以大概分为两大类:
·电子系统的智能化(工业控制、现代农业、家用电器、汽车电子、测控系统、数据采集等)。
·计算机应用的延伸(MP3、手机、通信、网络、计算机外围设备等)。
从这些应用可以看出,要完成一个以MCU为核心的嵌入式系统应用产品设计,需要硬件、软件及行业领域相关知识。
·硬件:主要有MCU的硬件最小系统、输入/输出外围电路、人机接口设计。
·软件设计:有固化软件的设计,也可能含PC机软件的设计。
·行业知识:需要通过协作、交流与总结获得。
·概括地说,学习以MCU为核心的嵌入式系统,需要以下软硬件基础知识与实践训练:
·硬件最小系统(电源、晶振、复位、写入调试接口);
·通用I/O(开关量输入/输出,涉及各种二值量检测与控制);
·模/数转换(各种传感器信号的采集与处理,如红外、温度、光敏、超声波、方向等);
·数/模转换(对模拟量设备利用数字进行控制);
·通信(串行通信接口SCI、串行外设接口SPI、集成电路互联总线I2C、CAN、USB、嵌入式以太网、ZigBee技术等);
·显示(LED、LCD等);
·控制(控制各种设备,包括PWM等控制技术);
·数据处理(图形、图像、语音、视频等的处理或识别);
·各种具体应用。
·而应用中的硬件设计、软件设计、测试等都必须遵循嵌入式软件工程的方法、原理与基本原则。所以,嵌入式软件工程也是嵌入式系统知识体系的有机组成部分,只不过它融于具体项目的开发过程之中。
·以上实践训练涉及硬件基础、软件基础及相关领域知识。计算机语言、操作系统、开发环境等均是达到这些目的的工具。有些刚入门的朋友,容易把工具的使用与所要达到的真正目的搞乱了。有的初学者花费了很多时间去学的嵌入式操作系统移植,而不进行实际嵌入式系统产品的开发,到最后也做不好一个嵌入式系统小产品,偏离了学习目标,甚至放弃嵌入式系统领域。这就是进入了嵌入式系统学习误区,下面对此作一些分析。
·二、嵌入式系统的学习误区
·关于嵌入式系统的学习方法,因学习经历、学习环境、学习目的、已有的知识基础等不同,可能在学习顺序、内容选择、实践方式等方面是不同的。但是,我们要明确哪些是一定要掌握的基础知识,分清先后顺序;哪些必须通过实践才能弄清楚的;哪些是暂时不需要的,哪些是与具体芯片或开发环境相关的知识。
2.1.操作系统的困惑
许多初学者并不清楚如何进行嵌入式系统入门学习。个人的建议是:首先把嵌入式系统软件与硬件基础打好了,再根据你以后的发展方向,选择一种实时操作系统(例如RTOS)进行学习实践。
RTOS是开发部分嵌入式产品的辅助工具,不是目的;许多类嵌入式产品,并不需要RTOS。所以,一开始就学习RTOS,并不符合“由浅入深、循序渐进”的学习规律。而且RTOS本身由于种类繁多,实际使用何种RTOS,一般需要由工作单位确定。基础阶段主要学习RTOS的基本原理与RTOS上的软件开发方法,而不是学习如何设计RTOS。以开发实际嵌入式产品为目标的学习者,不要把过多的精力花在设计或移植RTOS上面。正如很多人使用Windows操作系统,而设计Windows操作系统的只有Microsoft。许多人“研究”Linux,但不使用它,浪费了时间。人的精力和时间是有限的,学习必须有目的的去学。
2.2.硬件与软件的困惑
以MCU为核心的嵌入式技术的知识体系必须通过具体的MCU来实践。但是,不管选择哪种型号的MCU,其芯片相关的知识只占知识体系的20%左右,80%是通用的软、硬件及相关知识。而这80%的通用知识,需要经过大量的实践应用才能积累,所以我们不论选择哪个MCU,都要多动手去做项目。
困惑1:系统含有硬件与软件两大部分,它们之间的关系如何?
·有些学者,仅从电子的角度认识嵌入式系统。
他们认为“嵌入式系统=MCU硬件系统+小程序”。这些学者大多具有良好的电子技术基础知识。实际情况是,早期MCU内部RAM小,程序存储器外接,需要外扩各种I/O,没有像USB、嵌入式以太网等这样较复杂的接口。因此,程序占总设计量比例小于50%,使人们认为嵌入式系统(单片机)是“电子系统”,以硬件为主,程序为辅。
但是,随着MCU制造技术的发展,不仅MCU内部RAM越来越大,Flash进入MCU内部更是改变了传统的嵌入式系统开发与调试方式,固件程序可以更方便地调试与在线升级,许多情况下与开发PC机程序的方便程度相差无几,只不过开发环境与运行环境不是同一载体而已。这使得嵌入式系统的软件硬件设计方法发生了根本变化。
·有些学者,仅从软件开发角度认识嵌入式系统,甚至仅从嵌入式操作系统认识嵌入式系统。
这些学者大多具有良好的计算机软件开发基础知识,认为硬件是生产厂商的事。他们没有认识到,嵌入式系统产品的软件与硬件均是需要开发者设计的。笔者常常接到一些关于嵌入式产品稳定性的咨询,发现大多数是由于软件开发者对底层硬件的基本原理不理解。特别是有些功能软件开发者,过分依赖于底层硬件的驱动软件,自己对底层驱动原理知之甚少。实际上,一些功能软件开发者,名义上在做嵌入式软件,其实仅仅是使用嵌入式编辑、编译环境而已,本质与开发通用PC机软件没有两样。而底层硬件驱动软件的开发,若不全面考虑高层功能软件对底层硬件的可能调用,也会使封装或参数设计得不合理或不完备,导致高层功能软件调用困难。
实际上,嵌入式系统设计是一个软件、硬件协同设计工程,不能像普通的计算机那样区分,软件、硬件完全分开来看,而要在一个大的框架内协调工作。
困惑2:学习嵌入式系统是以软件为主还是以硬件为主,或者如何选择切入点,如何在软件与硬件之间取得平衡?
要想成为一名真正的嵌入式系统设计师,在初学阶段,必须打好嵌入式系统的硬件与软件基础。嵌入式系统与硬件紧密相关,是软件与硬件的综合体,没有对硬件的理解就不可能写好嵌入式软件;同样,没有对软件的理解也不可能设计好嵌入式硬件。
2.3.片面认识嵌入式系统
嵌入式系统产品种类繁多,应用领域各异。在前文中,把嵌入式系统的应用范围粗略分为电子系统的智能化与计算机应用的延伸两大类。从初学者角度来看,可能存在分别从这两个角度片面认识嵌入式系统的问题。
·一些从电子系统智能化角度认识嵌入式系统的学习者,可能会忽视编程结构、编程规范、软件工程的要求、操作系统等知识的积累。
·另一些从计算机应用的延伸角度认识嵌入式系统的学习者,可能会把通用计算机学习过程中的概念与方法生搬硬套到嵌入式系统的实践中,忽视嵌入式系统与通用计算机的差异。
实际上,在嵌入式系统学习与实践的初始阶段,应该充分了解嵌入式系统的特点,根据自身的已有知识结构,制定适合自身情况的学习计划。
目标应该是:打好嵌入式系统的硬件与软件基础,通过实践,为成为良好的嵌入式系统设计师建立起基本知识结构。
学习过程中,具体应用系统可为实践载体,但不能拘泥于具体系统,应该有一定的抽象与归纳。
·初学者开发实际控制系统时没有使用实时操作系统,但不要认为实时操作系统不需要学习。
·初学者可以一个带有实时操作系统的样例为蓝本进行学习,但不要认为任何嵌入式系统都需要实时操作系统,甚至为一个十分简明的实际系统加上不必要的实时操作系统。
总结:片面认识嵌入式系统,可能导致学习困惑。应该根据实际项目需要,锻炼自己分析实际问题、解决问题的能力。这是一个长期的学习与实践过程,不能期望通过短期培训完成整体知识体系的建立,应该重视自身实践,全面地理解嵌入式系统的知识体系。
本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!