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

 
 
> Непонятный момент
_Артём_
сообщение Dec 31 2011, 18:50
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Не могу понять смысл этих строк:
Код
#define  ABS_WORD(x)  (*((volatile word*)x))

INLINE inline TStackItem* GetDataSP()   { return reinterpret_cast<TStackItem*>(ABS_WORD(28)); }
INLINE inline TStackItem* GetReturnSP() { return reinterpret_cast<TStackItem*>(SP); }


вроде понятно что о SP, но почему 28?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jan 2 2012, 08:56
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (_Артём_ @ Dec 31 2011, 20:50) *
вроде понятно что о SP, но почему 28?
Упоминанаие стека данных и стека возврата наталкивает на мысль, что речь идет о порте для AVR под IAR. IAR использует регистровую пару Y как указатель вершины программного стека для данных. Y состоит из регистров R28:R29, которые отражены на адресное пространство ОЗУ по адресам 28 и 29.
Поскольку реализация ассемблерных вставок в IAR не позволяет связать регистры и имена C(С++)-переменных, такая реализация доступа - наиболее простая и эффективная в данном случае.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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