ARM好书推荐!
给大家推荐几本ARM的好书。可供参考。
ARM嵌入式系统实验教程(三) μC/OS ARM移植要点详解 ARM嵌入式系统实验教程(二) 嵌入式实时操作系统的多线程计算——基于ThreadX和ARM 从51到ARM—32位嵌入式系统入门
内容简介 本书是《ARM嵌入式系统系列教程》中的实验教材之一,可与本套教程中的理论课教材《ARM嵌入式系统基础教程》相配套使用。
以MagicARM2200为教学实验开发的硬件平台,以ADS 1.2集成开发环境、μC/OSII和μCLinux嵌入式操作系统以及各种中间件、驱动程序为软件平台,搭建ARM嵌入式系统教学与实验体系。全书共分6章。第1章全面介绍MagicARM2200教学实验开发平台的设计原理以及各种跳线、接口的使用说明;第2章介绍基础实验;第3章介绍基于μC/OSII操作系统的基础实验;第4章介绍基于μC/OSII的综合实验;第5章介绍μCLinux操作系统实验;第6章介绍MiniGUI图形界面实验。各种实验安排由浅入深,相对完整,使读者更容易学习和掌握ARM嵌入式系统开发应用。
本书可作为高等院校电子、自动化、计算机以及机电一体化等相关专业嵌入式系统课程的实验教材,也可作为ARM嵌入式系统应用设计人员的参考用书。本书配有多媒体实验教学课件。
前言 本书是《ARM嵌入式系统系列教程》中的实验教材之一,基于MagicARM2200教学实验开发平台,可以与本教程中的理论教材《ARM嵌入式系统基础教程》相配套使用,亦可单独使用。
本教材共分为6章,第1章为MagicARM2200硬件介绍部分,第2~6章为实验部分。各种实验安排由浅入深,相对完整,使读者更容易学习和掌握ARM嵌入式系统开发应用。各章节安排如下:
第1章,MagicARM2200实验箱硬件结构。本章主要介绍MagicARM2200的功能特点和硬件设计原理。通过阅读这一章,读者应当对MagicARM2200有了较为全面的了解,为实验和开发奠定基础。
第2章,基础实验。本章介绍多达27个比较简单的实验,较为全面地涉及到ARM嵌入式系统常用的功能部件。通过这些实验,让学生巩固《ARM与嵌入式系统基础教程》的各个知识点。
第3章,基于μC/OSⅡ的基础实验。本章介绍5个基于μC/OSII嵌入式操作系统的实验。通过这些实验,让学生体会RTOS开发特点和优点,并掌握基于RTOS的基本编程方法。
第4章,基于μC/OSII的综合实验。本章安排了8个基于μC/OSII的、嵌入式系统高端应用的高级接口实验,包括GPRS、GPS、CF卡、SD/MMC卡和USB读/写U盘等。
第5章,μCLinux基础实验。本章主要介绍嵌入式操作系统μCLinux在MagicARM2200上的12个应用实验,所有实验均基于设备驱动程序(包括字符设备、块设备和网络设备驱动程序)。
第6章,MiniGUI图形界面实验。本章介绍了一个功能强大、轻量级的图形用户界面支持系统MiniGUI (for μCLinux,学习版)在MagicARM2200上的移植,并通过9个应用实验使学生掌握MiniGUI的常用功能。
由于本书的篇幅有限,还有一些附加实验和说明文档并没有编写到本书当中,经过重新整理后编写成《ARM嵌入式系统实验教程(三)——扩展实验》一书。
本书正文中多处提到“产品配套光盘”,此盘为MagicARM2200教学实验开发平台的配套光盘,购买MagicARM2200教学实验开发平台的用户,可随设备获得该光盘。
参与本书编写和工作的主要人员有陈明计、黄绍斌、叶皓贲、周立山、郑明远、陈锡炳、甘达、戚军、岳宪臣和朱旻等。全书由周立功负责规划、内容的安排、定稿与修改。
由于作者水平有限,本书在各个方面难免有疏忽、不恰当甚至完全错误的地方,恳请各位老师及同行指正。作者2005年7月
目录 第1章 MagicARM2200实验箱硬件结构
1.1 功能特点1
1.2 硬件原理3
1.2.1 DeviceARM2200嵌入式工控板4
1.2.2 实验箱主板15
1.3 硬件结构35
1.3.1 跳线器说明35
1.3.2 连接器说明47
1.4 硬件使用的资源48
1.5 温馨提示50
第2章 基础实验
2.1 ADS 1.2集成开发环境练习52
2.2 汇编指令实验157
2.3 汇编指令实验260
2.4 汇编指令实验363
2.5 汇编指令实验466
2.6 汇编指令实验569
2.7 ARM微控制器工作模式实验72
2.8 C语言程序实验76
2.9 C语言调用汇编程序实验79
2.10 GPIO输出控制实验181
2.11 GPIO输出控制实验286
2.12 GPIO输入实验89
2.13 存储器重映射实验92
2.14 外部中断实验194
2.15 外部存储器接口实验197
2.16 定时器实验1103
2.17 UART实验1105
2.18 I2C接口实验1109
2.19 WDT实验113
2.20 低功耗实验1116
2.21 模/数转换器实验119
2.22 数/模转换器实验125
2.23 PS/2键盘实验129
2.24 步进电机实验134
2.25 直流电机实验141
2.26 彩色液晶绘图实验144
2.27 触摸屏实验147
2.28 温馨提示155
第3章 基于μC/OSII的基础实验
3.1 μC/OSII移植实验157
3.2 蜂鸣器控制实验168
3.3 串口中间件应用实验175
3.4 Modem通信实验180
3.5 I2C总线驱动中间件实验183
3.6 温馨提示187
第4章 基于μC/OSII的综合实验
4.1 USBE2PROM编程器实验188
4.2 读/写U盘扇区实验200
4.3 SD/MMC卡读卡器实验215
4.4 ZLG/CF驱动使用实验228
4.5 UDP通信实验239
4.6 GPRS通信实验245
4.7 GPS实验247
4.8 MODBUS RTU主/从通信实验250
4.9 温馨提示262
第5章 μCLinux基础实验
5.1 μCLinux平台构建实验263
5.2 预备知识267
5.2.1 程序目录结构267
5.2.2 基本概念268
5.2.3 驱动程序使用269
5.3 GPIO271
5.3.1 GPIO驱动271
5.3.2 LED流水灯实验273
5.4 UART1276
5.5 I2C283
5.5.1 I2C驱动283
5.5.2 CAT1025读/写实验285
5.6 PWM288
5.6.1 PWM驱动288
5.6.2 单路PWM输出290
5.7 A/D转换292
5.7.1 A/D转换驱动292
5.7.2 单路A/D转换实验294
5.8 块设备实验297
5.8.1 块设备驱动297
5.8.2 CF卡实验298
5.9 以太网实验301
5.9.1 UDP通信实验301
5.9.2 TCP通信实验308
5.10 μCLinux内核实验315
5.10.1 μCLinux内核配置/编译实验315
5.10.2 制作RAM DISK317
5.10.3 在文件系统中增加用户程序318
5.11 温馨提示322
第6章 MiniGUI图形界面实验
6.1 MiniGUI for μCLinux移植实验324
6.2 MiniGUI消息处理实验352
6.3 下拉式菜单实验355
6.4 对话框应用编程实验360
6.5 控件应用编程实验364
6.6 自定义控件实验368
6.7 简易编辑器实验372
6.8 位图显示实验375
6.9 GDI绘图实验377
6.10 温馨提示378
μC/OS ARM移植要点详解
内容简介 本书适合的读者是对ARM微处理器有一定了解,对嵌入式内核有一定了解和对嵌入式产品开发有一定经验的读者。对于从事嵌入式产品开发,特别是基于ARM的嵌入式产品开发的项目经理、体系结构设计师、设计师、代码开发工程师、测试工程师,解决实际问题有一定的帮助。
本书内容内容共7章,各章主题如下:
第0章为嵌入式环境的选择,对嵌入式产品开发中常见的芯片、软件方案进行了简单比较分析。
第1章为OS内核概念,包括ARM微处理器特性、内核结构基础等重要概念的详细说明。它是本书中非常重要的一章。
第2章为μC/OSII移植过程,是在常见ARM微处理器上移植μC/OSII的代码详解。
第3章为代码组织及功能设计,把嵌入式产品的设计从简单移植的角度扩展到内核整体体系结构设计及功能组件组织的角度并引入一个有益的、重要的COS组件方法。它是本书中篇幅最长的一章,也是最重要的一章。
第4章为μRtos V1.0 代码说明,介绍一种硬实时分层调度体系结构的嵌入式内核产品。
第5章为ARM开发环境,解答软件开发工具使用中的一些常见问题。
第6章为软件工程简述,对嵌入式产品开发中的软件项目管理中的要点进行了探讨,讨论了一些如何提高产品品质的技术知识。
前言 随着国内工业化、数字化的步伐加快,嵌入式开发在IT行业中的重要性越来越显著。
中国成为“世界制造中心”甚至“设计中心”的趋势,必然导致对小型数字控制系统的需求越来越大。在嵌入式系统开发方面,最核心的技术就是微处理器芯片和嵌入式操作系统。其中在微处理器芯片方面,ARM已经给出了比较理想的一个答案;而在嵌入式操作系统方面,适合国内发展方向的解决方案以及系统基础结构方面并不理想。
? 风河公司的VxWorks操作系统成本高,结构复杂,不适合小型应用。
? 微软公司的WinCE操作系统更适合民用、便携式娱乐设备等。
? 开源的Linux操作系统体系结构同样复杂,产品化和商业化程度不够,即使在Linux本来的PC目标环境下,也难寻理想的技术支持,更不用说嵌入式环境下的Linux。这方面的弱势对批量生产、大规模、长时间运行使用的工业化产品来说是致命的。
另外,在以上讨论的这3种系统中,只有VxWorks是硬实时操作系统,而WinCE和Linux是非硬实时操作系统。
在这种情况下,类似于μC/OSII的小型硬实时嵌入式操作系统内核具有低成本、易控制、小规模、高性能的特性,因而有相当好的发展前景。但是这类系统的基础较为薄弱,面临产品化和商业化程度不够的局面。采用此类系统进行产品开发需要仔细分析和设计,否则也很难真正满足工业产品生产的要求。
本书正是针对这种情况,在ARM微处理器环境下,针对商业化、产品化环境的严格要求,设计、构造了一种硬实时嵌入式内核体系结构。当然,真正的商业化、产品化的嵌入式内核既需要这种能够满足高标准要求的体系结构设计基础,又需要严格的产品化软件开发测试过程。只有理论基础与工程实践完整地结合,才能产生真正经受得起考验的,能够满足工业化生产,能够在各种环境下稳定运行并确保达到设计目的的产品。从这个角度考虑,仅仅拿来一个操作系统内核并开发应用产品很难完全满足这种要求。必须要对内核的设计思路进行仔细的考虑和验证,对应用的可选开发设计方法进行审慎的评估,并配合真正工业化的项目开发管理办法,才能保障产品达到要求。
本书中提到的μRtos V1.0内核,正是作者及其所在团队按照以上精神付出巨大努力严格设计、测试的产品。该内核的体系结构设计思路在本书中有充分详细的解释和说明。另外,μC/OSII是读者在市面上可以方便获得的一种“半开源”的操作系统内核。本书针对该内核在ARM下的移植以及与本书所述内核体系结构的关系及比较,进行了详细解说。通过对比,既方便μC/OSII的爱好者、使用者学习掌握μC/OSII内核,同时又在对比分析过程中,使读者掌握μC/OSII和μRtos V1.0内核各自的详细特征、特点,方便读者在此基础上开发设计出更好的嵌入式系统产品。
作者2005年7月25日
目录 第0章 嵌入式环境的选择
0.1 简介1
0.2 关于微处理器4
0.3 关于OS5
0.4 关于功能模块的移植6
0.5 关于本书7
第1章 OS内核概念
1.1 嵌入式实时内核相关概念9
1.1.1 ARM7主要特性9
1.1.2 ARM特性代码12
1.1.3 中断与设备15
1.1.4 任务与调度18
1.1.5 临界区与保护20
1.2 内核结构25
1.2.1 硬保护泛滥问题25
1.2.2 硬保护泛滥问题的解决26
1.2.3 μRtos V1.028
1.3 关键机制29
1.3.1 复位引导机制29
1.3.2 单层中断机制32
1.3.3 嵌套中断机制33
1.3.4 端口轮询机制36
1.3.5 不可屏蔽中断机制38
1.3.6 自保护软件FIFO39
1.3.7 高速处理需求综合讨论46
1.3.8 其他杂项48
1.4 关键算法逻辑50
1.4.1 硬保护算法50
1.4.2 调度器算法52
1.4.3 任务就绪算法57
1.4.4 软保护算法61
1.4.5 ITC算法62
1.4.6 OS_TCB结构63
1.4.7 OS_EVENT结构65
第2章 μC/OSII移植过程
2.1 头文件定义72
2.1.1 ARM微处理器定义73
2.1.2 S3C44B0微处理器定义74
2.1.3 LPC2214微处理器定义78
2.1.4 产品板定义82
2.2 移植代码实现84
2.2.1 入口代码84
2.2.2 C运行环境代码100
2.2.3 环境切换代码102
第3章 代码组织及功能设计
3.1 代码组件化技术104
3.1.1 普通组件化105
3.1.2 抽象组件化112
3.2 设备驱动框架设计120
3.2.1 ISR层设备驱动框架设计120
3.2.2 高层设备驱动框架139
3.3 ITC算法设计140
3.3.1 软保护问题147
3.3.2 ITC与任务关系154
3.3.3 信号灯161
3.3.4 事件164
3.3.5 队列166
3.4 时间片轮换调度算法181
3.5 模块间衔接接口182
3.5.1 套接字185
3.5.2 管道188
3.5.3 通用接口191
3.6 状态机组件设计192
3.6.1 状态机基础193
3.6.2 层次化状态机特性196
3.6.3 状态机组件设计200
3.6.4 状态机组件的使用203
3.7 杂项设计考虑204
3.7.1 任务局部存储204
3.7.2 循环等待死锁检查工具设计205
3.7.3 内存管理设计207
第4章 μRtos V1.0代码说明
4.1 移植目录220
4.2 项目目录222
4.3 内核主目录222
4.4 功能目录223
4.5 在μRtos下开发应用产品的说明224
4.6 常用设备驱动设计指南226
4.6.1 人机交互串口/PPP226
4.6.2 键盘226
4.6.3 网口227
4.7 网络协议栈设计230
4.7.1 网络开发接口设计230
4.7.2 TCP协议231
4.7.3 TCP协议的简化实现232
4.7.4 TCP协议实现的其他问题234
第5章 ARM开发环境
5.1 环境的准备236
5.2 ARMulator239
5.2.1 中断控制器240
5.2.2 时钟241
5.2.3 看门狗242
5.2.4 调试输出口243
5.2.5 堆栈跟踪器243
5.3 编译器工作环境243
5.3.1 汇编语言编译选项244
5.3.2 C语言编译选项246
5.3.3 链接器选项246
5.4 代码烧写249
第6章 软件工程简述
6.1 软件测试基本概念250
6.2 软件工程模型252
6.3 状态机的测试256
附录A 常用缩写对照表
附录B 代码/伪代码目录
后记
参考文献
从51到ARM—32位嵌入式系统入门
内容简介 本书从51系列单片机的一般知识出发,将ARM处理器和51系列单片机进行对比,引导读者去理解和学习ARM处理器的知识。内容分为3部分:第1部分是前4章,从大家所熟悉的51系列单片机的基础知识开始,介绍ARM处理器的基本知识,包括ARM和51系列的对比、中断处理系统、寄存器和存储器结构等;第2部分是5~9章,详细比较ARM指令和51系列指令之间的差异,进一步阐述ARM指令的含义和使用方法,从简单的51系列编程经验出发,介绍ARM处理器软件编程方法;第3部分是后3章,介绍ARM处理器开发工具的使用。
任何一个学习过51系列单片机的技术人员,借助本书都会很容易地学会ARM处理器的一般知识,了解软件设计的基本方法,并且能够使用开发工具进行程序编辑、编译、连接和调试,成为一个初步懂得ARM并可以进行软件设计的工程师。
本书可供电子信息类大学生、研究生或电子设计工程师阅读参考。
前言 第1:为什么非学ARM不可?
(1) 单片机技术的应用在更广泛的范围内把电子产品带到我们身边,把我们每一个人都和“电脑”紧紧相连。仔细观察我们周围的生活,无处不包含单片机的踪影。以8051为代表的单片机渗透到到我们生活的方方面面。但从20世纪80年代到现在,单片机始终在8位机的档次上徘徊,8位的单片机始终主导着应用的潮流。16位单片机虽然也曾经掀起过波浪,但很快就销声匿迹了。可时至今日,我们还能使用8位的单片机做些什么呢?在20世纪80年代,凡是使用8051系列单片机的产品都是先进技术的体现,现在人们当然不会这样去审视一个产品。我们再也无法把51系列和一个技术先进的产品相提并论。32位单片机应用的高潮正悄悄到来。只有使用功能强大的32位单片机才能设计出轻巧多变的手机,才能设计出映像逼真的视频产品,才能设计出非同凡响的工业产品。
(2) 每个工科院校电子信息类的毕业生都异口同声地说: 我会51系列单片机。当他说这句话的时候,他和别人是站在同一起跑线上的。可我们完全有可能和别人不站在同一起跑线上。 我们有很多人,毕业近十年了,一直在搞产品研发,但也始终工作在51系列单片机这一档次上。我们再也不要以熟知51系列而引以为荣,不要以精通51系列而作为一门工作技能。
(3) 诚然,51系列及同档次的单片机并没有退出应用市场,在今后很长的时间内都会继续主导潮流,但在高端产品的应用领域不会再发挥作用。应用51系列的产品将是大众化的产品,进行51系列设计的工程师也只是大众化的工程师。你有什么理由不学ARM呢?
第2:学ARM为什么要从51系列学起?
(1) 在单片机没有出现的20世纪80年代以前,学习计算机是从单板机开始的。在单片机出现以后,学习计算机一般都以51系列为基础。从51系列的基本概念出发,去理解和学习其他更复杂的计算机就要容易得多,因为很多基本概念是相同的。
(2) 本书的目的在于帮助那些经验并不丰富的初学者,这些人一般只有51系列的经验而没有其他单片机经验,因此,只能以51系列为基础,去学习ARM处理器的知识。
第3: 学ARM究竟有多难?
ARM处理器的确是一种很复杂的微处理器结构,但从应用的角度来说,只要有51系列的经验,学习ARM并不是很困难的事。
(1) 学习ARM处理器只学习与应用有关的部分。关于ARM处理器的很多资料,都是直接对ARM说明书的译文。这些说明书中很大一部分都是关于ARM结构的论述,这些内容是写给芯片设计工程师看的,学习这些内容对应用人员毫无用处。
(2) 应用ARM应该分为3个阶段: 第1阶段是学习ARM的基本内容;第2阶段是学习以ARM为核的单片机;第3阶段才是应用。这与学习51系列单片机不同。学习51系列单片机时,学会了基本内容也就学会了单片机。本书所讲述的是ARM的基本内容。
(3) 与51系列的基本内容相近,ARM的基本内容主要包括中断响应过程、ARM指令集、存储器结构和汇编语言的程序结构,并没有比51系列更多的内容。从这几方面出发去学习ARM处理器,就会发现学习ARM并不是很困难的事。
第4:本书的内容安排:
本书的前4章是对ARM处理器的一般介绍,内容并不多,把这些内容与51系列对比学习,会很快了解ARM处理器的基本原理。对于这些内容以外的关于ARM的知识,建议初学者暂时不要去研究。
第5章介绍ARM指令集,这一章的内容是汇编语言基础。第6章介绍Thumb指令集,它是ARM指令集的一个子集。在大多数情况下,因为所有的程序都可以使用ARM指令实现,初学者可以暂不学习Thumb指令集。但学过ARM指令集以后,学习Thumb指令集是一件很容易的事情。
第7章讲述伪指令,使用ARM汇编语言必须熟悉伪指令。
第8章讲述软件的设计方法和汇编语言应用规则。第9章讲述C和C++语言的应用。
在ARM应用中,学会使用开发工具是十分重要的。后面3章详细讲述开发工具的应用。第10章介绍ARM开发中一种常用的工具ADS,介绍怎样使用ADS编辑和编译程序。第11章介绍怎样使用ADS连接程序。第12章介绍怎样使用AXD调试程序。
第5:本书的目标
通过学习本书前4章的内容,可以了解ARM处理器的基本概念。通过学习5~9章的内容,可以学会为ARM系统编程的一般方法。通过后3章的学习,可以学会使用ARM 开发工具。
学习本书以后,应该了解软件设计的基本方法,并且能够使用开发工具进行程序编辑、编译、连接和调试,成为一个初步懂得ARM并可以进行软件设计的工程师。
建议在学习本书时,应该重点学习后3章,并实际使用开发工具进行操作。只有这样,才可以使自己提高一大步。
本书的第9章由我的同事刘涛编写,其余均由我编写。在编写过程中,得到张君、邓耀武、郑玉峰三同仁及清华大学蒋东翔博士的大力帮助,也得到北京航空航天大学出版社的大力支持,在此一并感谢。由于接触ARM处理器时间不长,本书不可避免存在一些错误,欢迎广大读者指正。交流请使用zxhjeket@yahoo.com.cn。
赵星寒 2005年9月于北京
目录 第1章 几个基本概念
1.1 从51系列单片机到ARM处理器1
1.2 ARM不是单片机2
1.3 51系列单片机和ARM处理器的比较3
1.4 以ARM为核的单片机4
1.4.1 处理器内核只和外部地址相关4
1.4.2 ARM怎样组成一个单片机6
1.4.3 一点启示7
第2章 ARM处理器基础
2.1 ARM处理器的数据格式8
2.1.1 基础知识8
2.1.2 ARM处理器的存储器结构9
2.1.3 ARM处理器的指令存储或数据存储13
2.1.4 地址对准15
2.2 处理器模式15
2.3 ARM内部寄存器17
2.3.1 ARM状态时的寄存器17
2.3.2 Thumb状态下的寄存器25
2.4 异常27
第3章 ARM7TDMI简介
3.1 概述29
3.2 结构和框图30
3.3.3 级流水线结构33
3.4 ARM处理器的寻址方式35
3.4.1 51系列与ARM系列寻址方法的比较35
3.4.2 寄存器寻址36
3.4.3 立即寻址36
3.4.4 寄存器移位寻址37
3.4.5 寄存器间接寻址39
3.4.6 变址寻址40
3.4.7 多寄存器寻址42
3.4.8 堆栈寻址42
3.4.9 寻址方式的应用43
3.4.1 0ARM指令寻址一览表44
第4章 异常和中断
4.1 概述45
4.2 复位异常46
4.3 未定义指令异常47
4.4 软件中断异常49
4.5 预取指中止异常49
4.6 数据中止异常50
4.7 中断请求(IRQ)异常 51
4.8 快速中断(FIQ)请求异常52
4.9 中断源和中断优先级53
4.10 异常中断的进入和退出54
第5章 ARM指令集
5.1 概述56
5.2 指令可选后缀59
5.2.1 S后缀60
5.2.2 后缀60
5.2.3 B后缀61
5.2.4 T后缀61
5.2.5 条件后缀62
5.3 ARM数据传送指令(存储器访问指令)64
5.3.1 关于数据传送64
5.3.2 数据传送中的几个问题66
5.3.3 ARM数据传送指令代码表70
5.3.4 数据传送指令代码详述71
5.4 ARM分支指令93
5.4.1 关于程序分支93
5.4.2 ARM分支指令详解94
5.5 ARM数据处理指令98
5.5.1 ARM数据处理指令的特点98
5.5.2 第2操作数99
5.5.3 ARM数据处理指令代码表101
5.5.4 ARM数据处理指令详述103
5.6 ARM指令集中和协处理器有关的指令120
5.7 ARM指令集中的软件中断指令125
第6章 Thumb指令集
6.1 Thumb指令的特点129
6.2 Thumb指令和ARM指令的比较132
6.3 Thumb指令集中的数据传送类指令134
6.4 Thumb指令集中的分支指令146
6.5 Thumb指令集中的数据处理指令152
6.6 Thumb指令集中的软件中断指令164
第7章 伪指令
7.1 伪指令概述166
7.2 与ARM指令相关的伪指令167
7.3 与Thumb指令相关的伪指令177
7.4 通用伪指令180
7.4.1 为变量定义和赋值的伪指令180
7.4.2 定义各类寄存器名称的伪指令184
7.4.3 数据定义伪指令187
7.4.4 控制程序流向的伪指令196
7.4.5 其他伪指令201
第8章 ARM系统设计和程序设计
8.1 关于ARM处理器,我们学到了什么?207
8.2 程序设计的几个问题209
8.3 ARM指令和 Thumb指令的兼容性214
8.4 汇编程序规则221
8.4.1 组成222
8.4.2 书写格式223
8.4.3 汇编语言中的表达式224
8.5 汇编程序举例231
第9章 C和C++语言的应用
9.1 汇编语言与C/C++语言的比较237
9.2 C/C++语言的编程规范238
9.2.1 注释238
9.2.2 命名239
9.2.3 编辑风格239
9.3 如何编写针对ARM的高效C语言程序240
9.3.1 以空间换时间240
9.3.2 使用数学方法解决问题242
9.3.3 使用位操作242
9.3.4 嵌入汇编243
9.4 C、C++语言与汇编语言的混合编程244
9.4.1 在C、C++程序中使用内嵌的汇编指令的语法格式244
9.4.2 在C、C++程序中使用内嵌的汇编指令的注意事项245
9.4.3 内嵌汇编指令的应用举例247
9.4.4 从汇编程序中访问C程序变量248
9.4.5 在C++程序中使用C程序头文件249
9.4.6 汇编程序、C程序以及C++程序的相互调用举例250
第10章 程序的编辑和编译
10.1 程序设计过程254
10.1.1 编辑程序254
10.1.2 编译程序255
10.1.3 连接和调试程序257
10.2 ARM处理器开发工具介绍258
10.2.1 ARM处理器仿真系统特点258
10.2.2 ADS集成开发环境259
10.2.3 ADS开发系统的系统资源261
10.2.4 系统软件开发的步骤263
10.3 程序的编辑263
10.3.1 源程序是可移植的263
10.3.2 在CodeWarrior for ADS环境下编辑源文件266
10.3.3 建立工程项目总结271
10.3.4 建立C语言和C++语言源文件271
10.3.5 文件的管理272
10.3.6 编辑画面的设置273
10.3.7 ADS编辑功能介绍279
10.3.8 屏幕分割设置282
10.4 程序的编译283
10.4.1 有两种方式可以实现程序的编译283
10.4.2 命令行中的可选项和图形方式中的可选项286
10.4.3 ADS中的可选项290
10.5 汇编器的应用291
10.5.1 ARM汇编器armasm中的可选项291
10.5.2 ARM汇编器应用298
10.5.3 应用举例300
10.6 编译器的应用303
10.6.1 ARM编译器中的可选项303
10.6.2 ARM编译器的应用317
第11章 程序的连接
11.1 几个与连接有关的概念320
11.2 连接器的应用326
11.3 连接器选项设置334
11.4 连接器应用举例347
第12章 ARM调试工具AXD
12.1 调试工具AXD361
12.1.1 ARM调试工具介绍361
12.1.2 调试工具AXD的使用方法363
12.2 在调试过程中使用断点371
12.2.1 设置断点371
12.2.2 执行到断点处374
12.2.3 查找和修改断点374
12.2.4 断点管理下拉菜单374
12.2.5 观察断点375
12.2.6 删除断点376
12.3 AXD中其他工具介绍376
12.3.1 使用观测项376
12.3.2 在调试程序时观察变量381
12.3.3 在调试程序时使用符号表383
12.3.4 使用观测点384
12.3.5 工具栏中的工具387
12.4 数据格式389
12.4.1 设置数据格式389
12.4.2 设置默认的数据显示格式393
参考文献
嵌入式实时操作系统的多线程计算——基于ThreadX和ARM
内容简介 本书介绍和分析了嵌入式系统的重要概念和应用设计方法,并提供了多个基于ARM平台的多线程应用实例。重点从实时、多线程、ThreadX和ARM处理器结合的角度进行展开,并用实际的案例分析将它们与应用相结合。读者可从中获得完成自己的应用所需的所有细节,包括ARM处理器的概况和ThreadX实时操作系统(RTOS)所提供的所有服务。
本书面向高校计算机专业师生、嵌入式应用的中高级设计开发人员、实时系统的应用与研究人员,也可作为高校计算机及相关专业的嵌入式课程教材。
前言
目录 第1章 嵌入式实时操作系统1
1.1 介绍1
1.2 何谓嵌入式系统1
1.3 嵌入式系统的特征2
1.4 实时系统2
1.5 实时操作系统和实时内核2
1.6 进程、任务和线程3
1.7 实时系统的系统结构4
1.8 嵌入式系统的开发5
1.9 关键词和术语5
第2章 初步了解使用RTOS的系统7
2.1 操作环境7
2.2 ThreadX演示系统的安装7
2.3 包含两个线程的演示系统7
2.4 创建线程对象9
2.5 编译并执行示例系统11
2.6 系统和输出结果的分析11
2.7 02_sample_system.c代码清单12
2.8 关键词和术语17
2.9 问题18
第3章 RTOS概念和定义19
3.1 介绍19
3.2 优先级19
3.3 就绪线程和挂起线程20
3.4 占先,基于优先级的调度21
3.5 轮转调度21
3.6 确定性22
3.7 内核22
3.8 RTOS22
3.9 上下文切换23
3.10 时间片轮转23
3.11 中断处理23
3.12 线程饥饿23
3.13 优先级翻转24
3.14 优先级继承24
3.15 抢占阀值25
3.16 关键词和术语25
3.17 问题26
第4章 用于系统开发的基本RTOS组件27
4.1 介绍27
4.2 定义公共资源27
4.3 ThreadX 数据类型28
4.4 线程28
4.5 内存池29
4.6 应用定时器31
4.7 互斥量31
4.8 计数信号量32
4.9 事件标志组33
4.10 消息队列33
4.11 线程同步和通信组件总结34
4.12 关键词和术语35
4.13 问题36
第5章 ARM微处理器简介37
5.1 介绍37
5.2 历史37
5.3 技术特征38
5.3.1 兼容片上系统38
5.3.2 低功耗39
5.3.3 改进的代码密度39
5.3.4 多样化的寄存器39
5.3.5 CPSR的定义41
5.3.6 处理器模式42
5.4 ARM对节能的支持43
5.5 关键词和术语43
第6章 线程45
6.1 介绍45
6.2 线程控制块45
6.3 线程调用综述46
6.4 创建线程47
6.5 删除线程52
6.6 识别线程53
6.7 获取线程信息53
6.8 改变抢占门限54
6.9 改变优先级54
6.10 放弃执行55
6.11 恢复线程执行55
6.12 线程睡眠55
6.13 挂起线程56
6.14 中止线程56
6.15 改变时间片56
6.16 中止线程等待57
6.17 线程执行综述57
6.18 线程状态58
6.19 线程设计59
6.19.1 最小化线程的数量60
6.19.2 谨慎设置优先级60
6.19.3 最小化优先级的数目60
6.19.4 考虑使用抢占门限60
6.19.5 考虑优先级继承61
6.19.6 考虑轮转调度方式61
6.19.7 考虑时间片61
6.20 线程内部结构61
6.21 总结62
6.22 关键词和术语63
6.23 问题64
第7章 互斥量66
7.1 介绍66
7.2 保护临界区66
7.3 提供对共享资源的互斥访问67
7.4 互斥量控制块67
7.5 互斥量服务综述68
7.6 创建一个互斥量68
7.7 删除一个互斥量69
7.8 申请互斥量69
7.9 获取互斥量信息70
7.10 按优先级调整挂起队列71
7.11 释放一个信号量71
7.12 避免死锁72
7.13 用互斥量保护临界区的示例程序73
7.14 示例程序的输出78
7.15 07_sample_system.c代码清单80
7.16 互斥量内部结构85
7.17 总结86
7.18 关键词和术语86
7.19 问题87
第8章 内存管理:字节池和块池88
8.1 介绍88
8.2 内存字节池概述88
8.3 内存字节池控制块89
8.4 内存字节池的缺陷90
8.5 内存字节池服务概述91
8.6 创建内存字节池91
8.7 从内存字节池中分配内存92
8.8 删除内存字节池92
8.9 获取内存字节池信息93
8.10 优先排列内存字节池挂起列表93
8.11 释放内存到内存字节池94
8.12 内存字节池例程——分配线程堆栈94
8.13 内存字节池内部机制95
8.14 内存块池概述97
8.15 内存块池控制块98
8.16 内存块池服务概述98
8.17 创建内存块池99
8.18 从内存块池中分配内存100
8.19 删除内存块池100
8.20 获取内存块池信息101
8.21 优先排列内存块池挂起列表102
8.22 释放内存块102
8.23 内存块池例程——分配线程堆栈103
8.24 内存块池内部机制104
8.25 总结和对比104
8.26 关键词和术语105
8.27 问题105
第9章 内部系统时钟和应用定时器107
9.1 介绍107
9.2 内部系统时钟服务108
9.3 应用定时器控制块109
9.4 应用定时器服务概述110
9.5 创建应用定时器110
9.6 启动应用定时器111
9.7 修改应用定时器112
9.8 停止应用定时器112
9.9 删除应用定时器113
9.10 获取应用定时器信息113
9.11 使用定时器测量线程性能的例程114
9.12 09_sample_system.c代码清单117
9.13 应用定时器内部机制123
9.14 总结124
9.15 关键词和术语124
9.16 问题125
第10章 事件通知和利用信号量同步线程127
10.1 介绍127
10.2 计数信号量控制块128
10.3 避免死锁129
10.4 防止优先级倒置129
10.5 信号量服务综述129
10.6 创建一个信号量129
10.7 删除一个信号量130
10.8 从信号量申请一个实例131
10.9 获取信号量的信息131
10.10 按优先级调整信号量的挂起队列132
10.11 向信号量放入一个实例132
10.12 对比信号量和互斥量133
10.13 使用二进制信号量代替互斥量的示例程序134
10.14 10a_sample_system.c代码清单135
10.15 在生产者—消费者程序中使用信号量的例子142
10.16 10b_sample_system.c代码清单144
10.17 信号量内部结构150
10.18 总结151
10.19 关键词和术语151
10.20 问题152
第11章 用事件标志组同步线程153
11.1 介绍153
11.2 事件标志组控制块154
11.3 事件标志组服务综述155
11.4 创建一个组155
11.5 删除一个组156
11.6 等待组中的标志被置位156
11.7 获取组的信息159
11.8 设置组中的事件标志159
11.9 使用事件标志组同步两个线程的示例系统161
11.10 11_sample_system.c代码清单164
11.11 事件标志组内部结构170
11.12 总结171
11.13 关键词和术语171
11.14 问题172
第12章 使用消息队列进行线程通信173
12.1 介绍173
12.2 消息队列控制块174
12.3 消息队列服务函数的概要175
12.4 创建消息队列176
12.5 向消息队列发送消息176
12.6 从消息队列中获取消息177
12.7 删除消息队列178
12.8 清除消息队列中的内容178
12.9 向消息队列头发送消息179
12.10 检索消息队列信息179
12.11 将消息队列挂起列表以优先顺序排列180
12.12 使用消息队列作为线程间通信的示例系统181
12.13 12_sample_system.c代码清单184
12.14 消息队列的内部190
12.15 总结191
12.16 关键词和术语192
12.17 问题192
第13章 ARM异常处理193
13.1 介绍193
13.2 ThreadX对ARM异常处理的实现194
13.2.1 复位向量的初始化194
13.2.2 线程的调度196
13.2.3 ThreadX中断处理199
13.2.4 内部中断处理201
13.3 关键词和术语203
第14章 案例分析:设计一个多线程系统204
14.1 介绍204
14.2 问题的描述205
14.3 问题的分析207
14.4 系统的设计209
14.4.1 线程设计209
14.4.2 公共资源设计210
14.5 实现213
14.6 VAM System代码清单226
14.7 总结237
附录239
附录A 内存块池服务241
附录B 内存字节池服务249
附录C 事件标志组服务257
附录D 中断控制服务265
附录E 互斥量服务267
附录F 消息队列服务函数275
附录G 信号量服务287
附录H 线程服务295
附录I 内部系统时钟服务313
附录J 应用定时器服务315
附录K ThreadX API323
ARM嵌入式系统实验教程(二)
内容简介 本书是《ARM嵌入式系统系列教程》中的实验教材之一,可与本套教程中的理论课教材《ARM嵌入式系统基础教程》配套使用。
以SmartARM2200为教学实验开发硬件平台,以ADS 1.2集成开发环境、μC/OSII和μClinux嵌入式操作系统以及各种中间件、驱动程序为软件平台,搭建ARM嵌入式系统教学实验体系。
全书共分6章。第1章全面介绍SmartARM2200教学实验开发平台的设计原理以及各种跳线、接口的使用说明,第2章介绍基础实验,第3章介绍基于μC/OSII操作系统的基础实验,第4章介绍基于μC/OSII操作系统的综合实验,第5章介绍μCLinux操作系统实验,第6章介绍MiniGUI图形界面实验。各种实验安排由浅入深,相对完整,使读者更容易学习和掌握ARM嵌入式系统开发应用。
本书可作为高等院校电子、自动化、计算机以及机电一体化等相关专业嵌入式系统课程的实验教材,也可作为ARM嵌入式系统应用设计人员的参考用书。 本书配有多媒体实验教学课件。
前言 本书是《ARM嵌入式系统系列教程》中的实验教材之一,基于SmartARM2200教学实验开发平台,可与本教程中的理论教材《ARM嵌入式系统基础教程》配套使用,亦可单独使用。
本教材共分为6章,第1章为SmartARM2200硬件介绍部分,第2~6章为实验部分,各种实验安排由浅入深、相对完整,以便于读者学习和掌握ARM嵌入式系统开发应用。各章节安排如下:
第1章——SmartARM2200教学实验开发平台硬件结构。主要介绍SmartARM2200的功能特点、硬件设计原理。通过阅读本章,读者可以对SmartARM2200有较为全面的了解,为实验和开发奠定基础。
第2章——基础实验。介绍多达24个比较简单的实验,内容涉及了ARM嵌入式系统常用的功能部件,通过这些实验可以让用户巩固《ARM与嵌入式系统基础教程》的各个知识点。
第3章——基于μC/OSII的基础实验。介绍5个基于μC/OSII嵌入式操作系统的实验,通过这些实验让用户体会RTOS开发的特点和优点,并掌握基于RTOS的基本编程方法。
第4章——基于μC/OSII的综合实验。安排了8个基于μC/OSII的、嵌入式系统高端应用的高级接口实验,包括TCP通信、UDP通信、CF卡、SD/MMC卡和USB读/写U盘等。
第5章——μCLinux操作系统实验。主要介绍嵌入式操作系统μCLinux在SmartARM2200上的12个应用实验,所有实验均基于设备驱动程序(包括字符设备、块设备和网络设备驱动程序)。
第6章——MiniGUI图形界面实验。介绍一个功能强大、轻量级的图形用户界面支持系统MiniGUI (for μCLinux,学习版)在SmartARM2200上的移植,并通过9个应用实验使用户掌握MiniGUI的常用功能。
由于本书篇幅有限,还有一些附加实验和说明文档(见本书各章最后的“温馨提示”)未能编入本书,经过重新整理后编写成《ARM嵌入式系统实验教程(二)——扩展实验》电子文档存放在SmartARM2200教学实验开发平台的产品配套光盘上。
此处的“产品配套光盘”在本书正文中经常提到,为SmartARM2200教学实验开发平台的配套光盘,购买SmartARM2200教学实验开发平台的用户,可随设备获得该光盘。
参与本书编写工作的主要人员有陈明计、黄绍斌、叶皓贲、周立山、郑明远、陈锡炳、甘达、戚军、岳宪臣和朱旻等。全书由周立功负责规划、内容的安排、定稿与修改。
由于作者水平有限,书中难免有疏忽,不妥之处恳请各位老师及同行指正。作者
2005年8月
目录 第1章 SmartARM2200教学实验开发平台硬件结构
1.1 功能特点1
1.2 硬件原理4
1.2.1 电路原理图4
1.2.2 电路原理说明4
1.3 硬件结构27
1.3.1 元件布局图27
1.3.2 跳线器说明28
1.3.3 连接器说明34
1.4 硬件使用的资源36
1.5 其他38
1.5.1 电源38
1.5.2 跳线器38
1.5.3 CPU PACK的安装39
1.6 温馨提示39
第2章 基础实验
2.1 ADS 1.2集成开发环境练习40
2.2 汇编指令实验145
2.3 汇编指令实验248
2.4 汇编指令实验351
2.5 汇编指令实验454
2.6 汇编指令实验557
2.7 ARM微控制器工作模式实验60
2.8 C语言程序实验64
2.9 C语言调用汇编程序实验67
2.10 GPIO输出控制实验169
2.11 GPIO输出控制实验274
2.12 GPIO输入实验76
2.13 存储器重映射实验79
2.14 外部中断实验181
2.15 外部存储器接口实验183
2.16 定时器实验189
2.17 UART实验192
2.18 Modem接口实验96
2.19 I2C接口实验198
2.20 PWM输出实验102
2.21 RTC实验1104
2.22 模/数转换器实验108
2.23 WDT实验113
2.24 低功耗实验1116
2.25 温馨提示119
第3章 基于μC/OSII的基础实验
3.1 μC/OSII移植实验120
3.2 蜂鸣器控制实验130
3.3 串口中间件应用实验136
3.4 Modem通信实验142
3.5 I2C总线驱动中间件实验145
3.6 温馨提示149
第4章 基于μC/OSII的综合实验
4.1 USBE2PROM编程器实验150
4.2 读/写U盘扇区实验162
4.3 读/写U盘文件实验176
4.4 SD/MMC卡读卡器实验185
4.5 ZLG/CF驱动接口函数实验198
4.6 ZLG/CF驱动使用实验212
4.7 UDP通信实验222
4.8 TCP通信实验228
4.9 温馨提示234
第5章 μCLinux操作系统实验
5.1 μCLinux平台构建实验235
5.2 预备知识239
5.2.1 程序目录结构239
5.2.2 基本概念240
5.2.3 驱动程序使用241
5.3 GPIO实验242
5.3.1 GPIO驱动242
5.3.2 按键和LED控制实验245
5.4 UART1实验248
5.5 I2C接口实验256
5.5.1 I2C驱动256
5.5.2 LM75测温实验257
5.6 PWM实验260
5.6.1 PWM驱动260
5.6.2 单路PWM输出实验262
5.7 A/D转换实验264
5.7.1 A/D转换驱动264
5.7.2 单路A/D转换实验266
5.8 块设备实验268
5.8.1 块设备驱动268
5.8.2 CF卡实验270
5.9 以太网实验272
5.9.1 UDP通信实验272
5.9.2 TCP通信实验278
5.10 μCLinux内核实验286
5.10.1 μCLinux内核配置/编译实验286
5.10.2 制作RAM DISK287
5.10.3 在文件系统中增加用户程序289
5.11 温馨提示292
第6章 MiniGUI图形界面实验
6.1 MiniGUI for μCLinux移植实验293
6.2 MiniGUI消息处理实验317
6.3 对话框应用编程实验321
6.4 控件应用编程实验325
6.5 自定义控件实验329
6.6 简易编辑器实验332
6.7 位图显示实验335
6.8 GDI绘图实验337
6.9 桌面主题实验339
6.10 温馨提示342
参考文献
小编。怎么没看到这书的作者什么的信息啊?
和各位分享一下嵌入式学习吧。
http://www.ieeetc.com/showtechnic.asp?id=133
或者加入我的qq:270976667
恩恩谢谢了
我要下载,不要扣分