zoukankan      html  css  js  c++  java
  • [国嵌笔记][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

    /********************************************************************
    *名称: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中,否则终止。

  • 相关阅读:
    LDA线性判别分析原理及python应用(葡萄酒案例分析)
    运用sklearn进行主成分分析(PCA)代码实现
    主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
    Eclipse开发Android项目报错解决方案详细教程,最新版一篇就够了!
    深度学习模型调优方法(Deep Learning学习记录)
    mnist手写数字识别——深度学习入门项目(tensorflow+keras+Sequential模型)
    熵、联和熵与条件熵、交叉熵与相对熵是什么呢?详细解读这里有!
    2020 年百度之星程序设计大赛
    2020年百度之星程序设计大赛-初赛二
    Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)
  • 原文地址:https://www.cnblogs.com/d442130165/p/4904829.html
Copyright © 2011-2022 走看看