реклама на сайте
подробности

 
 
> Как в макросе устанавливать значение, если другое значение такое-то
demiurg1978
сообщение Feb 12 2015, 17:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Делаю тут простенький диспетчер. Скомпилиовал его из своих наработок, задумок и примеров в интернете. Сразу скажу, я не сторонник применения диспетчеров. Считаю их миной замедленного действия. Но есть некритичные проектики, которые можно быстро набросать на диспетчере. Какие-нибудь мигалки светодиодами, всякие световые эффекты, ну в общем, некритичное и не опасное.
Есть макрос:

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;


Сообщение отредактировал demiurg1978 - Feb 12 2015, 18:08
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016