ARM学习法Word下载.docx
- 文档编号:21721003
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:10
- 大小:29.78KB
ARM学习法Word下载.docx
《ARM学习法Word下载.docx》由会员分享,可在线阅读,更多相关《ARM学习法Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
学习uCOS
鉴于你已经购买了《嵌入式实时操作系统μCOS-II(第二版)》,除开以下三个文件:
1、OS_CPU_C.c2、OS_CPU.H,3、OS_CPU_A.asm(这个是MDK环境下的汇编文件)或OS_CPU_A.a(这个是IAR开发环境下的汇编)
这三个文件的处理机制暂时可以不用先了解怎么做的,怎么移植的,以后再说
第一次读这本书时,搞清楚什么是任务,什么是前后台,为什么要在系统中加入嵌入式操作系统。
第二次读这本书时,详细了解他的TCB(TaskControlBlock)和ECB(EventControlBlock)的数据结构,搞清楚整个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:
完成在该芯片下的数据定义,比如什么unsignedchar之类的,注意一下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编程基础
linuxC语言环境概述/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文件系统
009-08-1600:
55ARM初学者必读
本文是写给准备学习ARM技术,而又没想好要学ARM7还是ARM9或者对ARM7与ARM9的区别不是很了解的初学者。
希望本文对你们有点用处。
由于职业的关系,经常会回答一些ARM初学者的问题,虽然问题千奇百怪,但以下两个问题绝对很有代表性。
1.ARM7和ARM9的都有些什么区别?
2.我准备学ARM,但不知是选ARM7还是ARM9好?
也许这些问题在大虾们的眼里已不是问题,但对于初学者确实很具必要弄清楚。
先说下:
ARM7和ARM9的区别。
1时钟频率的提高
虽然ARM7和ARM9内河架构相同,但ARM7处理器采用3级流水线的冯·
诺伊曼结构;
,而ARM9采用5级流水线的哈佛结构。
增加的流水线设计提高了时钟频率和并行处理能力。
5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。
在常用的芯片生产工艺下,ARM7一般运行在100MHz左右,而ARM9E则至少在200MHz以上。
2.MMU(内存管理单元)
ARM7一般没有MMU(内存管理单元),(ARM720T有MMU)。
ARM9一般是有MMU的,ARM9940T只有MPU,不是一个完整的MMU。
这一条很重要,MMU单元是大型操作系统必需的硬件支持,如LINUX;
WINCE等。
这就是说,ARM7一般只能运行小型的实时系统如UCOS-II,eCOS等,而ARM9无此限制,一般的操作系统都可以移植。
其实即使ARM720T能支持LINUX;
WINCE等系统,也鲜有人用,因为以ARM7的运行速度跑这种大型操作系统,实在有点吃力。
再者两者的应用领域明显不同,也无此必要。
4.ARM7比ARM9提供了更好的性能-功耗比。
它包含了THUMB指令集快速乘法指令和ICE调试技术的内核。
5.在从ARM7到ARM9的平台转变过程中,有一件事情是非常值得庆幸的,即ARM9E能够完全地向后兼容ARM7上的软件;
并且开发人员面对的编程模型和架构基础也保持一致。
在来说一下初学者是选ARM7还是ARM9。
1.明确目的
学习为应用。
你学ARM准备用在什么地方,如果是一般性控制系统或仅仅用来替换8获16位机,ARM7显然是首选;
但如果用在网络通信或大型的音视频处理等,则ARM9较合适。
2.自身基础
学习ARM的一般有三类人:
一是计算机专业的
这类人对操作系统等软件知识了解较多,而对硬件知识知之甚少,显然这类人学ARM的话还是做软件好,可以基于LINUX;
WINCE等操作系统的ARM9更能符合这类人的要求,当然也有很多计算机专业的人从事ARM7系统的应用软件编写的。
但是搞底层的就很少了。
二是电子类专业的
这类人的硬件基础了相对较好,相反操作系统,数据库等软件知识则差强人意。
因此人多电子专业的人员都熟悉单片机,用单片编写点小程序还不在话下,但要用ARM做较大型的软件则有点力不从心。
尤其是LINUX;
WINCE这种操作系统不是三两个月能轻松搞定的。
建议这类人员如无特别需要还是从ARM7和小型操作系统学起。
够用就好,不要盲目追求高端。
有一点要注意并不是从事ARM9的就比ARM7工资高,反而ARM7的就业机会比ARM9多,这很好理解,好比金字塔,越往顶肯越小。
三是软硬件基础都不太好的
这类人员有确实需要的,也有赶时髦的,如无大的学习决心还是参加培训的好。
当然也可曲线救国,搞懂单片机后,ARM7就不难了。
最后说一点关于开发板的,初学者买个开发板确实很有必要,但也要选择合适的,初学者合适的就是,资料齐全,有配套教程和学习指导,再加上较及时的技术支持。
目前能做到的很少,开发板这东西不是说哪家公司有名气,售后就好,很多大公司一般不理个人买家的问题的,我感觉多半是运气,运气好了也许能碰到一家售后好的
嵌入式学习步骤
嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。
只要我们用心去对待,冬雪终将化去,春风定会吹来。
具体步骤如下:
1、《C语言》第二版谭浩强;
《C程序设计语言》第二版徐宝文译机械工业出版社
你能区分开指针数组和数组指针吗?
你知道函数指针吗?
你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗?
2、《数据结构》C语言版 黄国愉、叶乃青编 清华大学出版社
你能合上书本,用C语言实现书中的单链表、双链表数据结构吗?
3、《实用C++程序设计》第二板中国电力出版社Steve_Oualline著
此阶段主要是学习其面向对象的编程思想,加深对C语言和数据结构的理解。
4、学习单片机,最好能找个前辈带一带。
你能用51单片机做出一样实际的东西吗?
即使它再简单!
要注意加深对中断的理解。
5、学习ARM单片机。
(1)、细读《ARM微控制器基础与实战》周立工编写(注:
即使你不用书中的开发板)
(2)、细读相关芯片的原版英文文档。
如:
arm920TE.pdf S3C2410_1.2.pdf
6、学习uCOS!
!
操作系统。
(1)、细读《嵌入式实时操作系统uC/OS-!
》第二版 召贝贝译
你能把uCOS!
移植到自己的平台上吗?
(2)、能编写在uCOS!
操作系统环境下运行的针对具体硬件的驱动程序
7、熟悉Linux环境,学习Linux环境编程,学习交叉编程
(1)、细读《linux命令大全.pdf》
(2)、细读《GNUMake使用手册(中译版).pdf》
(3)、学习创建交叉编程环境.
8、学习Linux操作系统。
(1)、《UNIX环境高级编程》
(2)、细读“joyfire笔记”,可在“”网站的好书下载栏目获取
(3)、细读《linux内核完全注释》
(4)、细读《understandingthelinuxkernel2》
(5)、利用源代码阅读利器工具"SourceInsight"进行真正的linux内核原码刨析
(6)、最后进行内核移植,并能编写在linux操作系统环境下运行的针对具体硬件的驱动程序
9、学习Linux设备驱动编写。
可参考《Linux设备驱动程序》
10、复习C++,学习用QT进行图形界面编程
(1)、细读《QT编程宝典》
(2)、学会通过查看QT电子文档进行QTGUI实地编程
(3)、学习交叉编程.(其实就是把命令qmake变为tmake)
11、当然,你也可学习一下PCB的制作和设计一个自己的CPU(即软壳)
在嵌入式软件方面最重要的课程包括:
(1)嵌入式微处理器结构与应用:
这是一门嵌入式硬件基础课程,我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口技术有充分了解,包括ARM的汇编指令系统。
若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?
很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书(xxxSpecification),你必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。
有些同学觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因。
还有同学对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。
其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。
一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C语言代码。
在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。
特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前还会用到汇编写程序的,尽管用到的机会相对C要小得多。
当你在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时你就必须看懂汇编程序,否则软硬件人员可能就无法交流。
很多嵌入式职位招聘时都要求熟悉汇编。
[小知识]目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola68K、ColdFire(冷火)等,但ARM占据了绝对主流(有资料说手机中几乎90%都是ARM处理器)。
ARM是一个只卖知识产权的公司,目前获得购买了ARMCPU核授权许可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他们都在ARMCPU核的基础上进行了一些外围扩展,形成自己的处理器(如SamsungS3C2410,Motorolai.MXL9328等处理器都是采用ARM9内核,指令一级是相同的)。
而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于SamsungS3C2410的开发板,供最终用户使用或供教学实验。
在ARM这个食物链上,ARM公司是大鱼,Intel、Samsung等公司是小鱼,而华恒等则是虾米,最终用户(我们这些要采购嵌入式开发板的)则是喂虾米的。
Intel早期生产的是低端ARM(StrongARM,相当于ARM7),现在转向主要生产高端ARM(即IntelXscale处理器,属于ARMv5家族,主要用在高端PDA上,如HP和DELL生产的PDA都采用IntelXscale,价格较高)。
目前应用最多的是ARM7和ARM9两类处理器。
ARM7较便宜,可跑uclinux(是一个不支持高级内存管理功能的嵌入式Linux系统统)、Vxworks、uc/osII等实时操作系统,但因处理器不带内存管理单元MMU(无内存分页和地址映射机制,所以不能使用虚拟内存),所以不能跑WindowsCE,另外通用Linux中的某些内存管理功能也不能用在ARM7上。
ARM9大都是一个带MMU功能的高端处理器,可跑WinCE或通用Linux的大多数功能。
ARM7和ARM9的区别是在与体系结构上,前者是冯·
诺伊曼结构,后者是哈佛结构——指令和数据总线是分开的。
以上是我的一点了解,可能有不对的地方。
我们学院有十几套ARM7开发系统(采用SamsungS3C44b0x开发板,主要用于嵌入式处理器结构、实时操作系统等课程实验用),ARM9的系统好象也已经到了(采用的芯片我不知道也没去问),还有以前的十几套MPC860开发板(听说价格都很贵,很容易损坏),同学应爱护使用和珍惜这样的实验机会。
(2)嵌入式操作系统类课程
除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也可称为实时操作系统RealTimeOperatingSystem.从事嵌入式的人至少须掌握一个嵌入式操作系统,这在嵌入式的所有技术中是最为关键的了。
目前最重要的RTOS主要包括:
第一类、传统的经典RTOS:
最主要的便是Vxworks操作系统,以及其Tornado开发平台。
Vxworks因出现稍早,实时性很强(据说可在1ms内响应外部事件请求),并且内核可极微(据说最小可8K),可靠性较高等,所以在北美,Vxworks占据了嵌入式系统的多半疆山。
特别是在通信设备等实时性要求较高的系统中,几乎非Vxworks莫属。
Vxworks的很多概念和技术都和Linux很类似,主要是C语言开发。
像Bell-alcatel、Lucent、华为等通信企业在开发产品时,Vxworks用得很多。
但Vxworks因价格很高,所以一些小公司或小产品中往往用不起。
目前很多公司都在往嵌入式Linux转(听说华为目前正在这样转)。
但无论如何,Vxworks在一段长时间内仍是不可动摇的。
与Vxworks类似的稍有名的实时操作系统还有pSOS、QNX、Nucleus等RTOS。
第二类、嵌入式Linux操作系统:
Linux的前途除作为服务器操作系统外,最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 学习