嗨 把我在大四他们毕业旧书摊买的书上的例子 敲下来
尽管例子说的对我目前没啥用 因为我目前对实时性 要求不是太高 对我有点**肋 弄不好还不稳定 不过 可以 瞧瞧
static WORD wSignals;
#define SIGNAL_A 0x0001
#define SIGNAL_B 0x0002
#define SIGNAL_C 0x0004
#define SIGNAL_D 0x0008
.
.
.
void interrupt vHandleDeviceA(void)
{
//重复设置A
wSignals |= SIGNAL_A;
}
void interrupt vHandleDeviceB(void)
{
//重复设置B
wSignals |= SIGNAL_B;
}
.
.
.
void main(void)
{
WORD wHighestPriorityFcn;
while (1)
{
/*等待事情发生*/
while(wSignals == 0)
;
/*找到后续处理中最高优先级的来进行处理*/
wHighestPrioritFcn = SIGNAL_A;
disable();
/*如果一个信号没有进行设置。。。。*/
while ( (wSignals & wHighestPriorityFcn) == 0) {
/*...进行下一步*/
wHighestPriorityFcn <<= 1;
}
/*重新设该信号;将要对其进行服务*/
wSignals &= ~wHighestPriorityFcn;
enable();
/*现在执行函数*/
switch (wHighestPriorityFcn)
{
case SIGNAL_A:
// 处理相关的活动
break;
case SIGNAL_B:
// 处理相关的活动
break;
。
。
。
。
}
}
}
|