如何从根本解决嵌入式Linux系统突然断电后无法启动问题

如何从根本解决嵌入式Linux系统突然断电后无法启动问题,第1张

首先你的断电是指什么?现在的手持设备都有超过3种供电电源。那我猜的说的断电是同时切断包括电池和USB在内的所有外部电源了。那么不论你的挂载点在哪里,kernel肯定是直接down掉的,cpu状态也不会被保存,内存清空,所有进程都不存在了,已经在读的进程不再持有文件句柄(没影响),已经在写的进程就写到某个字符停住,但是这些都不会影响到硬盘啊。所以对文件系统不会有损坏,但是对硬件会有些许伤害。但现在手持设备都维持在2.5~3V,断电对硬件的影响实际也不大。

至于你说的“怎么才能再以可读写属性挂载该磁盘呢”。我不理解这个“再”字。重新上电后一切重新开始,kernel boot重跑一遍,跟断电前你的挂载已经没有关系了。另一种情况,你可以在linux控制台启动句柄里面设置,把你的挂载命令写在那里面,那么每次启动时就自动挂载了

作者:匿名用户

链接:https://www.zhihu.com/question/19688487/answer/32217959

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

学习嵌入式系统,首先应该明确什么是嵌入式系统,否则费力去学,却不知所学为何物,岂不惘然?嵌入式系统的定义很多,这也是困扰嵌入式系统学习的一个因素。笔者根据自己开发和教学过程中的理解,以及对各种嵌入式系统的应用进行总结,提出了嵌入式系统的简单定义:嵌入式系统是嵌入式计算机系统的简称,这个定义突出嵌入式计算机系统和普通计算机系统的共性。下表列出了嵌入式系统的一些典型的应用:

智能机器人(S D R 4,火星登陆车)

娱乐和消费电子(Gameboy Advance,SonyPSP)

网络通信产品(Smartphone)

军用设备(军用PDA )

汽车(车载导航,自动驾驶,娱乐系统)

智能仪器(虚拟仪器)

安全防护(防火,防盗)

环境保护(探空气球)

银行和商业消费(ATM)

以火星登陆车为例来分析一下嵌入式系统的定义。火星登陆车虽然听起来感觉在技术上有些高不可测,但是本质就是嵌入式计算机系统的应用,其核心就是一个计算机系统,而这个计算机系统的组成同传统的计算机系统在本质上没有什么差别。两者的显著不同之处就在于,用于火星登陆车的计算机系统被安装到了火星登陆车上。当然,一个计算机系统能够被安装在火星登陆车上,是需要进行很多特殊设计的。但是从本质上讲,嵌入式系统的核心概念还在计算机系统。嵌入式系统学习的重点也在计算机系统上。一方面,学习者需要牢固掌握计算机系统本身的概念,更重要的是学习嵌入系统的开发过程同传统计算机系统开发过程的差别。这里需要指出的是,很多学习者本来就没有从事过完整计算机系统的开发,高校的教学是以程序设计为中心的,计算机系统的构成, *** 作系统的原理,编程语言等课程都是为了能够让学生更好的使用计算机系统进行程序设计,在现有的计算平台上来设计实现各种应用,学生一般没有机会学习一个完整的计算机系统是如何构建,并亲身参与到构建的每一个过程。而对于嵌入式系统而言,从事平台开发的人就是要亲自去开发出一个完整的计算机系统,这个过程包括

1. 需求分析

2 硬件设计

3 驱动程序

4 Bootloader &BSP (板级支持包)

5 *** 作系统的移植

6 应用程序的开发

7 性能检查

嵌入式系统教学的目的就是教会学生如何根据需求去建立满足某种特殊行业需求的嵌入式计算机系统。让学生学会如何构件硬件平台,进行硬件设计,选择能够满足应用要求的最佳的嵌入式 *** 作系统,并完成Bootloader,BSP和驱动程序的编写,移植,调试等过程。为了满足行业需求,最终要在所建立的系统上编写调试相应的应用程序,并进行性能的测试和检查。

你是谁,你需要学习哪些东西?

如果你的工作只是需要在PC 机上编写一个图片浏览程序,那么你就没有必要去了解当系统收到一个ARP请求包后应该如何回应。同样的道理,嵌入式系统的学习也是有很多方面的。就嵌入式系统的设计和实现而言,基本上需要四种不同的工作:系统设计工作,硬件设计工作,驱动程序和 *** 作系统移植工作和应用程序设计开发工作。

1.系统设计工作

在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种 *** 作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。

2.硬件设计工作

