summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ao.h2
-rw-r--r--src/core/ao_ignite.c10
-rw-r--r--src/core/ao_mutex.c8
-rw-r--r--src/core/ao_packet.h2
-rw-r--r--src/core/ao_panic.c3
-rw-r--r--src/core/ao_stdio.c26
6 files changed, 28 insertions, 23 deletions
diff --git a/src/core/ao.h b/src/core/ao.h
index e559e876..2b375cfd 100644
--- a/src/core/ao.h
+++ b/src/core/ao.h
@@ -101,7 +101,7 @@ ao_delay(uint16_t ticks);
/* Set the ADC interval */
void
-ao_timer_set_adc_interval(uint8_t interval) __critical;
+ao_timer_set_adc_interval(uint8_t interval);
/* Timer interrupt */
void
diff --git a/src/core/ao_ignite.c b/src/core/ao_ignite.c
index c7829fc3..693b7c7a 100644
--- a/src/core/ao_ignite.c
+++ b/src/core/ao_ignite.c
@@ -21,10 +21,12 @@
__xdata struct ao_ignition ao_ignition[2];
void
-ao_ignite(enum ao_igniter igniter) __critical
+ao_ignite(enum ao_igniter igniter)
{
+ cli();
ao_ignition[igniter].request = 1;
ao_wakeup(&ao_ignition);
+ sei();
}
#ifndef AO_SENSE_DROGUE
@@ -39,12 +41,12 @@ ao_igniter_status(enum ao_igniter igniter)
__pdata int16_t value;
__pdata uint8_t request, firing, fired;
- __critical {
+ ao_arch_critical(
ao_data_get(&packet);
request = ao_ignition[igniter].request;
fired = ao_ignition[igniter].fired;
firing = ao_ignition[igniter].firing;
- }
+ );
if (firing || (request && !fired))
return ao_igniter_active;
@@ -79,7 +81,7 @@ ao_igniter_status(enum ao_igniter igniter)
#endif
void
-ao_igniter_fire(enum ao_igniter igniter) __critical
+ao_igniter_fire(enum ao_igniter igniter)
{
ao_ignition[igniter].firing = 1;
switch(ao_config.ignite_mode) {
diff --git a/src/core/ao_mutex.c b/src/core/ao_mutex.c
index c82a7d57..952ff462 100644
--- a/src/core/ao_mutex.c
+++ b/src/core/ao_mutex.c
@@ -22,11 +22,11 @@ ao_mutex_get(__xdata uint8_t *mutex) __reentrant
{
if (*mutex == ao_cur_task->task_id)
ao_panic(AO_PANIC_MUTEX);
- __critical {
+ ao_arch_critical(
while (*mutex)
ao_sleep(mutex);
*mutex = ao_cur_task->task_id;
- }
+ );
}
void
@@ -34,8 +34,8 @@ ao_mutex_put(__xdata uint8_t *mutex) __reentrant
{
if (*mutex != ao_cur_task->task_id)
ao_panic(AO_PANIC_MUTEX);
- __critical {
+ ao_arch_critical(
*mutex = 0;
ao_wakeup(mutex);
- }
+ );
}
diff --git a/src/core/ao_packet.h b/src/core/ao_packet.h
index 9058c347..0eafd3b2 100644
--- a/src/core/ao_packet.h
+++ b/src/core/ao_packet.h
@@ -63,7 +63,7 @@ void
ao_packet_putchar(char c) __reentrant;
char
-ao_packet_pollchar(void) __critical;
+ao_packet_pollchar(void);
#if PACKET_HAS_MASTER
/* ao_packet_master.c */
diff --git a/src/core/ao_panic.c b/src/core/ao_panic.c
index 3c0b471e..c29cd8fe 100644
--- a/src/core/ao_panic.c
+++ b/src/core/ao_panic.c
@@ -53,7 +53,8 @@ ao_panic(uint8_t reason)
ao_cur_task = NULL;
printf ("panic %d\n", reason);
#endif
- __critical for (;;) {
+ ao_arch_block_interrupts();
+ for (;;) {
ao_panic_delay(20);
for (n = 0; n < 5; n++) {
ao_led_on(AO_LED_PANIC);
diff --git a/src/core/ao_stdio.c b/src/core/ao_stdio.c
index 656b23c9..8cf66a23 100644
--- a/src/core/ao_stdio.c
+++ b/src/core/ao_stdio.c
@@ -96,21 +96,23 @@ flush(void)
__xdata uint8_t ao_stdin_ready;
char
-getchar(void) __reentrant __critical
+getchar(void) __reentrant
{
char c;
- int8_t stdio = ao_cur_stdio;
+ ao_arch_critical(
+ int8_t stdio = ao_cur_stdio;
- for (;;) {
- c = ao_stdios[stdio].pollchar();
- if (c != AO_READ_AGAIN)
- break;
- if (++stdio == ao_num_stdios)
- stdio = 0;
- if (stdio == ao_cur_stdio)
- ao_sleep(&ao_stdin_ready);
- }
- ao_cur_stdio = stdio;
+ for (;;) {
+ c = ao_stdios[stdio].pollchar();
+ if (c != AO_READ_AGAIN)
+ break;
+ if (++stdio == ao_num_stdios)
+ stdio = 0;
+ if (stdio == ao_cur_stdio)
+ ao_sleep(&ao_stdin_ready);
+ }
+ ao_cur_stdio = stdio;
+ );
return c;
}