|
IAR 5.11 для ARM, как быть с инициализированной константой по адресу? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 22)
|
Feb 22 2008, 12:04
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 14-01-06
Пользователь №: 13 160

|
Цитата(zltigo @ Feb 22 2008, 16:54)  Линкер этим занимается - создаете сегментик с переменной и линкуете его куда хотите. У меня девять таких переменных. Для каждой переменной свой сегментик создавать?
|
|
|
|
|
Feb 22 2008, 12:29
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(LeshaL @ Feb 22 2008, 15:04)  У меня девять таких переменных. Для каждой переменной свой сегментик создавать? Только так! Раньше просто компилер занимался подготовительной работой для штатной инициализации сегментов... А теперь это делает линкер. недавно как раз об еэтом написал. http://electronix.ru/forum/index.php?showt...3554&st=115
|
|
|
|
|
Feb 26 2008, 05:04
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 14-01-06
Пользователь №: 13 160

|
Цитата(zltigo @ Feb 22 2008, 19:41)  Ну если не хочется, то подумайте А ЗАЧЕМ ОНИ ВООБЩЕ НУЖНЫ? Сможете ответить сами себе на этот вопрос? Я, могу ответить только по поводу одной единственной переменной для bootloader-а NXP. Все. Ну нам, например, для своего программатора нужно хранить в бинарнике по определенному адресу тип прошивки, версию, дату. Т.е. чтобы программатор при загрузке бинарника выводил для пользователя эту информацию из прошивки. Корявость какая-то в новом ИАРе делать это через линкер. В чем смысл?
|
|
|
|
|
Feb 26 2008, 07:30
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(LeshaL @ Feb 26 2008, 08:04)  ...нужно хранить в бинарнике по определенному адресу тип прошивки, версию, дату. Т.е. чтобы программатор при загрузке бинарника выводил для пользователя эту информацию из прошивки. Для этого, совершенно незачем "по определенному адресу" - достаточно иметь сигнатуру после которой нужная информация идет, или, например использовать указатель на эту информацию расположенный в startup после таблицы(которая уже согласно ценых указаний линкеру размещается в фиксированном месте) векторов, или .... Цитата Корявость какая-то в новом ИАРе делать это через линкер. В чем смысл? Это не корявость - этим действительно работа линкера. Вам уже обьясняли, что в старом IAR был сделан прибамбас скрывающий эту физическую сущность. При пререходе на унифицированные форматы объектых файлов с этим непонятным наворотом провоцирущим написание лобового, непереносимого и мешающего оптимальной линковке кода наворотом рассались. Если хотите, можете совершенно спокойно все Ваши цифирки поместить в один сегмент и сказать линкеру куда его залинковать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 26 2008, 09:15
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 14-01-06
Пользователь №: 13 160

|
Цитата(zltigo @ Feb 26 2008, 12:30)  Для этого, совершенно незачем "по определенному адресу" - достаточно иметь сигнатуру после которой нужная информация идет, или, например использовать указатель на эту информацию расположенный в startup после таблицы(которая уже согласно ценых указаний линкеру размещается в фиксированном месте) векторов, или .... Зачем создавать какую-то сигнатуру, если была возможность записать инициализированную константу по конкретному адресу? Тем более речь идет в моем конкретном случае о программе, которая постоянно разрабатывается и модифицируется на протяжении пяти лет, работающая по мере наращивания на процессорах от зайлога, атмеги128, атмеги256 до лпс2138 и менять достаточно удобный способ идентификации прошивок данными по конкретному адресу, который используется еще с первых прошивок никак не подходит. Потому как выпущено уже столько приборов и версий. А объяснять каждому, что наша программа не обновилась, потому что мы перешли на новую версию ИАРа, заказчиков мало колышит... Ну да ладно... Это всле лирика. Буду решать проблемы секциями по адресу. Спасибо всем за ответы и советы.
|
|
|
|
|
Feb 26 2008, 09:23
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(LeshaL @ Feb 26 2008, 12:15)  Зачем создавать какую-то сигнатуру, если была возможность записать инициализированную константу по конкретному адресу? Она и сечас есть. Цитата Тем более речь идет в моем конкретном случае о программе... К сожалению, производители компиляторов любят плодить сущности и закладывать ненужные собственные фичи, дабы подсадить определенный круг пользователей на свой конкретный компилятор  . Просто 5 лет назад, надо было подумать  и сделать независимо ни от фич компилятора ни от конкретного линкера. Цитата Буду решать проблемы секциями по адресу. Да нет там в общем-то проблем.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 27 2008, 10:20
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 14-01-06
Пользователь №: 13 160