系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/视频编解码芯片,电源管理芯片,总线接口电路 (USB,PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth,WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。

以上这些知识,往往需要较长时间的学习和积累,需要亲自参与实践的机会。对于刚刚接触嵌入式系统硬件开发的学生来讲,一般不可能全部了解这些知识,但也不会是通通一无所知。笔者结合自己开发和教学的经验认为:首先应该选定一款主流且较为简单的嵌入式系统处理器,比如基于ARM7TDMI 内核的AT91M40800,S3C44B0 等嵌入式系统处理器,学习32 位RISC处理器的编程模型,指令集。高校教学中,单片计算机课程一般以8051系列单片为核心讲解,由于现代32位处理器的结构和开发方式同8位单片机有着较大的差别,学习者还是需要花一点力气来研究以下32位处理器的。以ARM处理器为例,学习者就需要理解处理器的多种工作模式,备份寄存器,RISC 指令集的特点,MMU 和虚拟地址,中断处理过程等内容。在学习指令集的过程中,最好能够每学习几条指令,就使用这几条指令在模拟器上实验以下,观察处理器执行的结果。这个过程一方面是学习者对于指令本身的学习能够取得一个比较好的效果,另外也是对开发工具本身的一种学习。接着,就可以开始学习片上资源的使用和配置方法。这时就需要一个方便使用的开发板,学习者能够通过JTAG仿真器将开发板同调试PC机相连,进行程序的下载,调试。特别是要仔细研究系统的初始化过程和中断处理的过程。在开发过程中如果遇到问题,应自己分析问题产生的原因,通过分析缩小问题可能产生的范围,最终找到问题的所在。最重要的就是要保持一种解决问题的信心,面对困难如何处理,往往能够决定最终系统是否能够调试成功。然后,学习者可以开始仔细学习处理器同存储器的连接,存储空间的配置,各种外扩器件,如网卡,AC97声卡的工作原理和使用方法。嵌入式系统硬件设计中往往需要使用可编程器件,学习者还需要一定的时间来学习使用常用的可编程器件(CP L D / F P G A),常用的有Xilinx和Altera公司的产品。进行系统硬件原理图设计,就需要使用原理图设计的EDA工具,常用的EDA 原理图设计工具主要包括Cadence公司的Capture,Protel公司的Protel99SE等。接下来就可以参照评估板的电路图,根据系统的设计要求,开始进行原理图的绘制了。在原理图绘制过程中,一定要搞清评估板电路连接的原因,对于一时没有搞清楚的问题切不可蒙混过关。例如,有些处理器的地址线是以字节位单位的,而另一些处理器的地址线则是以两个字节为单位的,当连接16位的存储器的时候,切不可想当然的把处理器的A 0 直接连接到存储器的A 0 上面。另外,学生还应具有一定的PCB板图绘制能力,因为在现阶段,很多公司还不能完全把原理图的设计工作和PCB 的绘制工作分开,往往要求硬件设计人员既能进行原理图设计又能进行板图设计。即使是PCB设计和原理图设计分开的公司,也需要原理图设计者能为PCB 的设计者对于不同的信号提出布板要求。

3.驱动程序和 *** 作系统移植工作

现代嵌入式系统的开发同传统8位单片机系统的开发相比,一个显著的区别就是嵌入式 *** 作系统的广泛使用。在拿到焊接完毕的电路板,并进行基本的测试后,就要进行驱动程序和 *** 作系统的移植工作了。首先要进行的Bootloader的编写和移植工作。Bootloader相当于PC系统的BIOS。对于有些嵌入式 *** 作系统,如uc/OSII没有bootloader同样可以开发调试。但是对于WindowsCE和嵌入式linux系统而言Bootloader就是必须的了。本文以Windows CE 为例,做一个简要的说明。

Windows CE 系统的移植工作主要就是BSP(板级支持包)的开发过程。BSP将具体的硬件差异同 *** 作系统的核心隔离开来,主要由Bootloaer ,OAL(OEMAbstraction Layer)和设备驱动程序三部分组成。WindowsCE系统中Bootloader叫做Eboot。Eboot被写入系统的引导Flash。系统启动时运行Eboot,完成通过网卡将调试PC 机中WindowsCE *** 作系统映像下载到目标系统的SDRAM中并开始执行的功能。对于一个系统移植人员,首先需要阅读文档,了解WindowsCE系统Bootloader和BSP的基本概念和开发过程。(呵,还要做这工作啊,我还没想到(初学^_^))Windows CE的开发系统Platform Builder提供了详细的文档和例程,开发人员需要仔细的阅读文档和例程。搞清楚各个函数之间的调用关系。在开发过程中的一个重要的步骤就是打通串口,使得目标板能够通过PC机串口向调试PC 机发送数据。由于ARM系统的仿真器比较昂贵,而且 *** 作系统的调试往往不使用JTAG调试器进行单步调试。所以能从串口观察程序的执行过程和结果对于调试就显得十分重要了。串口打通之后一个比较棘手的问题就是网卡芯片的调试。刚刚接触嵌入式系统开发的人往往没有直接在寄存器级上使用网卡芯片的经验,而网卡芯片的说明一般都较为简短,这就要求开发者学习一些以太网的基础知识,对以太网的MAC 层有一个基本的认识。另外,各种网络调试(抓包)工具的使用也能大大降低系统调试的难度。系统的OAL需要根据具体硬件的不同做出相应的修改,这个部分可参照文档进行,在调试过程中根据串口的信息分析出错的地方。要充分发挥跨文件字符串搜索工具的功能,在浩如烟海的源文件中找到出错的位置。当然,随着开发者对系统文件目录结构的熟悉和了解,错误定位的速度会不断加快。WindowsCE 的驱动程序相对而言是比较好写的。

4.应用程序的开发

嵌入式系统的应用程序开发同在PC 机上开发应用程序的区别不是很大。对于Windows CE系统而言,Microsoft已经提供了较为完善的开发工具。特别是.NET Compact work的使用,使得基于Windows CE.NETCompactwork的应用程序有了跨平台性。开发人员可以使用Windows 的C# 语言直接在PC 上进行http://CE.NET应用程序的开发和模拟调试,也可将目标系统同PC 机相连,进行联机调试。现在有很多系统支持J2ME(JAVA的嵌入式系统版本) ,这使得JAVA 在嵌入式系统应用开发中占有较大的优势。另外,作为专业的嵌入式系统软件开发人员,还需要充分了解面向对象技术和设计模式等方面的知识,当然作为初学者可以先不深入研究这方面的内容。

常用嵌入式系统处理器和 *** 作系统

处理器

常用嵌入式系统处理器主要包括ARM 处理器,Power PC 处理器,基于MIPS 内核的嵌入式处理器,软核处理器(如Altera 的Nios和Xilinx的MicroBlaze等)和DSP(数字信号处理器)等。

ARM 处理器的主要特点是具有较高的性能功耗比。ARM处理器被广泛的应用在手机,PDA等领域,其中较为著名的有Intel 公司生产的基于ARM 内核的XScale系列处理器。由于所有公司生产的基于ARM内核的处理器具有相同的编程模型,在手持和电池供电的系统中,基于ARM的嵌入式系统处理器往往被首先选用。PowerPC(简称PPC)处理器具有较强的运算性能和数据吞吐能力,在网络和数据通信领域基于PPC的嵌入式系统处理器有着广泛的应用。其中Motorola公司生产的MPC860/MPC8260被大量地应用在嵌入式网络产品中。MIPS 处理器的特点表现在十分强大的处理能力上。作为高性能处理器,MIPS处理器适用于网络、企业及高级消费类电子应用,特别是在机顶盒系统中,MIPS处理器具有较高的市场占有率。随着可编程器件的规模不断扩大,使得人们能够根据需要定制处理器,并方便的将针对某种特殊应用定制的处理器方便的在可编程器件内部实现。除了处理器外,计算机系统还需要许多其他构成部分,比如在多通道媒体数据处理系统中,经常需要使用可编程器件来实现高速的数据处理功能,使用软核DSP来实现复杂的数字信号处理算法,同时还需要处理器进行事务处理,软核处理器将可编程器件,DSP同处理器结合在一起,为系统级设计提供了极大的灵活性。DSP(数字信号处理器)有别于通用处理器,集中表现在其强大的数字信号处理能力上。在DSP 内部提供了硬件乘累加器,处理器在设计上对于特殊的寻址方式做了优化,一些DSP 还支持零耗循环(Zero OverheadLoop)。为了方便嵌入式系统设计,主流DSP 一般也都提供了丰富的外设。特别值得一提的是ADI 公司的Blackfin 系列DSP和TI 公司的DM64X系列DSP,两种处理器都提供了丰富的片上外设,非常适用嵌入式系统应用。

*** 作系统

http://WindowCE.NET/5.0

作为Microsoft的产品,WindowCE.NE/5.0提供了功能完备的平台开发工具Platform Builder和应用开发工具Embedded Visual C++/Visual Studio 2003。WindowsCE由于拥有广大使用者所熟悉的windows界面,系统提供了众多驱动程序,并且有完备的文档支持。对于应用开发而言,熟悉Windows系统开发的程序员很容易转到WindowsCE 应用程序的开发。Windows CE将会是一个非常有前途的嵌入式 *** 作系统。

VxWorks

VxWorks是由Windriver(风河)公司出品的嵌入式实时 *** 作系统,大名鼎鼎的火星登陆车就是使用了VxWorks。Windriver为VxWorks提供了集成开发环境tornado。

υC/OSII

υC/OS是由Jean Labrosse设计编写的开放源代码的嵌入式实时 *** 作系统,笔者最早接触的嵌入式 *** 作系统就是它。阅读并深入理解υC/OS的源代码对于理解实时系统是大有裨益的。

ARM Linux

ARM linux是由Russell King和其他开发者开发移植的用于ARM 处理器的linux *** 作系统。ARM Linux系统在GNU GPL下发布。

υCLinux

υClinux 是适用于没有MMU 的嵌入式处理的LinuxOS 版本。υ Clinux 同样在GNU GPL发布。

嵌入式系统开发过程中的常见问题和解决方法

Bootloader如何写入Flash ?

初学者一般都会遇到如何将程序写入处理器的问题。对于不同的处理器,可以采用不同的方法。例如Intel的Xscale处理器可以使用Intel公司提供的JFlash工具烧写。对于具有JTAG调试工具软件的处理器,可以使用如下思路:编写一段程序,这段程序能将位于SDRAM/SRAM 固定地址中的数据写入Flash中。烧写时,首先,将这段软件下载到SDRAM 中,然后通过调试软件将要写入Flash的数据下载到SDRAM/SRAM的某个固定地址开始的缓冲区,然后通过调试器开始执行程序,将数据写入Flash。除此以外,网络上还提供了很多专用的写Flash的工具,开发者可以根据自己的需要选用。(现在明白了我在学的那个BF533为什么先下个flashProgramer.dxe先了)

什么是arm-elf-gcc?

arm-elf-gcc是一个交叉C语言编译器。我们在PC平台下编译程序,编译器运行的处理器同生成的代码将要运行的处理器相同。但是,在PC

机上编译ARM程序时,编译器运行的处理器同生成的代码运行的处理器不同,这种编译器叫做交叉编译器。其中的elf是指编译器生成的目标文件格式。(其实我们平时用的单片机编译器如GCC—AVR等已是交叉编译器了,我到现在才弄清楚什么是交叉编译器)

走了哪条编译路径?

系统程序和驱动程序往往包含很多的编译选项,很多选项都是在编译时通过命令行定义的,如果想知道编译的是那一段程序可以使用如下的方法:

#ifdef PLAT_AAA

#error Code for Platform AAA

#else

#error Code NOT for Platform AAA

#endif

这样在编译的时候就知道,编译的是哪一条路经了。对于支持#pragma message( “I am here”)的编译器也可使用#pragma message预编译指令。

我怎么知道那段代码在那个文件中?

系统编程中经常需要使用在多个文件中搜索字符串,在windows平台下可以使用平台提供的多文件字符串搜索工具。在linux平台下,可以使用grep来搜索字符串。Grep的搜索功能十分强大,支持正则表达式搜索,熟练使用grep对于阅读系统和驱动程序代码是很有帮助的。

系统是从那个文件开始运行的?

对于Windows CE系统,一般从WINCE420\PLATFORM\YourPlatform\KERNEL\HAL目录的某个汇编文件中。对于Linux系统版本不同会存在一定差异,以arm处理器为例,一般会在linux2.4.x\arch\arm\kernel的head-armv.S中。

程序执行到了那里?

可以在程序中插入如下代码来实现

printf( “I am here %s, %d\n”,__FILE__,__LINE__)

代码将打出printf语句所在的文件名和行号。

推荐书目

Jean J.Labrosse MicroC/OS-II The Real-TimeKernel,Second Edition这本书是笔者接触嵌入式实时系统的入门书,在国内能够买到中文版。这本书较为清楚地讲述了实时系统的概念,各个组成部分的工作原理,特别是公开了实时系统内核的源代码,仔细研究定会受益匪浅。有个小的提示,对于初学者,这本书可以先不看第一章,直接从第二章看起。

Abraham Silberschatz, Peter Baer Galvin,GregGagne Operating System Concepts笔者在教学过程中发现,无论是计算机还是电子工程专业都有很多学生对于 *** 作系统的基本概念都没有搞清,很少有学生有完整的系统编程经验。Operating System Concepts这本书对 *** 作系统的概念讲述只能用经典来形容。对于嵌入式系统有兴趣深入研究的同学,首先要把基础打好,这本书就成了必读之物了。

Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 学习计算机的同学一定都知道OPERATINGSYSTEMs:Designand

Implementation这本书,笔者对于Tanenbaum这样的教授由衷佩服。网络协议栈是嵌入式系统中的支柱性组成部分。愿意致力于网络深层技术研究的同学,这本书将为你们建立一个坚实的网络基础。

Karim Yaghmour Building Embedded Linux Systems本书详尽的介绍了嵌入式linux系统的组成,基本概念和如何去建立各个部分。全书篇幅较小,可谓短小精悍。即可以作为嵌入式linux系统的入门读物,又是开发过程各个部分的指南。

Advanced RISC Machines Ltd (ARM) ARM7 TDMI DataSheet Advanced RISC Machines Ltd (ARM) ARM920TTechnical Reference Manual学习嵌入式系统不了解当前应用最广泛的嵌入式处理器怎么行?ARM7 TDMI 的 data sheet是学习ARM编程模型,指令集的好东西。在嵌入式系统中,MMU(内存管理单元)是很重要的部分,又是较难理解和掌握的部分。ARM920TTechnical Reference Manual 正好可以帮你讲解这方面的内容。

Perter Van Der LinDen Expert C Programming嵌入式系统级编程最常用的语言还是C 。很多同学都自认为自己的C语言学的很好,那好,就看看这本书吧,找找自己和Experts差距。

嵌入式开发与桌面开发既有不同,又有非常大的联系,而且十分注重实际 *** 作能力。搞桌面开发的人在一开始接触嵌入式的时候,通常转换不过来,这主要体现在定位上。如文中所说,你是谁,你要做什么?我对硬件的了解仅限于编程领域,PCB设计一窍不通,但并不能说你不懂硬件就不能从事嵌入式开发。一个系统的开发设计方方面面,在自己感兴趣和熟悉的领域做出自己的贡献才是最主要的。

1。硬件设计: 需要有硬件设计的经验,对各种嵌入式器件有很好的了解。

2。系统移植:需要汇编经验, *** 作系统原理以及底层驱动的了解

3。应用程序:需要桌面编程经验

嵌入式系统有那些特点呢?

嵌入式系统是现在最为热门的领域之一,已经广泛地渗透到科学研究、工程设计、军事技术、各类产业以及人们日常生活的方方面面。那嵌入式系统有着怎样的特点:

1.嵌入式系统通常是面向特定应用的

嵌入式微处理器与通用型处理器的最大不同就是嵌入式微处理器大多工作在为特定使用者群设计的系统中。嵌入式微处理器通常都具有低功耗、体积小、整合度高等特点,能够把通用处理器中许多由板卡完成的任务整合在晶片内部,从而有利于嵌入式系统设计趋于小型化,大大增强移动能力,跟网路的耦合越来越紧密。

2.嵌入式系统是各种技术、各个行业融合的产物

嵌入式可以应用在人们生活的各个领域,它是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识整合系统。

3.嵌入式系统的软硬体设计高效、可裁减

嵌入式系统对成本、体积等方面有严格的要求,要求嵌入式工程师对硬体和软体进行高效地设计,量体裁衣、去除冗余,力争在同样的矽片面积上实现更高的效能,这样才能在具体应用中更具有竞争力。

4.嵌入式系统软体固化

为了提高执行速度和系统可靠性,嵌入式系统中的软体一般都固化在储存器晶片或微控制器中,而不是储存于磁碟等载体中。

5.购买产品与技术开发相结合的实现方式

通用处理器系统多数是通过软体工程的方法,根据使用者的需求进行软体开发的,使用者拥有完整的技术资料,可以根据应用的需要进行相应的维护与升级。而嵌入式系统一般采用购买现成产品与自行独立开发相结合的方式来构建。

嵌入式系统

有老师讲也很难懂。不过我相信,世上无难事只怕有心人!

基础科目:C语言、计算机组成原理、离散数学、资料结构、微控制器、ARM9嵌入式系统设计基础、作业系统、编译原理等。

嵌入式系统本身是一个相对模糊的定义,但业内广泛承认的一个定义是:以应用为中心,以计算机技术为基础,且软硬体可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 其实我们现在说的嵌入式系统是狭义的即是基于某一款嵌入式微处理器(如ARM)所组成的嵌入到物件体中实现智慧控制的系统,而广义的嵌入式系统面就比较广了(如微控制器系统、DSP系统等)。 希望这些对你有帮助,以上全是我根据个人的理解一个字一个字打上去的希望支援!

嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助装置、机器或用于工厂运作的装置。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。

……………………………………………………

看你问的问题,应该是对嵌入式很感兴趣,其实你可以自学嵌入式。关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。

先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。

退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。

一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。

回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关资讯,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。

后来,我在百度知道看到一篇让我很鼓舞的文章,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视讯,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。

我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。

主意一定,我就去搜索嵌入式的视讯,虽然零星找到一些嵌入式的视讯,但是都不系统,我是想找一个能够告诉我该怎么学的视讯,一套从入门到精通的视讯,一个比较完整的资料,最好能有老师教,不懂可以请教的。

后来我又找到一份很好的视讯,是在IT学习联盟网站推出的一份视讯《零基础嵌入式就业班》(喜欢《零基础嵌入式就业班》的可以复制 sina.lt/qKh 贴上浏览器位址列按回车键即开启)。里面的教程还不错,很完整,可以让我从基础的开始学起。视讯比较便宜。

下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。

收到他们寄过来的光碟后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视讯教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机器上都有做练习,敲linux的基本命令,写简单的C语言程式码,差不多也就三个礼拜。我每天都在不停的写一些简单的程式码,这样一月后我基本掌握了C和linux的基本 *** 作。

接下来我就去学习了人家的视讯的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。

这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。

最后的一个月,我就去看关于实践部分的内容,了解嵌入式专案具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视讯,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右

我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的专案经验,所以我没有被选中。

后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。

把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。

…………………………

没有特定的规范,严格地说,主要晶片上能烧程式,微控制器、FPGA、8086等等都算是嵌入式,只是微控制器、FPGA没有嵌入系统,所以算是小型的,通常所说的都是ARM等组成的大型嵌入式系统

微控制器也可以跑RTOS,只要硬体条件达到系统所要求的就可以了

数位电路,类比电路,微机原理与组合语言,顺便把三级pc技术过了,

然后接触一种具体的微控制器,51,avr都可以,还有,高数一定要学好,电子行业很多都要用数学。推荐你学习一种嵌入式作业系统---ucosII,只要你有c语言,资料结构还有微机原理这三门课的基础,这个很容易上手。

嵌入式系统有哪些型别

嵌入式系统

IEEE对于嵌入式系统的定义是:An Embedded system is the devices used to control, monitor, or assist the operation of equipment, machinery or plants.嵌入式系统是“用于控制、监视或者辅助 *** 作机器和装置的装置”。

在中国嵌入式系统领域,比较认同的嵌入式系统概念是:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬体可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬体装置、嵌入式作业系统以及使用者的应用程式等四个部分组成,用于实现对其他装置的控制、监视或管理等功能。

嵌入式系统一般指非PC系统,它包括硬体和软体两部分。硬体包括处理器/微处理器、储存器及外设器件和I/O埠、图形控制器等。软体部分包括作业系统软体(OS)(要求实时和多工 *** 作)和应用程式程式设计。有时设计人员把这两种软体组合在一起。应用程式控制着系统的运作和行为;而作业系统控制着应用程式程式设计与硬体的互动作用。

嵌入式系统的核心是嵌入式微处理器。嵌入式微处理器一般就具备以下4个特点:

1)对实时多工有很强的支援能力,能完成多工并且有较短的中断响应时间,从而使内部的程式码和实时核心心的执行时间减少到最低限度。

