want_king 发表于 2006-8-8 19:39:15

如果大家不想回答,请给我skyeye的信箱!谢谢

我做的工作有一部分和skyeye的工作的重叠的,所以对sim/arm看得比较多,最近准备开始修改sim/arm。但是我发现还是有很多地方不太理解,甚至觉得有错误。如果能和skyeye联系,向他们请教,那对我就非常有帮助。

我先贴我的问题
我对skyeye的sim/arm的一些疑问,主要关于中断。
当中断信号产生时,sim/arm在进入中断前要判断中断信号是否能够产生中断,主要从:
1.中断同时发生的问题(sim/arm已经考虑了)
2.中断处理过程中即arm的异常模式中发生中断的问题(sim/arm好像没怎么考虑)
如果arm规定在异常模式中不能产生新的中断,那么大家给我提个醒,下面的就不用看了。不过我看了一些资料觉得应该能产生新的中断。下面有些罗嗦,结论先给出就是sim/arm没有考虑中断处理过程中新中断是否能产生的问题。不知道分析的对不对请大家指点。


下面我根据skyeye-1.0.0来谈谈我对这两点的分析,从指令执行过程来看异常类型中:
   1.未定义指令;
   2.数据访问中止;只有在指令已定义的条件下,才会有数据访问才会有数据访问中止;
   3.预取指令中止,这是在指令执行时的一个并行事情,它出现并不会影响指令的执行,会使取出的指令为SWI,成为一条SWI指令;
4.SWI是一条指令。
   这几个异常是不会同时出现的,在一条指令执行完后,会检测FIQ、IRQ、RESET引脚;这三个异常是会同时出现的但不会和前面的几个异常情况同时出现。
//in skyeye-1.0.0\arch\arm\common\armemu 537行
If (state->Exception)
if (state->NresetSig == LOW) ……………..优先级1
else if (!state->NfiqSig && !FFLAG)……………. 优先级3
else if (!state->NirqSig && !IFLAG) ………………. 优先级4
采用这种就解决的中断同时发生的问题,所以下面我们就要分析第2个问题。
state->Exception是中断使能,这三个总的使能
state->NfiqSig是快速中断引脚,FFLAG是判断CPSR.F呢还是作为可以在中断处理中发生新中断的标志呢?作为CPSR.F就是快速中断使能,在快速中断使能的情况下发生快速中断引脚低电平(有效)这是符合一般中断规律的,所以我认为FFLAG是做为CPSR.F就是快速中断标志。
假如是作为在中断处理中可以发生新中断的标志,我认为这也是不可能的,因为如果作为可以发生新中断的标志那么在中断处理中,首先要表明现在正在执行什么样的中断处理。我从中断响应过程看,没有发现这样的变量赋值。
此外对于不同的异常模式,CPSR.I和CPSR.F的表示是不同的,好像
if (state->prog32Sig == LOW)                //in armsupp.c
state->Cpsr &= (CCBITS | INTBITS | R15MODEBITS);//INTBIT= =0xC0L,清除F位
然后就没有看到对这两个标志的处理了。这里也许需要修改一下。

ksh 发表于 2006-8-12 18:54:39

please send your question to maillist of skyeye developer.Here just for user of SkyEye
页: [1]
查看完整版本: 如果大家不想回答,请给我skyeye的信箱!谢谢