中止的处理分为三个部分:
1、中止检测:
arm架构下,中止监测部分的代码是需求用户自己开发的,能够参阅ambaIntrCtl.c,需求完成函数xxxIntLvlVecChk、xxxIntLvlVecAck、xxxIntLvlChg、xxxIntLvlEnable、xxxIntLvlDisable和xxxIntDevInit,在函数xxxIntDevInit中把其他几个函数别离挂载在sysIntLvlVecChkRtn、sysIntLvlVecAckRtn、sysIntLvlChgRtn、sysIntLvlEnableRtn和sysIntLvlDisableRtn这几个钩子函数上。xxxIntDevInit在sysLib.c中的sysHwInit2中调用,以初始化中止。
2、中止办理:
中止办理部分,BSP中需求调用两个函数,一个是intLibInit,另一个是xxxIntDevInit。后者的效果便是前面讲的挂接中止处理钩子函数。前者intLibInit是个比较要害的函数,三个参数设置了中止的个数和中止形式。内部处理中,依据中止的个数请求intVecTable数组,用户运用intConnect代码挂接的中止便是依据中止向量到表中查找方位然后赋以中止处理函数。中止形式分可抢占和不行抢占两种,别离对应INT_PREEMPT_MODEL和INT_NON_PREEMPT_MODEL。
3、中止处理:
依据vxWorks的完成代码,在excArchLib.c中有一张表:
LOCAL EXC_TBL excEnterTbl[NUM_EXC_VECS] =
{
/* no entry for branch through zero */
{ EXC_OFF_UNDEF, excEnterUndef},/* undefined instr */
{ EXC_OFF_SWI,excEnterSwi},/* software interrupt */
{ EXC_OFF_PREFETCH,excEnterPrefetchAbort}, /* prefetch abort */
{ EXC_OFF_DATA,excEnterDataAbort}, /* data abort */
/* no entry for old address exception */
{ EXC_OFF_IRQ,intEnt},/* interrupt request */
/* no entry for FIQ */
};
其间EXC_OFF_IRQ对应的即外部中止,缺省情况下,调用的是intEnt,可是正常运转的时分,BSP代码在intLibInit中会运用intIntRtnPreempt或许intIntRtnNonPreempt把intEnt替换掉,详细运用哪个由中止处理形式决议。
中止发生后,先发生外部中止反常,即IRQ,进入excExcHandle,excExcHandle查找列表excEnterTbl找到EXC_OFF_IRQ对应的处理函数intIntRtnPreempt或许intIntRtnNonPreempt,在intIntRtnPreempt或许intIntRtnNonPreempt里边,调用intVecTable里相应中止向量对应的中止处理函数。
vxworks Arm 架构下的中止
中断的处理分为三个部分:1、中断检测:arm架构下,中断监测部分的代码是需要用户自己开发的,可以参考ambaIntrCtl.c,需要实现函数xxxIntL…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/277016.html