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

В ИАР для АРМ версии 4.XX инициализированную константу, расположенную во флеш по определенному адресу я описывал как:

 

const unsigned char date_def @ 0x102 = DATE_;

 

В версиях 5.ХХ запретили инициализированным константам явно указывать адреса хранения. Т.е. транслятор ругается:

 

Error[be022]: location address not allowed for initialized variables (writable variables without the __no_init attribute)...

 

Как это можно обойти в новом ИАРе?

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

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


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

Линкер этим занимается - создаете сегментик с переменной и линкуете его куда хотите.

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


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

Линкер этим занимается - создаете сегментик с переменной и линкуете его куда хотите.

 

У меня девять таких переменных. Для каждой переменной свой сегментик создавать?

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


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

У меня девять таких переменных. Для каждой переменной свой сегментик создавать?

Только так!

Раньше просто компилер занимался подготовительной работой для штатной инициализации сегментов...

А теперь это делает линкер.

недавно как раз об еэтом написал.

http://electronix.ru/forum/index.php?showt...3554&st=115

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


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

У меня девять таких переменных. Для каждой переменной свой сегментик создавать?

Ну если не хочется, то подумайте А ЗАЧЕМ ОНИ ВООБЩЕ НУЖНЫ?

Сможете ответить сами себе на этот вопрос? Я, могу ответить только по поводу одной единственной переменной для bootloader-а NXP. Все.

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


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

Ну если не хочется, то подумайте А ЗАЧЕМ ОНИ ВООБЩЕ НУЖНЫ?

Сможете ответить сами себе на этот вопрос? Я, могу ответить только по поводу одной единственной переменной для bootloader-а NXP. Все.

 

Ну нам, например, для своего программатора нужно хранить в бинарнике по определенному адресу тип прошивки, версию, дату. Т.е. чтобы программатор при загрузке бинарника выводил для пользователя эту информацию из прошивки.

 

Корявость какая-то в новом ИАРе делать это через линкер. В чем смысл?

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


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

У меня девять таких переменных. Для каждой переменной свой сегментик создавать?

объедините эти переменные в структуру и поместите её в свой сегмент.

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


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

...нужно хранить в бинарнике по определенному адресу тип прошивки, версию, дату. Т.е. чтобы программатор при загрузке бинарника выводил для пользователя эту информацию из прошивки.

Для этого, совершенно незачем "по определенному адресу" - достаточно иметь сигнатуру после которой нужная информация идет, или, например использовать указатель на эту информацию расположенный в startup после таблицы(которая уже согласно ценых указаний линкеру размещается в фиксированном месте) векторов, или ....

Корявость какая-то в новом ИАРе делать это через линкер. В чем смысл?

Это не корявость - этим действительно работа линкера. Вам уже обьясняли, что в старом IAR был сделан прибамбас скрывающий эту физическую сущность. При пререходе на унифицированные форматы объектых файлов с этим непонятным наворотом провоцирущим написание лобового, непереносимого и мешающего оптимальной линковке кода наворотом рассались. Если хотите, можете совершенно спокойно все Ваши цифирки поместить в один сегмент и сказать линкеру куда его залинковать.

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


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

Для этого, совершенно незачем "по определенному адресу" - достаточно иметь сигнатуру после которой нужная информация идет, или, например использовать указатель на эту информацию расположенный в startup после таблицы(которая уже согласно ценых указаний линкеру размещается в фиксированном месте) векторов, или ....

 

Зачем создавать какую-то сигнатуру, если была возможность записать инициализированную константу по конкретному адресу? Тем более речь идет в моем конкретном случае о программе, которая постоянно разрабатывается и модифицируется на протяжении пяти лет, работающая по мере наращивания на процессорах от зайлога, атмеги128, атмеги256 до лпс2138 и менять достаточно удобный способ идентификации прошивок данными по конкретному адресу, который используется еще с первых прошивок никак не подходит. Потому как выпущено уже столько приборов и версий. А объяснять каждому, что наша программа не обновилась, потому что мы перешли на новую версию ИАРа, заказчиков мало колышит...

 

Ну да ладно... Это всле лирика.

Буду решать проблемы секциями по адресу. Спасибо всем за ответы и советы.

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


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

Зачем создавать какую-то сигнатуру, если была возможность записать инициализированную константу по конкретному адресу?

Она и сечас есть.

Тем более речь идет в моем конкретном случае о программе...

К сожалению, производители компиляторов любят плодить сущности и закладывать ненужные собственные фичи, дабы подсадить определенный круг пользователей на свой конкретный компилятор :(. Просто 5 лет назад, надо было подумать :) и сделать независимо ни от фич компилятора ни от конкретного линкера.

Буду решать проблемы секциями по адресу.

Да нет там в общем-то проблем.

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


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

К сожалению, производители компиляторов любят плодить сущности и закладывать ненужные собственные фичи, дабы подсадить определенный круг пользователей на свой конкретный компилятор :(. Просто 5 лет назад, надо было подумать :) и сделать независимо ни от фич компилятора ни от конкретного линкера.

 

Если все делать независимо от фич компилятора, линкера, то надо самому писать свой компилятор и линкер. А также еще желательно переписать все библиотечные функции под себя, чтобы не выплывало типа sprintf_P и т.п.

 

Зачем Вы ассемблерные тексты переделывали для IAR 5.10, а сразу не написали их так, чтобы через пять лет как появится IAR 5.10 Ваши тексты без исправлений на нем заработали? :rolleyes:

 

Ну это снова на лирику скатились :)

А по-существу проблема решилась созданием двух секций в *.icf. Благо в одной секции инициализированные константы должны были следовать одна за другой.

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


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

Зачем Вы ассемблерные тексты переделывали....

А я НЕ поминал ассемблерные тексты в качестве образца независимости и портируемости, так-что к чему все это?

А по-существу проблема решилась ..

В том и дело, что проблемы-то и нет. Просто разобрались с ИНСТРУМЕНТОМ который для этой работы предназначен. При переходе на другой инструментарий надо будет с ними разбираться, НО НЕ с исходными текстами.

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


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

На эту ж тему позвольте вопросик.

Не могу из сишного кода в IAR 5.11 закинуть массив в созданную секцию.

В асме пишу так:

 

SECTION Signatura_section:CONST

DCB '1','2','3'

END

 

и все работает, а если в в main.c написать так:

 

#pragma section = "Signatura_section"

char const Signatura[] @ "Signatura_section" = "123";

 

линкер строку в упор не видит, даж секцию не создает.

Не подскажете в чем может быть дело?

Изменено пользователем Ынжынэр

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


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

линкер строку в упор не видит, даж секцию не создает.

А ссылки на эту строку есть?

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


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

При оптимизации объявленный сегмент может быть выброшен. Попробуйте убрать оптимизацию чтобы это проверить.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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