2)具有功能很强的储存区保护功能。这是由于嵌入式系统的软体结构已模组化,而为了避免在软体模组之间出现错误的交叉作用,需要设计强大的储存区保护功能,同时也有利于软体诊断。

3)可扩充套件的处理器结构,以能最迅速地开展出满足应用的最高效能的嵌入式微处理器。

4)嵌入式微处理器必须功耗很低,尤其是用于行动式的无线及移动的计算和通讯装置中靠电池供电的嵌入式系统更是如此,如需要功耗只有mW甚至μW级。

嵌入式计算机系统同通用型计算机系统相比具有以下特点:

1.嵌入式系统通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定使用者群设计的系统中,它通常都具有低功耗、体积小、整合度高等特点,能够把通用CPU中许多由板卡完成的任务整合在晶片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网路的耦合也越来越紧密。

2.嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识整合系统。

3.嵌入式系统的硬体和软体都必须高效率地设计,量体裁衣、去除冗余,力争在同样的矽片面积上实现更高的效能,这样才能在具体应用中对处理器的选择更具有竞争力。

4.嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。

5.为了提高执行速度和系统可靠性,嵌入式系统中的软体一般都固化在储存器晶片或微控制器本身中,而不是存贮于磁碟等载体中。

6.嵌入式系统本身不具备自举开发能力,即使设计完成以后使用者通常也是不能对其中的程式功能进行修改的,必须有一套开发工具和环境才能进行开发

