嵌入式学习-uboot-lesson4.1-异常向量表
来源:互联网 发布:mac os x不支持二进制 编辑:程序博客网 时间:2024/05/24 06:35
一
关于异常,在ARM Architecture Reference Manual.pdf中,描述如下
其大意是:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。(也就是中断)
二
异常共7种:
当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址即上图的Normal address或者High vector address 处去执行异常处理程序,而这个固定的地址,就称之为异常向量。
注意:具体是Normal address还是High vector address 是和CP15协处理器有关,默认是Normal address,当配置为高位时,跳转到High vector address。
三
所谓的异常向量表,是指由7个异常向量及其处理函数跳转关系组成的表:
0x00000000: b reset0x00000004: ldr pc, _undefined_instruction0x00000008: ldr pc, _software_interrupt0x00000008: ldr pc, _software_interrupt0x0000000c: ldr pc, _prefetch_abort0x00000010: ldr pc, _data_abort0x00000014: ldr pc, _not_used0x00000018: ldr pc, _irq0x0000001c: ldr pc, _fiq
注意:0x00000014 这个地址没有使用
四
下面贴出代码,主要有三个 start.S gboot.lds Makefile
start.S
@****************************@name: start.S@by : stone@time: 2016.6.23@function: 异常向量表@****************************.text.global _start @将_start声明为全局变量_start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq undefined_instruction: @处理未定义指令异常 nopsoftware_interrupt: @软中断 nopprefetch_abort: @预取指令异常 nopdata_abort: @数据访问异常 nopnot_used: @空位 nopirq: @中断 nopfiq: @快速中断 nopreset: @reset nop
gboot.lds
/************************name : gboot.lds*by : stone*time : 2016/06/23*function : 链接器脚本***********************/OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS { . = 0x50008000; /*6410的内存起始地址*/ . = ALIGN(4); .text : /*代码段*/ { start.o (.text) *(.text) } . = ALIGN(4); .data : /*数据段*/ { *(.data) } . = ALIGN(4); bss_start = .; .bss : /*bss段*/ { *(.bss) } bss_end = .;}
Makefile
all: start.o arm-linux-ld -Tgboot.lds -o gboot.elf $^ arm-linux-objcopy -O binary gboot.elf gboot.bin%.o : %.S arm-linux-gcc -g -c $^%.o : %.c arm-linux-gcc -g -c $^.PHONY: cleanclean: rm *.o *.elf *.bin
菜鸟一枚,如有错误,多多指教。。。
0 0
- 嵌入式学习-uboot-lesson4.1-异常向量表
- uboot异常向量表---嵌入式回归第六篇
- 嵌入式学习-uboot-lesson4.2-设置SVC模式
- 嵌入式学习-uboot-lesson4.3-关闭看门狗和中断
- 嵌入式学习-uboot-lesson4.4-关闭MMU和cache
- 嵌入式学习-uboot-lesson4.5-外设基地址初始化
- ARM异常向量表的学习
- 异常向量表
- 设置异常向量表
- bootloader 异常向量表
- 异常向量表
- 异常向量表
- 异常向量表
- 6、异常向量表的学习---设置SVC模式
- u-boot异常向量表
- 二十三.异常向量表
- 异常向量表的设定
- Bootloader之异常向量表
- Elasticsearch java API (2)
- hibernate5.2使用注解方式进行增删改查
- swift3.0和Objective-C交互事项(转)
- OPENWR更改私有参数
- 文章标题
- 嵌入式学习-uboot-lesson4.1-异常向量表
- Android中通过socket建立长连接实现推送功能
- 如何实现界面的跳转
- java分层概念
- NotRxJava懒人专用指南-RxJava的演进过程
- Eclipse怎样快速去掉注释?
- RPC、Webservice、RMI、JMS的区别
- windows系统托盘及托盘菜单
- ReactJS学习系列课程1(ReactJS简介)