NiosⅡ软件架构解析 - 中国高校教材图书网
|
书名: |
NiosⅡ软件架构解析
|
ISBN: | 978–7–5606–1922–4 |
条码: | |
作者: |
蔡伟纲
相关图书
|
装订: | 平装 |
印次: | 1-1 |
开本: | 16开 |
定价: |
¥24.00
折扣价:¥22.80
折扣:0.95
节省了1.2元
|
字数: |
350千字
|
出版社: |
西安电子科技大学出版社 |
页数: |
|
发行编号: | 2214001-1 |
每包册数: |
|
出版日期: |
2007-11-01 |
|
内容简介: |
内 容 简 介 本书以Altera公司的技术资料为蓝本,结合作者多年的Nios软件开发经验及长期在EDACN专业论坛NiosⅡ版块担任版主积累的心得,首先从复位、中断、编程环境、设备驱动以及应用程序二进制接口等五个方面对NiosⅡ软件架构进行横向揭密,接着又从汇编语法、makefile、链接脚本、调试手段以及开发技巧等多个角度对NiosⅡ软件架构进行纵向解析,纵横交错层层揭开了NiosⅡ软件架构的真面目,因而本书既可作为NiosⅡ嵌入式软件开发的中高阶指导书,也可作为NiosⅡ软件开发手册。 本书书名虽为“NiosⅡ软件架构解析”,但内容涉及嵌入式软件开发的方方面面,主要面向学习或从事嵌入式软件开发的学生和工程技术人员,也可作为相关专业研究生和高年级本科生的教材。
|
作者简介: |
|
章节目录: |
目 录
第一部分 横 向 揭 密
第1章 中断揭密篇 3
1.1 异常的概念 3
1.1.1 中断的引入 3
1.1.2 异常的引入 3
1.2 与异常相关的术语 3
1. application context(应用背景) 3
2. exception context(异常背景) 4
3. context switch(背景切换) 4
4. exception handler(异常handler) 4
5. exception overhead(异常开销) 4
6. hardware interrupt(硬件中断) 4
7. interrupt service routine(ISR,中断服务函数) 4
8. software exception(软件异常) 4
9. implementation-dependent instruction(依赖于处理器具体实现的指令) 4
10. unimplemented instruction(未完成指令) 4
11. invalid instruction(无效指令) 4
1.3 NiosⅡ异常处理概述 4
1.4 NiosⅡ处理器的异常地址 5
1.5 NiosⅡ处理器支持的异常类型 5
1.6 NiosⅡ处理器的异常触发机理 6
1. 硬件中断的触发机理 6
2. 软件异常的触发机理 6
1.7 NiosⅡ处理器对异常的响应 7
1. 异常的硬件响应 7
2. 异常的软件响应 7
1.8 异常handler架构 7
1. 顶层异常handler 8
2. 硬件中断handler 8
3. 软件异常handler 9
4. 外设中断的ISR 10
1.9 中断向量表 12
1.10 中断控制器初始化 13
1.11 中断的调试 13
1.12 中断响应性能分析 14
1. 中断性能指标参数 14
2. 影响中断性能的因素 14
3. 中断性能测试实例 15
1.13 NiosⅡ异常处理小结 15
1.14 NiosⅡ异常处理注意事项 16
1. 软件异常与硬件中断返回地址的区别 16
2. 异常handler代码存储布局 16
3. 异常handler代码编译控制 17
1.15 源文件 19
1. alt_exception_entry.S 19
2. alt_irq_entry.S 26
3. alt_exception_trap.S 28
4. alt_exception_muldiv.S 29
5. alt_irq_register.c 30
6. alt_irq_handler.c 31
7. alt_irq_entry.h 33
8. alt_irq_table.h 33
9. alt_irq.h 34
10. alt_irq_vars.c 38
11. nios2.h 38
第2章 复位揭密篇 41
2.1 复位的概念 41
2.2 NiosⅡ处理器的复位地址 41
2.3 NiosⅡ处理器的复位响应 42
1. 复位的硬件响应 42
2. 复位的软件响应 42
2.4 NiosⅡ处理器的复位状态 43
2.5 NiosⅡ的启动代码 44
1. 代码段入口_start 44
2. 硬件描述层的C入口函数alt_main 45
2.6 NiosⅡ处理器的Bootloader 46
1. Bootloader承担的任务 46
2. Altera提供的Bootloader 46
3. Bootloader的模式 48
4. Elf2flash 48
2.7 NiosⅡ系统的Boot过程分析 49
1. 从EPCS Flash中Boot 50
2. 从CFI Flash中Boot 51
3. Bootloader源文件 53
2.8 NiosⅡ处理器复位小结 54
2.9 源文件 55
1. Crt0.S 55
2. alt_main.c 60
3. walt_sys_init.c 63
4. alt_set_args.h 64
5. alt_load.c 65
6. alt_load.h 67
第3章 HAL揭密篇 68
3.1 HAL系统库概览 68
1. 主要功能 69
2. 通用设备模型 69
3. C标准库——Newlib 70
3.2 基于HAL的项目架构 70
3.3 HAL源码的组织架构 71
1. HAL元件 71
2. HAL元件的目录结构 72
3. HAL头文件 72
4. HAL源文件 72
5. HAL外设头文件 72
3.4 HAL编程环境 73
1. 系统描述文件System.h 73
2. HAL定义的数据类型 76
3. UNIX风格接口函数 76
4. HAL文件系统 77
5. 应用程序入口 78
6. 存储空间布局 78
7. 堆和栈空间 80
8. 全局变量指针寄存器 81
9. 缓存(Cache) 81
10. 紧耦合存储器(Tightly-Coupled Memory) 84
第4章 外设驱动篇 86
4.1 使用HAL外设驱动 86
1. 使用HAL外设总体思路 86
2. HAL支持的外设 86
3. 使用字符模式设备 87
4. 使用文件子系统 88
5. 使用定时器设备 88
6. 使用Flash设备 93
7. 使用DMA设备 100
8. PIO驱动详解 104
9. ioctl函数 110
4.2 HAL外设自动初始化原理 110
1. 系统初始化文件alt_sys_init.c 110
2. alt_sys_init.c的生成 111
3. 宏定义*_INSTANCE和*_INIT 112
4.3 开发HAL外设驱动 112
1. 开发符合通用设备模型的HAL外设驱动 112
2. 开发自定义HAL外设驱动 120
4.4 集成HAL外设驱动 121
4.5 小封装驱动 121
4.6 命名空间 121
4.7 重载设备驱动 122
第5章 应用程序二进制接口篇 125
5.1 概述 125
5.2 数据类型约定 125
5.3 内存对齐约定 126
5.4 寄存器使用约定 126
1. 寄存器保护 127
2. Caller-Saved寄存器 127
3. Callee-Saved寄存器 127
5.5 Endianess 128
5.6 栈(stack)与帧(frame)空间 129
1. 帧结构 129
2. 消除帧指针 131
3. 帧空间的开辟与释放 132
5.7 函数参数与返回值接口 132
1. 函数参数 132
2. 函数返回值 133
5.8 栈空间代码示例 134
1. 源码 134
2. 反汇编代码 135
第二部分 纵 向 解 析
第6章 IDE属性配置 141
6.1 系统库属性配置 141
1. 菜单操作 141
2. 属性配置示例 141
3. 属性介绍 142
6.2 C/C++ Build属性配置 144
1. 菜单操作 144
2. 属性配置示例 144
3. 属性介绍 144
6.3 Preferences属性配置 145
1. 菜单操作 145
2. 属性配置示例 146
3. 属性介绍 146
第7章 软件调试技巧 148
7.1 观察寄存器 148
7.2 观察变量 148
7.3 观察内存 149
7.4 观察表达式 150
7.5 设置断点 150
7.6 Watchpoint 151
7.7 在HAL源文件中设置断点 152
7.8 指令单步调试模式 153
7.9 观察复杂的结构变量 154
7.10 观察 .objdump文件 154
7.11 Trace 155
7.12 Profiling 156
第8章 软件开发技巧 157
8.1 优化代码尺寸 157
1. 使能编译优化选项 157
2. 使用小封装设备驱动 157
3. 减少文件描述器的数目 158
4. 使用/dev/null设备名 158
5. 使用UNIX风格的IO函数取代标准C函数 158
6. 使用精简版本NewLib C标准库 159
7. 消除未用的设备驱动 159
8. 使用_exit替代exit函数 160
9. 禁止指令仿真功能 160
8.2 开发和使用库文件 161
1. 库文件的优点 161
2. NiosⅡ IDE支持的库项目类型 161
3. 创建库项目 161
4. 如何在NiosⅡ IDE中使用库文件 161
8.3 使用自定义的Linker Script 162
8.4 重载HAL源码 163
8.5 自定义代码和数据属性 164
8.6 使用asm/C/C++混合编程 165
1. C与C++混合编程范例 166
2. C与ASM混合编程范例 167
3. 内联汇编范例 168
第9章 软件架构中的预处理器 171
9.1 如何在NiosⅡ IDE中控制全局预处理器 171
9.2 NiosⅡ软件架构中的预处理器 172
1. ALT_NO_BOOTLOADER 172
2. ALT_USE_SMALL_DRIVERS 173
3. ALTERA_AVALON_JTAG_UART_SMALL 173
4. ALT_EXCEPTION_STACK 173
5. ALT_STACK_CHECK 174
6. ALT_NO_INSTRUCTION_EMULATION 174
7. ALT_TRAP_HANDLER 174
8. ALT_NO_CLEAN_EXIT 175
9. NIOS2_ICACHE_SIZE 175
10. ALT_ASM_SRC 175
11. ALT_SIM_OPTIMIZE 176
12. NIOS2_HAS_DEBUG_STUB 176
第10章 软件架构中的特殊宏定义 177
10.1 语言符号粘贴操作符(##) 177
10.2 __ALT_LOAD_SECTIONS, _ALT_LOAD_SECTIONS, ALT_LOAD_SECTIONS 177
10.3 ALT_LOAD_SECTION_BY_NAME 178
10.4 _INSTANCE 179
10.5 _INIT 180
第11章 汇编语言相关语法 181
11.1 NiosⅡ汇编器的特殊宏 181
1. %lo 181
2. %hi 181
3. %hiadj 181
4. %gprel 181
11.2 NiosⅡ汇编器特殊宏的应用示范 181
1. 把一个32位的立即数IMMED32赋予寄存器 181
2. 在汇编指令中寻址全局变量 182
11.3 NiosⅡ指令集 182
11.4 GCC汇编语言语法知识 182
第12章 链接脚本(Linker Script) 184
12.1 链接脚本基本概念 184
12.2 链接脚本的相关语法 185
1. ENTRY 185
2. INCULDE 185
3. INPUT 185
4. OUTPUT_FORMAT 185
5. OUTPUT_ARCH 185
6. KEEP 185
7. PROVIDE 186
8. MEMORY 186
9. (.) 187
10. LOADADDR 187
11. SECTIONS 187
12.3 NiosⅡ链接脚本中定义的符号 188
1. __alt_stack_pointer 188
2. __alt_stack_limit 188
3. __alt_exception_stack_pointer 188
4. __alt_exception_stack_limit 188
5. __alt_heap_start 188
6. __alt_heap_end 189
7. __bss_start 189
8. __bss_end 189
9. _gp 189
12.4 在源文件中使用链接脚本定义的符号 189
12.5 Linker Script输入节点 190
1. 默认节点属性 190
2. 自定义节点属性 190
12.6 Linker Script输出节点 191
12.7 Linker Script逻辑段 191
12.8 Linker Script如何控制代码的存储布局 191
12.9 NiosⅡ IDE自动生成的链接脚本 191
第13章 编译文件介绍 200
13.1 makefile相关文件 200
1. makefile.mk 200
2. app.mk 202
3. system.mk 202
4. generated_all.mk 202
5. app_rules.mk 202
6. system_rules.mk 203
7. generated_app.mk 203
8. common.mk 203
9. component.mk 203
10. gnu_rules.mk 203
11. gtf_rules.mk 204
13.2 其他文件 204
1. ptf文件 204
2. stf文件 204
3. cdtbuild文件 204
第14章 处理器操作模式及寄存器 205
14.1 操作模式 205
1. Normal模式 205
2. Debug模式 205
14.2 通用寄存器 205
14.3 控制寄存器 206
1. status(ctl0) 206
2. estatus(ctl1) 206
3. bstatus(ctl2) 206
4. ienable(ctl3) 206
5. ipending(ctl4) 206
6. cpuid(ctl5) 206
14.4 内建(builtin)函数 207
第15章 软件开发工具介绍 208
15.1 NiosⅡ集成开发环境及其相关工具 208
1. NiosⅡ IDE 208
2. Flash Programmer 208
3. Instruction Set Simulator 209
4. Quartus Ⅱ Programmer 209
15.2 Altera命令行工具 209
1. 命令行工具的位置 209
2. 命令行工具的使用 209
3. 命令行工具的帮助 209
4. NiosⅡ IDE命令行工具 209
5. 文件转换工具 210
15.3 GNU编译器工具链 211
15.4 软件库和嵌入式软体元件 211
1. Hardware abstraction layer (HAL) system library 211
2. MicroC/OS-Ⅱ RTOS 212
3. Lightweight IP TCP/IP stack 212
4. Newlib ANSI C standard library 212
5. Read-only zip file system 212
6. Example designs 212
第16章 VerifyFailed小结 216
16.1 nios2-download介绍 216
1. 何时使用nios2-download工具 216
2. nios2-download的对象 216
3. nios2-download的操作步骤 216
4. nios2-download的工作原理 216
16.2 VerifyFailed的可能原因 217
1. 物理板的问题 217
2. NiosⅡ系统的软硬件不同步 217
3. FPGA未用的I/O口设置不正确 217
4. JTAG信号干扰 217
5. 目标地址不属于RAM类型的地址范畴 218
6. 目标地址没有与CPU的data master总线互连 218
7. 存储器的数据引脚应为双向IO口 218
8. SDRAM的时序问题 218
9. NiosⅡ系统本身存在的缺陷 219
16.3 VerifyFailed解决方案 219
16.4 关闭verify功能 220
16.5 修改elf文件去除不要verify的部分 220
第17章 动态栈溢出检测功能 222
17.1 动态栈溢出检测的原理 222
17.2 动态栈溢出检测的实现 222
1. et寄存器 222
2. sp寄存器 223
3. 栈溢出检测的核心指令 223
4. 动态栈溢出检测的具体操作 223
17.3 独立异常栈 224
17.4 源文件 224
1. alt_stack.h 224
2. alt_sbrk.c 226
参考文献 230
|
精彩片段: |
|
书 评: |
前言 随着大规模集成电路技术的不断发展,嵌入式计算机系统开始了从MCU逐步过渡到SOC的新阶段。SOPC(System On a Programmable Chip,片上可编程系统)是Altera公司提出来的一种灵活、高效的SOC解决方案。它将处理器、存储器、IO接口、各种外围设备等系统设计需要的部件,集成到一个可编程逻辑器件上,构建成一个可编程的片上系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软、硬件在系统可编程的功能。SOPC技术大量采用IP复用、软硬件协同设计、自顶向下和自底向上混合设计的方法,使得整个设计在规模、可靠性、功能、性能指标、上市周期、开发成本、产品维护及硬件升级等多方面实现了最优化。 NiosⅡ处理器是Altera公司推出的32位RISC嵌入式处理器,它是SOPC的核心。具有超过200 DMIPS的性能,在FPGA中的实现成本最低只有35美分。处理器以软核形式实现,具有高度的灵活性和可配置性。结合Altera提供的配套开发工具QuartusⅡ、SOPC Builder以及NiosⅡ IDE,可以在几分钟内实现一个完善的系统。 本书结合作者多年应用Nios的经验及长期在EDACN专业论坛NiosⅡ版块担任版主职务积累的心得,从Nios嵌入式软件开发的各个角度层层揭开了NiosⅡ软件架构的真面目。 本书适合于电子工程、计算机、自动控制专业,以及对此类专业有兴趣的高年级本科生和研究生学习或自学NiosⅡ嵌入式软件开发。读者只要具备单片机硬件基础及C语言软件基础,并结合本书勤于实践,即可在短时间内成为NiosⅡ嵌入式软件开发的高手。 本书得到Altera上海代表处的大力支持,高级应用工程师陈燕女士在书稿编写过程中一直给予热心的帮助并提出很多宝贵的意见和建议,资深应用工程师何伟欣无私地贡献了自己的研究成果为本书添加精彩,大学计划的徐平波经理在整个出版过程中给予了热心的帮助和督促,在此一并致敬和表示谢意。另外,还要感谢好友匡晓霞、李琦、杨喆、张烨以及广大网友对我的支持和鼓励! 由于水平有限,文中难免存在不妥之处,敬请读者批评指正。
|
其 它: |
|
|
|