嵌入式系统啊

嵌入式系统有很多方向,硬体、linux驱动、dsp、fpga,你导师是做哪方面的呀,要不先学linux下c的程式设计呗,现在很火的。

嵌入式系统 急 !

进入21世纪之后,随着社会资讯化的不断普及与发展,嵌入式系统的应用越来越广泛。其中自备电源嵌入式系统由于受功耗的限制,其设计与应用一直受到制约。一般来说,正常工作的嵌入式系统电流消耗在mA级,而处于休眠状态下可以控制在μA级左右,3个数量级的能源节约对于有限的自备电源无疑具有极大的诱惑,所以这类系统基本上都要采用休眠启用的方案以实现节能,达到延长工作寿命的目的。

目前可供采用的休眠启用方案主要有3种:事件启用法、定时启用法和定位启用法。事件启用法主要应用于检测告警等场合,系统一般处于休眠模式,如果特定引数超限就会激发系统工作,这种方法一般要与相应的感测器配合实现,微处理器中也要占用相应的中断资源;定时启用法主要应用于周期工作的系统(如小区三表资料的采集)中,系统按照定时器设定的时间间隔定期上报采集资料,这种启用法的实现也非常方便,只需在相应的微处理器中新增定时器的中断处理程式;定位启用法主要应用于对位置敏感的系统(如贵重资产管理和停车场的自动道闸等)中,该系统在特定位置安装检测装置,如果有监管人员或装置离开或进入这些特定领域将会激发系统工作。定位启用法的实现有多种,本文主要介绍利用无线讯号进行定位启用的一种实现方法。

