[国嵌笔记][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中,否则终止。
分类:
嵌入式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术