|
Все о ARM GCC4.3, Linker, ASM, C/C++, Windows/Linux. |
|
|
|
Dec 9 2008, 10:12
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Все больше прощаюсь с IAR. Разбираюсь с компановщиком. Документация на него не впечатлила  . Есть ли у кого готовый пример скрипта размещения констант по указанному адресу во Flash LPC2xxx или другого арма?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 21)
|
Dec 9 2008, 16:28
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 10-10-05
Пользователь №: 9 463

|
Цитата(Vitaliy_ARM @ Dec 9 2008, 16:12)  Все больше прощаюсь с IAR. Разбираюсь с компановщиком. Документация на него не впечатлила  . Есть ли у кого готовый пример скрипта размещения констант по указанному адресу во Flash LPC2xxx или другого арма? может тут? http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/
|
|
|
|
|
Dec 9 2008, 18:35
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Dec 9 2008, 19:38)  Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый.... А если это настроечные константы прибора хранящиеся в флеш и требуется возможность их изменения/записи с помощью спец процедуры ? Как обойтись без абсолютных адресов ? Как сделать кратность записи странице флеш ?
|
|
|
|
|
Dec 9 2008, 19:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Dec 9 2008, 21:47)  Если у Вас флеши слишком много, что Вы можете отдать целый сегмент, то и отдайте его в конце. Флеши много не бывает. Ну конечно в конце, но это не всегда конец флеши, иногда это конец некоторого логического куска, ну там всякие бутлоадеры итд... Цитата А если нет, то по любому считать->отпатчитть-стереть->записать придется. Процедура занимающаяся этим изнутри и так знает где что лежит. А наружные патчеры и по сигнатуре найдут без проблем. А вот это очень может быть ненадежно..., там ведь с кодом может пересекаться и при аппаратном сбое умрет все... Цитата А втыкать некий кусок в фиксированное место это значит платить кусками неиспользуемого Flash, ибо линкер не сможет идально заполнить зачем-то созданые по Вашей прихоти пустоты. Это плата за надежность, поэтому ИМХО, фиксированное размещение данных(для отделения от всего остального) может быть очень даже оправданно.
|
|
|
|
|
Dec 9 2008, 22:57
|

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

|
Цитата(singlskv @ Dec 9 2008, 22:28)  Флеши много не бывает. Тогда зачем спрашивали о выравниванию на границу.. Цитата А вот это очень может быть ненадежно..., там ведь с кодом может пересекаться и при аппаратном сбое умрет все... Вы уж как-то определитесь, либо отдельный сегмент,либо будет с чем-то пересекаться.  . Но в любом случае нет ни малейшей необходимости заставлять линкер размещать Ваши данные по пришедшему Вам в голову произвольному адресу.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 10 2008, 10:56
|

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

|
Цитата(Harbour @ Dec 10 2008, 09:39)  не надо думать узкими категориями только своей задачи Это Вы кому? Цитата корректно это делается... Когда это НУЖНО, типа bootloader-a, то это несомненнно ДЕЛАЕТСЯ. Вопрос в том, что этого незачем делать без всякой на то надобности, как в заявленном случае.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 10 2008, 13:43
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ Dec 9 2008, 19:38)  Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый.... В моей задаче это просто не возможно. Бутлодер + Программа имеют две константы - мак адрес и ай пи адрес, строго расположенные в указанных местах. И то и то должно иметь доступ к этим ячейкам. Прощание с "дурной привычкой" не позволить сделать программу и бутлодер независымыми  .
Сообщение отредактировал Vitaliy_ARM - Dec 10 2008, 13:44
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Dec 10 2008, 14:10
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ Dec 10 2008, 16:53)  Примерно в аналогичных случаях в фиксированном месте boot (сразу после векторов) размещаю УКАЗАТЕЛЬ на находящийся в произвольном месте блок общих данных. Boot, естественно, линкуется в конкретное место, но это единственная по любому необходимая привязка к адресам - сущности более не плодятся. Ага, а как тогда с ай пи адресами и маками? Вместе с загрузчиком зашиваются адреса по умолчанию. Программа должна перешивать и то и другое. А загрузчик должен это использовать, так как абгрейд должен осуществляться по одним и тем же адресам.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Dec 10 2008, 14:16
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Vitaliy_ARM @ Dec 10 2008, 15:43)  В моей задаче это просто не возможно. Бутлодер + Программа имеют две константы - мак адрес и ай пи адрес, строго расположенные в указанных местах. Как-то так. Выделяете регион памяти(CONFIG), потом складываете в него нужные сегменты (*.config) Код /* memory layout */ MEMORY { REMAP (rx) : ORIGIN = 0x00000000, LENGTH = 0x00000040 ROM (rx) : ORIGIN = 0x00000000, LENGTH = 128K - 8K CONFIG (rx) : ORIGIN = 128K - 8K, LENGTH = 8K RAM (rw) : ORIGIN = 0x40000000, LENGTH = 16K }
SECTIONS { ............. .config : { KEEP(*(.config)) } > CONFIG ........... Harbour: стоило подождать сутки, чтобы выложить одновременно  Но у меня оформлено тегами [ code ], [ /code ]
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 17 2008, 11:53
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ Dec 10 2008, 17:51)  C точностью до наоборот, в этом случае расположите указатель в самом начале загружаемого кода. В моем случае уже не стоит этим заниматься, два огромных проекта написано. Нет смысла их переделывать заново. Чревато новыми ошибками. Цитата(Сергей Борщ @ Dec 10 2008, 17:16)  Как-то так. Выделяете регион памяти(CONFIG), потом складываете в него нужные сегменты (*.config)[code]/* memory layout */ Вроде бы прояснилось.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Jan 19 2009, 11:25
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Генерирование отладочной информации в коде процессора - подскажите, что это такое и с чем его едят? Где можно почитать об этом (строчки в скрипте компоновщика)? Код /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) }
Сообщение отредактировал Vitaliy_ARM - Jan 19 2009, 11:27
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Jan 20 2009, 07:35
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Vitaliy_ARM @ Jan 19 2009, 13:25)  Генерирование отладочной информации в коде процессора - подскажите, что это такое и с чем его едят? Где можно почитать об этом (строчки в скрипте компоновщика)? Код /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } Это отрывок скрипта линкера. Он указывает, куда линкер будет ложить отладочную информацию в исполняемый файл. Генерируется она компилятором, при использовании ключа -g с опциями. Например (варианты) Код gcc -g main .o main.c gcc -g3 main .o main.c gcc -ggdb main .o main.c gcc -gdwarf-2 main .o main.c Линкуется потом обычным способом (линкеру не имеет особых флагов для отладочной информации). После этого можно спокойно отлаживать программу с помощью gdb.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 20 2009, 09:38
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(amw @ Jan 20 2009, 10:35)  Это отрывок скрипта линкера. Он указывает, куда линкер будет ложить отладочную информацию в исполняемый файл. Генерируется она компилятором, при использовании ключа -g с опциями. Например (варианты) Код gcc -g main .o main.c gcc -g3 main .o main.c gcc -ggdb main .o main.c gcc -gdwarf-2 main .o main.c Линкуется потом обычным способом (линкеру не имеет особых флагов для отладочной информации). После этого можно спокойно отлаживать программу с помощью gdb. Да, уже разобрался. Есть еще некоторые непонятности. Как я понимаю OpenOCD уже научился поддерживать J-Link и еще кучу всяких Jtag. Но для этого надо ли его пересобрать? Кто-нибудь пользуется связкой Eclipse+GCC+OpenOCD+J-Link?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|