1 基本原理

无线讯号频谱中LF频段讯号具有穿透能力强的特点,它可以穿透非磁性介质,如水、混凝土、塑料等(不受视线距离限制),所以利用LF频段设计启用电路是一种较好方案。无线讯号频率与波长存在反比例关系,天线长度取决于波长长度。500 MHz RF讯号的波长为60 cm,天线很短,完全可以方便地实现;而125 kHz LF讯号的波长为2.4 km,做这样的天线肯定不实际。所以利用LF频段讯号作为启用讯号,接收端不再采用电磁场(radio)原理进行工作,而是直接通过接收磁场(magic)讯号,然后利用磁场线上圈中的感应讯号进行判断处理,如图1所示。该系统主要由磁场发射端和接收端两种装置组成。

图1 磁场工作原理

MCP2030是Microchip公司开发的专门针对低频无线磁场通讯的模拟前端器件。该器件整合有8个可程式设计配置暂存器和1个只读状态暂存器,根据暂存器配置,MCP2030可以输出解调资料、载波时钟和磁场强度RSSI。该器件模拟接收电路具有较强的灵敏度,可以接收识别1 mVpp讯号并解调8%的微弱调制讯号。为了得到可靠的磁场讯号,MCP2030采用了3组天线和3组接收解调电路。3组天线分别指向互相垂直的X、Y、Z轴,这样无论接收器如何放置,总可以得到磁场讯号,从而解决了磁场讯号的方向性问题。其结构框图如图2所示。

