ulong procalarm(ulong time) { Proc **l, *f; ulong when, old; if(up->alarm) old = tk2ms(up->alarm - MACHP(0)->ticks); else old = 0; if(time == 0) { up->alarm = 0; return old; } when = ms2tk(time)+MACHP(0)->ticks; if(when == 0) /* ticks have wrapped to 0? */ when = 1; /* distinguish a wrapped alarm from no alarm */ qlock(&alarms); l = &alarms.head; for(f = *l; f; f = f->palarm) { if(up == f){ *l = f->palarm; break; } l = &f->palarm; } up->palarm = 0; if(alarms.head) { l = &alarms.head; for(f = *l; f; f = f->palarm) { if((long)(f->alarm - when) >= 0) { up->palarm = f; *l = up; goto done; } l = &f->palarm; } *l = up; } else alarms.head = up; done: up->alarm = when; qunlock(&alarms); return old; }
ulong procalarm(ulong time) { Proc **l, *f; ulong when, old; if(up->alarm) old = tk2ms(up->alarm - MACHP(0)->ticks); else old = 0; if(time == 0) { up->alarm = 0; return old; } when = ms2tk(time)+MACHP(0)->ticks; qlock(&alarms); l = &alarms.head; for(f = *l; f; f = f->palarm) { if(up == f){ *l = f->palarm; break; } l = &f->palarm; } up->palarm = 0; if(alarms.head) { l = &alarms.head; for(f = *l; f; f = f->palarm) { if(f->alarm > when) { up->palarm = f; *l = up; goto done; } l = &f->palarm; } *l = up; } else alarms.head = up; done: up->alarm = when; qunlock(&alarms); return old; }
void DHT22_Read() { if( dhtstate == IDLE || dhtstate == READY ) { #ifdef DHT22_PIN_DEBUG cbi(PORTD,7); #endif dhtstate = START; // Configure the pin as GPIO out to send the Start signal sbi(DHT22_DIR, DHT22_PIN); cbi(DHT22_PORT, DHT22_PIN); // send start signal // trigger compare interrupt in 1 ms OCR1B = clock() + ms2tk(1.0); sbi(TIFR1, OCIE1B); sbi(TIMSK1, OCIE1B); } }
ulong procalarm(ulong time) { Proc **l, *f; ulong when, old; old = up->alarm; if(old) old = tk2ms(old - MACHP(0)->ticks); if(time == 0) { up->alarm = 0; return old; } when = ms2tk(time)+MACHP(0)->ticks; if(when == 0) when = 1; qlock(&alarms); l = &alarms.head; for(f = *l; f; f = f->palarm) { if(up == f){ *l = f->palarm; break; } l = &f->palarm; } l = &alarms.head; for(f = *l; f; f = f->palarm) { time = f->alarm; if(time != 0 && (long)(time - when) >= 0) break; l = &f->palarm; } up->palarm = f; *l = up; up->alarm = when; qunlock(&alarms); return old; }