diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ao.h | 2 | ||||
| -rw-r--r-- | src/ao_task.c | 11 | 
2 files changed, 11 insertions, 2 deletions
| @@ -43,7 +43,7 @@ struct ao_task {  	__xdata void *wchan;		/* current wait channel (NULL if running) */  	uint16_t alarm;			/* abort ao_sleep time */  	uint8_t	stack_count;		/* amount of saved stack */ -	uint8_t task_id;		/* index in the task array */ +	uint8_t task_id;		/* unique id */  	__code char *name;		/* task name */  	uint8_t	stack[AO_STACK_SIZE];	/* saved stack */  }; diff --git a/src/ao_task.c b/src/ao_task.c index 4a78766e..72c9d7d6 100644 --- a/src/ao_task.c +++ b/src/ao_task.c @@ -28,10 +28,19 @@ void  ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant  {  	uint8_t	__xdata *stack; +	uint8_t task_id; +	uint8_t t;  	if (ao_num_tasks == AO_NUM_TASKS)  		ao_panic(AO_PANIC_NO_TASK); +	for (task_id = 1; task_id != 0; task_id++) { +		for (t = 0; t < ao_num_tasks; t++) +			if (ao_tasks[t]->task_id == task_id) +				break; +		if (t == ao_num_tasks) +			break; +	}  	ao_tasks[ao_num_tasks++] = task; -	task->task_id = ao_num_tasks; +	task->task_id = task_id;  	task->name = name;  	/*  	 * Construct a stack frame so that it will 'return' | 