图2 MCP2030结构框图

图3 MCP2030有输出的情况

MCP2030集成了无线讯号数字序列滤波部件,可以根据需要设定数字序列,器件只有当接收到特定数字序列时才做出响应,所以可有效避免其他讯号干扰所引起的启用现象。图3所示为无线数字序列符合设定数字序列的情况,特定的数字序列为“2 ms有2 ms无”载波讯号,此时LFDATA在监测到特定序列之后输出的ASK调制讯号,如果无线数字序列不符合设定数字序列,LFDATA无输出。

MCP2030具有功耗极低的显著优势,为便于在自备电源的嵌入式系统中应用,专门设计优化了3种工作模式,即休眠模式、待机模式和工作模式。休眠模式由SPI 介面命令进行控制,进入休眠之后,除暂存器、储存器和SPI功能电路之外,包括RF限幅器在内的所有电路都将关闭,以使消耗的电流最低(0.2 μA),需要用上电覆位以及除休眠命令外的任何其他SPI命令将器件从休眠模式唤醒;当天线输入没有LF讯号时,器件将自动处于待机模式,但器件内部各部分电路已上电并准备接收输入讯号,待机模式下电流消耗的典型值为4 μA(3个接收天线工作);当在LF天线输入上有LF讯号且内部电路随接收的资料而进行切换时,器件处于低电流工作模式,该模式下电流消耗仅为13 μA。

