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

发布者:CrystalDawn最新更新时间:2025-02-21 来源: cnblogs关键字:异常向量表 手机看文章 扫描二维码
随时随地手机看文章

异常定义:


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


异常类型:


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


/********************************************************************

*名称: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


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


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中,否则终止。


关键字:异常向量表 引用地址:[国嵌笔记][032][异常向量表]

上一篇:[国嵌笔记][030][U-Boot工作流程分析]
下一篇:[国嵌笔记][033-034][设置svc模式]

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved