导航:首页 > 操作系统 > 单片机拼搭

单片机拼搭

发布时间:2025-03-12 13:29:20

‘壹’ 编程入门先学什么

编程入门先学C语言或者python

为了解决使用机器语言编写应用程序所带来的一系列问题,人们首先想到使用助记符号来代替不容易记忆的机器指令。这种助记符号来表示计算机指令的语言称为符号语言,也称汇编语言。

在汇编语言中,每一条用符号来表示的汇编指令与计算机机器指令一一对应;记忆难度大大减少了,不仅易于检查和修改程序错误,而且指令、数据的存放位置可以由计算机自动分配。

(1)单片机拼搭扩展阅读:

使用汇编语言编写计算机程序,程序员仍然需要十分熟悉计算机系统的硬件结构,所以从程序设计本身上来看仍然是低效率的、繁琐的。

但正是由于汇编语言与计算机硬件系统关系密切,在某些特定的场合,如对时空效率要求很高的系统核心程序以及实时控制程序等,迄今为止汇编语言仍然是十分有效的程序设计工具。

但它有不可替代的特性,比如一些单片机或者一些直接控制硬件的程序就一定要用汇编语言。

‘贰’ 为什么在工业上多用PLC而不是单片机

PLC的特点 1.PLC的可靠性高这也是在工业领域应用最多的原因之一。PLC的构成简单来说就是通过单片微型计算机再加上相应的保护电路及自诊断功能组成的,因此PLC的稳定性与安全性都高于单片机。

2.PLC的输入和输出功能模块齐全。PLC针对不同的工业现场信号如直流或交流、开关量、数字量或模拟量、电压或电流等,均有相应的模块与工业现场的器件(如按钮、开关、传感电流变送器、电机启动器或控制阀等)直接连接。这正适合了在工业场景中的大多数开发要求。

3.PLC的编程容易方便,PLC的编程多采用的是梯形图方式,这种方式可以类比于早些年前的继电器拼装成的大规模控制系统,易于开发控制。

4.PLC的现场安装调试比较于单片机具有很大的优势,他的安装大多数是采用的模块化安装加现场总线的方式,而单片机的应用还要选择合适的地点封装散热性等等。

综上PLC和单片机的优势对比可知在工业上对PLC的应用多单片机。

单片机的特点
1.单片机的研发首选需要设计应用场景的原理图,PCB图最后到电路板的制作,然后再进行编程这种方式的的缺点是开发时间久,应用的兼容性差。

2.单片机相比于PLC的优点在于对于复杂系统的控制能力强,价格便宜,体积小适合常用的家用电子产品。

电子设计学堂将持续推出电子DIY设计小视频,零基础学习文章,电子设计技巧等知识,欢迎大家的关注!

刚开始单片机在工业应用的,后来由于工业控制的复杂化在加上单片机的性价比等因素,得不到推广于工业领域。至九十年代,电子产品的来潮,单片机才迎来真正属于自己的一片天。工业领域不能因为单片机而止步不前,于是在传统继电器控制基础上研发出可编程逻辑控制器(PLC)。消费电子产品更新换代快,而单片机成本也低且便于量产,对电子产品最好不过了。不像工业上用的需要稳定可靠还要用的久,虽然PLC贵但是用时久了也相当于把成本降低了。

工业上多用PLC而不是单片机,也是有原因的。

工业控制领域对稳定性和可靠性要求高,不能三天打渔两天晒网,对企业损失是巨大。工业控制环境恶劣,有防护等级要求、设备露天作业等,遇到雨天、潮湿天气、极寒天气,单片机运行能稳定不?可靠性不敢恭维!在工业领域,I/O点动不动成百上千,单片机肯定抗不住,PLC都要弄套冗余系统以防万一,单片机很难办到。工业控制只是它其中一部分,用过PLC的都知道。需要数据采集、通讯、上位、组态,运动控制及显示,得完全依赖工业体系与通讯协议造成,单个的单片机是搞定不了的。比如MODBUS、OPC、PROFIBUS的实现。

开发周期短于单片机,门槛低,不像单片机编程的C语言、汇编语言对于初学者难度大,而PLC编程只要有绘制电气原理图的能力,它的梯形图编程就能很好入门。拿开发周期而言,一个人开发能不?等你弄出来PLC早已经做好准备上现场了。大型项目的高压设备启动运行,小小单片机不得玩死。适用人群也不同,单片机主要是电子工程师而PLC是电气工程师,这两种不同的职业,肯定融合不了,说白了很多电气工程师都不知道玩C语言、汇编语言之类的开发语言。电气工程师觉得编程不够优化,PLC可以自行修改,单片机做好之后就是固定的不是专业人士根本无济于事。例如工业生产过程需要增I/O点删I/O点,单片机能行吗?

PLC它的就是稳定性好,不像我们的消费电子产品,例如手机闪退对我们没损失,大不了重启一下。但是在工业上,你这样时不时闪退企业还不被活活玩死,严重时造成人命都没了。虽然单片机成本低,从整体看单片机的性价比跟PLC比不了的。

说个很形象的比喻吧,在工控领域,PLC相当于小学文化,单片机相当于初中文化。

PLC实质上就是一套集成各种外设功能的单片机控制系统。使用PLC有两大好处,一是编程容易,上手快。二是基本不用考虑硬件的可靠性和适配性问题,需要什么功能就选什么样的模块就行。

