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

 
 
> Синхронное взаимодействие программных модулей
demiurg1978
сообщение Feb 7 2017, 12:47
Сообщение #1


Местный
***

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



Подбросьте идей, как реализовать синхронность программных модулей. Организация программ на данный момент у меня следующая. Модульность. Никаких долгих циклов. Модули, задачи, процессы дробятся условиями, флагами, состояниями конечных автоматов. Итерация основного цикла выполняется с запасом за один системный тик. В основном системный тик у меня - 1 мс. Использую программные таймеры. То есть, у меня псевдопараллельность процессов.
Иногда бывают ситуации, когда несколько модулей после определенного события должны выполнить определенные действия. Речь идет не о быстром поочередном выполнении, а, скажем, в течении одной итерации основного цикла.

Сообщение отредактировал demiurg1978 - Feb 7 2017, 12:49
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Feb 7 2017, 13:25
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Не совсем понял суть проблемы. Как вариант

CODE
struct Action {
bool todo = false;
Action *next = 0;
};

Action *event1;

void registerAction(Action **event, Action *a) {
a->next = *event;
*event = a;
}

void setOn(Action *event) {
while(event) {
event->todo = true;
event = event->next;
}
}

// модуль 1
Action mod1_event1;
registerAction(event1, mod1_event1);

void loop() {
if (mod1_event.todo) {
mod1_event.todo = false;
// ...
}
}

// модуль 2
Action mod2_event1;
registerAction(event1, mod2_event1);

void loop() {
if (mod2_event.todo) {
mod2_event.todo = false;
// ...
}
}

// где-то еще

ISR(isr) {
setOn(event1);
}


Если ставить флаг в прерывании, то чтение и сброс надо переделать на атомарное
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 15:52
Рейтинг@Mail.ru


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