ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
300365 Топик полностью
ReAl (18.01.2012 23:06, просмотров: 165) ответил Vladimir Ljaschko на 1 некошерно, скорее некрасивый способ кодирования. 2 против 3? использую и то, и другое. Метод 2 красиво-глобальный, метод 3 - безупречен, если абсолютно локальный в автомате. Но
Почему некошерно? У автомата (модуля со скрытыми внутренними данными, включая переменные состояния) есть несколько функций, вызовом которых внешний мир посылает ему сигналы. Одну из функций вызывает непосредственно внешний мир (аппаратное прерывание), другие — вызываются кем-то, кто посмотрел на внешний мир (другими автоматами). Это может быть не таймерное прерывание, а от UART. У меня это как-то так и кодируется: #include <avr/interrupt.h> ISR(SOME_HARDWARE_vect); class Foo { friend void SOME_HARDWARE_vect(); enum state_t { reset, ... }; public: foo() : state(reset) { ... } bool IsReady(); void DoThat(); void Reset(); private: inline void isr(); state_t state; ... }; Foo foo; void SOME_HARDWARE_vect() { foo.isr(); } Причём если это SOME_HARDWARE — таймер, то он может посылать сигналы нескольким автоматам вызывать методы isr() нескольких автоматов.