而单片机用起来就麻烦很多,使用者要更多的考虑电路系统及外设硬件的可靠性,而且编程基本用C和汇编等基础语言,对编程者的逻辑思维能力要求比较高,而且软件和硬件的结合适应更是个很挠头的事。能熟练掌握单片机软硬件系统,那反过来学习和使用PLC就是小儿科了。

从两者的应用来说,PLC侧重于对工控成本比较宽松,而且对可靠性要求比较高的场合,比如机床,设备等。而对于偏重成本的中大批量产品,毫无疑问必须使用单片机。

由于掌握单片机的应用比掌握PLC,有更广泛的应用,所以建议年轻的从业者应该不畏艰难,从单片机入手进入工控的世界。PLC需要的话,再入手不迟

朋友们好,我是电子及工控技术,我来回答这个问题。PLC自1969年在美国诞生以来它就是为了解决当时工业控制领域中一些特殊的控制需要,由于在试用期间它的运行情况表现很出色,慢慢地PLC就在工控界发挥着越来越重要的作用了。到目前为止PLC已经成为了工控领域中的核心控制器件了,我所在的单位中很多设备中都是选用的PLC作为核心控制器件,比如机器人多功能工作台上就有西门子S7-1200的PLC,它作为机器人本体的外设专门负责机器人与其它器件的协调控制工作,比如各类传感器所检测到的信号首先要送入到PLC,然后通过PLC内部程序的处理后得到的开关信号告知工业机器人启动、暂停或者复位等一系列动作。另外还有数控机床中也使用了内置式PLC装置。由此可见在工业控制领域中PLC的使用是随处可见的,下面我来说说在工业控制中为什么对PLC情有独钟。
PLC在工业控制领域中的优点
在工业控制领域中PLC作为不二的选择,它到底有哪些魅力让工业控制系统的设计技术人员对它如此重视呢?在我看来主要体现在以下几个方面,其一是PLC具有很强的抗干扰能力和很高的可靠性,在我们单位实验室中有近20台PLC,自从2005年实验设备进来之后,每天都在运行工作,到目前为止PLC模块还没有出现过故障,其它模块都已经换了一个又一个了,从这点可以看出PLC的可靠性有如此之高,据我所知在一些品牌的PLC中还采用了冗余的CPU(中央处理器),像这样的PLC无故障的时间会更长。

接下来我再聊聊关于PLC的抗干扰能力强的问题,PLC在设计之初就已经考虑到了它所工作的环境,在工业环境中可能会有很强的磁场干扰,电路中的高次谐波干扰等等,因此从PLC内部电路元器件的选择上就选择了高质量,性能好的元器件,比如它的微处理器CPU就采用了抗干扰能力强的CPU。在电路的设计上就采用了多重抗干扰技术,我们从电源上讲就使用了多级滤波技术,后面还使用了集成的稳压块进行稳压,这样以来不管是外部电源高次谐波的影响还是电源电压的波动,PLC都能泰然处之。最后从电磁干扰方面讲,由于PLC的输入和输出端口都使用了光电隔离技术,在PLC整个电路的设计上都使用了屏蔽技术,这些技术手段的使用也使电磁干扰信号没有可乘之机。从以上我说的可以看到PLC天生就是为工业控制领域所使用的控制器。

第二点我们再从学习PLC的难易程度来看,我们知道PLC最初是在继电器控制电路的基础上诞生的,它可以使用非常形象的梯形图作为控制“语言”,这样非常直观。对于很多电气技术员来说学会也是非常容易的事情了,因此一般的电气技术人员在设计控制系统时首先就会想到运用PLC来控制了。

第三点从PLC控制电路的维护和升级方面来看也是非常的方便,同时在以PLC为核心的控制电路中,从硬件配置、安装以及到软件的使用即使计算机技术一般的人员也能上手去做,这样的话也会大大缩短整个电路完成的时间,我认为由于PLC有了以上的众多优点,在工业控制中使用它是理所当然的了。
单片机在工业控制领域中的短板
我们在反观单片机这种控制芯片,我接触它也有好些年了。从我使用过程中单片机有很多“致命”弱点,比如它的抗干扰能力就很弱,尤其是在工业环境这样恶劣的地方,用单片机控制根本显示不出它的优势。先从电压要求来说它需要较低的电压,稍不留神就会烧坏单片机芯片,我在玩单片机时就是因为电压的问题烧坏了许多,当单片机过低的时候它就会“罢工”不给你工作了,我在维修单片机控制电路板时,经常会查出因为电源电压低造成整个控制电路无法正常工作。比如有的单片机正常工作电压是5V,当电压降到3.4V时它就“罢工”不工作了,我认为单片机比较“娇贵”不好伺候,可靠性差。另外单片机所使用的语言相比较PLC梯形图语言来说学习难度要大,比如它所用的C语言或者汇编语言,要编一个像样的控制程序需要很熟练的掌握才行,短时间无法完成,这样用它设计工业控制系统所需的时间会延长。

工业生产首要的因素就是稳定!因此,我们设计一个工业控制系统首先考虑的因素就是可靠!而PLC就是专门为工业生产设计的,它的实质就是一个单片机系统,但是它比单片机更可靠,更稳定,更不容易受干扰。现在,由于恶性竞争,为了降低成本,都在用单片机替代PLC,看似成本降低,实则掩耳盗铃。试想,一个系统你用单片机替代PLC省了一部分钱,但是由于不稳定导致的停产,你所损失的远远大于你节省的成本

