第一篇:ARM11处理器(共)
ARM11处理器改变世界
对于ARM平台,相信众多的音改爱好者并不陌生。ARM11系列微处理器是ARM公司今年推出的新一代RISC处理器,它是ARM新指令构架——ARMV6的新一代设计实现。该系列主要有ARM1136J,ARM1156T2和ARM1176T2三个内核型号,分别针对不同应用领域。过去的十年中,ARM处理器经历了从简单的ARM7TDMI内核发展到最新ARM11EJ-S内核,目前已有5个产品系列——ARM7,ARM9,ARM9E,ARM10,SeourCore和ARM11.从简单的三级流水线到先进的8级流水线结构,ARM11是ARM家族中性能最强的一个系列。凡是ARM11所到之处必定火上一把,成为众多明星产品必备的不二选择。
在国内外都拿有赞誉的国内第一大电子品牌爱国者MP4产品,就是成功地采用了ARM11处理核心平台,产品得到国内外用户的认可,并且顺利走出了国门。还有引爆全球苹果风的IPHONE4代手机,也正是采用了ARM11的处理平台,更快的运作通度和更强大的兼容性,给苹果产品注入了一股全新的巨大爆发力,全球销售短短两个月突破6亿台。也许没有AMR11,它们也会是一款成功的产品。但是有了ARM11,他们却变得更成功。ARM11的成功之处远不止于此,它还比同系列产品增强了异常和中断的处理速度。ARM11媒体处理扩展使MPEG4编码/解码加快一倍。音频处理加快一倍。综合ARM11的诸多优点,我们就能够理解,ARM11为什么是苹果,三星,爱国者等国内国际高科技产品追逐的宠儿了。这也更加彰显了ARM11的控制魅力。
在高科技支配下的世界里,信息瞬息万变,任何高科技产品都需要不断追求高效,稳定的性能。车载导航系统也需要顺应这种潮流,从原先单一的导航软件发展演变成为能强大的专用一体机。随着越来越多心功能的研发与运用,产品各方面的要求也愈加严格,但这些功能离不开一个能运行得了他们的子核心。产品的还坏也在于核心的还坏,核心及处理平台。纵观整个车载导航产品市场,相比较之下,ARM11高校处理平台在各个方面都在导航产品处理器领域独占螫头。
之前车载导航产品使用过程中反应速度慢,容易死机,功能简单,界面粗糙等缺点。ARM11都可以一并解决。ARM11更稳定,更低的耗能,能让更多的功能,更好更兼容地运行在平台上,免除车主不必要的烦恼。3D实景地图的运用,是导航软件的一个革命性飞跃,当各大处理平台产品厂商在研发能更好地兼容3D地图的新处理平台产品时,ARM11处理平台就已经具备完美运行3D实景地图的功能。
现实生活中,很多生产日常生活必备品的厂家,为了能给消费者提供更便捷多样的服务与功能,也强强联合ARM处理器。这样的碰撞,产生的效益与影响,无可估量。以手机产品为例,数据显示,现阶段市场上使用ARM平台的手机品牌有:诺基亚(NOKIA)、摩托罗拉(MOTOROLA)、索爱、三星(SAMSUNG)、奔迈等,这些品牌在手机市场的份额上占据了95%的市场,由此可以看出ARM处理器的应用之防范。也正是由于ARM处理器的性能特点,才是个众多知识品牌与合作的如此成功。
当把一个成熟的、有针对性的、高性能、低能耗的优质产品加以运用时,便会产生很多的惊喜与发展空间。所以,加载了ARM11高校处理平台的导航系统,将会引起车载导航市场的热烈追捧。
第二篇:arm心得.
心得体会(许晶)
本次实习时间是一周,我们组所选的题目是直流电动机转速控制设计,其要求有:硬件部分要求在LPC2100系列ARM的最小系统的基础上,设计通过按键控制直流电动机速度的驱动电路,要求通过LPC2100内置的PWM发生器控制直流电动机;并将电动机速度通过串口送至PC机。软件部分要求设计以上功能的脱机运行程序,并在试验室调试通过。我负责的是硬件部分。首先我将系统分为两部分。一是电动机控制驱动电路;二是ARM最小系统。在电动机驱动中,直流电机控制使用了H桥驱动电路,控制口线为P0.21、P0.22。在ARM最小系统中,分为5部分:电源电路、复位电路、JTAG接口电路、RS232串口电路、时钟电路。
在制作原理图中,我查阅了实验指导书和课本。我所选用的是2114板子。因为LPC2114是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STM CPU的微控制器,并带有128/256 k字节(kB)嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
在这个过程中,我注意到了许多问题。通过最小系统的制图,我对一些问题逐渐了解,不像刚开始学习一样,感觉什么也不懂,硬装知识。我画了5部分,这几个部分让我对书上的内容更加深了学习。如:时钟电路中,我就把时钟系统和晶体振荡两节课程,重新学习。
而在软件设计中,在我的搭档编程完之后,我也对程序进行了研究。在主程序中,我们用的是i、j表示速度与方向,正转为“+”、反转为“—”;最小速度为1,最大速度为4。先让电机正向慢慢的加速,加到正传的最大速后,在按下就变成反转,然后在依次加速,往返循环,直至没有按键按下。所运用的是,调节PWM的占空比就能达到电机的速度调节。
我们组在硬件中遇到的问题并不多,主要是在画各部分原理图时找器件很不熟练,不能很快的找到。这说明我不经常用软件。其实这个软件制图很方便,各种器件几乎都能找到,找不到时也可以在上面画图。
软件中,程序在编译正确后,下载方面出现了许多问题,如连接不上;不能生成hex文件等。其实这些问题,都是因为我们对软件不熟悉所造成的。在我们多次调试、链接之后,终于完成。
经过一周实习,是我对ARM系统有了更深刻的认识。因为前期大家都找工作的原因,我并没有特别认真的学习,而这次的实习,可以让我重新再次拿起课本,认真学习。并且使我感触最深的是,由于嵌入系统的广泛应用,我应该更好的去学习它、掌握它。像掌握办公自动化一样,成为必不可少的技术。
第三篇:ARM学习心得
ARM linux学习心得(zt)
2008-08-13 13:55
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。
这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。
第一,学习基本的裸机编程。
对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学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、linux kernel(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这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。
完成这一步你基本就学完了嵌入式linux的全部内容了。
还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。
记住,问题是学习的最好机会。
第四篇:ARM学习方法
ARM学习方法
一步一步学习uCOS和ARM体系结构的心得
学习必备条件:
1、一块开发板——例如44B0开发板,建议初学者不要去购买那些ARM9体系结构的,因为作为初学者来说ARM9体系的东西是很复杂的,买块ARM7的就可以了(先入门,然后再提高);
2、学习必备书籍
《Pointer on C》中文名字叫《C和指针》(美)里科|译者:徐波 前提你的了解C指针吧(这本书时非常经典的书籍,完全可以看中文版的,作者翻译的非常到位)
《嵌入式实时操作系统μCOS-II(第二版)》--邵贝贝翻译的(不能不承认邵贝贝是一个非常好的翻译者)
《μC/OS-Ⅱ标准教程》--杨宗德
对于英文不好的朋友可以购买《ARM体系结构与编程》--杜春蕾(该书其实还是有很多翻译错误的,大家在看的时候要注意一下,但是不可否认的是这本书到目前为止算得上是我见过最好的讲解关于ARM体系结构的书籍了)
对于英文过关的兄弟姐妹可以直接看
《ARM+Architecture+Reference+Manual(2nd+Edition)》
3、有条件的兄弟姐妹可以选购一个仿真器 JLINK V8全功能版(这个的感谢中国的优秀工程师,是他们把原价1999多的JLINK变成了几十元钱的东西
4、开发环境--MDK350或者IARARM
如果要熟悉这些开发环境,就需要好好读一些这些开发环境的手册资料,不好意思,这个就只有英文的了。
以上4个条件具备下来,可能也不会超过500元钱。
下面来讲讲我的学习经历:
我刚开始学习的时候,自己走了不少弯路,这里就省略不说了。
第一步:在开发板上跑跑简单程序
因为你有开发板,所以你就先在网上找一下对应开发板上的ARM芯片的datasheet,你都不先搞懂芯片的手册,又谈何让自己实现很多功能呢。
熟读数据手册后,就尽可能的在开发板上实现芯片对应的每个功能,像GPIO实验,UART通讯,I2C,ADC,DAC,PWM,RTC,SPI等等。自己写自己的程序,然后在开发板上好好实践一下。
当每个功能模块都实现以后,建议你让你的开发板实验一下多个功能复合使用,比如用UART打印出ADC的值什么的。
第二步:学习uCOS
鉴于你已经购买了《嵌入式实时操作系统μCOS-II(第二版)》,除开以下三个文件:
1、OS_CPU_C.c2、OS_CPU.H,3、OS_CPU_A.asm(这个是MDK环境下的汇编文件)或OS_CPU_A.a(这个是IAR开发环境下的汇编)
这三个文件的处理机制暂时可以不用先了解怎么做的,怎么移植的,以后再说
第一次读这本书时,搞清楚什么是任务,什么是前后台,为什么要在系统中加入嵌入式操作系统。
第二次读这本书时,详细了解他的TCB(Task Control Block)和ECB(Event Control
Block)的数据结构,搞清楚整个uCOS的实现机制(这里不要先就去看uCOS的移植,这样只会让你云里雾里的)
第三次读这本书是,详细了解信号量,互斥信号量、消息队列、邮箱和时间标志组
鉴于你又购买了《μC/OS-Ⅱ标准教程》,你 可以想在VC++ 6.0开发环境下实现对信号量,互斥信号量、消息队列、邮箱和事件标志组的上机实验代码。
如果还是不能了解uCOS怎么工作的,建议你多看几遍(我可是足足看了6、7遍了,书都翻得脱页了。汗说明我很笨,希望各位看官都比我聪明,呵呵)
第三步:建立对uCOS的初步认识
在网上下载对应你的开发板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(当然有的开发板已经提供了这样的基础实验)
在你的开发板上跑跑uCOS,建立起自己对于uCOS在ARM7开发板上的认识。
在你所购买的ARM7开发板上编写一个自己跑uCOS得任务(这里先不要去搞中断,初学者对于uCOS下的中断程序设计根本就搞不清楚)
第四步:熟悉ARM体系结构
因为是基于ARM7的移植,建议英文不好的去看看这本书《ARM体系结构与编程》(虽然这本书的作者在翻译时有很多操作,但是还是建议初学者去购买来好好看看),对于英文好的直接在网上下载《ARM+Architecture+Reference+Manual(2nd+Edition)》看就可以了
在看这个《ARM体系结构与编程》或
《ARM+Architecture+Reference+Manual(2nd+Edition)》时,务必注意多看几次,了解以下几个方面的知识:
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、异常模式及进入异常时ARM如何处理
4、一定能熟悉ARM中的汇编指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各个模式下,这些寄存器的映射。熟悉以后,再来自己做uCOS的移植了。
第五步:uCOS移植
当然在自己编写代码做移植uCOS之前,有必要看看别人的移植代码。
其实对于uCOS的移植,我们只需要编写关键的三个文件,文件如下:
1、OS_CPU_C.c(堆栈初始化操作OSTaskStkInit函数)
2、OS_CPU.H:完成在该芯片下的数据定义,比如什么unsigned char 之类的,注意一下OS_STK和OS_CPU_SR的定义,定义下关中断和开中断的方式,有三个只能选择1个,ARM芯片一般是定义为第三种方式
3、OS_CPU_A.asm(这个是MDK环境下的汇编文件)或OS_CPU_A.a(这个是IAR开发环境下的汇编),这个文件的内容就多了,要做以下几个函数的重写:
1、OSStartHighRdy函数
2、任务级的任务切换函数OSCtxSw,3、中断级的任务切换OSIntCtxSw,其实只要写好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的时候记者要把保存当前任务的寄存器去掉就可以了。第六步:测试自己的uCOS移植代码
第七步:在自己写的uCOS移植代码中跑跑任务。
[分享]ARM初学者学习ARM的步骤
很多人学完单片机就想学arm,但不知如何去学~现在列出一下学习这方面的步骤-----基于linux系统的学习步骤如下:(一步步来哦:)
其实这也只是个基础,以后实际做项目了还要去学很多
1、Linux 基础
安装Linux操作系统
Linux文件系统
Linux常用命令
Linux启动过程详解
熟悉Linux服务 能够独立安装Linux操作系统
能够熟练使用Linux系统的基本命令
认识Linux系统的常用服务 安装Linux操作系统
Linux基本命令实践
设置Linux环境变量
定制Linux的服务 Shell 编程基础使用vi编辑文件
使用Emacs编辑文件
使用其他编辑器
2、Shell 编程基础
Shell简介
认识后台程序
Bash编程熟悉Linux系统下的编辑环境
熟悉Linux下的各种Shell
熟练进行shell编程熟悉vi基本操作
熟悉Emacs的基本操作
比较不同shell的区别
编写一个测试服务器是否连通的shell脚本程序
编写一个查看进程是否存在的shell脚本程序
编写一个带有循环语句的shell脚本程序
3、Linux 下的 C 编程基础
linux C语言环境概述
Gcc使用方法
Gdb调试技术
Autoconf
Automake
Makefile
代码优化 熟悉Linux系统下的开发环境
熟悉Gcc编译器
熟悉Makefile规则编写Hello,World程序
使用 make命令编译程序
编写带有一个循环的程序
调试一个有问题的程序
4、嵌入式系统开发基础
嵌入式系统概述
交叉编译
配置TFTP服务
配置NFS服务
下载Bootloader和内核
嵌入式Linux应用软件开发流程
熟悉嵌入式系统概念以及开发流程
建立嵌入式系统开发环境制作cross_gcc工具链
编译并下载U-boot
编译并下载Linux内核
编译并下载Linux应用程序
4、嵌入式系统移植
Linux内核代码
平台相关代码分析
ARM平台介绍
平台移植的关键技术
移植Linux内核到 ARM平台 了解移植的概念
能够移植Linux内核移植Linux2.6内核到 ARM9开发板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念
嵌入式Linux应用软件开发流程
Linux系统的文件和设备
与文件相关的系统调用
配置超级终端和MiniCOM 能够熟悉进行串口通信熟悉文件I/O 编写串口通信程序
编写多串口通信程序
6、嵌入式系统中多进程程序设计
Linux系统进程概述
嵌入式系统的进程特点
进程操作
守护进程
相关的系统调用了解Linux系统中进程的概念
能够编写多进程程序编写多进程程序
编写一个守护进程程序
sleep系统调用任务管理、同步与通信 Linux任务概述 任务调度
管道
信号
共享内存
任务管理 API 了解Linux系统任务管理机制
熟悉进程间通信的几种方式
熟悉嵌入式Linux中的任务间同步与通信
编写一个简单的管道程序实现文件传输
编写一个使用共享内存的程序
7、嵌入式系统中多线程程序设计
线程的基础知识
多线程编程方法
线程应用中的同步问题了解线程的概念
能够编写简单的多线程程序编写一个多线程程序
8、嵌入式 Linux 网络编程
网络基础知识
嵌入式Linux中TCP/IP网络结构
socket 编程
常用 API函数
分析Ping命令的实现
基本UDP套接口编程
许可证管理
PPP协议
GPRS 了解嵌入式Linux网络体系结构
能够进行嵌入式Linux环境下的socket 编程
熟悉UDP协议、PPP协议
熟悉GPRS 使用socket 编写代理服务器
使用socket 编写路由器
编写许可证服务器
指出TCP和UDP的优缺点
编写一个web服务器
编写一个运行在 ARM平台的网络播放器
9、GUI 程序开发
GUI基础
嵌入式系统GUI类型
编译QT
进行QT开发熟悉嵌入式系统常用的GUI
能够进行QT编程使用QT编写“Hello,World”程序调试一个加入信号/槽的实例
通过重载QWidget 类方法处理事件
10、Linux 字符设备驱动程序
设备驱动程序基础知识
Linux系统的模块
字符设备驱动分析
fs_operation结构
加载驱动程序了解设备驱动程序的概念
了解Linux字符设备驱动程序结构
能够编写字符设备驱动程序编写Skull驱动
编写键盘驱动
编写I/O驱动
分析一个看门狗驱动程序
对比Linux2.6内核与2.4内核中字符设备驱动的不同 Linux 块设备驱动程序块设备驱动程序工作原理
典型的块设备驱动程序分析
块设备的读写请求队列了解Linux块设备驱动程序结构
能够编写简单的块设备驱动程序比较字符设备与块设备的异同编写MMC卡驱动程序
分析一个文件系统
对比Linux2.6内核与2.4内核中块设备驱动的不同
11、文件系统
虚拟文件系统
文件系统的建立
ramfs内存文件系统
proc文件系统
devfs 文件系统
MTD技术简介
MTD块设备初始化
MTD块设备的读写操作了解Linux系统的文件系统了解嵌入式Linux的文件系统
了解MTD技术
能够编写简单的文件系统为 ARM9开发板添加 MTD支持移植JFFS2文件系统
通过proc文件系统修改操作系统参数
分析romfs 文件系统源代码
创建一个cramfs 文件系统
第五篇:arm对讲机报告
《嵌入式实训课》 课程设计报告
设计题目: 基于ARM的网络对讲机
专 业 电子信息科学与技术 班 级 091 学 号 200916022118 学生姓名 大石头
2012年 6 月 10 日
摘要
语音对讲系统是现代智能化服务的一个重要组成部分,它对于提高社会高效率和方便还有安全监控力度提高,在现代社会语音对讲机在小区等一些工程中高效率的提高的人们方便和减轻了很多事情的工作量。本设计首先是用网线使用UDP协议将两个ARM机连接起来,通过麦克风传递给dev/dsp声卡的数据然后通过网线传送到另外一台ARM机的接收端通过dev/dsp声卡播放来实现对讲的功能。由这样的思路来实现对讲机的功能。
目录
一、前言...................................................................................................................4
二、系统的总体设计.................................................................................................4(一)功能描述.....................................................................................................4(二)系统基本功能图..........................................................................................5
三、相关技术综述.....................................................................................................5(一)Linux操作系统...........................................................................................5 1.Linux的历史...........................................................................................5 2.Linux具有以下一些特点:......................................................................6(二)声卡驱动.....................................................................................................7(三)(四)
四、(一)(二)(三)(四)UDP协议.....................................................................................................8 Socket套接字.............................................................................................9 SamSung公司s3c6410微处理器简介...........................................................9 SamSung公司s3c6410微处理器功能特性...................................................11 系统设计器件.............................................................................................11 电源及复位电路........................................................................................12 系统的硬件设计.................................................................................................9 3.电源电路...............................................................................................12 4.复位电路...............................................................................................12(五)系统时钟电路............................................................................................13(六)(七)系统存储器电路........................................................................................14 IIS数字音频电路.....................................................................................15 5.下面是WM9714芯片和音频线路输入的原理图:.....................................16 6.下图是mic座原理图:..........................................................................17 7.下图为MIC输入座的俯视图:................................................................17(八)网卡电路...................................................................................................17
五、系统的软件设计...............................................................................................19(一)总体设计流程图........................................................................................19(二)(三)(四)声卡部分...................................................................................................19 网络连接部分............................................................................................22 总体部分...................................................................................................23
六、系统测试..........................................................................................................24(一)Linux系统移植安装..................................................................................24(二)(三)七、八、九、交叉编译环境搭建.....................................................................................24 声卡的初始化参数.....................................................................................24 参考文献..........................................................................................................24 总结与心得体会...............................................................................................25 致谢.................................................................................................................26
一、前言
对讲机对大家来说一点也不陌生。现在小区和写字楼很多场所的保安人员都佩戴有对讲机。它给我们的日常生活带来了便利。对讲机的英文名称是 two way radio,它是一种双向移动通信工具,在不需要任何网络支持的情况下,就可以通话,没有话费产生,适用于相对固定且频繁通过话的场合。对讲机已经有很长的一段历史了,大部分的对讲机是基于模拟电路的集成芯片技术。功能比较单一,价格也不菲。今天我们设计的对讲机是应用了现在主流处理器arm的技术。
首先,我们在arm开发板烧入了linux系统,在开发的时候无论是系统还是代码,都增加了可移植性。另外便于扩展我们目前没考虑后期需要的模块。比如,pc对各个对讲机的数据监控,lcd显示等等。Arm的开发灵活的特点让这些都变成了可能。另外,从经济方面来看,现在arm芯片的价格相对来说也不高,在市场方面带来价格上的优势。
二、系统的总体设计
(一)功能描述
在6410开发板上写入linux系统后,对dev/dsp声卡进行编写程序。程序分为录音,放音,网络数据传输等几部分。首先,第一块arm(以后称为arm1)在按键按下的情况下,麦克风工作,此时对声卡进行读写,并将数据经网路传给另一块arm(以后成为arm2,设计过程中用pc代替)。此时如果arm2的按键没有按下的情况下将网络传过来的数据写入声卡,此时喇叭发出声音。相对的过程同上依次重复下去
4(二)系统基本功能图
三、相关技术综述
(一)Linux操作系统
1.Linux的历史
Linux它起源于Unix。是一种可自由发布的、多用户、多任务的优秀操作系统。
UNIX稳定性高、可扩展性强,在金融、电信、能源等一些关键性部门得到广泛的应用。
1991年,芬兰赫尔辛基大学的学生Linus Torvalds,受Minix系统的启发,推出一个新的UNIX的变种。他给Internet上的新闻组comp.os.minix发了一封信,声称其开发了一个免费的操作系统,并欢迎其他的开发者研究他的工作、提出修改意见。
在芬兰最大的FTP站点上,Linus建立了一个名为Linux的目录存放他的源文件,意思是“Linus的Minix”,于是,Linux就这样被命名了。
许多程序员获得了Linux的源代码。随着他们不断将原商用UNIX的特性和产品加入到Linux中来,Linux不断发展壮大,到现在为止,已成为具有全部UNIX特征的操作系统。
2.Linux具有以下一些特点:
(1)兼容UNIX:Linux是UNIX的完整的实现,它混合了BSD UNIX和System V这两个UNIX版本的最优良的特性。UNIX中的绝大多数命令都可以在Linux中找到、并有所加强;其可靠性、稳定性、以及强大的网络功能也得到体现。
(2)价格低廉:是一种免费的、公开源码的自由软件。它是根据GNU通用公共许可证(GNU General Public License,GPL)发布的。
根据GPL,用户可以改变任何源代码,甚至可以销售Linux。但有一个前提,如果以盈利为目的,则必须提供系统的源代码,以便其他人也能进一步的修改并销售。
Linux是由志愿者免费开发和维护的,甚至Linux下的许多应用软件都是根据GPL发布的、免费的自由软件。用户只需花费下载费用,完全可以搭建一套全免费的、与商用系统性能相当的系统。
(3)强大的网络功能: Linux的开发是通过Internet进行的,支持网络的功能在开发的早期就已经加入了。
6(4)可靠性好:比Windows更可靠。
Linux对应用程序使用的内存进行了保护,应用程序无法访问系统分配的区域以外的其他内存,因此,一个软件的错误操作不会造成整个系统的瘫痪(在Windows系统中经常出现的)。
在安全方面,由于源码被公开,可消除系统中是否有“后门”的疑惑。而且,由于一旦发现漏洞就可以马上修改源代码,所以安全性要远高于Windows系统。
(5)可移植性好:Linux几乎可以运行在任何的计算机系统之上。
(二)声卡驱动
声卡驱动程序提供的/dev/dsp 是用于数字采样(sampling)和数字录音(recording)的设备文件,它对于Linux下的音频编程来讲非常重要:向该设备写数据即意味着激活声卡上的D/A转换器进行放音,而向该设备读数据则意味 着激活声卡上的A/D 转换器进行录音。目前许多声卡都提供有多个数字采样设备,它们在Linux下可以通过/dev/dsp1 等设备文件进行访问。
DSP是数字信号处理器(Digital Signal Processor)的简称,它是用来进行数字信号处理的特殊芯片,声卡使用它来实现模拟信号和数字信号的转换。声卡中的DSP设备实际上包含两个组成部分:在以只读方式打开时,能够使用A/D 转换器进行声音的输入;而在以只写方式打开时,则能够使用D/A转换器进行声音的输出。严格说来,Linux下的应用程序要么以只读方式打开/dev/dsp 输入声音,要么以只写方式打开/dev/dsp 输出声音,但事实上某些声卡驱动程序仍允许以读写的方式打开/dev/dsp,以便同时进行声音的输入和输出,这对于某些应用场合(如IP 电话)来讲是非常关键的。
在从DSP设备读取数据时,从声卡输入的模拟信号经过A/D 转换器变成数字采样后的样本(sample),保存在声卡驱动程序的内核缓冲区中,当应用程序通过read 系统调用从声卡读取数据时,保存在内核缓冲区中的数字采样结果将 被复制到应用程序所指定的用户缓冲区中。需要指出的是,声卡采样频率是由内核中的驱动程序所决定的,而不取决于应用程序从声卡读取数据的速度。如果应用程序读取数据的速度过慢,以致低于声卡的采样频率,那么多余的数据将会被丢弃;如果读取数据的速度过快,以致高于声卡的采样频率,那么声卡驱动程序将会阻塞那些请求数据的应用程序,直到新的数据到来为止。
在向DSP设备写入数据时,数字信号会经过D/A转换器变成模拟信号,然后产生出声音。应用程序写入数据的速度
同样应该与声卡的采样频率相匹配,否则过慢的话会产生声音暂停或者停顿的现象,过快的话又会被内核中的声
卡驱动程序阻塞,直到硬件有能力处理新的数据为止。与其它设备有所不同,声卡通常不会支持非阻塞(non-blocking)的I/O 操作。
无论是从声卡读取数据,或是向声卡写入数据,事实上都具有特定的格式(format),默认为8 位无符号数据、单声道、8KHz采样率,如果默认值无法达到要求,可以通过ioctl 系统调用来改变它们。通常说来,在应用程序中打 开设备文件/dev/dsp 之后,接下去就应该为其设置恰当的格式,然后才能从声卡读取或者写入数据。
(三)UDP协议
UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协 8 议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
(四)Socket套接字
套接字(socket)是套接口描述字的简称。和文件句柄相似,SOCKET提供了一种通讯机制,是linux的一种通讯方式。应用程序创建了一个套接字后,就能够获得这种机制提供的网络服务功能。对于服务器来说,它提供了监听网络的连接请求;对于客户机来说,它可以连接到一个给定的主计算机和特定的端口上。客户端和服务器端可以通过套接字对象来发送和接收数据。套接字提供了分别基于连接的协议(TCP)等和无连接的协议(UDP)等,以满足网络连接的可靠性、稳定性以及高速性的要求。
四、系统的硬件设计
(一)SamSung公司s3c6410微处理器简介
随着微电子技术的快速发展,ARM处理器经历了包括ARM7、ARM9在内的多个发展历程,而ARM11的成熟应用必将为嵌入式的发展带来新的活力,使更高端的产品应用成为可能。
与ARM9的5级流水线相比,ARM11拥有一条具有独立的load-store和算术 流水的8级流水线,在同样工艺下,ARM11处理器的性能与ARM9相比大约提高 了40%。ARM11执行ARMv6架构的指令,ARMv6指令包含了针对媒体处理的单指令流多数据流(SIMD)扩展,采用特殊的设计,以改善视频处理性能。为了能够进行快速浮点运算,ARM11增加了向量浮点单元。所有这些结构上的提高,都是ARM9处理器不可比拟的。
ARM11为便携式和无线应用,提供了从未有过的高超性能,并且使我们主要关心的成本和功耗减到最小。ARM11的微架构保证了系统性能可以从基本的350-500MHz范围扩展到最终的1GHz以上。其微架构的高效率表现,允许开发者根据不同的应用来调节时钟频率和电源电压,从而在性能和功耗之间达到最佳的折衷。例如,一个基于ARM11的微架构的处理器在1.2V工作电压下,使用0.13um工艺实现,其功率将不会超过0.4mW/MHz。
ARM11微处理器是一种高性能、低功耗的‘准64位’微处理器!对于目前大多数嵌入式应用,一个真正的64位处理器仍然被认为是不必要的,其巨大的功耗和面积让人难以接受。对此,ARM11选择了一个折中的方案,以较小的代价,部分实现了一个64位微架构。ARM11只在处理器整数单位和高速缓存之间,以及在整数单位和协处理器之间实现了64位数据总线。这些64位数据道路允许处理器在一个时钟周期中同时获取两条指令,还允许在一个时钟周期执行多个数据读写指令。这使得ARM11在执行很多特定序列的代码时能够达到非常高的性能,特别是那些允许数据搬移与数据处理并行处理的代码序列。
S3C6410是由三星公司推出的一款低功耗、高性价比的RSIC处理器,它基于ARM11内核(ARM1176JZF-S),可广泛应用于移动电话和通用处理等领域;S3C6410为2.5G和3G通信服务提供了优化的硬件性能,内置强大的硬件加速器:包括运动视频处理、音频处理、2D加速、显示处理和缩放等;集成了一个MFC(Multi-Format video Codec)支持MPEG4 /H.263/H.264编解码和VC1的解码,能够提供实时的视频会议以及NRSC和PAL制式的TV输出;除此之外,该处理器内置一个采用最先进技术的3D加速器,支持OpenGL ES 1.1/ 2.0和D3DMAPI,能实现4M triangles/s的3D加速;同时,S3C6410包含了优化的外部存储器接口,该接口能满足在高端通信服务中的数据带宽要求。由于以上突出的性能表现,10 著名的苹果公司手机IPHONE就是基于S3C6410处理器。
(二)SamSung公司s3c6410微处理器功能特性
S3C6410 是一个 16/32 位 RISC 微处理器,旨在提供一个具有成本效益、功耗低,性能高的应用处理器解决方案,像移动电话和一般的应用。它为 2.5G 和 3G 通信服务提供优化的 H /W 性能,S3C6410 采用了64/32 位内部总线架构。该 64/32 位内部总线结构由 AXI、AHB 和 APB 总线组成。它还包括许多强大的硬件加速器,像视频处理,音频处理,二维图形,显示操作和缩放。一个集成的多格式编解码器(MFC)支持 MPEG4/H.263/H.264 编码、译码以及 VC1 的解码。这个 H/W 编码器/解码器支持实时视频会议和 NTSC、PAL 模式的 TV 输出。
S3C6410 有一个优化的接口连线到外部存储器。存储器系统具有双重外部存储器端口、DRAM 和 FLASH /ROM/ DRAM 端口。DRAM 的端口可以配置为支持移动 DDR,DDR,移动 SDRAM 和 SDRAM。FLASH/ROM/DRAM端口支持 NOR-FLASH,NAND-FLASH,ONENAND,CF,ROM 类型外部存储器和移动 DDR,DDR,移动 SDRAM 和SDRAM。
为减少系统总成本和提高整体功能,S3C6410 包括许多硬件外设,如一个相机接口,TFT 24 位真彩色液晶显示控制器,系统管理器(电源管理等),4 通道 UART,32 通道 DMA,4 通道定时器,通用的 I/O 端口,IIS 总线接口,IIC 总线接口,USB 主设备,在高速(480 MB/S)时 USB OTG 操作,SD 主设备和高速多媒体卡接口、用于产生时钟的 PLL。
S3C6410 提供了丰富的内部设备,下面我们从它的整体特性、多媒体加速特性、视频接口、USB 特征、存储器设备、系统外设以及它的系统管理等方面来详细的介绍 S3C6410 处理器的特性
(三)系统设计器件
Samsung S3C6410处理器
256M字节NAND Flash(SLC)
12MHz、48MHz、27MHz、32.768KHz时钟源;
1个100M网口,采用DM9000AE,带连接和传输指示灯
2个3.5MM标准立体声音频插座。其中包括1个音频输出插座,可与耳机连接;1个话筒输入插座。另有插针形式提供了Line In(四)电源及复位电路
3.电源电路
4.复位电路
系统复位按键使用轻触开关,复位芯片选择MAX811t,专业复位芯片可保证系统的稳定可靠。
复位芯片MAX811设计原理图如下:
(五)系统时钟电路 主晶振(12MHZ)原理图:
网卡晶振原理图:
(六)系统存储器电路
使用了256M Bytes NAND FLASH,型号为K9F2G08U0B(另有MLC结构2G Bytes NAND FLASH的K9GAG08U0D供用户选择),片选信号使用CSn2。NAND FLASH 存储器主要用于存放内核代码、应用程序、文件系统和数据资料。
NAND FLASH设计原理图:
(七)IIS数字音频电路
音频功能使用S3C6410处理器的AC97总线。外接WM9714音频芯片,实现集成音频输出、Line in输入和Mic输入功能。音频输出和MIC输入以及LINE IN均采用标准音频插座。
5.下面是WM9714芯片和音频线路输入的原理图:
6.下图是mic座原理图:
7.下图为MIC输入座的俯视图:
(八)网卡电路
我们在系统集成一个100M以太网接口,通过DM9000AE芯片来扩展。在开发过程中,以太网接口可以用来连接PC机下载文件;在Linux的系统开发时,可以用来挂载NFS网络文件系统。使用时,需通过交叉网线直接连接PC机,也可以使用直连网线连接交换机或路由器。
DM9000AE设计原理图如下:
五、系统的软件设计
(一)总体设计流程图
(二)声卡部分
对声卡进行编程时首先要做的是打开与之对应的硬件设备,这是借助于open系统调用来完成的,并且一般情况下使用的是/dev/dsp 文件。采用何种模 19 式对声卡进行操作也必须在打开设备时指定,对于不支持全双工的声卡来说,应该使用只读或者只写的方式打开,只有那些支持全双工的声卡,才能以读写的方式打开,并且还要依赖于驱动程序的具体实现。Linux允许应用程序多次打开或者关闭与声卡对应的设备文件,从而能够很方便地在放音状态和录音状态之间进行切换,建议在进行音频编程时只要有可能就尽量使用只读或者只写的方式打开设备文件,因为这样不仅能够充分利用声卡的硬件资源,而且还有利于驱动程序的优化。下面的代码示范了如何以可写可读方式打开声卡进行放音(playback)操作:
fd = open(“/dev/dsp”, O_RDWR);
if(fd < 0)
{
perror(“open of /dev/dsp failed”);
exit(1);
}
运行在Linux内核中的声卡驱动程序专门维护了一个缓冲区,其大小会影响到放音和录音时的效果,使用ioctl 系统调用可以对它的尺寸进行恰当的设置。调节驱动程序中缓冲区大小的操作不是必须的,如果没有特殊的要求,一般采用默认的缓冲区大小也就可以了。但需要注意的是,缓冲区大小的设置通常应紧跟在设备文件打开之后,这是因为对声卡的其它操作有可能会导致驱动程序无法再修改其缓冲区的大小。下面的代码示范了怎样设置声卡驱动程序中的内核缓冲区的大小:
#define LENGTH 3 /* 存储秒数 */ #define RATE 8000 /* 采样频率 */ #define SIZE 8 /* 量化位数 */ #define CHANNELS 1 /* 声道数目 */ /* 用于保存数字音频数据的内存缓冲区 */ unsigned char msg[LENGTH*RATE*SIZE*CHANNELS/8];
接下来要做的是设置声卡工作时的声道(channel)数目,根据硬件设备和驱动程序的具体情况,可以将其设置为0(单声道,mono)或者1(立体声,stereo)。下面的代码示范了应该怎样设置声道数目:
arg = CHANNELS;
status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
if(status ==-1)
perror(“SOUND_PCM_WRITE_CHANNELS ioctl failed”);
if(arg!= CHANNELS)
perror(“unable to set number of channels”);
采样格式和采样频率是在进行音频编程时需要考虑的另一个问题,声卡支持的所有采样格式可以在头文件soundcard.h 中找到,而通过ioctl 系统调用则可以很方便地更改当前所使用的采样格式。下面的代码示范了如何设置声卡的量化位数:
/* 设置采样时的量化位数 */ arg = SIZE;
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
if(status ==-1)
perror(“SOUND_PCM_WRITE_BITS ioctl failed”);
if(arg!= SIZE)
perror(“unable to set sample size”);
声卡采样频率的设置也非常容易,只需在调用ioctl 时将第二个参数的值设置为SNDCTL_DSP_SPEED,同时在第三个参数中指定采样频率的数值就行了。对于大多数声卡来说,其支持的采样频率范围一般为5kHz到44.1kHz 或者48kHz,但并不意味着该范围内的所有频率都会被硬件支持,在Linux下进行音频编程时最常用到的几种采样频率是11025Hz、16000Hz、22050Hz、32000Hz和44100Hz。下面的代码示范了如何设置声卡的采样频率:
/* 设置采样时的采样频率 */ arg = RATE;
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
if(status ==-1)
perror(“SOUND_PCM_WRITE_WRITE ioctl failed”);
(三)网络连接部分 Socket套接字初始化:
addr_len=sizeof(struct sockaddr_in);bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(REMOTEPORT);addr.sin_addr.s_addr=inet_addr(REMOTEIP);
(四)总体部分 客户端:
从声卡读取声音信号放到缓存中
status = read(fd, msg, sizeof(msg));
if(status!= sizeof(msg))
perror(“read wrong number of bytes”);将缓存中的数组发到服务端:
sendto(s,msg,sizeof(msg),0,&addr,addr_len);
服务端:
从客户端接收数据:
len= recvfrom(mysock,msg,sizeof(msg),0,&addr,&addr_len);将接收的数据写入声卡,声音回放
status = write(fd, msg, sizeof(msg));/* 回放 */
if(status!= sizeof(msg))
perror(“wrote wrong number of bytes”);
六、系统测试
(一)Linux系统移植安装
我们在成功试验时使用了ubuntu10.4版本。之前曾经尝试过很多版本的linux,由于无法安装dsp驱动不得一次又一次的装系统,在这个阶段花费了很长一段时间。
(二)交叉编译环境搭建
由于在开发主机上安装的交叉编译器与arm里面烧写的linux版本不对应,造成开发调试的程序无法正常运行。经过访问论坛找到合适版本的交叉编译器。问题得到了解决。
(三)声卡的初始化参数
读写声卡,要有特定的格式(format),默认为8 位无符号数据、单声道、8KHz采样率。虽然默认值可以达到我们pc机的要求,但是默认值无法达到我们开发板的要求。在开发过程中,开发板部分噪声特别大。严重影响产品效果。
我们翻阅了资料,得知可以通过ioctl 系统调用来改变它们。在不断的调试中,不断地得到老师的帮助。我们最终得到了我们的理想音质效果。
七、参考文献
[1]孙琼.嵌入式Li舢x应用程序开发详解.北京:人民邮电出版社,2007.9 [2]马忠梅.ARM&Linux嵌入式系统教程.北京:北京航空航天大学出版社,2004 [3]于明.范书瑞.曾祥烨.ARM9嵌入式系统设计与开发教程.北京:电子工业 出版社.2006 24 [4]张景璐.ARM9嵌入式系统设计与应用案例.北京:中国电力出版社.2008 [5]李亚锋.ARM嵌入式Linux设备驱动实例开发.北京:中国电力出版 社.2008 [6]张琦文.谢建雄.谢劲心.ARM嵌入式常用模块与综合系统设计实例精讲. 北京:电子工业出版社.2006 [7]孙秋野.孙凯.冯健.ARM嵌入式系统开发典型模块.北京:人民邮电出版 社.2007 [8]封景刚.吴宝江.ARM嵌入式系统开发完全入门与主流实践.北京:电子 工业出版社.2008 [9]田泽.ARM9嵌入式Linux开发实验与实践.北京:北京航空航天大学出 版社.2006 [10]华清远见嵌入式培训中心.嵌入式Linux C语言应用程序设计.北京: 人民邮电出版社出版社.2007 [11]冯国进.嵌入式Linux驱动程序设计从入门到精通.北京:清华大学出 版社.2008 [12]罗苑棠.杨宗德.嵌入式Linux应用系统开发实例精讲.北京:电子工业 出版社.2007 [13]杨树青,王欢.Linux环境下C编程指南.北京:清华大学出版社,2007 [14]李俊.嵌入式Linux设备驱动开发详解.北京:人民邮电出版社,2008 [15] 龙跃.基于嵌入式系统的网络音响设计与实现.华中科技大学硕士论 文,2007 [16]陈莉君.Linux操作系统内核分析.北京:人民邮电出版社,2000 [17J卢军.Linux 0.Ol内核分析与操作系统设计:创造你自己的操作系统. 北京:清华大学出版社,2004
八、总结与心得体会
这次设计有很重要的意义,而且任务很重,但在这次设计中也学到了很多以前课堂没有的知识。虽然之前有学过有关于ARM方面的知识,不过到实际用的时 25 候发现了很多问题存在,不免有很大的压力。
这是我们大学重要的设计之一;我们仔细阅读老师给的资料,并按照实验步骤进行,尽管如此但在实践过程中还是遇到了很多的问题,不过经过指导老师的细心讲解,让我学到了很多东西。有些之前我们学过的知识要点,不过有一段时间间隔了,很多的知识要点有不同程度的遗忘,我们通过网络所搜,和同学一起讨论问题。时间过得很快,短短两周工程训练;在这两周时间里,我学到了很多东西,对于linux操作系统,以前了解过一些这方面的知识,但并没有实践过;安装ubuntu软件的时候,出现了系统卡机;在这次工程训练中安装交叉编译环境让我有很大的压力,遇到了很多的问题,在网上也查了很多的资料,最后是在同学的帮助下完成的。安装完成编译环境后,设置共享文件时出现了问题,而且连U盘都不能在linux系统中读出来,开始的时候并不知道怎么样设置共享,我试图使用网络传输。不过后来,在同学的指导下完成了设置共享文件,真的很感谢那位同学。使用ARM开发板的时候,挂接U盘,一开始不知道怎们样把U盘中的文件拷贝到开发板上,后来在知道里面搜索到了,相关的指令;在这次工程训练中让我受益非浅。功放电路的制作并不是很难,但放出来的音效并不是很理想,我试图通过改变电路的参数改善音频效果,但效果并不是很理想,可能是初始化设置参数的缘故。
在这次工程训练中学到了很多,更多的了解到了有关于ARM11方面的知识;学会了独立思考,独立解决问题;通过和同学交流,共同学习,共同进步;同时也了解到了怎样更好的通过网络查找自己需要的资料,在这次设计中由于时间原因,没有实现同步发送。还有初始化不太准确造成有噪声
九、致谢
首先感谢的是我的老师殷群老师,殷老师的学术感染力使我受益匪浅,在这学年当中,我得到了殷老师始终如一的指导、关心和照顾。殷老师学识渊博,治学严谨,在这学年的学习中,事无巨细,殷老师都能给我最细致和耐心的指导,生活中,殷老师的和善豁达,平易近人的作风也为我如何待人接物,为人处事做 了最好的诠释,其人格魅力也无形而有力的指引着我做人做事的方式,为我在以后的工作学习中树立了榜样。