Еще одна ТАСКАЛКА (от слова task) получилась.
[attachment=36203:coos.zip]
Несколько слов
Код
typedef struct Tag_TCB
{
void (*task)(struct Tag_TCB *tcb);
void *param;
void *entry;
struct Tag_TCB *next;
unsigned lock:1;// lock counter
unsigned stop:1;// stop flag
unsigned exit:1;// request to delete from list
unsigned PID:5; // process ID
} TCB_t;
*param - для создания статических локальных переменных с учетом требований реентерабельности.
*entry - для использования переопределяемых точек входа с помощью гнусной фичи
labels as valuesВ общем - мне пока понравилась такая мысль:
с одной стороны - через вызов system() можно отдавать управление другим задачам во время ожидания событий
с другой стороны, чтоб не мучать стек обратными вызовами, можно использовать переопределяемые точки входа и смело выходить из задачи, пока не наступит нужное нам событие.
Как Вам такой гибрид, уважаемый ReAl ?
PS к тому же system() можно спрятать внутри любой реентерабельной функции, а точки входа - низзя.
Теперь в TCB добавить поля для сообщений - и ось на подходе