Звероящер (10.11.2011 06:18, просмотров: 1099) 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() должен закрыть от внешних свои унутренности.
В общем как-бы всё-таки красиво сделать?