summaryrefslogtreecommitdiff
path: root/src/core/ao_task.c
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2012-08-28 23:39:53 -0600
committerBdale Garbee <bdale@gag.com>2012-08-28 23:39:53 -0600
commit5ed88fb72c3e3ecf3333c700d838667db71cfbdc (patch)
tree3b371f563c0f7607f2fe53242673adb352b48514 /src/core/ao_task.c
parentadbe64c5a9402b7c5075a444a12629131b663877 (diff)
parent621d0930244f25165d2ac5da596dcc87e253b965 (diff)
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Conflicts: debian/control
Diffstat (limited to 'src/core/ao_task.c')
-rw-r--r--src/core/ao_task.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/core/ao_task.c b/src/core/ao_task.c
index 4011a36e..4593bd79 100644
--- a/src/core/ao_task.c
+++ b/src/core/ao_task.c
@@ -82,39 +82,36 @@ ao_yield(void) ao_arch_naked_define
ao_arch_isr_stack();
-#if CHECK_STACK
+#if AO_CHECK_STACK
in_yield = 1;
#endif
/* Find a task to run. If there isn't any runnable task,
* this loop will run forever, which is just fine
*/
{
- __pdata uint8_t ao_next_task_index = ao_cur_task_index;
+ __pdata uint8_t ao_last_task_index = ao_cur_task_index;
for (;;) {
- ++ao_next_task_index;
- if (ao_next_task_index == ao_num_tasks)
- ao_next_task_index = 0;
+ ++ao_cur_task_index;
+ if (ao_cur_task_index == ao_num_tasks)
+ ao_cur_task_index = 0;
+
+ ao_cur_task = ao_tasks[ao_cur_task_index];
- ao_cur_task = ao_tasks[ao_next_task_index];
- if (ao_cur_task->wchan == NULL) {
- ao_cur_task_index = ao_next_task_index;
+ /* Check for ready task */
+ if (ao_cur_task->wchan == NULL)
break;
- }
/* Check if the alarm is set for a time which has passed */
if (ao_cur_task->alarm &&
- (int16_t) (ao_time() - ao_cur_task->alarm) >= 0) {
- ao_cur_task_index = ao_next_task_index;
+ (int16_t) (ao_time() - ao_cur_task->alarm) >= 0)
break;
- }
/* Enter lower power mode when there isn't anything to do */
- if (ao_next_task_index == ao_cur_task_index) {
+ if (ao_cur_task_index == ao_last_task_index)
ao_arch_cpu_idle();
- }
}
}
-#if CHECK_STACK
+#if AO_CHECK_STACK
cli();
in_yield = 0;
#endif
@@ -177,7 +174,7 @@ ao_exit(void)
void
ao_task_info(void)
{
- uint8_t i;
+ uint8_t i;
__xdata struct ao_task *task;
for (i = 0; i < ao_num_tasks; i++) {