ao_panic(3);
}
}
+ if (ao_task_alarm_tick != ao_list_first_entry(&alarm_queue, struct ao_task, alarm_queue)->alarm)
+ ao_panic(4);
}
#else
#define ao_task_validate_alarm_queue()
ao_list_for_each_entry(alarm, &alarm_queue, struct ao_task, alarm_queue) {
if ((int16_t) (alarm->alarm - task->alarm) >= 0) {
ao_list_insert(&task->alarm_queue, alarm->alarm_queue.prev);
+ ao_task_alarm_tick = ao_list_first_entry(&alarm_queue, struct ao_task, alarm_queue)->alarm;
ao_task_validate_alarm_queue();
return;
}
}
void
-ao_wakeup(__xdata void *wchan)
+ao_wakeup(__xdata void *wchan) __reentrant
{
#if HAS_TASK_QUEUE
struct ao_task *sleep, *next;
/* we'll never get back here */
}
+#if HAS_TASK_INFO
void
ao_task_info(void)
{
ao_task_validate();
#endif
}
+#endif
void
ao_start_scheduler(void)
ao_cur_task_index = AO_NO_TASK_INDEX;
#endif
ao_cur_task = NULL;
+#if HAS_ARCH_START_SCHEDULER
+ ao_arch_start_scheduler();
+#endif
ao_yield();
}