plc的核心也是单片机啊,plc是系统,是通用成品,侧重于控制方案的实现,可以随时修改程序,所以编程简单,成本高。

单片机是芯片,要加上好多外围电路设计才能用,适合批量生产,定制设计,修改难度大,成本相对低。

二者不能简单的对比,工业的控制对象接口比较标准,因此通用类的plc比较适用。

可以这样说,单片机就是面向工业控制应用的成熟产品。但是单片机应用的行业要比plc广泛得多。

解答这个问题,首先要了解PLC和单片机的联系!提到单片机,大家往往会想到51单片机,其实单片机种类非常多,比如arm。那你打开某款PLC,会发现他的cpu就是某arm处理器。

这时你应该明白,PLC只不过是模块化的单片机系统!

一、用单片机解决一个工业控制问题,不是不可以,太费时!首先,根据工艺搭建硬件电子电路,这些电路包含通信电路,光耦隔离电路,模拟量的模数转换或数模转换电路,基本时钟……一大堆电路,然后,基于你搭建的电路开发所需要的程序,一般用c语言,开发非常费时。等你完成这个程控器时,人家早用PLC做了100多个项目了。用PLC做系统,不用考虑电子硬件电路,只需要加几个不同功能的模块就可以编程了,常用的梯形图程序比c语言简单多了,有现成的函数,功能块,咱就拿最简单的定时器做比方,单片机做个精确定时程序要比plc费力的多。

二、你的工程做好了,发现需要修改,用plc系统做的,添加模块,换别的模块,修改程序,改一些线,分分钟搞定,单片机系统呢?把电路板重做!

三、一个大型的工控项目比如有几千个控制量,要是用单片机,得搭建多少电子电路?大项目往往有很多智能仪表,人机界面,工控机,你要考虑你制作的单片机电路板和这些都兼容,通信驱动程都要搞定!用大型plc比如西门子s7_400,很容易实现设备间的通讯,组成现场总线,设备与设备间的大多数通信可以兼容,省去大量时间。

四、不敢保证你用单片机制作的电路可靠性能够满足工业现场需要。plc,一般西门子的,可靠极了!

五、有些设备,只要程序相对固定,只需要设置参数,那就不用plc,用专业程控器!比如燃烧器程控器,它也和plc相似,也有几路输入输出,但是,工艺固化,不需要编程!这些专业程控器就是拿单片机开发的!

六、plc正是 社会 化分工的缩影!一个电气工程师要完成一个项目,他只要把精力放在宏观项目上就可以了。电子工程师和计算机工程师已经为电气工程量身打造开发了plc系统,组态软件,人机界面等等,这些拿来用就行了。

单片机可以替代PLC 吗?答案是“不太可能”。第一次听到这个答案可能会让你感到意外。

一、什么是单片机,什么是PLC

1、单片机

单片机(Microcontrollers),也简称MCU,是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

特点是编程、维护相对复杂,编程方式常用C语言或汇编,成本较低,IO口相对有限等特点。

2、PLC

PLC是Programmable Logic Controller的简写,翻译成中文也即是可编程逻辑控制器,是一种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。

1) 历史

美国 汽车 工业生产技术要求的发展促进了PLC的产生,20世纪60年代,美国通用 汽车 公司在对工厂生产线调整时,发现继电器、接触器控制系统修改难、体积大、噪声大、维护不方便以及可靠性差,于是提出了着名的“通用十条”招标指标。

2)结构

可编程逻辑控制器实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同(基于成本等原因,大多PLC的控制芯片实际上就是单片机,也就是说可以将PLC看成是单片机的二次开发)。

电源用于将交流电转换成PLC内部所需的直流电j目前大部分PLC采用开关式稳压电源供电。

中央处理器(CPU)是PLC的控制中枢,也是PLC的核心部件,其性能决定了PLC的性能。

存储器是具有记忆功能的半导体电路,它的作用是存放系统程序、用户程序、逻辑变量和其他一些信息。其中系统程序是控制PLC实现各种功能的程序,由PLC生产厂家编写,并固化到只读存储器(ROM)中,用户不能访问。

输入单元是PLC与被控设备相连的输入接口,是信号进入PLC的桥梁,它的作用是接收主令元件、检测元件传来的信号。输入的类型有直流输入、交流输入、交直流输入。

输出单元也是PLC与被控设备之间的连接部件,它的作用是把PLC的输出信号传送给被控设备,即将中央处理器送出的弱电信号转换成电平信号,驱动被控设备的执行元件。输出的类型有继电器输出、晶体管输出、晶闸门输出。

PLC除上述几部分外,根据机型的不同还有多种外部设备,其作用是帮助编程、实现监控以及网络通信。常用的外部设备有编程器、打印机、盒式磁带录音机、计算机等。

3)特点

可靠性高。由于PLC大都采用单片微型计算机,因而集成度高,再加上相应的保护电路及自诊断功能,提高了系统的可靠性。

编程容易。PLC的编程多采用继电器控制梯形图及命令语句,其数量比微型机指令要少得多,除中、高档PLC外,一般的小型PLC只有16条左右。由于梯形图形象而简单,因此容易掌握、使用方便,甚至不需要计算机专业知识,就可进行编程。

