Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: uVision 5, ARM, вопрос о размещении переменной
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
George_R
Всем доброго дня!

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

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

Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?
ViKo
Есть.
http://infocenter.arm.com/help/topic/com.a...472m/index.html
10.64 __attribute__((at(address))) variable attribute
Lagman
или тут
http://www.keil.com/support/man/docs/armcc...59124980656.htm
George_R
Большое спасибо, именно то что нужно, тему можно закрывать
Mister_DSP
Цитата(George_R @ Dec 26 2016, 11:56) *
Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти
Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?

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


Где-то были такого же типа и вызов функций с аргументами по адресу... таким же способом! sm.gif
George_R
Цитата(Mister_DSP @ Jan 18 2017, 16:55) *


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

В таком определении абсолютного адреса принято добавлять volatile, а то заоптимизирует.
esaulenka
Цитата(Mister_DSP @ Jan 18 2017, 16:55) *
Всегда делал вот так:
Код
#define pseudo_char *(char*)0x20000000 /* символ по адресу 0x20000000*/
#define pseudo_float *(float*)0x10000000 /* одниночное плавающее по адресу 0x10000000*/

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


А кто будет объяснять линкеру, что там должен лежать этот псевдо-чар?
Он имеет полное право положить туда что-то совершенно другое.
George_R
Вероятно мне стоило отписаться о решении проблемы, чтобы не плодить бесполезные ответы
Всё замечательно работает следующим образом

CODE
__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}
};
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.