博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设置异常向量表
阅读量:4285 次
发布时间:2019-05-27

本文共 1819 字,大约阅读时间需要 6 分钟。

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

ARM处理器支持的异常类型为:

这里写图片描述

由图可知,ARM处理器支持7种异常类型,分别是重新启动,未定义指令,软中断,预取异常,数据异常,中断,快速中断。

异常向量:当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量。根据上表,可以知道,当发生reset异常时,处理器会跳转到0x00000000这个地址,执行该地址的指令。从图中可以看出,每个异常类型对应有两个地址,普通地址和高位地址。一般情况下,发生异常时处理器会跳转到普通地址执行指令,但也可以通过配置协处理器CP15来使处理器跳转到高位地址。

异常向量表:

这里写图片描述

下面列出设置异常向量表的代码start.S,以及链接脚本gboot.lds,以及makefile(针对芯片2440)

start.S:

.text.global _start_start:    b   reset                           ldr pc, _undefined_instruction      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:    nopsoftware_interrupt:    nopprefetch_abort:    nopdata_abort:    nopnot_used:    nopirq:    nopfiq:    nopreset:    nop

链接脚本gboot.lds:

OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS {    . = 0x30008000;    . = ALIGN(4);    .text :    {    start.o (.text)    *(.text)    }    . = ALIGN(4);    .data :     {    *(.data)    }    . = ALIGN(4);    bss_start = .;    .bss :     {    *(.bss)     }    bss_end = .;}

makefile:

all: start.o     arm-linux-ld -Tgboot.lds -o gboot.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: cleanclean:    rm *.o *.elf *.bin

对于2440和6410,有这几个文件已经足够了,但对于210芯片,还需要给BL1添加头信息。

210芯片的BL1前都要添加一个16byte的头信息,这是由一开始就固化在iROM的BL0决定的。iROM的BL0会将BL1拷贝到iRAM,在拷贝完成后BL0会进行一个校验,它会对BL1进行计算,算出一个校验码,并且与BL1中头信息中的校验码进行比对,如果比对成功则表示拷贝成功,BL1才能运行。

你可能感兴趣的文章
2014校园招聘_腾讯2014校园招聘
查看>>
ExtJs4.2学习--Ext.tab.Panel 选项卡
查看>>
mybatis+spring+struts2框架整合
查看>>
你真正理解java的字符类型了吗?(bit,byte,short,int等字符类型)
查看>>
数据挖掘开源软件:WEKA基础操作
查看>>
Python一些容易忽略的知识
查看>>
Ubuntu(-13.10)中安装JDK图文详解教程
查看>>
Hadoop2.2.0单节点安装和配置环境图文详解
查看>>
数据挖掘学习笔记--决策树C4.5
查看>>
数据挖掘学习笔记之人工神经网络(一)
查看>>
数据挖掘学习笔记之人工神经网络(二)
查看>>
人工神经网络关键核心知识点
查看>>
贝叶斯学习--极大后验概率假设和极大似然假设
查看>>
贝叶斯学习--极大后验假设学习
查看>>
朴素贝叶斯分类器
查看>>
贝叶斯学习举例--学习分类文本
查看>>
hadoop HDFS原理基础知识
查看>>
数据挖掘十大算法----EM算法(最大期望算法)
查看>>
android StrictMode应用
查看>>
TabHost的两种使用方法
查看>>