vxWorks中基于mips架构当中断了后执行的第一个指令是什么?

2024-05-13 04:38

本文主要是介绍vxWorks中基于mips架构当中断了后执行的第一个指令是什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在基于mips架构的vxworks中,中断来了之后执行的第一个指令再那里?

一,初始化

关于中断以及tlb异常函数存储再palDesc中,当然了其地址也再其中。

MIPS_PAL_DESC palDesc = { "unknown" };
相关的结构体设置:
typedef struct{char		*version;	/* PAL version string */int			coreNum;	/* processor number */MIPS_EXC_VECTOR	tVec;MIPS_EXC_VECTOR	xVec;MIPS_EXC_VECTOR	cVec;MIPS_EXC_VECTOR	eVec;MIPS_MMU_INFO	tlb;  MIPS_CACHE_INFO	iCache;MIPS_CACHE_INFO	dCache;MIPS_CACHE_INFO	l2Cache;MIPS_CACHE_INFO	l3Cache;int			mmuType;	/* CR bits 9:7 */BOOL		hasCP2;BOOL		hasWatch;BOOL		hasFPU;} MIPS_PAL_DESC;
typedef struct{VIRT_ADDR * vectorAddr;	/* typically [T,X,C,E]_Vec */VIRT_ADDR * excHandler;	/* typically exc[Tlb,Xtlb,Cache,Norm]Vec */UINT      excSize;		/* size of handler copied to vectorAddr */} MIPS_EXC_VECTOR;
其初始化的函数调用:
usrInit-->sysStart-->palInit-->palDescInit
写入的中断的向量的地址:
void palDescInit (void){bzero((char *)&palDesc, sizeof(palDesc));palDesc.coreNum = 0;palDesc.version = "1.0";/* executing a mapped kernel */palDesc.tVec.vectorAddr = (VIRT_ADDR *)T_VEC;palDesc.tVec.excHandler = (VIRT_ADDR *)mmuMipsTlbVec;palDesc.tVec.excSize    = mmuMipsTlbVecSize;palDesc.xVec.vectorAddr = (VIRT_ADDR *)X_VEC;palDesc.xVec.excHandler = (VIRT_ADDR *)mmuMipsXtlbVec;palDesc.xVec.excSize    = (UINT)mmuMipsXtlbVecSize;palDesc.cVec.vectorAddr = (VIRT_ADDR *)C_VEC;palDesc.cVec.excHandler = (VIRT_ADDR*)excCacheVec;palDesc.cVec.excSize    = (UINT)excCacheVecSize;palDesc.eVec.vectorAddr = (VIRT_ADDR *)E_VEC;palDesc.eVec.excHandler = (VIRT_ADDR *)excNormVmVec;palDesc.eVec.excSize    = (UINT)excNormVmVecSize;
}
#define	K0BASE		0x80000000
#define	T_VEC		K0BASE			/* tlbmiss vector */
#define	X_VEC		(K0BASE+0x80)		/* xtlbmiss vector */
#define	C_VEC		(K1BASE+0x100)		/* cache exception vector */
#define	E_VEC		(K0BASE+0x180)		/* exception vector */

二,把函数写入地址


把函数写入到对应地址的函数调用:

usrInit-->excVecinit-->vecInit
STATUS excVecInit(void)
{.../* Load tlb and Xtlb vectors */vecInit (&palDesc.tVec);vecInit (&palDesc.xVec);/* Load cache exception vector */vecInit (&palDesc.cVec);/* Load normal/interrupt vector */vecInit (&palDesc.eVec);...
}
/*把函数写入到对应的地址中去*/
LOCAL void vecInit(MIPS_EXC_VECTOR * vectorDesc){/* load the handler routine and invalidate the I-cache */if (vectorDesc->excSize){bcopy ((const char *) vectorDesc->excHandler,(char *) vectorDesc->vectorAddr, vectorDesc->excSize);CACHE_TEXT_UPDATE (vectorDesc->vectorAddr, vectorDesc->excSize);}}

也就是说当中断来了之后,cpu会自动调转到地址E_VEC(0X8000_0180),去执行E_VEC地址出存储的函数excNormVmVec,进行最初的中断分发。



这篇关于vxWorks中基于mips架构当中断了后执行的第一个指令是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984699

相关文章

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)