[国嵌笔记][032][异常向量表]

异常定义:

因为内部或外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件

 

异常类型:

1.reset

0x00000000

2.undefine instructions

0x00000004

3.software interrupt(swi)

0x00000008

4.prefetch bort(instruction fetch memory abort)   0x0000000C

5.data abort(data access memory abort)

0x00000010

6.irq(interrupt)

0x00000018(注意:0x00000014没有使用)

7.fiq(fast interrup)

0x0000001C

 

异常向量:

当一种异常发生的时候,arm处理器会跳转到对应异常的固定地址去执行异常处理程序,而这个固定的地址,就称为异常向量

 

异常向量表:

由七个异常向量及其处理函数跳转关系组成的表叫做异常向量表

 

代码编写:

1.start.S

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/********************************************************************
*名称:iboot
*作者:D
*时间:2015.10.23
*备注:2440引导(bootloader)的第一阶段启动代码(BL1)
********************************************************************/
.text
.global _start
_start:
/********************************************************************
*1.核心初始化
********************************************************************/
 
/********************************************************************
*1.1设置异常向量表
********************************************************************/
//异常向量跳转表
    b reset
    ldr pc, _undefine_instrucitions
    ldr pc, _software_interrput
    ldr pc, _prefetch_abort
    ldr pc, _data_abort
    ldr pc, _not_use
    ldr pc, _irq
    ldr pc, _frq
 
//异常向量地址表
_undefine_instrucitions: .word undefine_instrucitions
_software_interrput: .word software_interrput
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_use: .word not_use
_irq: .word irq
_frq: .word frq
 
//异常向量处理函数
/*
*名称:undefine_instrucitions
*描述:当发生未定义指令异常时的处理函数
*/
undefine_instrucitions:
    nop
 
/*
*名称:software_interrput
*描述:当发生软件中断异常时的处理函数
*/
software_interrput:
    nop
 
/*
*名称:prefetch_abort
*描述:当发生指令预取异常时的处理函数
*/
prefetch_abort:
    nop
 
/*
*名称:data_abort
*描述:当发生数据访问异常时的处理函数
*/
data_abort:
    nop
 
/*
*名称:not_use
*描述:未使用函数,用来占空
*/
not_use:
    nop
 
/*
*名称:irq
*描述:当发生中断异常时的处理函数
*/
irq:
    nop
 
/*
*名称:frq
*描述:当发生快速中断异常时的处理函数
*/
frq:
    nop
 
/*
*名称:reset
*描述:当发生复位时的处理函数
*/
reset:
    nop

 

2.iboot.lds

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
OUTPUT_ARCH(arm)   输出的架构是arm
ENTRY(_start)   程序的入口在_start
SECTIONS{
    . = 0x30008000;
     
    . = ALIGN(4);
    .text :
    {
        start.o(.text)
        *(.text)
    }
 
    . = ALIGN(4);
    .data :
    {
        *(.data)
    }
 
    . = ALIGN(4);
    bss_start = .;   bss段的起始位置
    .bss :
    {
        *(.bss)
    }
    bss_end = .;   bss段的结束位置
}

 

3.Makefile

1
2
3
4
5
6
7
8
9
10
11
12
all : start.o
    arm-linux-ld -Tiboot.lds $^ -o iboot.elf
    arm-linux-objcopy -O binary iboot.elf iboot.bin
     
%.o : %.S
    arm-linux-gcc -g -c $^ -o $@
     
%.o : %.c
    arm-linux-gcc -g -c $^ -o $@
     
clean:
    rm *.o *.elf *.bin

 

 

210处理器bootloader需要加头。在BL0阶段把BL1复制到iRAM的时候需要对校验信息进行校验。首先,计算BL1的校验和。然后,和BL1中加头的部分的校验和进行对比。如果相匹配那么复制BL1到iRAM中,否则终止。

posted @   盛夏夜  阅读(439)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示