LOCAL void pcmciaCscIntr (void) 卡的状态发生改变时的中断处理 - longkai/lab.newgxu.cn GitHub Wiki
主要做下列事情:
l 搜索所有socket看数否有CSC事件发生。如果有CSC事件发生检查socket的当前状态(CSC事件说明状态发生了变化,但并不知道现在是什么状态所以需要调用(* pChip->status) (sock)来获取当前的状态)。如果发现了有新的未处理的状态,则要需要调用(* pCard->cscIntr) (sock, csc)函数处理中断。
l 如果有卡插入,它将会要求PCMCIA daemon在任务级通过调用cisGet()函数,cisGet()函数读取CIS并确定卡的类型并初始化该卡的设备驱动。
l 如果有卡拔出,则它将会要求PCMCIA daemon在任务级通过调用cisFree()函数,该该函数将释放cisGet()函数分配的资源。
-
STATUS pcmciaJobAdd
(
VOIDFUNCPTR func,
int arg1,
int arg2,
int arg3,
int arg4,
int arg5,
int arg6
)
这个函数的作用将一个函数指针及参数填入到PCMCIA_MSG结构变量并发送到队列中,供pcmciad接收并处理。
之所以这么做主要是因为Vxworks为强实时系统,对中断处理时间的要求非常严格,通常只需要简单的几个动作就要完成中断处理并退出中断处理程序ISR,但是实际上中断要进行的操作可能会比较复杂,它需要对中断的类型进行判断,不同的中断类型需要不同的处理程序,这些处理可能还要等待资源等等,这样将导致ISR的处理时间可能会变得非常厂,从而扰乱了处理的时序,为此ISR采取了消息队列的形式,出现一次中断迅速对中断类型进行分析,选择合适的处理程序,注意这是并不是要马上执行处理程序,而是通过消息队列将处理函数及其参数发送出去,由外部普通task完成程序的执行。