summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
d709a06)
ao_wake_task signals a specific task to wake up.
ao_exit terminates the current task.
Signed-off-by: Keith Packard <keithp@keithp.com>
void
ao_wakeup(__xdata void *wchan);
void
ao_wakeup(__xdata void *wchan);
+/* Wake up a specific task */
+void
+ao_wake_task(__xdata struct ao_task *task);
+
/* Yield the processor to another task */
void
ao_yield(void) _naked;
/* Yield the processor to another task */
void
ao_yield(void) _naked;
void
ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant;
void
ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant;
+/* Terminate the current task */
+void
+ao_exit(void);
+
/* Dump task info to console */
void
ao_task_info(void);
/* Dump task info to console */
void
ao_task_info(void);
- if (ao_cur_task_index != AO_NO_TASK_INDEX)
+ if (ao_cur_task_index == AO_NO_TASK_INDEX)
+ ao_cur_task_index = ao_num_tasks-1;
+ else
{
uint8_t stack_len;
__data uint8_t *stack_ptr;
{
uint8_t stack_len;
__data uint8_t *stack_ptr;
ao_tasks[i]->wchan = NULL;
}
ao_tasks[i]->wchan = NULL;
}
+void
+ao_wake_task(__xdata struct ao_task *task)
+{
+ task->wchan = NULL;
+}
+
+void
+ao_exit(void)
+{
+ uint8_t i;
+ ao_num_tasks--;
+ for (i = ao_cur_task_index; i < ao_num_tasks; i++)
+ ao_tasks[i] = ao_tasks[i+1];
+ ao_cur_task_index = AO_NO_TASK_INDEX;
+ ao_yield();
+ /* we'll never get back here */
+}
+
void
ao_task_info(void)
{
void
ao_task_info(void)
{