diff options
author | Keith Packard <keithp@keithp.com> | 2012-12-25 14:20:42 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-12-25 14:20:42 -0800 |
commit | 868ef0c9c4b208c02a87180b0eede329369bdc77 (patch) | |
tree | 1f20d312d56bac34bad12f287629a2651bbbccf8 /src/core/ao_task.c | |
parent | 669cde8a87d88ceae89e369c1d38b88c9f8198cf (diff) | |
parent | 57487e78b90465a21c87cf30deb0aeaba0887332 (diff) |
Merge branch 'master' into micropeak-logging
Diffstat (limited to 'src/core/ao_task.c')
-rw-r--r-- | src/core/ao_task.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/core/ao_task.c b/src/core/ao_task.c index 0411fbdd..9cb074b5 100644 --- a/src/core/ao_task.c +++ b/src/core/ao_task.c @@ -305,6 +305,8 @@ ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *nam ); } +__data uint8_t ao_task_minimize_latency; + /* Task switching function. This must not use any stack variables */ void ao_yield(void) ao_arch_naked_define @@ -331,7 +333,12 @@ ao_yield(void) ao_arch_naked_define } ao_arch_isr_stack(); - ao_arch_block_interrupts(); +#if !HAS_TASK_QUEUE + if (ao_task_minimize_latency) + ao_arch_release_interrupts(); + else +#endif + ao_arch_block_interrupts(); #if AO_CHECK_STACK in_yield = 1; @@ -374,7 +381,7 @@ ao_yield(void) ao_arch_naked_define break; /* Wait for interrupts when there's nothing ready */ - if (ao_cur_task_index == ao_last_task_index) + if (ao_cur_task_index == ao_last_task_index && !ao_task_minimize_latency) ao_arch_wait_interrupt(); } } |