组态灵活。由于PLC采用积木式结构,用户只需要简单地组合,便可灵活地改变控制系统的功能和规模,因此,可适用于任何控制系统。

输入/输出功能模块齐全。PLC的最大优点之一,是针对不同的现场信号(如直流或交流、开关量、数字量或模拟量、电压或电流等),均有相应的模板可与工业现场的器件(如按钮、开关、传感电流变送器、电机启动器或控制阀等)直接连接,并通过总线与CPU主板连接。

安装方便。与计算机系统相比,PLC的安装既不需要专用机房,也不需要严格的屏蔽措施。使用时只需把检测器件与执行机构和PLC的I/O接口端子正确连接,便可正常工作。

二、结论

经过上述阐述,我们可以看出:PLC实际上可以看成是单片机的二次应用开发,但是它又有自己鲜明的特点;如果单片机也具备PLC的这些特点的话,那么将取代PLC;但是就目前形势(单片机的功能、价格、稳定性、易用性、编程及维护等)来看,那将是一项不可能完成,或者说期限趋向于无穷的艰巨任务。

总之,两者各有优势,在IO口较少、功能块不多的场合一般选择用单片机,反之多选PLC(开发周期短、成本低(大型项目相对较低)、易用性强、IO口多等原因)。

1.单片机

从设计角度,需要软硬件设计,对设计人员要求高,入手比较难,比较慢;

从稳定性角度,单片机抗干扰能力差,对恶劣环境适应性不好,而工业应用环境复杂,决定单片机不能大范围应用在工业上;

维修及维护不方便,实时监控效果差。

2.PLC

PLC用户不必要设计和制作硬件装置,功能强大,使用面广,编程简单,技术人员更容易入手,同时,减少工作人员的工作量。

可靠性高抗干扰能力强,能适应不同温度和湿度的环境。

同时,PLC故障率低,有很强的实时监视功能,不同功能的模块,也标准化,维修方便。

3.尽管PLC在工业领域应用多于单片机,但单片机也有各种优点,如价格便宜、体积可以做到足够小等,广泛应用在电子产品上面。

以上仅为个人观点,有不同见解,可私信交流!谢谢

首先要了解一下自动化发展的历程,最早的时候可以说是半自动的,机械制造的设备没有很好的控制系统,功能的实现是靠机械装置和继电器,接触器,定时器等独立原件装配。发展到后来靠电子设备来控制,修改参数。这里就有了一个工业设备配电柜的装配习惯,工业电工的思路都是按照基本的接触器,定时器,开关等配置起来的,而且在现实中还要经常的去改动某些接触器,开关的控制方式,这样如果用单片机控制的话就会出现一个修改程序的问题,单片机如果修改一个函数涉及的方面过多,很麻烦,这样PLC应时而生,PLC在做编程的时候迎合了机械电工的思路,编程相对来说简单,容易修改,不用关心运行的死机,储存信息代码,各种设备信息交换代码等复杂的编写。

其实PLC就是单片机加入了程序,PLC是在单片机的程序基础上做的二次开发,这个需要理解,原始的编码应该都是基于二进制的编码系统的,后来的汇编,再到后来的电脑的C,C++等,单片机的keil等,都是在简化编程方法,减少编程错误,智能化了。

‘叁’ 嵌入式新手入门最佳视频教程

原文链接:网页链接

我是1999年上的大学,物理专业。在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么。你当下的经历、当下的学习,在未来的一天肯定会影响到你。毕业后我们也各自找到了自己的职业:出国深造转行做金融、留校任教做科研、设计芯片、写程序、创办公司等等,这一切都离不开在校时学到的基础技能(数学、IT、电子电路)、受过煅炼的自学能力。

所以,各位正在迷茫的在校生,各位正在尝试转行的程序员,未来一定有你的位置,是好是坏取决于你当下的努力与积累。

我不能预言几年后什么行业会热门,也不能保证你照着本文学习可以发财。我只是一个有十几年经验的程序员,给对编程有兴趣的你,提供一些建议。

1.程序员的三大方向

程序员的方向,一般可以分为3类:专业领域、业务领域、操作系统领域。你了解它们后,按兴趣选择吧。

对于专业领域,我提供不了建议。

业务,也就是应用程序,它跟操作系统并不是截然分开的:

①开发实体产品时,应用程序写得好的人,有时候需要操作系统的知识,比如调度优先级的设置、知道某些函数可能会令进程休眠。

②写应用程序的人进阶为系统工程师时,他需要从上到下都了解,这时候就需要有操作系统领域的知识了,否则,你怎么设计整个系统的方案呢?

③做应用程序的人,需要了解行业的需求,理解业务的逻辑。所以,当领导的人,多是做应用的。一旦钻入了某个行业,很难换行业。

④而操作系统领域,做好了这是通杀各行业:他只负责底层系统,在上面开发什么业务跟他没关系。这行很多是技术宅,行业专家。

⑤操作系统和业务之间并没有一个界线。有操作系统经验,再去做应用,你会对系统知根知底,碰到问题时都有解决思路。有了业务经验,你再了解一下操作系统,很快就可以组成一个团队自立门户,至少做个CTO没问题。

1.1 专业领域

它又可以分为下面2类。

1.1.1 学术研究

比如语音、图像处理、人工智能,这类工作需要你有比较强的理论知识,我倾向于认为这类人是“科学家”,他们钻研多年,很多时候是在做学术研究。

