函数pcmciaJobAdd的作用,就是将处理函数及其参数发送出去 - longkai/lab.newgxu.cn GitHub Wiki

void pcmciad (void)

该函数由pcmciaInit() spawn在任务级运行,而不是在中断级运行。它的优先级为2,不要轻易删除该任务或修改该任务的优先级。

该函数是一个无限循环,它不停接收pcmciaMsgQId消息队列,如果收到新的有效的消息,就会自动运行消息中的函数及参数。为了确保消息的可靠发送,pcmciad函数的另一个任务就是检查看数否消息发生了新的丢失。它的检查机制是这样的:在发送的时候有一个变量pcmciaMsgsLost,每发送失败一次,pcmciaMsgsLost加1。而在pcmciad接收到消息的时候它会检查pcmciaMsgsLost的数值,如果发现pcmciaMsgsLost的数值和上次运行时数值不一致,就说明发生了新的消息传输失败。这种机制确保发生消息发送失败的情况下在ISR级别只是将数据记录下来,并不马上提示,从而确保中断处理程序尽可能快。而将消息发送失败的的信息打印出来的工作则是在任务级(也就是函数pcmciad)才完成的。

cisLib库文件的作用是读取PCMCIA设备的CIS(保存在attribute memory中),并根据这些基本信息对attiribute memory配置寄存器。

  1. STATUS cisGet

(

int sock

)

该函数的作用从sock槽中的卡中读取CIS信息、对PC卡进行配置、并为PC卡分配相应的资源。

  1. LOCAL STATUS cisTupleGet

    (

    int sock

    )

获取PCMCIA设备的tuple并将其加入到队列pCard->cisTupleList中。关于tuple在CIS中的存放前面已经说过,这里需要说明的是tuple分两类,一类描述了PCMCIA设备的基本信息,这类tuple也是需要加入到cisTupleList中的tuple,而另一类tuple并不说明PCMCIA设备的配置,它只是说明tuple链的连接情况,函数cisTupleGet则是根据这类tuple建立起了一个完整的cisTupleList链表,建立起来的链表则不包含这类tuple信息。

  1. LOCAL STATUS cisConfigGet

    (

    int sock

    )

从pCard->cisTupleList中获取PCMCIA设备的配置信息。主要是两类tuple。CISTPL_CONFIG和CISTPL_CFTABLE_ENTRY。从这两个tuple中获取PCMCIA设备的一些配置信息。

有了这些信息之后就可以对PCMCIA的功能进行配置。