1.了解trap
关键词
简写 | 全称 | |
TCN | Trap Class Number | |
TIN | Trap Identification Number | |
Synch | Synchronous | |
Asynch | Asynchronous | |
NMI | Non-Maskable Interrupt | |
BTV | Base Trap Vector Table Pointer |
1)Trap发生的条件
Trap是由于诸如不可屏蔽中断(NMI)、指令异常、内存管理异常或非法访问等事件而发生的。Trap总是处于Active状态;它们不能被软件Disable。
2)Trap类型
TriCore体系结构为Trap指定了8个通用Class。每个Class都有自己的Trap处理程序,通过每个条目32字节的Trap向量访问,由硬件定义的TCN号索引。在每个Class中,特定的Trap由一个TIN(Trap Identification Number, TIN)来区分,在执行Trap处理程序的第一条指令之前,这个识别码由硬件加载到寄存器D[15]中。trap处理程序必须对D[15]中的值进行测试和分支,以到达特定TIN的子处理程序。
Trap可以进一步分为同步或异步,以及硬件或软件生成。下表列出了Trap类,总结和分类了每个类中预定义的特定Trap集,然后对它们进行了解释。
TC3xx有八种类型的Trap分别为Class0-Class7,通过TCN标识。每个Class的具体Trap通过TIN标识。确定TCN与TIN就可以确定具体故障。
Synchronous Traps
同步Trap与特定指令的执行或试图执行相关,或者与访问虚拟地址的尝试相关,而访问虚拟地址需要内存管理系统的干预。引起Trap的指令是精确的。
在执行超出该指令之前,Trap会立即被捕获并服务。
Asynchronous Traps
异步Trap与中断类似,因为它们与外部检测到的硬件条件相关联,并向核心发出信号。
不可屏蔽中断(NMI, Non-Maskable Interrupt),是外部事件。异步Trap和中断之间的区别在于,异步Trap是通过Trap向量而不是中断向量路由的。
它们不能被屏蔽,并且不会改变当前CPU的中断优先级编号。
Hardware Traps
硬件Trap是在硬件检测到异常情况时产生的。
在大多数情况下,异常条件与试图执行特定条件相关。例如非法指令Trap、内存保护Trap和数据内存错误Trap。
Software Traps
软件Trap是作为执行系统调用或断言指令的有意结果而产生的。
支持的断言指令为TRAPV (Trap on overflow)和TRAPSV (Trap on sticky overflow)。
系统调用由 SYSCALL 指令生成。
Unrecoverable Traps
不可恢复Trap是指软件无法恢复的Trap;也就是说,引发Trao的任务不能简单地重新启动。
在 TriCore 架构中,FCU (a fatal context Trap)是一个不可恢复的错误。
3)Trap向量表
BTV(Base Trap Vector Table Pointer)包含trap向量表的基址。当一个trap发生时,trap向量表中的入口地址由该trap的trap类生成,左移5位,然后与BTV寄存器的内容对齐。Trap Class的左移导致向量表中各个条目之间的间距为8个words(32字节)。
4)Trap定位
当Trap发生时,由硬件产生一个Trap标识符。trap标识符有两个组成部分:trap类号(TCN),用于索引trap向量表。trap识别号(TIN),它被加载到数据寄存器D[15]中。Trap类号左移5位,与BTV寄存器中的地址对齐,生成Trap处理程序的入口地址。
1、D[15]寄存器记录着TIN号。
2、D[4]寄存器记录着TCN号。异常发生后保存的值,D[4] = (TCN <<16) | TIN。
3、A[11]寄存器保留了函数的返回地址,可以通过A[11]来推测异常发生的函数。
4、Trap = BTV | TCN <<5; 将取得Tarp的入口地址,Trap的入口地址不是固定的。
2.实际使用
1)使用劳特巴赫实例分析
发生Trap会强制跳入Os_Hal_UnhandledExc函数,可以在该函数内打断点。