ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
282752
Звероящер (10.11.2011 06:18, просмотров: 1022) Snaky
Есть вопрос по крестам. В общем имеем счётчик, который увеличивается или уменьшается в зависимости от внешних событий. Также имеем функцию, которая считывает значение этого счётчика и потом его обнуляет. Так вот, есть желание сделать инкремент/декремент по таймеру. НО! Таймер этот используется в других целях и поэтому я его в класс с как private затолкать не могу. А делать две public функции (одну для для таймера, который где-то ворочается, а вторую непосредственно для доступа к счётчику) - некошерно. Как бы сделать так, чтобы был один класс сделанный по всем правилам? В общем глядите, если я сделаю так: //-------------------------------------- class CCounter { static u8 Cnt; #pragma type_attribute=__interrupt #pragma vector=TIMER2_OVF_vect static void UpdateCounter(); public: static void Init(); static u8 GetCounter(); } //-------------------------------------- u8 CCounter::GetCounter() { u8 tmp=cnt; CCounter::cnt=0; return tmp; } void CCounter::UpdateCounter(); { if(event==0) cnt++ else cnt--; } то это было бы кошерно, но таймер занят. Остаётся только сделать так: //-------------------------------------- class CCounter { static u8 Cnt; public: static void Init(); static void UpdateCounter(); static u8 GetCounter(); } //-------------------------------------- Причём UpdateCounter() вызывается в прерывании от таймера где-то там, а GetCounter() там, где мне надо. Но это не есть кошерно ибо UpdateCounter() должен закрыть от внешних свои унутренности. В общем как-бы всё-таки красиво сделать?