在嵌入式领域,需要把他们的成果用某种算法表达出来,针对某种芯片进行优化,这部分工作也许有专人来做。

1.1.2 工程实现

也有这样一类人,他们懂得这些专业领域的概念,但是没有深入钻研。可以使用各类开源资料实现某个目标,做出产品。比如图像处理,他懂得用opencv里几百个复杂函数来实现头像识别。有时候还可以根据具体芯片来优化这些函数。

“专业领域”不是我的菜,如果你要做这一块,我想最好的入门方法是在学校学习研究生、博士课程。

1.2 业务领域

换句话说,就是应用程序,这又可以分为下面2类。

1.2.1 界面显示

做产品当然需要好的界面,但是,不是说它不重要,是没什么发展后劲。

现在的热门词是Android APP和IOS APP开发。你不要被Android、IOS两个词骗了,它们跟以前的VC、VB是同一路货色,只是、仅仅是一套GUI控件的实现。

希望没有冒犯到你,我有理由。

一个程序需要有GUI界面,但是程序的内在逻辑才是核心。Android、IOS的开发工具给我们简化了GUI的开发,并提供了这些控件的交互机制,封装并提供了一些服务(比如网络传输)。但是程序内部的业务逻辑、对视频图像声音的处理等等,这才是核心。另外别忘了服务器那边的后台程序:怎样更安全地保存数据、保护客户的隐私,怎样处理成千上万上百万的并发访问,等等,这也是核心。

但是,从Android、IOS APP入门入行,这很快!如果你是大四,急于找到一份工作,那么花上1、2个月去学习Android或IOS,应该容易找到工作,毕竟APP的需求永远是最大的,现在这两门技术还算热门。在2011、2012年左右,Android程序员的起薪挺高,然后开始下滑。Android APP的入门基本只要1个月,所以懂的人也越来越多。2013、2014年,IOS开发的工资明显比Android高了,于是各类IOS培训也火曝起来。中华大地向来不缺速成人才,估计再过一阵子IOS工程师也是白菜价了。

会Android、IOS只是基本要求,不信去51job搜搜Android或IOS,职位要求里肯定其他要求。

1.2.2 业务逻辑

举个简单例子,做一个打卡软件,你需要考虑这些东西:

①正常流程是上班下班时都要打卡

②有人忘记了怎么办?作为异常记录在案,推送给管理员

③请假时怎么处理?

④加班怎么处理?

对于更复杂的例子,视频会议系统里,各个模块怎么对接,各类协议怎么兼容,你不深入这个行业,你根本搞不清楚。

应用开发的职位永远是最多的,入门门槛也低。基本上只要你会C语言,面试时表现比较得体,一般公司都会给你机会。因为:

①你进公司后,还需要重新培训你:熟悉它们的业务逻辑。

②你要做的,基本也就是一个个模块,框架都有人给你定好了,你去填代码就可以了。

说点让你高兴的事:软件公司里,做领导的基本都是写应用程序的(当然还有做市场的)。写应用程序的人,对外可以研究市场接待客户,对内可以管理程序员完成开发,不让他做领导让谁做?

如果你的志向是写应用程序,那么我建议你先练好基本功:数据结构、算法是必备,然后凭兴趣选择数据库、网络编程等等进行深入钻研。

最后,选择你看好的、感兴趣的行业深耕个10年吧。做应用开发的人选择了某个行业,后面是很难换行业的,选行很重要!

1.3 操作系统领域

UCOS太简单,VxWorks太贵太专业,Windows不玩嵌入式了,IOS不开源,所以对于操作系统领域我们也只能玩linux了。

在嵌入式领域Linux一家独大!

Android呢?Android跟QT一样,都是一套GUI系统。只是Google的实力太强了,现在Android无处不在,所以很多时候Linux+Android成了标配。注意,在这里我们关心的是Android的整个系统、里面的机制,而不是学习几个API然后开发界面程序。操作系统领域所包含的内容,简单地说,就是制作出一台装好系统的专用“电脑”,可以分为:

①为产品规划硬件:

按需求、性能、成本选择主芯片,搭配周边外设,交由硬件开发人员设计。

②给单板制作、安装操作系统、编写驱动

③定制维护、升级等系统方案

④还可能要配置、安装Android等GUI系统:

⑤为应用开发人员配置开发环境

⑥从系统角度解决疑难问题


这个领域,通常被称为“底层系统”或是“驱动开发”。

先解决2个常见误区:

①这份工作是写驱动程序吗?

看看上面罗列的6点,应该说,它包含驱动开发,但远远不只有驱动开发。

②我们还需要写驱动吗?不是有原厂吗?或者只需要改改就可以?

经常有人说,芯片原厂都做好驱动了,拿过来改改就可以了。如果,你的硬件跟原厂的公板完全一样,原厂源码毫无BUG,不想优化性能、削减成本,不想做一些有特色的产品,那这话是正确的。


但是在这个不创新就是找死的年代,可能吗?!原因有二:

①即使只是修改代码,能修改的前提是能理解;能理解的最好煅炼方法是从零写出若干驱动程序。

②很多时候,需要你深度定制系统。


以前做联发科手机只需要改改界面就可以出货了,现在山寨厂一批批倒下。大家都使用原厂的方案而不加修改时,最后只能拼成本。

举个例子,深圳有2家做交通摄像头、监控摄像头的厂家,他们曾经找我做过4个项目:

