From 16aec9e1c9cbcb53281bacea1193ec63c80cd75e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 12 Jul 2011 04:27:15 +0000 Subject: tweak stack --- kernel/dmx.c | 14 ++++++++------ kernel/dmx/Makefile | 4 +--- kernel/kernel.c | 10 ++++++++-- kernel/kernel.h | 1 + kernel/rgb.c | 4 ++++ kernel/tasks.h | 4 ++-- kernel/uart.c | 10 ++++++++-- 7 files changed, 32 insertions(+), 15 deletions(-) (limited to 'kernel') diff --git a/kernel/dmx.c b/kernel/dmx.c index 7b17e6a..54cd951 100644 --- a/kernel/dmx.c +++ b/kernel/dmx.c @@ -35,14 +35,15 @@ struct ctrlarg ctrlarg = { &lcdarg, &clockarg }; int main() { - init(36); + init(STACK); + init_uart(); -#if 0 semaphore(0, 1); -#endif - task(heartbeat, STACK, 0); - task(rgb, STACK + 8, &rgbargs); + task(heartbeat, STACK, 0); // 48 + +#if 1 + task(rgb, STACK + 16, &rgbargs); task(pwm, STACK, &pwmargs[0]); task(pwm, STACK, &pwmargs[1]); task(pwm, STACK, &pwmargs[2]); @@ -52,7 +53,8 @@ main() #if 1 task(lcd, STACK, &lcdarg); task(clock, STACK, &clockarg); - task(ctrl, STACK, &ctrlarg); + task(ctrl, STACK + 8, &ctrlarg); +#endif #endif for (;;); /* idle task */ diff --git a/kernel/dmx/Makefile b/kernel/dmx/Makefile index c81afce..051b5b2 100644 --- a/kernel/dmx/Makefile +++ b/kernel/dmx/Makefile @@ -3,16 +3,14 @@ MCU= atmega8 F_CPU= 16000000 PRESCALE= 8 -#STACK= 64 STACK= 48 -#STACK= 56 TASKS= 8 SEMAPHORES= 8 BAUD= 9600 PROG= dmx SRCS= dmx.c heartbeat.c rgb.c hsv.c \ - clock.c lcd3.c ctrl.c + clock.c lcd3.c ctrl.c uart.c NOMAN= .include diff --git a/kernel/kernel.c b/kernel/kernel.c index 84aac28..57bf9a2 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -125,7 +125,7 @@ ISR(SCHEDULE, ISR_NAKED) } void -init(int idlestack) +init(int stack) { /* Set up timer 1 */ TCNT1 = 0; /* reset counter 1 */ @@ -133,7 +133,7 @@ init(int idlestack) TCCR1B = TIMER_FLAGS; TIMSK = _BV(OCIE1A); - kernel.freemem = (void *)(RAMEND - idlestack); + kernel.freemem = (void *)(RAMEND - stack); kernel.last = kernel.task; kernel.running = kernel.task; kernel.cycles = 0; @@ -292,3 +292,9 @@ suspend(void) SCHEDULE(); } + +uint8_t +running(void) +{ + return kernel.running - kernel.task; +} diff --git a/kernel/kernel.h b/kernel/kernel.h index 2c412d4..e62501a 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -76,5 +76,6 @@ void sleep(uint8_t, uint32_t); uint32_t now(void); uint32_t release(void); uint32_t deadline(void); +uint8_t running(void); #endif diff --git a/kernel/rgb.c b/kernel/rgb.c index c149eb1..4a963c7 100644 --- a/kernel/rgb.c +++ b/kernel/rgb.c @@ -172,9 +172,11 @@ rgb(void *arg) v = 161 - i; else v = i; + //wait(0); *a->r = pgm_read_byte(&bb[v].r); *a->g = pgm_read_byte(&bb[v].g); *a->b = pgm_read_byte(&bb[v].b); + //signal(0); sleep(SOFT, MSEC(370)); #endif @@ -195,7 +197,9 @@ pwm(void *arg) update(n, n + USEC(maxval)); for (;;) { + //wait(0); on = pgm_read_word(&factor[*a->value]); + //signal(0); off = maxval - on; if (*a->value > 0) { diff --git a/kernel/tasks.h b/kernel/tasks.h index 831c31c..f6030b3 100644 --- a/kernel/tasks.h +++ b/kernel/tasks.h @@ -57,8 +57,8 @@ struct adcarg { }; struct lcdarg { - char first[17]; - char second[17]; + char first[18]; + char second[18]; uint8_t x, y; }; diff --git a/kernel/uart.c b/kernel/uart.c index cdfaf73..0d64d50 100644 --- a/kernel/uart.c +++ b/kernel/uart.c @@ -20,6 +20,8 @@ #define BAUD 9600 #endif +#define USE_RXCIE + #include #include #include @@ -74,7 +76,7 @@ uart_getchar(void) return c; } -#if USE_RXCIE +#ifdef USE_RXCIE ISR(SIG_UART_RECV) { uint8_t c = UDR; @@ -88,6 +90,10 @@ ISR(SIG_UART_RECV) while (p <= (uint8_t *)RAMEND) uart_putchar(*p++); break; + case 'N': /* zero */ + while (p <= (uint8_t *)RAMEND) + *p++ = 0xFF; + break; case 'T': UCSRB |= _BV(UDRIE); break; @@ -115,7 +121,7 @@ void init_uart(void) { UCSRB = _BV(RXEN) | _BV(TXEN); -#if USE_RXCIE +#ifdef USE_RXCIE UCSRB |= _BV(RXCIE); #endif UBRRH = UBRRH_VALUE; -- cgit v1.2.3