总结:我的ARM嵌入式开发的六步学习法

发布者:SparklingSun最新更新时间:2021-04-16 来源: eefocus关键字:ARM  嵌入式开发  六步学习法 手机看文章 扫描二维码
随时随地手机看文章

学习ARM嵌入式开发,尤其对于初学者而言,不应该过早地、过多地将精力用在嵌入式系统移植、Linux内核的研究和学习上,这些诱人的“热点”很容易使初学者迷失方向,进而忽视对基础知识的深入学习。以下是针对Linux系统的ARM嵌入式开发学习步骤:


第一,学习基本的裸机编程


对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了


学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,noRFlash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?


诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。


不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。


对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。


第二,使用linux系统进行一些基本的实验


在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。


在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。


第三,研究完整的linux系统的的运行过程


所谓完整的linux系统包括哪些部分呢?


三部分:bootloader、linuxkernel(linux内核)、rootfile(根文件系统)。


那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。


第四,开始做系统移植


上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。


当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。


在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。


至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。


这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。


盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。


第五,研究linux驱动程序的编写


移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。


Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。


这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。


第六,研究应用程序的编写


做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。

关键字:ARM  嵌入式开发  六步学习法 引用地址:总结:我的ARM嵌入式开发的六步学习法

上一篇:一种智能化ARINC429通讯卡设计与实现
下一篇:基于S3C2410A的微型工程地震仪方案设计

推荐阅读最新更新时间:2024-11-02 12:05

飞思卡尔推出基于ARM Cortex-M技术的业界最安全的微控制器
新的Kinetis K8x MCU系列旨在应对IoT安全挑战,集先进的安全性、功率效率、大容量存储器及功能可扩展性于一身,打造安全的未来互联网 飞思卡尔半导体日前推出新的Kinetis K8x多应用微控制器(MCU)系列,使ARM Cortex -M级平台获得最高水平的集成安全性。 过去创建安全的嵌入式应用需要3个IC,包括主处理器、执行加密功能的安全协处理器,有时还需要用于物理防篡改保护的 IC。Kinetis K8x MCU系列只需要一个MCU便能执行上述所有功能,可降低成本、缩小尺寸、降低功耗。飞思卡尔将卓越的安全性集成至这个面向普通市场的MCU系列中,使物联网(IoT)应用(如销售点设备、智能能源网
[单片机]
基于ARM单片机LPC2148的音频分析仪设计
0 引言 随着微电子和信息技术的快速发展,以单片机为代表的数字技术发展日新月异。单片机由于具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,而广泛应用于各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理。事实上,通过采用单片机来进行控制,可以实现仪器仪表的数字化、智能化和微型化。本文通过对比选择采用了LPC2148芯片解决方案来实现音频分析仪的设计。 1 系统分析与选择 1.1 信号处理原理分析 在对音频信号进行分析的过程中,本文采用了快速傅立叶变换FFT算法,即首先对音频信号进行离散化处理,然后进行FFT运算,求出信号各个离散频率点的功率数值,并得到离散化的功率谱,最
[单片机]
ARM异常中断的集中情况进行总结,并给出了一些解决方法
ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,本文就将对ARM异常中断的集中情况进行总结,并给出了一些解决方法。 在正式介绍之前,要为大家补充一些较为重要的基础知识。首先R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位
[单片机]
对<font color='red'>ARM</font>异常中断的集中情况进行总结,并给出了一些解决方法
[ARM笔记]设备驱动概述
《嵌入式Linux初级实验s3c2410》 设备驱动开发=硬件控制+内核API+内核驱动框架 1. 设备驱动和操作系统 1.1 无操作系统时的设备驱动 在没有操作系统的情况下,设备驱动的接口直接提交给应用软件工程师,应用软件没有跨越任何层次就可以直接访问设备驱动的接口。驱动包含的接口函数也与硬件的功能直接吻合,没有任何附加功能。 1.2 有操作系统时的设备驱动 没有操作系统时,设备驱动直接被应用程序调用,不与任何操作系统关联。当系统中包含操作系统后,设备驱动会变得怎样? 首先,无操作系统时设备驱动的硬件操作仍然是必不可少的,没有这一部分,设备驱动不可能与硬件打交道,也就是说在无操作系统时驱
[单片机]
arm学习笔记二(arm寻址方式)
工作状态 arm状态 32位指令 thumb状态 16位指令 存储器的格式 最大寻址空间为4gb 大端格式:字数据的高字节存储在低地址中,低字节存放在高地址中 小端格式:与大端格式相反 axd查看寄存器 ================================================================= arm寻址方式(貌似计算机原理中学过) 处理器根据指令中给出的地址信息来寻找物理地址的方式 立即寻址 立即数寻址 示例代码如下: add r0,r0,#1; r0 --r0+1 add r0,r0,#0x3f; r0 --r0+0x3f 以十六进制表示的立即数要加0x或& 寄存器寻址 利用寄存器中的
[单片机]
32 位ARM 嵌入式系统扩展USB 接口设计
  常用的主机与嵌入式外设的高速通信接口有LPT 并行口、USB、1394 及10/100M 以太网等接口。RS232 不适合高速数据传送,1394 接口需要专门的适配器接口成本过高,一般较少使用,USB 接口被广泛用于高、中、低不同速度设备与主机通信,USB2.0 的最高速度可达480Mb/s, 可传送高清晰数字视频码流,完全可以替代1394 接口,USB 与以太网接口相比,采用主从结构,有即插即用特性,驱动程序丰富,互操作性好等优点。 USB(Universal Serial Bus,通用串行总线)接口是1994 年Intel、Microsoft 等多家公司联合推出的计算机外设互连总线协议。USB 接口支持1.5Mb/s、
[嵌入式]
ARM cortex-M3 异常处理分析
一、进入异常之前处理器可能的状态有: 1.handler 2.线程,MSP 3.线程,PSP 二、产生异常时: 1、有一个压栈的过程,产生异常时使用PSP,就压入到PSP中,产生异常时使用MSP,就压入到MSP中 2、会根据处理器的模式和使用的堆栈,设置LR的值(当然设置完的LR的值再压栈) 三、异常返回时: 根据LR的值,判读使用那个堆栈,然后再从相应的堆栈中POP数据到寄存器。 举例说明: 在利用OSStartHighRdy- OSPendSV- OSPendSV_nosave启动第一个线程时,在异常进入的时候,压栈到MSP(不会影响PSP的内容),在通过BX LR指令从异常返回之前,有一句ORR LR, LR,
[单片机]
Linux环境下实现基于ARM9的CAN总线通信
1. 引言 CAN(Controller Area Network)总线最早是由德国BOSCH公司提出,实现汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。由于其具有成本低,实时性好,容错性高,设计灵活等特点,目前已被广泛的应用于各种工业领域,被公认为是最有前途的现成总线之一。与此同时,随着ARM(Advanced RISC Machines)芯片及嵌入式Linux操作系统的成熟与完善,使得CAN通信的开发更为便利,应用更为广泛。本文就将从硬件,软件两方面介绍一种在Linux环境下实现基于EP9315的CAN总线通信方式。 2. 硬件介绍及其接口实现 本设计选用的是Cirrus Logic公
[单片机]
Linux环境下实现基于<font color='red'>ARM</font>9的CAN总线通信
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved