Jump to content

    

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

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

Большое спасибо, именно то что нужно, тему можно закрывать

Share this post


Link to post
Share on other sites
Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти

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

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

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

 

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

Edited by Mister_DSP

Share this post


Link to post
Share on other sites

 

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

 

Share this post


Link to post
Share on other sites
Вполне пригодно для укладывания инициализированного массива по адресу

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

Share this post


Link to post
Share on other sites
Всегда делал вот так:

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

 

__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}
};

Edited by George_R

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this