uboot异常向量表---嵌入式回归第六篇

异常向量表:

1. 异常向量表定义:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件

2. 异常类型:七种异常(这个前面有提到过)


3. 异常入口:

可以看到Normal address这一栏 ,这个地址表示某个异常发生时,处理器会自动的跳转这个地址来执行这个地方的程序,也就是当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量。(从表可以有两组异常向量地址可以选择,这个可以通过CPRS15寄存器来配置)

4. 向量表:


下面根据上面的知识点和datasheet写一个最简单的uboot基本起始代码,就是相当一个简单开机执行步骤!

这里包含一个Makefile, 一个start.S文件, 一个链接器脚本gboot.lds文件

start.S

<span style="font-size:18px;">.text
.global	_start

_start:
		b	reset	@跳转到reset标号处 0地址处理就的是reset异常模式					
		ldr	pc, _undefined_instruction	@ldr伪指令 相当于装载指令
		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:
		nop

software_interrupt:
		nop

prefetch_abort:
		nop

data_abort:
		nop

not_used: @地址0x00000014处 这里什么也不做
		nop

irq:
		nop

fiq:
		nop

reset:
		nop
</span>
gboot.lds

<span style="font-size:18px;">OUTPUT_ARCH(arm)
ENTRY(_start)/*ENTRY表示程序的入口是在_start标号处*/
SECTIONS {
	. = 0x50008000;/*链接器脚本中定义程序在内存中运行的起始地址*/
	
	. = ALIGN(4);/*4字节对齐*/
	.text :/*这里是代码段*/
	{
	start.o (.text)/*第一个文件是start.o*/
	*(.text)
	}

	. = ALIGN(4);
	.data : /*数据段*/
	{
	*(.data)
	}
	
	. = ALIGN(4);
	bss_start = .; /*这里用一个变量把bss段起始位置记录下来*/
	.bss : /*bss段*/
	{
	*(.bss) 
	}
	bss_end = .;/*这里用一个变量把bss段结束地址记录下来*/
}
</span>

Makefile

<span style="font-size:18px;">all: start.o #最终目标
	arm-linux-ld -Tgboot.lds -o gboot.elf $^ #生成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: clean
clean:
	rm *.o *.elf *.bin

</span>

这里特别注意这里三种不同格式文件的注释方式:(编译回显的乱码可以加选项去掉)


后边就可以将gboot.bin下载到开发板上运行了!不过这时候是什么效果也看不到的!万事开头难!



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值