From 495bcb6f508f1da654795c7f3e0379ec1d63751e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 2 Jan 2012 16:20:44 +0000 Subject: blocking on shared resources --- kernel/adc.c | 4 ++-- kernel/rgb.c | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/kernel/adc.c b/kernel/adc.c index 76c9c0d..ac28789 100644 --- a/kernel/adc.c +++ b/kernel/adc.c @@ -38,9 +38,9 @@ adc(void *arg) ADMUX = i & MUXMASK; ADCSRA |= _BV(ADSC); loop_until_bit_is_clear(ADCSRA, ADSC); - //cli(); + wait(4); a->value[i] = ADCW; - //sei(); + signal(4); } wait(0); fprintf(stderr, "\n%8lx%8x", now(), a->value[0]); diff --git a/kernel/rgb.c b/kernel/rgb.c index 0cf9a96..b3f4241 100644 --- a/kernel/rgb.c +++ b/kernel/rgb.c @@ -32,9 +32,12 @@ rgb(void *arg) uint8_t r, g, b, v = 0; for (;;) { + wait(4); + v = *a->v >> 2; /* 10bit to 8bit */ + signal(4); + i = (i + 1) % 360; - //hsv(&r, &g, &b, i, v, v); - hsv(&r, &g, &b, i, 255, 255); + hsv(&r, &g, &b, i, 255, v); wait(1); a->r = r; @@ -48,9 +51,6 @@ rgb(void *arg) a->b = b; signal(3); - v = *a->v >> 2; /* 10bit to 8bit */ - //sei(); - sleep(MSEC(40)); } } @@ -68,11 +68,9 @@ pwm(void *arg) #define DIV (UINT8_MAX >> 1) for (;;) { - //cli(); wait(a->sema); v = *a->value; signal(a->sema); - //sei(); if ((on = SEC2(v) / DIV)) { PORTB |= _BV(a->pin); -- cgit v1.2.3