当前位置:首页 > 工业技术
NiosⅡ软件架构解析
NiosⅡ软件架构解析

NiosⅡ软件架构解析PDF电子书下载

工业技术

  • 电子书积分:10 积分如何计算积分?
  • 作 者:蔡伟纲编著
  • 出 版 社:西安:西安电子科技大学出版社
  • 出版年份:2007
  • ISBN:9787560619224
  • 页数:230 页
图书介绍:本书从复位、中断、编程环境、设备驱动以及应用程序二进制接口5个方面对NiosⅡ软件架构进行横向揭密。
《NiosⅡ软件架构解析》目录

第一部分 横向揭密 3

第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.CrtO.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

第二部分 纵向解析 141

第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 <COMPONENT_NAME>_INSTANCE 179

10.5 <COMPONENT NAME>_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(ct10) 206

2.estatus(ct11) 206

3.bstatus(ct12) 206

4.ienable(ct13) 206

5.ipending(ct14) 206

6.cpuid(ct15) 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

相关图书
作者其它书籍
返回顶部