Я работаю над системой безопасности, которая требует от меня проведения голосования 2oo3. Я грубо имею идею реализации этого с использованием государственных машин с помощью указателей функций. Предположим, что существует 3 системы, AB C. Относительно A, C - система слева, а B - правая система. . Что касается B, A - левая система, а C - правая система В отношении C, B - левая система и C - правильная система2 из 3 голосования с использованием метода указателей функций для проектирования государственных машин
Для каждого решения, которое принимает система, оно должно заставить указатель функции указывать на функцию «обмен данными с левой системой». После того, как данные отправлены в левую систему, он указывает на фиктивную функцию и ждет ответа левой системы.
Когда левая система отвечает и ее решение (левая система) также согласуется с решением, принятым системой (моей системой), оно переходит в следующее состояние. Если он не согласен, он должен повторить то же самое с «обмениваться данными с правильной системой» и продолжить.
Мое сомнение здесь в том, что я не хочу реализовывать с использованием флагов для управления переходом состояния, является реализация с использованием указателей функций, так что нигде MISRA 2004 не говорит о том, чтобы использовать указатели функций?
Является ли подход к реализации 2oo3, как указано выше, или есть что-то еще, о чем нужно позаботиться?
Есть ли какие-либо другие подходы к внедрению архитектуры 2oo3 (нет внешнего компаратора для принятия решений каждой системой, то есть каждый uC должен сам принять решение и проконсультироваться с его решением с другим 2.It не будет принимать решение во внешнем компараторе (например: разделяемая память, компаратор на основе fpga и т. д.) для доступа и сравнения другими системами 2)?
Пожалуйста, простите меня, если я подошел к нему неправильно. Я новичок в этом.
(Примечание: 3 системы имеют только микроконтроллеры)
UPDATE: Некоторые полезные пункты были добавлены @Lundin здесь - State Machine design with no function pointers
является тройным голосованием программного обеспечения? Обычно это не в аппаратном/логическом? Как/где вы делаете вывод о том, когда голосовать? За каждое решение? Как насчет решения просить левую систему, вам нужно принять участие в голосовании? Я слышал о трех процессорах, находящихся в шаге блокировки, логике, заботясь об этом, если два согласны друг с другом, никто не согласен, то я думаю, что вы сбросили или заставили сторожевых псов стрелять ... просто любопытно, что не слышал о том, как это сделать, но я не слух об этом не много, может быть довольно распространенным ... –
Да, его полностью программное обеспечение делает голосование 2oo3. Это похоже на 3 мастер-процессора. Для того, чтобы перейти к следующему состоянию, по крайней мере один из двух других мастеров должен согласиться со мной. Если никто не согласится, я просто останусь в этом состоянии. Каждая система принимает голосование только за каждое жизненно важное решение. Не для каждой минуты. –
«нигде MISRA 2004 не говорит о том, чтобы использовать указатели на функции» - MISRA C: 1998 Правило 104 –