inside uboot (三) 异常向量表

1. 异常向量表概述

从上面的地址映射来看,中断向量表的地址为0xD0037400,因此如果我们想在SRAM中,也就是BL1中处理异常的话,

就需要把我们的异常向量表拷贝到这个地址上。或者我们可以在链接脚本中直接指定代码的地址。

如果在主内存中,我们要使用异常向量表的话,我们需要配置CP15协处理器中的VBAR寄存器。

2. 中断向量表代码

_start: b	resetldr	pc, _undefined_instructionldr	pc, _software_interruptldr	pc, _prefetch_abortldr	pc, _data_abortldr	pc, _not_usedldr	pc, _irqldr	pc, _fiq
#ifdef CONFIG_SPL_BUILD
_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
_pad:			.word 0x12345678 /* now 16*4=64 */
#else
_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
_pad:			.word 0x12345678 /* now 16*4=64 */
#endif	/* CONFIG_SPL_BUILD */

从上面代码可以看出,b reset后面就是异常向量表了,但是异常向量表的实际函数地址被通过一个CONFIG_SPL_BUILD的

宏分别定义。v210 的uboot被同过这个宏分别编译成了两个uboot,BL1和BL2,一个在SRAM中执行,一个在主内存中执行。

从上面代码可以看出,BL1中的异常函数什么也没有做,BL2中是有真正的实际用途的异常函数。

3. 设置异常向量表,在BL1中的异常向量表地址应该设置在0xD0037400这个地址上。但是搜索了整个uboot代码,并没有找

到。可以是因为BL1中的异常函数本身没有用处吧。下面说一下,在BL2中的异常向量表的地址设置。

4. BL2中的异常向量表设置代码。

/* Set V=0 in CP15 SCTRL register - for VBAR to point to vector */mrc	p15, 0, r0, c1, c0, 0	@ Read CP15 SCTRL Registerbic	r0, #CR_V		@ V = 0mcr	p15, 0, r0, c1, c0, 0	@ Write CP15 SCTRL Register

首先操作CP15的SCTLR寄存的的第13位为0,目的是将异常向量的基地址设置为0。

datasheet手册的寄存器说明见下图。

 

/* Set vector address in CP15 VBAR register */ldr	r0, =_startmcr	p15, 0, r0, c12, c0, 0	@Set VBAR

然后将异常向量表的地址设置到VBAR寄存器中,寄存器的地址说明见下图。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity3d教程游戏包含的一切文件导入资源

http://www.58player.com/blog-2327-954.html 导入资源 将文件增加至工程文件夹的资源 (Assets) 文件夹后,Unity 将自动检测文件。将任何资源 (Assets) 放入资源文件夹后,资源 (Assets) 将显现在工程视图 (Project View) 中。 此工程视图 (Project Vie…

javascript 事件知识集锦

1.事件委托极其应用 转载的链接: http://www.webhek.com/event-delegate/#comments 2. 解析javascript事件机制 转载链接: http://www.nowamagic.net/javascript/js_EventAnalysis.php转载于:https://www.cnblogs.com/alicePanZ/p/4097017.html

ubuntu软件(查看文件差异)

你可以在ubuntu系统自带的软件---》ubuntu软件中心输入:meld diff 就可以安装。转载于:https://www.cnblogs.com/kobigood/p/4097411.html

关闭日志

/** Used by tools which include only core to disable log file creation. */ #ifndef ALLOW_LOG_FILE#define ALLOW_LOG_FILE 0 #endif 修改引擎源码的ALLOW_LOG_FILE为0

【Linux/Ubuntu学习6】unbuntu 下载android源码

在Windows下安装Cygwin,通过Cygwin也可在Windows里通过本文的下载步骤下载Android源码。以下为在Ubuntu下下载Google Android4.4源码的步骤: 1. 安装curl 与 git sudo apt-get install curl sudo apt-get install git-core 2 安装 Repo a) 建立Repo的安装…

瀑布流插件|jquery.masonry|使用demo

MaonsryInfinite-Scroll实现滚动式分页&#xff0c;网上有很多&#xff0c;这里只说&#xff1a; 瀑布流插件的一个基本使用&#xff0c;附上基本功能的demo <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8&quo…

有关GNU GCC的基本内容整理

一、GCC简介 GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器集合&#xff09;是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子&#xff0c;由自由软件基金会 以GPL协议发布。当年Richard Stallman 刚开始写作 GCC 的时候&am…

[UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()

相关内容&#xff1a; C实现动态加载的问题&#xff1a;LoadClass<T>()和LoadObject<T>() http://aigo.iteye.com/blog/2281558C实现动态加载UObject&#xff1a;StaticLoadObject()&#xff1b;以Texture和Material为例 http://aigo.iteye.com/blog/2268056 这…

inside uboot (五) DRAM的构成

DRAM(Dynamic Random Access Memory)&#xff0c;即动态随机存取存储器. 1. Storage Cell 如上图&#xff0c;一个DRAM的基本存储单元由4个部分组成。 Storage Capacitor&#xff0c;即存储电容&#xff0c;它通过存储在其中的电荷的多和少&#xff0c;或者说电容两端电压差的…

使用json-lib进行Java和JSON之间的转换

转自http://www.cnblogs.com/mailingfeng/archive/2012/01/18/2325707.html 1. json-lib是一个java类库&#xff0c;提供将Java对象&#xff0c;包括beans, maps, collections, java arrays and XML等转换成JSON&#xff0c;或者反向转换的功能。 2. json-lib 主页 &#xff1a…

inside uboot (六) DRAM芯片的控制线及时序

Clock &#xff08;差分信号&#xff0c;CLK和nCLK&#xff09;为时钟信号 &#xff08;同一个rank共用&#xff09; CKE 时钟信号使能 &#xff08;同一个rank共用&#xff09; RAS 为行选…

MVC — 初步理解IIS工作流程

声明&#xff1a;本文只是自己的总结和积累。IIS7.x 目录 IIS流程及组成部分ASP.NET流程及组成部分IIS与ASP.NET MVC一、IIS流程及组成部分  1、Http.SYS&#xff1a;负责监听HTTP请求&#xff08;它不属于IIS范畴&#xff0c;但是和IIS联系紧密&#xff09; Http.SYS和IIS是…

卷积积分这样学!

卷积积分是一种数学运算&#xff0c;那么既然是数学运算&#xff0c;那么就得有数学的特性——定义、性质、定理。 本文将从卷积积分的理论、案例、求解方法、知识图谱四方面介绍卷积积分&#xff01; 一、【理论】卷积积分的理论 卷积积分定义&#xff1a; 卷积图解01 卷积…

Canvas应用绚烂效果-creatjs实现

js文件var content;//画布var stage;//舞台var spriteSheet;//精灵列表类var sprite;//精灵window.οnlοadfunction(){ //获取画布 contentdocument.getElementById_x_x_x_x_x_x("canvas"); //画布上创建舞台 stagenew createjs.Stage(content); //舞…

世界地图并不是世界的真实样貌!甚至误差非常大

现在所用的世界地图并不是世界的真实样貌&#xff0c;甚至误差大的离谱。 地球属于三维球体&#xff0c;想完整地表现到二维平面上是不可能的&#xff0c;必须牺牲一些真实属性。因为三维降到二维肯定存在扭曲失真&#xff0c;这是维度差异所决定的&#xff0c;不可避免。 我们…

error MSB6006: cmd.exe exited with code 3

利用vs2012和qt5.5.1&#xff0c;在编译例子时发生如下错误&#xff1a; C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(172,5): error MSB6006: “cmd.exe”已退出&#xff0c;代码为 3。 图片如下&#xff1a; 解决办法如下&#x…

OSGI(面向Java的动态模型系统)

http://baike.baidu.com/subview/362847/6280632.htm?fraladdin 转载于:https://www.cnblogs.com/suifengbingzhu/p/4104109.html

JQuery方法

1、replace var str "I am a man"; str.replace(a,b); 说明&#xff1a;jquery的replace()函数默认替换第一项&#xff1b; var re new RegExp(a,g); str.replace(re,b); 说明&#xff1a;RegExp是正则表达式对象&#xff0c; g表示替换全部 2、json与对象的转换 v…

数学天才用5万字让你读懂:微积分!

前面接连发了三篇麦克斯韦方程组的文章&#xff08;积分篇、微分篇和电磁波篇&#xff09;&#xff0c;从理论上来说&#xff0c;讲麦克斯韦方程组不讲微积分是不行的&#xff0c;因为人家本来就是一组积分方程和一组微分方程。 但是&#xff0c;为了让更多人&#xff0c;尤其是…