George_R 0 26 декабря, 2016 Опубликовано 26 декабря, 2016 · Жалоба Всем доброго дня! Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти Сейчас делаю так - в скрипте линковщика объявляю секцию с нужным адресом, а при объявлении переменной пишу __attribute__((section ("имя"))) Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 декабря, 2016 Опубликовано 26 декабря, 2016 · Жалоба Есть. http://infocenter.arm.com/help/topic/com.a...472m/index.html 10.64 __attribute__((at(address))) variable attribute Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 26 декабря, 2016 Опубликовано 26 декабря, 2016 · Жалоба или тут http://www.keil.com/support/man/docs/armcc...59124980656.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
George_R 0 26 декабря, 2016 Опубликовано 26 декабря, 2016 · Жалоба Большое спасибо, именно то что нужно, тему можно закрывать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mister_DSP 0 18 января, 2017 Опубликовано 18 января, 2017 (изменено) · Жалоба Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес? Всегда делал вот так: #define pseudo_char *(char*)0x20000000 /* символ по адресу 0x20000000*/ #define pseudo_float *(float*)0x10000000 /* одниночное плавающее по адресу 0x10000000*/ Где-то были такого же типа и вызов функций с аргументами по адресу... таким же способом! :) Изменено 18 января, 2017 пользователем Mister_DSP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
George_R 0 18 января, 2017 Опубликовано 18 января, 2017 · Жалоба Спасибо! Вполне пригодно для укладывания инициализированного массива по адресу, и за счет отсутствия директив не привязано к компилятору Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
copov 3 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Вполне пригодно для укладывания инициализированного массива по адресу В таком определении абсолютного адреса принято добавлять volatile, а то заоптимизирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 1 февраля, 2017 Опубликовано 1 февраля, 2017 · Жалоба Всегда делал вот так: #define pseudo_char *(char*)0x20000000 /* символ по адресу 0x20000000*/ #define pseudo_float *(float*)0x10000000 /* одниночное плавающее по адресу 0x10000000*/ Где-то были такого же типа и вызов функций с аргументами по адресу... таким же способом! :) А кто будет объяснять линкеру, что там должен лежать этот псевдо-чар? Он имеет полное право положить туда что-то совершенно другое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
George_R 0 1 февраля, 2017 Опубликовано 1 февраля, 2017 (изменено) · Жалоба Вероятно мне стоило отписаться о решении проблемы, чтобы не плодить бесполезные ответы Всё замечательно работает следующим образом __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} }; Изменено 1 февраля, 2017 пользователем George_R Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться