ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1246088 Топик полностью
Costic (03.10.2022 16:45, просмотров: 260) ответил VladislavS. на Кстати, в жизни всё гораздо проще. Обработчк прерывания - обычная функция, в которой делается ровно то что она должна делать. Надо флаг в регистре сбросить - сбрасываем флаг с помощью CMSIS. Надо светодиодом мигнуть - дёргаем метод класса светодиода. Без всяких комплексов.
Очень легкомысленное заявление. Во всей ветке обсуждения я не увидел ни слова про реентерабельность функций для прерываний. 

Вы, Vladislav, скорее всего наметапрограммируете с template<> нечто, что компилятор преобразует в код без вызовов функций. Но это получается не всегда понятно и красиво (так считает большинство - это не суть темы). Все остальные предложения использовать классический С++ таят в себе опасность наступить на грабли, например, если данные-члены в классе будут изменяться и в прерывании, и в главном цикле. Я знаю несколько решений. 1) Отключать прерывания в главном цикле при доступе к shared данным/функциям/классам. В прерывании выставлять только флаги. 2) Использовать средства доступные в RTOS - сигналы и сообщения. 3) Генерировать (две) копии функций - для прерывания/"всего остального".