aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-07-12 04:27:15 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-07-12 04:27:15 +0000
commit16aec9e1c9cbcb53281bacea1193ec63c80cd75e (patch)
tree6fa382cec8358c8e3938c5362185c9edd95f453a /kernel
parent5cde50c5f8e9bc9d2cf75b031144c360a4a2127d (diff)
tweak stack
Diffstat (limited to 'kernel')
-rw-r--r--kernel/dmx.c14
-rw-r--r--kernel/dmx/Makefile4
-rw-r--r--kernel/kernel.c10
-rw-r--r--kernel/kernel.h1
-rw-r--r--kernel/rgb.c4
-rw-r--r--kernel/tasks.h4
-rw-r--r--kernel/uart.c10
7 files changed, 32 insertions, 15 deletions
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 <bsd.prog.mk>
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 <inttypes.h>
#include <stdio.h>
#include <avr/io.h>
@@ -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;