|
Цитата(zltigo @ Feb 26 2008, 14:23)  К сожалению, производители компиляторов любят плодить сущности и закладывать ненужные собственные фичи, дабы подсадить определенный круг пользователей на свой конкретный компилятор  . Просто 5 лет назад, надо было подумать  и сделать независимо ни от фич компилятора ни от конкретного линкера. Если все делать независимо от фич компилятора, линкера, то надо самому писать свой компилятор и линкер. А также еще желательно переписать все библиотечные функции под себя, чтобы не выплывало типа sprintf_P и т.п. Зачем Вы ассемблерные тексты переделывали для IAR 5.10, а сразу не написали их так, чтобы через пять лет как появится IAR 5.10 Ваши тексты без исправлений на нем заработали? Ну это снова на лирику скатились  А по-существу проблема решилась созданием двух секций в *.icf. Благо в одной секции инициализированные константы должны были следовать одна за другой.
|
|
|
|
|
Feb 27 2008, 11:04
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(LeshaL @ Feb 27 2008, 13:20)  Зачем Вы ассемблерные тексты переделывали.... А я НЕ поминал ассемблерные тексты в качестве образца независимости и портируемости, так-что к чему все это? Цитата А по-существу проблема решилась .. В том и дело, что проблемы-то и нет. Просто разобрались с ИНСТРУМЕНТОМ который для этой работы предназначен. При переходе на другой инструментарий надо будет с ними разбираться, НО НЕ с исходными текстами.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 2 2008, 08:01
|

Группа: Новичок
Сообщений: 4
Регистрация: 24-08-06
Из: Минск
Пользователь №: 19 793

|
На эту ж тему позвольте вопросик. Не могу из сишного кода в IAR 5.11 закинуть массив в созданную секцию. В асме пишу так:
SECTION Signatura_section:CONST DCB '1','2','3' END
и все работает, а если в в main.c написать так:
#pragma section = "Signatura_section" char const Signatura[] @ "Signatura_section" = "123";
линкер строку в упор не видит, даж секцию не создает. Не подскажете в чем может быть дело?
Сообщение отредактировал Ынжынэр - Apr 2 2008, 08:03
|
|
|
|
|
Apr 2 2008, 11:36
|

Группа: Новичок
Сообщений: 4
Регистрация: 24-08-06
Из: Минск
Пользователь №: 19 793

|
Цитата А ссылки на эту строку есть? Спасибо за наводку, вставил в первую попавшуюся функцию такую штуку: (void)Signatura; И линкер таки эту строку увидел ).
|
|
|
|
|
Apr 2 2008, 12:07
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(Ынжынэр @ Apr 2 2008, 14:36)  Спасибо за наводку, вставил в первую попавшуюся функцию такую штуку:
(void)Signatura;
И линкер таки эту строку увидел ). достаточно применить к нужной константе #pragma required.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Apr 2 2008, 12:19
|

Группа: Новичок
Сообщений: 4
Регистрация: 24-08-06
Из: Минск
Пользователь №: 19 793

|
Цитата достаточно применить к нужной константе #pragma required. Да, это вариант красивше.
|
|
|
|
|
May 14 2008, 12:20
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Хочу задать такой вопрос. (немного не по теме) Можно ли cкомпилировать библиотеки GCC ARM с расширением *.a в IAR? например эти:
Сообщение отредактировал Vitaliy_ARM - May 14 2008, 12:22
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
May 14 2008, 13:46
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Vitaliy_ARM @ May 14 2008, 14:20)  Можно ли cкомпилировать библиотеки GCC ARM с расширением *.a в IAR? Для начала скажите, что Вы понимете под словом "скомпилировать"??? Если не то, что под этим понимаю я  , то да. Естественно с 5.xx а не с 4.xx Цитата(Vitaliy_ARM @ May 14 2008, 14:20)  Хочу задать такой вопрос. (немного не по теме) АБСОЛЮТНО не по теме.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 15 2008, 07:47
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ May 14 2008, 17:46)  Для начала скажите, что Вы понимете под словом "скомпилировать"??? Что тут не понятного. Создать проект в IAR5.11. Поключить к нему заголовочный файл write_erase_secure_gnu.h. Повызывать из него функции, например. Код main() { TargetInit();
write_erase_secure_get_version();
} были так же поправлены строчки *.h файла на: Код extern __ramfunc WES_Return_Code write_erase_secure_user_sector(unsigned start, unsigned end, unsigned cclk); extern __ramfunc WES_Return_Code write_erase_secure_boot_sector(unsigned cclk); extern __ramfunc unsigned write_erase_secure_get_version(void); Добавил файл *.a в дерево проекта При компиляции компановщик выдает ошибку: Error[Li005]: no definition for "write_erase_secure_get_version()" [referenced from D:\BootLoader\Debug\Obj\main.o] что не так делаю?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
May 15 2008, 08:05
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Vitaliy_ARM @ May 15 2008, 09:47)  были так же поправлены строчки *.h файла на: ЗАЧЕМ? Цитата(Vitaliy_ARM @ May 15 2008, 09:47)  Что тут не понятного. То, что это называется на самом деле "прилинковать".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 15 2008, 08:16
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ May 15 2008, 12:05)  ЗАЧЕМ? IAR синтаксис GCC не понимает Цитата(zltigo @ May 15 2008, 12:05)  То, что это называется на самом деле "прилинковать". Суть вопроса не меняется
Сообщение отредактировал Vitaliy_ARM - May 15 2008, 08:17
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|