реклама на сайте
подробности

 
 
> Static в IAR AVR C++, помогите разобраться
IEC
сообщение Apr 10 2006, 08:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Есть класс:

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++?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Apr 10 2006, 08:59
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(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), а есть язык С++ со своими правилами и прочим. Все вышеописанное относится к любой программной и/или аппаратной платформе, для которой существует С++.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01281 секунд с 7
ELECTRONIX ©2004-2016