void Show(void) { uint8 i; /* 初始化显示缓冲区 */ ShowCase[0] = ShowTable[0]; ShowCase[1] = ShowTable[0]; ShowCase[2] = ShowTable[0]; ShowCase[3] = ShowTable[0]; ShowCase[4] = ShowTable[10]; while (1) { for (i = 0; i < 5; i++) { P1 = 0xff; /* 关闭显示第i位 */ KdTxdByte(ShowCase); P1 = EbitData; /* 显示第i位 */ OSWait(K_SIG,0); /* 等待1/600秒(由定时器中断决定) */ }
OSWait(K_SIG,0); /* 等待1/600秒(由定时器中断决定) */ OSTimeTick(); /* 调用系统节拍处理程序 */ } } /*上面是关于陈明计先生的LED显示的SHOW程序*/
********************************************************************************************************/ void TimeSum(void) { while (1) { /* 让两个发光二极管闪动 */ ShowCase[4] = ~0xc0; OSWait(K_TMO,OS_TICKS_PER_SEC / 2); ShowCase[4] = ~0x00; OSWait(K_TMO,(OS_TICKS_PER_SEC + 1) / 2);
/* 计时并显示 */ TimeAdd[3]++; if (TimeAdd[3] >= 10) { TimeAdd[3] = 0; TimeAdd[2]++; if (TimeAdd[2] >= 6) { TimeAdd[2] = 0; TimeAdd[1]++; if (TimeAdd[1] >= 10) { TimeAdd[1] = 0; TimeAdd[0]++; if(TimeAdd[0] >= 10) { TimeAdd[0] = 0; } } } } ShowCase[0] = ShowTable[TimeAdd[0]]; ShowCase[1] = ShowTable[TimeAdd[1]]; ShowCase[2] = ShowTable[TimeAdd[2]]; ShowCase[3] = ShowTable[TimeAdd[3]]; } } /**********************end****************************************/ /*上面是关于陈明计先生的LED显示的TIME_SUM程序*/
那个LED 显示程序就是这两个
对于show程序的OSWAIT()函数采用 OSWait(K_SIG,0),而这个 OSWait(K_SIG,0)是一直等待信息的或者说是挂起任务
我有点不明白,为什么一定要用OSWait(K_SIG,0)而不用OSWait(K_TMO,N) 难道该程序真的有信息通知到这个show任务吗 到底它们怎样调度啊 优先级好像都没有设置好呢
明明是只有两个函数啊 他们是怎样达到互相通知的关系啊 有点不明白
希望大侠们指点指点....小弟刚学os呢 |