二十三.异常向量表

1.ARM一上电就属于一种异常--reset,而且在工作过程中,难免会发生各种异常事件。所谓异常就是,处理器在执行某向特定任务,突然间某个事件发生,而且这个事件导致处理器不能再继续执行当前工作,必须停下手里工作去处理改事件,则称此类事件为异常事件,简称异常。

2.常见异常类型以及入口地址
2440:

6410:

虽然有两套入口地址,但是默认情况下,选择Normal address 作为异常向量,只有当设置了协处理器CP15的相关寄存器以后,才会启用High vector address,此时则忽略Normal address。

3.异常向量:
当一个异常发生的时候,处理器必然要去处理它,但是处理器要到什么地方去处理他呢?这个时候由硬件机制,处理器会跳转到一个固定地址去执行相关异常处理程序,而这个固定地址就是所谓的异常向量。

4.异常向量表:由七个异常向量及其处理函数跳转关系组成的一个“代码表”,之所以叫”表“代码编写以后的布局形状像是一张表,并非实际意义上的表格。

5.代码编写:;利用samba服务器,在Linux和Windows之间编写代码。(Windows工具写Linux服务器的代码)
(1)start.S
@****************************
@File:start.S
@
@Tiny6410裸机上学期代码
@****************************

.text
.global _start


@异常向量表
_start:
	b	reset
	ldr 	pc,	_Undefined_instruction
	ldr 	pc,	_Software_interrupt
	ldr	pc,	_Command_abort
	ldr	pc,	_Data_abort
	ldr	pc,	_Nothing_used
	ldr	pc,	_IRQ
	ldr	pc,	_FIQ
	
	
	
	
@存放实际异常入口地址开辟的存储单元	
_Undefined_instruction:
	.word Undefined_instruction
	
_Software_interrupt:
	.word Software_interrupt
	
_Command_abort:
	.word Command_abort
	
_Data_abort:
	.word Data_abort
	
_Nothing_used:
	.word Nothing_used
	
_IRQ:
	.word IRQ
	
_FIQ:
	.word FIQ


@各种实际的异常处理函数
Undefined_instruction:
	nop

Software_interrupt:
	nop

Command_abort:
	nop
	
Data_abort:
	nop
	
Nothing_used:
	nop
	
IRQ:
	nop
	
FIQ:
	nop
	
	
	
@上电复位以后就执行这里
reset:
	nop


	
	
	


(2)链接脚本jun-boot.lds
用OUTPUT_ARCH(arm)指明输出文件是要运行到arm平台
用ENTRY(_start)指明入口在_start标号处
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS {
	. = 0x50000000;
	. = ALIGN(4);
	.text :
	{
		start.o(.text)
		*(.text)
	}
	
	. = ALIGN(4);
	.data :
	{
		*(.data)
	}
	
	. = ALIGN(4);
	bss_start = .;
	.bss :
	{
		*(.bss)
	}
	bss_end = .;
}


(3)Makefile文件
all : start.o
	arm-linux-ld -Tg-boot.lds -o g-boot.elf $^
	arm-linux-objcopy -O binary g-boot.elf g-boot.bin
	
%.o : %.S
	arm-linux-gcc -g -c $^ -o $@

%.o : %.c
	arm-linux-gcc -g -c $^ -o $@
	
.PHONY: clean
clean:
	rm *.o *.elf *.bin *.bak
 


 
6.针对210的一个补充:BL1头信息的添加
210上电以后由厂商提供的Irom程序(BL0)将nandflash里面的BL1拷贝到iram里面运行,但是拷贝完成以后,他要进行校检,看看是不是拷贝的内容和用户指定的大小相等。而他拷贝文件(BL1)的大小计算方法为

就是扫描拷贝的文件中1的个数。然后和头里面的校检码进行比对,相等则执行后续程序,否则程序崩溃,停止执行。而头部的布局如下

很明显的表示了占用16B的空间,然后分四个部分,第二第四没有用到,第一和第三分别作为拷贝文件的大小控制参数,以及校检码,所以我们要用相同的校检算法将头信息补齐,故要用到210image工具,目的就是加入校检码和文件大小信息,否则没有校检码,Bl1在拷贝完以后是运行不了的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值