Перейти к содержанию
    

uVision 5, ARM, вопрос о размещении переменной

Всем доброго дня!

 

Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти

 

Сейчас делаю так - в скрипте линковщика объявляю секцию с нужным адресом, а при объявлении переменной пишу

__attribute__((section ("имя")))

 

Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть.

http://infocenter.arm.com/help/topic/com.a...472m/index.html

10.64 __attribute__((at(address))) variable attribute

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти

Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?

Всегда делал вот так:

#define pseudo_char *(char*)0x20000000 /* символ по адресу 0x20000000*/
#define pseudo_float *(float*)0x10000000 /* одниночное плавающее по адресу 0x10000000*/

 

Где-то были такого же типа и вызов функций с аргументами по адресу... таким же способом! :)

Изменено пользователем Mister_DSP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Спасибо! Вполне пригодно для укладывания инициализированного массива по адресу, и за счет отсутствия директив не привязано к компилятору

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вполне пригодно для укладывания инициализированного массива по адресу

В таком определении абсолютного адреса принято добавлять volatile, а то заоптимизирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всегда делал вот так:

#define pseudo_char *(char*)0x20000000 /* символ по адресу 0x20000000*/
#define pseudo_float *(float*)0x10000000 /* одниночное плавающее по адресу 0x10000000*/

Где-то были такого же типа и вызов функций с аргументами по адресу... таким же способом! :)

 

А кто будет объяснять линкеру, что там должен лежать этот псевдо-чар?

Он имеет полное право положить туда что-то совершенно другое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вероятно мне стоило отписаться о решении проблемы, чтобы не плодить бесполезные ответы

Всё замечательно работает следующим образом

 

__attribute__((at(USERPAGE1))) static const uint16_t fl_def[FLASH_FILE_SIZE][_N_CPY]=
{
{_ADC_DEFAULT,_ADC_DEFAULT,_ADC_DEFAULT},
{_TC1_DEFAULT,_TC1_DEFAULT,_TC1_DEFAULT},
{_S2_DEFAULT,_S2_DEFAULT,_S2_DEFAULT},
{_S2_RNG_DEF,_S2_RNG_DEF,_S2_RNG_DEF}
};

Изменено пользователем George_R

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...