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

相关文章

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War