除此之外,该器件还支援半电源和无电源工作模式。无电源工作方式下,器件完全从磁场中提取能量进行工作;在半电源工作方式下,器件尽可能从磁场获取能量,不得已情况下由电源供电。

2 设计应用

有源射频标签是射频识别系统中的重要组成部分,相比而言具有储存容量大、通讯距离远、功能丰富的优势,可以广泛应用于物流跟踪、贵重资产管理等领域。其内部电路主要部件有:控制器、启用讯号检测电路、RAM/ROM、定时器、UHF收发器、电源等。其中,启用讯号检测电路可以由MCP2030进行实现,如图4所示。利用MCP2030针对设定数字序列进行识别接收的能力,可以有效地控制标签的工作状态。当标签到达安装有射频启用发射器的特定位置时,MCP2030从SPI介面上输出相应的接收讯号,使得控制器退出休眠状态,并对资料进行接收、分析和处理,最终储存在RAM/ROM相应的位置中。当需要与读写器进行资讯互动时,控制器通过UHF收发器进行通讯,控制器处理完之后自动进入休眠状态,直到下一次接收到磁场启用讯号或定时器产生定时中断。

图4 启用讯号检测电路

如图4所示,MCP2030与控制器通过SPI介面进行连线,SPI介面定义分别为LFDATA、SCCLK、MCCS。该介面命令由16位的控制字组成,命令格式如下:

D13~D15为命令型别,MCP2030根据命令型别确定后续的资料含义并执行相应的 *** 作。其中,0x07为写资料命令,0x06为读资料命令。如果是写资料或读资料命令,则后续D9~D12为暂存器地址,分别指定该命令所要 *** 作的暂存器地址,D1~D8为暂存器资料内容,D0为该命令列校验资讯;如果不是写资料或读资料命令,则D0~D12的资料内容无意义。

为使MCP2030正常工作,系统上电覆位时要对该器件进行正确的初始化配置。在此设定无线讯号数字滤波序列为2 ms有2 ms无,使能通道自动选择功能和解调讯号输出功能,初始化程式段如下:

void Init_MCP2030(void) {

ShiftOutSpi(0xe1,0x41)reg0 111 0000 1010 0000 1

ShiftOutSpi(0xe2,0x01)reg1 111 0001 0000 0000 1

ShiftOutSpi(0xe4,0x01)reg2 111 0010 0000 0000 1

ShiftOutSpi(0xe6,0x01)reg3 111 0011 0000 0000 1

ShiftOutSpi(0xe8,0x01)reg4 111 0100 0000 0000 1

ShiftOutSpi(0xeb,0x81)reg5 111 0101 1100 0000 1

ShiftOutSpi(0xed,0x3f)reg6 111 0110 1001 1111 1

}

控制器向MCP2030传送资料的程式实现如下:

资料预先储存在OutData1和OutData2中

void ShiftOutSpi(unsigned char OutData1,unsigned char OutData2) {

unsigned char i

SCCLK=0

MCCS=0

for(i=0i<8i++) {

LFDATA=OutData1 &0x80

OutData1=OutData1?1

SCCLK=1

SCCLK=0

}

for(i=0i<8i++) {

LFDATA=OutData2 &0x80

OutData2=OutData2?1

SCCLK=1

SCCLK=0

}

MCCS=1

}

控制器从MCP2030接收资料的程式段如下:

资料储存在AFESpiInDataH和AFESpiInDataL中

void ShiftInSpi(void) {

unsigned char i

SCCLK=0

MCCS=0

for(i=0i<8i++) {

SCCLK=1

AFESpiInDataH=AFESpiInDataH &LFDATA

AFESpiInDataH=AFESpiInDataH?1

SCCLK=0

}

for(i=0i<8i++) {

SCCLK=1

AFESpiInDataL=AFESpiInDataL &LFDATA

AFESpiInDataL=AFESpiInDataL?1

SCCLK=0

}

MCCS=1

}

结语

本文针对MCP2030的特点具体介绍了其在有源射频标签中的应用。该器件不仅整合有3通道低频接收电路以及3方向的磁场检测接收电路,而且功耗低,具备多种节能工作模式,非常适合于其他要求低功耗无线启用的嵌入式系统应用。

嵌入式系统题

1 mov

2 LDR

就两个指令还要搞不明白吗?

入门没学好啊.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8545261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存