Есть макрос:
CODE
typedef struct task
{
void (*func) (void);
u08 status;
u16 pause;
u16 period;
} task;
bool _set_task (task tmp_task);
#define set_task(...) _set_task((task){__VA_ARGS__})
bool _set_task (task tmp_task)
{
u08 i = 0;
if (Tail_Task_Queue < MAX_TASKS)
{
while (i < Tail_Task_Queue)
{
if (tmp_task .func == Task_Queue [i] .func)
{
Task_Queue [i] = tmp_task;
return true;
}
i++;
}
Task_Queue [Tail_Task_Queue] = tmp_task;
Tail_Task_Queue++;
return true;
}
return false;
}
set_task (
.func = led_1_switch,
.status = (MULT_EXEC_FLG | RUN_TASK_FLG),
.pause = 0,
.period = 1
);
Хочется покрасивше оформить следующее: если элемент структуры pause = 0, установить флаг RUN_TASK_FLG в элементе status. Пока я явно задаю этот флаг. Если это можно сделать только перечислением параметров, а не структурой, готов с этим смириться. Что-то вроде:
Код
set_task (led_1_switch, MULT_EXEC_FLG, 0, 1000);
В предыдущей версии программы было следующее:
Код
if (!(task_pause)) // Если 0, то установка флага на немедленное исполнение.
Task_Queue [cnt]. status = (task_status | RUN_TASK_FLG);
else
Task_Queue [cnt]. status = task_status;
Task_Queue [cnt]. status = (task_status | RUN_TASK_FLG);
else
Task_Queue [cnt]. status = task_status;