①改进厂家给的SD卡驱动性能,使用DMA。

②换了Flash型号后,系统经常出问题,需要修改驱动BUG。

③触摸屏点击不准,找原因,后来发现是旁路电容导致的。

④裁减成本,把4片DDR换为2片DDR,需要改bootloader对DDR的初始化。

这些项目都很急,搞不定就无法出货,这时候找原厂?除非你是中兴华为等大客户,否则谁理你?


我在中兴公司上班时,写驱动的时间其实是很少的,大部分时间是调试:系统调优,上帮APP工程师、下帮硬件工程师查找问题。我们从厂家、网上得到的源码,很多都是标准的,当然可以直接用。但是在你的产品上也许优化一下更好。比如我们可以把摄像头驱动和DMA驱动揉合起来,让摄像头的数据直接通过DMA发到DSP去。我们可以在软件和硬件之间起桥梁作用,对于实体产品,有可能是软件出问题也可能是硬件出问题,一般是底层系统工程师比较容易找出问题。


当硬件、软件应用出现问题,他们解决不了时,从底层软件角度给他们出主意,给他们提供工具。再比如方案选择:芯片性能能否达标、可用的BSP是否完善等等,这只能由负责整个方案的人来考虑,他必须懂底层。


在操作系统领域,对知识的要求很多:

①懂硬件知识才能看懂电路图

②英文好会看芯片手册

③有编写、移植驱动程序的能力

④对操作系统本身有一定的理解,才能解决各类疑难问题

⑤理解Android内部机制

⑥懂汇编、C语言、C++、JAVA


它绝对是一个大坑,没有兴趣、没有毅力的人慎选。

①这行的入门,绝对需要半年以上,即使全天学习也要半年。

②它的职位,绝对比APP的职位少

③并且你没有1、2年经验,招你到公司后一开始你做的还是APP。


优点就是:

①学好后,行业通杀,想换行就换行;想自己做产品就自己做产品。

②相比做应用程序的人,不会被经常变动的需求搞得天天加班。

③门槛高,当然薪水相对就高。


操作系统领域,我认为适合于这些人:

①硬件工程师想转软件工程师,从底层软件入门会比较好

②单片机工程师,想升级一下。会Linux底层的人肯定会单片机,会单片机的人不一定会Linux。

③时间充足的学生:如果你正读大二大三,那么花上半年学习嵌入式Linux底层多有益处。

④想掌握整个系统的人,比如你正在公司里写APP,但是想升为系统工程师,那么底层不得不学。

⑤想自己创业做实体产品的工程师,你有钱的话什么技术都不用学,但是如果没钱又想做产品,那么Linux底层不得不学。

⑥做Linux APP的人,没错,他们也要学习。

这部分人不需要深入,了解个大概就可以:bootloader是用来启动内核,Linux的文件系统(第1个程序是什么、做什么、各目录干嘛用)、APP跟驱动程序的调用关系、工具链,有这些概念就可以了

本文中,就把操作系统默认为Linux,讲讲怎么学习嵌入式Linux+Android系统。


1.4 嵌入式Linux+Android系统包含哪些内容

嵌入式Linux系统包含哪些东西?不要急,举一个例子你就知道了。

①电脑一开机,那些界面是谁显示的?

是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。

类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。


②启动windows的目的是什么?

当然运行应用程序以便上网、聊天什么的了。

这些上网程序、聊天程序在哪?

在C盘、D盘上。

所以,windows要先识别出C盘、D盘。在Linux下我们称之为根文件系统。

③windows能识别出C盘、D盘,那么肯定有读写硬盘的能力。


这个能力我们称之为驱动程序。当然不仅仅是操作硬盘,还有网卡、USB等等其他硬件。嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。


简单地说,嵌入式LINUX系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android。

所以,嵌入式Linux+Android系统包含以下6部分内容:

①bootloader

②Linux内核

③驱动程序

④使用C/C++编写的应用程序

⑤Android系统本身

⑥Android应用程序


Android跟Linux的联系实在太大了,它的应用是如此广泛,学习了Linux之后没有理由停下来不学习Android。在大多数智能设备中,运行的是Linux操作系统;它上面要么安装有Android,要么可以跟Android手机互联。现在,Linux+Android已成标配。


2. 怎么学习嵌入式Linux操作系统

本文假设您是零基础,以实用为主,用最快的时间让你入门;后面也会附上想深入学习时可以参考的资料。


在实际工作中,我们从事的是“操作系统”周边的开发,并不会太深入学习、修改操作系统本身。

①操作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序

②学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程序后,也会加深对操作系统其他部分的理解

③Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成


但是,要成为该领域的高手,一定要深入理解Linux操作系统本身,要去研读它的源代码。

在忙完工作,闲暇之余,可以看看这些书:

①赵炯的《linux内核完全注释》,这本比较薄,推荐这本。他后来又出了《Linux 内核完全剖析》,太厚了,搞不好看了后面就忘记前面了。

②毛德操、胡希明的《LINUX核心源代码情景分析》,此书分上下册,巨厚无比。当作字典看即可:想深入理解某方面的知识,就去看某章节。

③其他好书还有很多,我没怎么看,没有更多建议


基于快速入门,上手工作的目的,您先不用看上面的书,先按本文学习。


2.1 入门路线图

假设您是零基础,我们规划了如下入门路线图。前面的知识,是后面知识的基础,建议按顺序学习。每一部分,不一定需要学得很深入透彻,下面分章节描述。

2.2 学习驱动程序之前的基础知识

2.2.1 C语言

只要是理工科专业的,似乎都会教C语言。我见过很多C语言考试90、100分的,一上机就傻了,我怀疑他们都没在电脑上写过程序。

理论再好,没有实践不能干活的话,公司招你去干嘛?

反过来,实践出真知,学习C语言,必须练练练、写写写!

当你掌握基本语法后,就可以在电脑上练习一些C语言习题了;

当你写过几个C程序后,就可以进入下一阶段的裸机开发了。


①不需要太深入

作为快速入门,只要你会编写“Hello, world!”,会写冒泡排序,会一些基础的语法操作,暂时就够了。

指针操作是重点,多练习;

不需要去学习过多的数据结构知识,只需要掌握链表操作,其他不用学习,比如:队列、二叉树等等都不用学;不需要去学习任何的函数使用,比如文件操作、多线程编程、网络编程等等;这些知识,在编写Linux应用程序时会用,但是在操作系统特别是驱动学习时,用不着!

永往直前吧,以后碰到不懂的C语言问题,我们再回过头来学习。

在后续的“裸机开发”中,会让你继续练习C语言,那会更实战化。

C语言是在写代码中精进的。


②可以在Visual Studio下学习,也可以在Linux下学习,后者需要掌握一些编译命令,我们暂时没有提供C语言的教程,找一本C语言书,网上找找免费的C语言视频(主要看怎么搭建环境),就可以自学了。


2.2.2 PC Linux基本操作:

对于PC Linux,我们推荐使用Ubuntu,在它上面安装软件非常简便。

我们的工作模式通常是这样:在Windows下阅读、编写代码,然后把代码上传到PC Linux去编译。实际上,Ubuntu的桌面系统已经很好用了,我们拿到各种智能机可以很快上手,相信Ubuntu的桌面系统也可以让你很快上手。为了提高工作效率,我们通常使用命令行来操作Ubuntu。


不用担心,你前期只需要掌握这几条命令就可以了,它们是如此简单,我干脆列出它们:

①cd : Change Directory(改变目录)

cd 目录名 // 进入某个目录cd .. // cd “两个点”:返回上一级目录cd - // cd “短横”:返回上一次所在目录

②pwd : Print Work Directory(打印当前目录 显示出当前工作目录的绝对路径)

③mkdir : Make Directory(创建目录)

mkdir abc // 创建文件夹abc
mkdir -p a/b/c // 创建文件夹a,再a下创建文件夹b,再在b下创建文件夹c

④rm : Remove(删除目录或文件)

rm file // 删除名为file的文件
rm -rf dir // 删除名为dir的目录

⑤ls : List(列出目录内容)

⑥mount : 挂载

mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mnt
mount -t yaffs /dev/mtdblock3 /mnt

⑦chown : Change owner(改变文件的属主,即拥有者)

chown book:book /work -R //对/work目录及其下所有内容,属主改为book用户,组改为book

⑧chmod : Change mode(改变权限),下面的例子很简单粗暴

chmod 777 /work -R // 对/work目录及其下所有内容,权限改为可读、可写、可执行

⑨vi : Linux下最常用的编辑命令,使用稍微复杂,请自己搜索用法。


要练习这些命令,你可以进入Ubuntu桌面系统后,打开终端输入那些命令;或是用SecureCRT、putty等工具远程登录Ubuntu后练习。


2.2.3 硬件知识

我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。

对于正统的方法,你应该这样学习:

①学习《微机原理》,理解一个计算机的组成及各个部件的交互原理。

②学习《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。

③《模拟电路》?好吧,这个不用学,至少我在工作中基本用不到它,现在全忘光了。


就我个人经验来说,这些课程是有用的,但是:

①原理有用,实战性不强。

比如《微机原理》是基于x86系统,跟ARM板子有很大差别,当然原理相通。

我是在接触嵌入式编程后,才理解了这些课程。

②每本书都那么厚,内容都很多,学习时间过长,自学有难度。


针对这些校园教材的不足,并结合实际开发过程中要用到的知识点,我们推出了《学前班_怎么看原理图》的系列视频:

学前班第1课第1节___怎么看原理图之GPIO和门电路.wmv

学前班第1课第2.1节_怎么看原理图之协议类接口之UART.wmv

学前班第1课第2.2节_怎么看原理图之协议类接口之I2C.wmv

学前班第1课第2.3节_怎么看原理图之协议类接口之SPI.wmv

学前班第1课第2.4节_怎么看原理图之协议类接口之NAND Flash.wmv

学前班第1课第2.5节_怎么看原理图之协议类接口之LCD.wmv

学前班第1课第3节___怎么看原理图之内存类接口.wmv

学前班第1课第4.1节_怎么看原理图之分析S3C2410开发板.wmv

学前班第1课第4.2节_怎么看原理图之分析S3C2440开发板.wmv

学前班第1课第4.3节_怎么看原理图之分析S3C6410开发板.wmv


即使你只具备初中物理课的电路知识,我也希望能通过这些视频,让你可以看懂原理图,理解一些常见的通信协议;如果你想掌握更多的硬件知识,这些视频也可以起个索引作用,让你知道缺乏什么知识。


