Цитата(IEC @ Apr 10 2006, 15:32)

Есть класс:
class TOS {
char Stack[14]; // стек регистров
static FuncExec func_Time[COUNT_MULTI];// адреса обработчиков тайм-аута
public:
BYTE ID;
TOS(){}
static void Manadger(void); // запуск менеджера файлов
__task void PUSH(void);
};
Вопрос:
1. Как заставить статический объект класса работать не только со статическими элементами класса.
2. Я обнаружил, что перед вызовом объекта a.PUSH() компилятор(??) в регистры R16:R17 загоняет ссылку на класс а! Как в функции можно это использовать, если функция написана на C++?
В С++ при вызове нестатических функций-членов класса туда неявно передается еще один параметр -
this, коий есть указатель на объект класса, для которого вызывается функция. Это совершенно необходимая вещь, т.к. функция-член должна "знать" с данными какого именно объекта (которых может быть много) она работает.
Статические функции-члены не привязаны к конкретному объекту. Фактически, это самые обычные функции, отличающиеся только областью видимости (статическая функция-член, как и все остальные функции-члены, находится в пространстве имен класса) и правами доступа к закрытым членам-данным класса. Если Вы хотите иметь доступ к членам данным из статической функции-члена класса, то придется явно указывать, с каким именно объеком Вы работаете. Или по имени, или через указатель. Способ с указателем, как уже сказал выше, используется с нестатическими функциями-членами, где этот указатель (this) передается автоматом неявно - в случае с IAR AVR - это делается через регистры r16-r17.
P.S. Формулировка темы некорректна: нет такого понятия как IAR AVR C++. Есть отдельно IAR, есть ее продукт для AVR (EWAVR), а есть язык С++ со своими правилами и прочим. Все вышеописанное относится к любой программной и/или аппаратной платформе, для которой существует С++.