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

 
 
 
Reply to this topicStart new topic
> uVision 5, ARM, вопрос о размещении переменной, как поместить в нужную область памяти
George_R
сообщение Dec 26 2016, 10:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-04-10
Из: Москва
Пользователь №: 56 636



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

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

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

Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 26 2016, 11:56
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Есть.
http://infocenter.arm.com/help/topic/com.a...472m/index.html
10.64 __attribute__((at(address))) variable attribute
Go to the top of the page
 
+Quote Post
Lagman
сообщение Dec 26 2016, 12:34
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



или тут
http://www.keil.com/support/man/docs/armcc...59124980656.htm
Go to the top of the page
 
+Quote Post
George_R
сообщение Dec 26 2016, 16:15
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-04-10
Из: Москва
Пользователь №: 56 636



Большое спасибо, именно то что нужно, тему можно закрывать
Go to the top of the page
 
+Quote Post
Mister_DSP
сообщение Jan 18 2017, 13:55
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 133
Регистрация: 5-11-16
Пользователь №: 94 050



Цитата(George_R @ Dec 26 2016, 11:56) *
Задался вопросом, как поместить переменную/массив точно по нужному адресу памяти
Суть вопроса вот в чем: есть ли директива, позволяющая прямо в коде писать нужный адрес?

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


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

Сообщение отредактировал Mister_DSP - Jan 18 2017, 13:56


--------------------
SPY vs. SPY
Хорошо там, где нет ничего...
Go to the top of the page
 
+Quote Post
George_R
сообщение Jan 18 2017, 13:59
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-04-10
Из: Москва
Пользователь №: 56 636



Цитата(Mister_DSP @ Jan 18 2017, 16:55) *


Спасибо! Вполне пригодно для укладывания инициализированного массива по адресу, и за счет отсутствия директив не привязано к компилятору
Go to the top of the page
 
+Quote Post
copov
сообщение Jan 19 2017, 11:03
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 2-03-05
Из: Санкт-Петербург
Пользователь №: 3 012



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

В таком определении абсолютного адреса принято добавлять volatile, а то заоптимизирует.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Feb 1 2017, 09:28
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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


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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
George_R
сообщение Feb 1 2017, 09:47
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-04-10
Из: Москва
Пользователь №: 56 636



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

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


Сообщение отредактировал George_R - Feb 1 2017, 09:48
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:09
Рейтинг@Mail.ru


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