您现在的位置是: 首页 > 硬件配置 硬件配置
如何对硬件进行编程_如何根据硬件电路来编程
tamoadmin 2024-09-23 人已围观
简介1.芯片内是由很多集成电路构成,硬件上它的功能不是固定的吗?为什么可以对它编程实现不同的功能.2.软件如何控制硬件?3.什么叫硬件电路原理图4.软件程序怎么让硬件工作的?5.学硬件编程好还是软件编程好?6.怎么学习电路硬件设计?7.从底层硬件到上层应用,嵌入式软件的开发可以分为哪几类?plc编程入门基础知识还是比较好学的,特别是对擅长理工科的人来说。plc编程入门基础知识需要先了解继电器控制电路,
1.芯片内是由很多集成电路构成,硬件上它的功能不是固定的吗?为什么可以对它编程实现不同的功能.
2.软件如何控制硬件?
3.什么叫硬件电路原理图
4.软件程序怎么让硬件工作的?
5.学硬件编程好还是软件编程好?
6.怎么学习电路硬件设计?
7.从底层硬件到上层应用,嵌入式软件的开发可以分为哪几类?
plc编程入门基础知识还是比较好学的,特别是对擅长理工科的人来说。plc编程入门基础知识需要先了解继电器控制电路,低压电气的知识要熟练掌握,并会看梯形图,这个是电工的基础。了解以后,PLC的学习就简单多了。
编程之前,需要了解一些基本的硬件知识,最好从硬件的选型和画图入手,等把输入输出的类型,模拟量的选型等搞清楚之后,再开始编程会简单点。熟悉基本的硬件电路,这些搞清楚了,你就会发现原来梯形图和这些硬件电路是可以很好对应起来的。学PLC时,选择一种常用的PLC型号作为学习目标,比如三菱的Fx系列或者是西门子的S7-200系列。了解这个型号PLC的输入输出点数、接线方法等。再下载安装PLC的编程软件,熟悉软件的操作和常用指令的使用。
最后,把继电器控制电路转成梯形图,转换后就可以在软件上编写梯形图,这个过程和接继电器的线路一样,只不过是把电线换成了软件里的连接线。程序写好后,下载到PLC里,接上外部的电路(灯、按钮等)就可以运行了。也可以不接外部线路,PLC都有I/O指示灯,你可以看灯的状态来判断程序是否正确。
现在的PLC软件设计的都非常好,如果有硬件配合更好,没有的话安装一个软件,安装-个模拟器,基本的操作熟悉起来,然后观察PLC的输入输出变化情况。在程序没有充分验证之前,建议先断开负载,等所有的I0,模拟量测试完成后,再带负载运行。
1、有的初学者在理论上花了很多功夫,结果半年下来还是没有把PLC搞懂,其实他们只是缺少了一些PLC的实践经验,只要再进行一些实际的梯形图编写、程序下载、调试等操作,增加对PLC的感性认识,很快就可以掌握PLC技术了。
2、电工电子是学习可编程逻辑控制器(PLC)的基础。PLC梯形图编程的逻辑来自于常见的继电器电路,需要懂得继电器、接触器、开关的工作原理,想学好plc,最起码能够看懂普通的电路,当然,如果有维修经验更好,如果没有任何的电工基础知识,那就需要恶补电工方面的基础知识。其实,电工基础知识也不难学,只要认真学,花个一两个月也是能够完全掌握的,如果是电工转行,想学PLC,就可以跳过这一步。
芯片内是由很多集成电路构成,硬件上它的功能不是固定的吗?为什么可以对它编程实现不同的功能.
出原理图,然后根据原理图设计PCB,检查没问题了,就发给制版厂出电路板!没什么难的,考虑您模具的固定,散热,布局等!说不太好!苏州就不太清楚了,但是我清楚制版精度深圳好多公司都不错,如果说便宜要打样的话找河北的厂家!如果你后期量大的话,哪都可以打样!
软件如何控制硬件?
芯片内是由很多集成电路构成,硬件上它的功能不是固定的吗?---有些芯片功能是固定的,比如RS232电平转换芯片,74系列逻辑芯片等等;有些芯片功能不是固定的,你可以通过对它编程实现你想要的功能,如FPGA,单片机等等
编程又是怎么控制电路的:----这个很简单,芯片内部有很多寄存器,编程通过对寄存器填值就可以得到你想要的功能,比如你想改变某一管脚的电平。这个方法都一样,单具体要看每个芯片的寄存器定义。
什么叫硬件电路原理图
问题一:软件是如何控制硬件的 你不理解软件为何能控制硬件,大概是因为你觉得软件是看不见摸不着的东西,如何能够控制硬件这样有形的实体吧。
其实问题很简单,软件在工作的时候也是实体,软件的实质就是电流信号,用电压的高低代表不同是信息,用这些电流信号去控制逻辑电路的通断,靠逻辑电路的通断来控制硬件的工作。
说到底软件就是起到一个开关信号的作用,开关要工作,必需保证硬件是加电的,没有接通电源的硬件是无法用软件来控制的。就好比没有插上电源的台灯,你怎么按开关都是不会亮的。
任何软件在运行前都要有一个将其转化为电流信号的实体化过程,你写在纸上的软件代码是永远也不能控制硬件的。早期电脑用人工接线输定程序,相当于用人体的力量将软件代码实体化为电信号;现在我们用的软盘、硬盘是通过磁头将程序代码转化为电信号,光盘需要通过光头将程序代码转化为电信号等等。
问题二:软件到底是怎样控制硬件的 软件是如何控制硬件的? 软件在工作的时候也是实体,软件的实质就是电流信号,用电压的高低代表不同是信息,用这些电流信号去控制逻辑电路的通断,靠逻辑电路的通断来控制硬件的工作。 说到底软件就是起到一个开关信号的作用,开关要工作,必需保证硬件是加电的,没有接通电源的硬件是无法用软件来控制的。就好比没有插上电源的台灯,你怎么按开关都是不会亮的。 任何软件在运行前都要有一个将其转化为电流信号的实体化过程,你写在纸上的软件代码是永远也不能控制硬件的。早期电脑用人工接线输入程序,相当于用人体的力量将软件代码实体化为电信号;现在我们用的软盘、硬盘是通过磁头将程序代码转化为电信号,光盘需要通过光头将程序代码转化为电信号等等。
麻烦纳,谢谢!
问题三:软件是怎么控制硬件的 说的具体一点,,,,, 我的理解是这样的:软件和硬件配合工作的过程,就好比司机开车。司机是软件,方向盘、排挡、油门、刹车、雨刮器等等就执行具体功能的是硬件。只有在司机软件的有序组织和正确命令之下,硬件才会做出正确的动作,完成正确的任务。没有软件,再好的硬件也只是死的摆设而已。
具体来说,以通用计算机系统为例:内存、CPU、显卡、显示器、声卡等等这些硬件通过主板(主板本身也是硬件)接口和数据线链接合理地组织在一起之后,加载电压,通过软件的组织和协调,各个硬件执行相应的任务。操作系统(例如Windows 7/8)就是一个最大的软件系统。我们看到的软件,都有漂亮的界面和颜色,选择软件上的选项和按钮,然后执行,软件就会按照编程时设定好的逻辑产生电流控制信号,通过数据线传道到相应的硬件那里,去控制逻辑电路的“接通”和“断开”状态,从而控制硬件执行相应的动作。每个硬件都有自己的地址和名称,软件发出的电流控制信号会准确地找到相关硬件,二进制代码的控制信号就是一些列0和1的组合。例如:软件想让显卡在显示器的某个区域显示红色,就会把显示区域的位置信息和颜色编码组合起来告诉显卡,显卡接到这个命令以后,就照章执行,把执行命令也是通过数据线传到显示器上,显示器接到控制信号后,在相应的区域显示红色。再比如我们要在软件上播放一首MP3的歌曲,就会选择这首歌,然后点播放按钮,这是软件界面上执行的动作。而软件后台执行的则是先通过地址去硬盘上读取这首歌的内容,把它临时存在内存中,然后把这首MP3的内容加上播放的命令一起组合成0和1的电流控制信号传给声卡,声卡接到信号后,处理声音,根据声卡硬件的工作流程,其处理的结果就会传到音箱硬件上播放出来。
硬件本身可能是很复杂的,例如电脑的中央处理器CPU,上面集成了上亿个处理和计算单元。复杂归复杂没关系,软件控制它的原理和逻辑是很简单的,就是上面描述的发出电流信号去控制它计算单元的工作状态和接收计算结果就行了。
不知道这样说有没有说清楚。有点嗦^_^
问题四:软件为什么可以控制硬件? 问题一,举个最简单的例子,就是在“软件空间”,也就是所谓的地址空间中的一些特殊区域,是通过“一根导线”,连接到某个外部引脚上面的,这样,这个“地址空间”里面的数据发生改变,这个引脚对应就有软件上面的“0”、“1”两个值,比如高电平和低电平。
这只是一个非常形象的例子,实际硬件运作过程比较复杂,但是核心差不多就是这样,一般是通过特定的地址实现对硬件的控制――比如软件的存在是依赖存储器的,那么存储器硬件上的一种是电容,只要在这个电容上连接除了起存储作用的“引线”,还连接别的东东,就可以起到相应的作用了,比如点亮一个发光的东东。
疑问二:你说的赋予相应的脉冲,应该是给控制信号吧。大概过程可以描述下:首先软件写入特定的特殊地址,硬件检测到这种写入后反馈给硬件固化的“软件”(也可以叫固件,芯片们工作往往不只有硬件电路的参与,还有硬件本身带有的软件的参与),这种“软件”再“写回”给软件,这就完成了一次通信的过程。
实际硬件软件协同工作的过程非常复杂,《单片机原理》里面有比较细致的描述。所有回答中使用引号的词句表示这只是真实情况的一种近似或形容,不代表其真实工作过程。
问题五:软件与硬件是怎么结合的 Hardware 硬件
信息处理系统的所有或部分物理组件,如计算机或外部设备等
电脑里除了软件都是硬件
拿人体做比喻,人体就是硬件,思维是软件。大脑发出一个命令,你才能做相应的动作
简单的说,硬件就是实物(例如鼠标,键盘,显示,器主机等),看得见摸得着的东西!软件就是虚物(例如程序,系统等),看得见摸不着的东西!
电脑计算机系统:
软件:
应用软件:应用程序包,面向问题的程序设计语言等
系统软件:操作系统,语言编译解释系统服务性程序
硬件:
主机:中央处理装置(运算器,控制器),内存储器
外部设备:输入设备,输出设备,外存储器,模数转换器`数模转换器,数据终端等
计算机的硬件是计算机系统中各种设备的总称。计算机的硬件应包括5个基本部分,即运算器、控制器、存储器、输入设备、输出设备,上述各基本部件的功能各异。运算器应能进行加、减、乘、除等基本运算。存储器不仅能存放数据,而且也能存放指令,计算机应能区分是数据还是指令。控制器应能自动执行指令。操作人员可以通过输人、输出设备与主机进行通信。计算机内部用二进制来表示指令和数据。操作人员将编好的程序和原始数据送人主存储器中,然后启动计算机工作,计算机应在不需干预的情况下启动完成逐条取出指令和执行指令的任务。
什么是软件?
电脑的外观、主机内的元件都是看得见的东西,一般称它们为电脑的「硬件」,那么电脑的「软件」是什么呢?即使打开主机,也看不到软件在哪里。既看不见也摸不到,听起来好像很抽象,但是,如果没有软件,就像植物人一样,空有躯体却无法行动。 当你启动电脑时,电脑会执行开机程序,并且启动系统」,然后你会启动「Word」程序,并且打开「文件」来编辑文件,或是使用「Excel」来制作报表,和使用「IE」来上网等等,以上所提到的操作系统、打开的程序和文件,都属于电脑的「软件」。
103回答者: 君特?格拉斯 - 九级 2005-10-22 13:21
我来评论>>
提问者对于答案的评价:具体,明了,谢谢!
软件
编辑本段名称诠释
1、软件[software](中国大陆及香港用语,台湾作软体)是一系列按照特定顺序组织的计算机数据和指令的 *** 。 2、软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。简单的说软件就是程序加文档的 *** 体。 3、泛指社会结构中的管理系统、思想意识形态、思想政治觉悟、法律法规等等。
编辑本段类型划分
一般来讲软件被划分为系统软件、应用软件,其中系统软件包括操作系统和支撑软件(微软近期又发布嵌入式系统,即硬件级的软件,是电脑及其它设备运算速度更快更节能) 软件的真正含义 程序设计的最终结果是软件。 软件界面
软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须全局考虑软件与硬件的结合,以及用户的要求和软件的要求。 1.运行时,能够提供所要求功能和性能的指令或计算机程序 *** 。 2.程序能够满意地处理信息的数据结构。 3.描述程序功能需求以及程序如何操作和使用所要求的文档。
系统软件
系统软件为计算机使用提供最基本的功能,可分为操作系统和支撑软件,其中操作系统是最基本的软件; 系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作......>>
问题六:电脑是怎么实现用软件控制硬件的? 知道电灯是怎么开关的吗
电脑开关机是电灯开关基本上是一样的
区别主要是电脑内部的多条电路被焊接到了电路板上,这基本上与所提的软件控制硬件无关
至于软件控制硬件
软件程序主要是一连串的(0与1)代码,这与三极管的高低电平对应。三极管的电平高低主要是通过开关来完成,即硬件实现
问题七:软件是怎么控制硬件的? 通过一些指令,这个看似简单,其实涉及到一些很底 层的内容和原理。对于一般计算机爱好者 来讲,又没有办法说明白,原因就是我们 从来没有考虑过电路在物理上的实现。 计算机软件说到底,不过就是一些指导电 子元件工作的指令序列,那么你一定又会 问电子元件为什么会按这些序列工作呢? 指令序列的在电路中的实质就是一些有规 律且有一定意义的电脉冲,电脉冲控制电 子元件的各种状态。工作过程非常复杂。 最简单最基本的就是几个逻辑门电路的实 现:比如“或”电路,“与”电路等等。
这些逻辑门电路的组合和协同,就能实现 电脑整体上的运算和处理能力。因为这是 十几个数量级的基础电路的有机 *** 的对 外的体现,如奔腾系列CPU集成了上亿个 半导体元件,要想把各个元件的功能彻底 认知,是非常困难的。可以把它们比作每 个人的活动合在一起就构成了社会。
问题八:最底层的最基本的,软件如何控制硬件? 硬件有读取二进制指令的功能,编程语言写的代码通过编译生成二进制文件,然后给硬件读取执行,即可对硬件进行控制。
问题九:软件层面的东西怎么控制硬件 通过驱动程序来控制硬件的。
软件程序怎么让硬件工作的?
电路图就是电子设备的电原理图,用电子符号和连线,组成电子元器件的连接图,描述了电子元器件相互电气连接的关系(属于设计文件的一种。)
“原理图”是工作原理图,不一定指电子元器件的电路连接图,也可能是气路、液路……等任何描述工作原理的图形。
接线图属于制造工艺过程中的实物电子元器件的连接布线、走线的图纸,更接近实际、实物效果的图纸。见附图。硬件电路原理图就是电原理图,是一回事。为此,解释一下你说的硬件与软件的区别,软件是用编程语言编制的程序,软件不存在电路原理图,软件有框图,可以示意程序的运行过程。你还有哪些电路图的问题,可以上传电路图的具体问题为你解释。
学硬件编程好还是软件编程好?
软件和硬件的关系,不是简单的谁控制谁的问题,而是相互依存的关系。
如果把软件和硬件作为一个整体的话,用人来做一个对比,可以说清这种关系。
软件基本上就是一些人为定义好的逻辑,它是一种思想,就像人的思想一样,所以CPU是人的大脑,而CPU里写的软件就是人脑中的思想。
我们这里说的硬件是一些CPU以外的各种电路,这些电路连接到CPU。有些电路是用来集外界的信息,比如温度、湿度、电压、电流、光线、图像、声音、气味等等,将这些信息传递给CPU。而有些电路是接收CPU发出的指令,按不同的电路实现不同的功能。
比如,发出一个关灯的指令,相应电路接收到该指令后实施关灯的动作。
下面用开灯的过程分别用人和软件硬件来作一个对比:
人: 我在家里看书,太阳落山了,天渐渐变黑,我发现看不清字了,这时我想到要去把灯打开,所以我走到开关边上,伸出手按下开关,这时灯亮了,我又可以继续快乐的看书。
软件硬件:我家里有一套电灯控制系统,工作原理是,光线检测电路检测到光线变暗了,它发出一个信号告诉CPU光线已经较暗了,CUP收到该信息后,其软件逻辑为需要把灯打开,所以CPU输出开灯的指令,电灯控制电路接到指令后接通电灯的开关,这时灯亮了。
扩展资料:
软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。
1相关系统分析员和用户初步了解需求,然后列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
2系统分析员深入了解和分析需求,根据自己的经验和需求做出一份文档系统的功能需求文档。这次的文档会清楚例用系统大致的大功能模块,大功能模块有哪些小功能模块,并且还例出相关的界面和界面功能。
3系统分析员和用户再次确认需求。
4系统分析员根据确认的需求文档所例用的界面和功能需求,用迭代的方式对每个界面或功能做系统的概要设计。
5系统分析员把写好的概要设计文档给程序员,程序员根据所例出的功能一个一个的编写。
6测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能,然后验收。
参考资料:
怎么学习电路硬件设计?
作为一名有着多年编程经验的老鸟,我想说,无论是硬件编程还是软件编程,都有其独特的魅力和应用场景。选择学习硬件编程还是软件编程,取决于你的兴趣、目标和职业发展方向。
让我们来看看硬件编程。硬件编程主要是指针对硬件设备进行编程,使其能够实现特定的功能和操作。硬件编程需要了解硬件的工作原理、电路设计、嵌入式系统等方面的知识,需要具备一定的电子技术和嵌入式系统开发经验。硬件编程的特点是针对性强、可靠性高、能够直接控制硬件设备。如果你对电子技术、嵌入式系统开发等方面感兴趣,希望能够在智能硬件、物联网等领域发展,那么学习硬件编程会是一个不错的选择。
接下来,我们来看看软件编程。软件编程主要是指针对软件系统进行编程,实现特定的功能和操作。软件编程需要了解计算机原理、操作系统、数据结构、算法等方面的知识,需要具备一定的软件开发和调试经验。软件编程的特点是灵活性高、可扩展性强、能够快速迭代和优化。如果你对软件开发、互联网技术等方面感兴趣,希望能够在软件开发、Web开发、移动应用等领域发展,那么学习软件编程会是一个不错的选择。
当然,在实际应用中,硬件编程和软件编程也不是完全独立的,它们之间也存在相互联系和交叉。在一些领域中,如嵌入式系统开发、智能硬件等,需要同时具备硬件编程和软件编程的能力。因此,如果你对两者都感兴趣,或者希望能够在交叉领域发展,也可以考虑同时学习硬件编程和软件编程,以拓展自己的技能范围和职业发展空间。
无论选择学习硬件编程还是软件编程,都需要具备一定的基础知识和技能,需要不断地学习和实践。同时,也需要根据自己的兴趣、目标和职业发展方向进行选择,发挥自己的优势和特长,才能够在学习和职业发展中获得成功。
从底层硬件到上层应用,嵌入式软件的开发可以分为哪几类?
很多初学者对于学习硬件电路不知如何下手,其实“硬件电路”这个东西是由一部分一部分的“单元模块电路”组成的,所谓的“单元模块电路”包括:各种稳压电源电路(像LM7805、LM2940、LM2576等)、运算放大器电路(LM324、LM358等)、比较器电路(LM339)、单片机最小系统、H桥电机驱动电路(MC33886、L298等)、RC/LC滤波、场效应管/三极管组成的电子开关等等。
现在不要以为电阻电容是最基础的,“单元模块电路”才是最基础的东西,只有“单元模块电路”才能实现最基础的功能:稳压、信号处理、驱动负载等。
把整块电路分成好几部分,学习起来就会容易很多了,今天看懂稳压电源,明天看懂运算放大器……一个星期就能看懂一般的电路图了,主要在于逐个领悟、各个击破。单元电路百度有的是,没事多查查多问问。
光能看懂电路图也是不够的,还要有动手能力。
1、先能照着“单元模块电路图”在面包板上搭建电路,使之能正常工作(看懂元器件PDF资料,了解元器件引脚排布和各个电气参数);
2、紧接着能在万能电路板(洞洞板)上焊接一块电路,可以由几部分单元电路组成的那种(这里“布线”一定要多学学!对往下学很有用);
3、在此基础上学习Protel等电路设计软件,能设计一整块的电路板PCB。
学习电路一定要循序渐进,边理论边实践。
谨以一家之言,希望能对你有所帮助!
一、嵌入式系统的概念
着重理解逗嵌入地的概念
主要从三个方面上来理解。
1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。
2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的逗嵌入地,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。
3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的逗嵌入地。
以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科
二、嵌入式系统的分层与专业的分类。
嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。
1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。
硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。
2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。
驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。
3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。
4、应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及Je方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂,并且有难度了。
三、目标与定位。
先有目标,再去定位。
学ARM,从硬件上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。这些对于初学都来说必须明确,要么从硬件着手开始学,要么从操作系统的熟悉到应用开始学,但不管学什么,只要不是纯的操作系统级以上基于API的应用层的编程,硬件的寄存器类的东西还是要能看懂的,基于板级的汇编和C编程还是要会的。因此针对于嵌入式系统的硬件层和驱动程的人,ARM的接口电路设计、ARM的C语言和汇编语言编程及调试开发环境还是需要掌握的。
因此对于初学者必然要把握住方向,自己的目标是什么,自己要在那一层面上走。然后再着手学习较好,与ARM相关的嵌入式系统的较为实际的两个层面硬件层和驱动层,不管学好了那一层都会很有前途的。
如果想从嵌入式系统的应用层面的走的话,可能与ARM及其它体系相去较远,要着重研究基嵌入式操作系统的环境应用与相应开发工具链,比如WinCe操作系统下的EVC应用开发(与windows下的VC相类似),如果想再有突破就往某些音类的协议上靠,比如VOIP领域的基于SIP或H.323协议的应用层开发,或是基于嵌入式网络数据库的开发等等。
对于初学者来讲,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特点,嵌入式系统四个层面上那个层面上来讲都是有高人存在,当然高人也对应的高工资,我是做硬件层的,以前每月工资中个人所得税要被扣上近3千大元,当然我一方面充当工程师的角色,一方面充当主管及人物的角色,两个职位我一个人干,但上班时间就那些。硬件这方面上可能与我PK的人很少了,才让我拿到那么多的工资。
四、开发系统选择。
很多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM9与ARM7好,我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,那当然处理器性能越高越好了,但这个东西自学,有十分大的困难,不是几个月或半年或是一年二年能搞定的事。
在某种意义上请,ARM7与9的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386。对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。
ARM7比较适合于那些想从硬件层面上走的人,因为ARM7系列处理器内部带MMU的很少,而且比较好控制,就比如S3C44B0来讲,可以很容易将Cache关了,而且内部接口寄存器很容易看明白,各种接口对于用硬件程序控制或AXD单步命令行指令都可以控制起来,基于51单片机的思想很容易能把他搞懂,就当成个32位的单片机,从而消除很多51工程师想转为嵌入式系统硬件ARM开发工程师的困惑,从而不会被业界某此不是真正懂嵌入式烂公司带到操作系统层面上去,让他们望而失畏,让业界更加缺少这方面的人才。
而嵌入式系统不管硬件设计还是软件驱动方面都是十分注重接口这部分的,选择平台还要考察一个处理器的外部,你接触外部越多,越熟悉他们那你以后就业成功的机率就越高,这就是招聘时所说的有无逗相关技能地,因为一个人不可能在短短几年内把所有的处理器都接触一遍,而招聘单位所用的处理器就可能是我们完全没有见过的,就拿台湾数十家小公司(市价几千万)的公司生产的ARM类处理器,也很好用,但这些东西通用性太差,用这些处理器的公司就只能招有相关工作经验的人了,那什么是相关工作经验,在硬件上讲的是接口设计,在软件上讲是操作系统方面相关接口驱动及应用开发经验。我从业近十年,2000年ARM出现,我一天始做ARM7,然后直接跑到了Xscale(这个板本在ARM10-11之间),一做就是五年,招人面试都不下数百人,在这些方面还是深有体会的。
我个人认为三星的S3C44b0对初学者来说比较合适,为什么这么说哪看因为接口比较丰富,技术成熟,资料较多,应该十分适合于初学者,有问题可能很容易找人帮且解决,因为大多数人都很熟悉,就如同51类的单片机,有N多位专家级的人物可以给你帮忙,相关问题得以很快解答,所然业界认为这款ARM都做用得烂了,但对于初学者来,就却是件好事。
因此开发系统的选择,要看自己的未来从来目标方向、要看开发板接口、还要看业界的通用性。
五、如何看待培训。
首先说说我自己,我目前从业近十年,与国内嵌入式系统行业共同起步,一直站在嵌入式系统行业前沿,设计过多款高端嵌入式系统平台产品并为众多公司提供过解决方案,离职前为从事VOIP的美资公司设计IP-PBX,历任项目经理、项目主管、技术总监、部门经理,积累众多人脉,并集多年经验所得,考虑到学生就业与公司招人的不相匹配,公司想招人招不到,而学生和刚毕业的工程师想找份工作也不太容易,于此力创知天行科技有限公司,开展嵌入式系统教育培训。
因一线的科研人员和一线的教师不相接触,导至国内嵌入式人才缺乏,国外高校的技术超前于业界公司,而国内情况是业界公司方面的嵌入式系统技术要远远领先于高校。为架构业界与高校沟通的桥梁,把先进技能带给高校学子,为学生在就业竞争中打造一张王牌,并为业界工程师快速提升实现自我创造机遇,我就这样辞去了外企年薪20多万的职位,做嵌入式系统方面的培训了。
对于培训来讲,是花钱来买时间,很多工程师都喜欢自己学,认为培训不值,这也是有可能的,纯为赚钱的培训当然不会太有价值,但对于实力型的培训他们可能就亏大了,有这样一笔帐不知他们算过没有,如果一个一周的培训,能带给他们自学两年后才能掌握的知识,在培训完后他们用三个月到半年时间消化培训内容,这样他会省约至少一年半的时间来学其它的或重新站在另一个高度上工作,那么他将最迟一年后会拿到他两年后水平所对应的工资,就是在工资与水平对应的关系上比同批人缩短一年,每月按最少1千计,再减去培训费用至少多1.0万,同时也省了一年时间,不管是休闲也好,再继续提高也好,总之是跑到了队伍的前面了。
另一层面上讲,对于新人的培训相当于他们为自己提前买了份失业保险,有师傅会带领他们入道,我今年暑时班里最年轻的一个学生是大二的,今年才上大三,这学期才刚学单片机,但现在ARM方面的编程工作已经搞得有声有色了,再过一年多毕业,他还会失业吗看
再者通过培训,你可以知道很多业界不为常人所知的事,同时也为自己找了个师傅,就比如说,两个工程师分别用S3C2410和PXA255来做手持设备,同样两人都工作四年,再出去找工作,两人工资可能最多可相差一倍,为什么看这就是业界不为常人所知的规则,2410属于民品,被业界用烂了,做产品时成本特敏感,当然也对人才成本敏感了,PXA255是intel的东西,一个255 CPU能买三个2410,一直被业界定义为贵族产品,用的公司都是大公司或为军方服务的公司,不会在乎成本,只要把东西做好,一切都好说,但这方面做的人也少啊,因为开发系统贵啊。
对于说为自已找了个好师傅,我想是这样的,因为同级工程师间存在着某此潜在的竞争关系,有很多人不愿意把自己知道的东西教给别人,这意味着他将要失业,就是所说的教会徒弟,饿死师傅,但对于我们这些人就不存在这样的关系了,我是在嵌入式系统平台设计上走到了一定程序,目前在国内这块的技术上已经是自己很难再突破自己,因此很多东西我对大家都是OPEN的,就比如说下面那部分关于接口设计中所提到的时序接口东西,我要是不讲,却使是高级硬件工程师我想也几乎只有10%的人能知道吧。
六、成为高级嵌入式系统硬件工程师要具备的技能。
首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通,或去网站看看。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。
对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的Modem射频模块,都用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15K以上。
另一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,dsp类,FPGA类,国内FPGA的工程师大多是在IC设计公司从事IP核的前端验证,这部分不搞到门级,前途不太明朗,即使做个IC前端验证工程师,也要搞上几年才能胜任。dsp硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。而ARM单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互PK,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如PXA255处理器I2C要求速度在100Kbps,如果把一个I2C器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接LCD,但为什么这种LCD就不能挂在ARM的总线上,还有ARM7总线上可以外接个Winband的SD卡控制器,但为什么这种控制器接不到ARM9或是Xscale处理器上,这些都是问题。因此接口并不是一种简单的连接,要看时序,要看参数。 一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师把方案中的5V变1.8V的DC芯片,直接更换成LDO,有时就会把CPU烧上几个。前几天还有人希望我帮忙把他们以前基于PXA255平台的手持GPS设备做下程序优化,我问了一下情况,地图是存在SD卡中的,而SD卡与PXA255的MMC控制器间用的SPI接口,因此导致地图读取速度十分的慢,这种情况是设计中严重的缺陷,而不是程序的问题,因此我提了几条建议,让他们更新试下再说。因此想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,换句话说,给你一套电路图你终究能看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计PCB绘制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出ECAD工程师,就是专业的画PCB板的工程师,和EMC设计工程师,帮人家解决EMC的问题。硬件工程师再往上就是板级测试工程师,就是C语功底很好的硬件工程师,在电路板调试过程中能通过自已编写的测试程序对硬件功能进行验证。然后再交给基于操作系统级的驱动开发人员。
总之,硬件的内容很多很杂,硬件那方面练成了都会成为一个高手,我时常会给人家做下方案评估,很多高级硬件工程师设计的东西,经常被我一句话否定,因此工程师做到我这种地步,也会得罪些人,但硬件的确会有很多不为人知的东西,让很多高级硬件工程师也摸不到头脑。
那么高级硬件件工程师技术技能都要具备那些东西哪,首先要掌握EDA设计的工具类如Protel\ORCAD\PowperPCB\Maplux2\ISE、VDHL语言,要能用到这些工具画图画板做逻辑设计,再有就是接口设计审图能力,再者就是调试能力,如果能走到总体方案设计这块,那就基本上快成为资深工程师了。
硬件是要靠经验,也要靠积累的,十年磨一剑,百年磨一针。