这些视频所讲到的硬件知识,将在《裸板开发》系列视频中用到,到时可以相互对照着看,加深理解。


2.2.4 要不要专门学习Windows下的单片机开发

很多学校都开通了单片机的课程,很多人都是从51单片机、AVR单片机,现在比较新的STM32单片机开始接触嵌入式领域,并且使用Windows下的开发软件,比如keil、MDK等。

问题来了,要不要专门学习Windows下的单片机开发?

①如果这是你们专业的必修课,那就学吧

②如果你的专业跟单片机密切相关,比如机械控制等,那就学吧

③如果你只是想从单片机入门,然后学习更广阔的嵌入式Linux,那么放弃在Windows下学习单片机吧!


理由如下:

①Windows下的单片机学习,深度不够

Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。

它们封装了很多技术细节,比如:

你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;

你可以编写中断处理函数,但是却不知道它是怎么被调用的;

你不知道程序怎么从Flash上被读入内存;

也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪;

当你想裁剪程序降低对Flash、内存的使用时,你无从下手;

当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂;

等等等。


②基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。

在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。


一切从零编写代码、管理代码,可以让我们学习到更多知识:

你需要了解芯片的上电启动过程,知道第1条代码如何运行;

你需要掌握怎么把程序从Flash上读入内存;

需要理解内存怎么规划使用,比如栈在哪,堆在哪;

需要理解代码重定位;

需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;

你会知道,main函数不是我们编写的第1个函数;

你会知道,芯片从上电开始,程序是怎么被搬运执行的;

你会知道,函数调用过程中,参数是如何传递的;

你会知道,中断发生时,每一个寄存器的值都要小心对待;

等等等。


你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。


驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作,我们可以从简单的裸机开发入手,先掌握硬件操作,并且还可以:

①掌握如何在PC Linux下编译程序、把程序烧录到板子上并运行它

②为学习bootloader打基础:掌握了各种硬件操作后,后面一组合就是一个bootloader


2.2.5 为什么选择ARM9 S3C2440开发板,而不是其他性能更好的?

有一个错误的概念:S3C2440过时了、ARM9过时了。

这是不对的,如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。

一款芯片,上面有CPU,还有众多的片上设备(比如UART、USB、LCD控制器)。我们写程序时,并不涉及CPU,只是去操作那些片上设备。

所以:差别在于片上设备,不在于CPU核;差别在于寄存器操作不一样。

因为我们写驱动并不涉及CPU的核心,只是操作CPU之外的设备,只是读写这些设备的寄存器。

之所以推荐S3C2440,是因为它的Linux学习资料最丰富,并有配套的第1、2期视频。


2.2.6 怎么学习ARM+Linux的裸机开发

学习裸机开发的目的有两个:

①掌握裸机程序的结构,为后续的u-boot作准备

②练习硬件知识,即:怎么看原理图、芯片手册,怎么写代码来操作硬件


后面的u-boot可以认为是裸机程序的集合,我们在裸机开发中逐个掌握各个部件,再集合起来就可以得到一个u-boot了。

后续的驱动开发,也涉及硬件操作,你可以在裸机开发中学习硬件知识。


注意:如果你并不关心裸机的程序结构,不关心bootloader的实现,这部分是可以先略过的。在后面的驱动视频中,我们也会重新讲解所涉及的硬件知识。


推荐两本书:杜春蕾的《ARM体系结构与编程》,韦东山的《嵌入式Linux应用开发完全手册》。后者也许是国内第1本涉及在PC Linux环境下开发的ARM裸机程序的书,如果我说错了,请原谅我书读得少。


对于裸机开发,我们提供有2部分视频:

①环境搭建

第0课第1节_刚接触开发板之接口接线.wmv

第0课第2节_刚接触开发板之烧写裸板程序.wmv

第0课第3节_刚接触开发板之重烧整个系统.wmv

第0课第4节_刚接触开发板之使用vmwae和预先做好的ubuntu.wmv

第0课第5节_刚接触开发板之u-boot打补丁编译使用及建sourceinsight工程.wmv

第0课第6节_刚接触开发板之内核u-boot打补丁编译使用及建sourceinsight工程.wmv

第0课第7节_刚接触开发板之制作根文件系统及初试驱动.wmv

第0课第8节_在TQ2440,MINI2440上搭建视频所用系统.wmv

第0课第9节_win7下不能使用dnw烧写的替代方法.wmv


.................

原文链接:网页链接

阅读全文

与单片机拼搭相关的资料

热点内容
windows下mysql命令 浏览:923
冰箱压缩机制冷剂与润滑 浏览:988
在线充值平台源码 浏览:527
数字图像处理冈pdf 浏览:380
荣耀v6怎么隐藏桌面文件夹 浏览:798
程序员有女的吗 浏览:504
通讯服务器中断是为什么 浏览:644
itextpdf乱码 浏览:641
哪个app制作书法壁纸 浏览:196
暗梁支坐是否加密 浏览:341
51单片pdf 浏览:688
matlab编程习题 浏览:64
腾达wifi加密方式 浏览:121
ug平移命令 浏览:768
钉钉语音通话安全加密有什么特征 浏览:609
网购领券app哪个好靠谱 浏览:618
人民币数字加密币转账支付货币 浏览:634
怎么用cat命令创建mm 浏览:689
当今社会程序员好做吗 浏览:222
程序员那么可爱梓童第几集求婚 浏览:708