|
скрипт Linkera |
|
|
|
Jan 24 2009, 17:43
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Помогите разобраться с скриптами для linkera. Yagarto eclips at91sam7s256 После компиляции, создаются два объектных файла crt.o main.o сделал самый простейший скрипт,который должен разместить секции text в ram и data в flash. После того как проходит компиляция компоновка, копирование получаю файл hex, при попытки его загрузить с помощью h jtag выходит ошибка что память ухотит за пределы, пробовал адреса ставить 0ч0 и 0ч100000 такаже проблема. Подозреваю что ошибка в скрипте. CODE OUTPUT_FORMAT("elf32-littlearm") /* формат памяти. прямой порядок байт (Little-endian). */ OUTPUT_ARCH(arm) /* архитектура АРМ */
_vec_reset = 0x0;
_stack_end = 0x20FA00; /* конец стека (верх стека) */
ENTRY(_vec_reset) /* вектор сброса */
/* Память микроконтроллера AT91SAM7S256 */ MEMORY { flash (rx) : ORIGIN = 0x100000, LENGTH = 256K /* FLASH EPROM */ ram (rw) : ORIGIN = 0x200000, LENGTH = 64K /* static RAM area */ }
SECTIONS {
.text : { *crt.o (.text) }>flash . = ALIGN(4);
.data : { *crt.o (.data) }> ram . = ALIGN(4);
.bss : { *(.bss) *(COMMON) }>ram . = ALIGN(4); }
|
|
|
|
|
 |
Ответов
|
May 3 2009, 13:20
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(_Pasha @ May 3 2009, 16:23)  Отключил -mshort-calls проблема ушла. На том и остановился... Я аналогично сделал (m128 забита на 80%) :( Но чуть позднее в TODO добавил посмотрть эффект ключей оптимизации: Цитата -freorder-blocks -freorder-blocks-and-partition -freorder-functions -ftoplevel-reorder однако пока так и не добрался проверить, помогут ли они сохранить отсутствие jmp.
|
|
|
|
|
Sep 7 2009, 13:04
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Можно ли как-нибудь создать один регион памяти из двух кусков, например что-то вроде: Код MFlash512 (rx) : (ORIGIN = 0x20000, LENGTH = 0x1000) OR (ORIGIN = 0x40000, LENGTH = 0x1000)  ????
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 10 2009, 10:52
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Vitaliy_ARM @ Sep 7 2009, 17:04)  Можно ли как-нибудь создать один регион памяти из двух кусков, например что-то вроде: Код MFlash512 (rx) : (ORIGIN = 0x20000, LENGTH = 0x1000) OR (ORIGIN = 0x40000, LENGTH = 0x1000)  ???? Написал этот вопрос в поддержку. Посмотрим, что ответят. Получил ответ Цитата Hi,
You just need to change ".boot" to ".text" in your linker script.
Full details on linker scripts can be found in the documentation at: Help->Help Contents Code Red Technologies Documentation Tools Documentation GNU Linker Section 3 "Linker Scripts"
Best regards, Попробовал поменять: Код .text : /* .boot*/ { KEEP(*(.isr_vector)); KEEP(*(.crp_key)); KEEP(*(.macaddr)); KEEP(*(.ipaddr)); } > BOOTMEM
.text : { *(.text*) *(.rodata*) } > MFlash512 Не работает.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 14 2009, 08:17
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
После длительной переписки со службой поддержки выяснилось, что надо было делать совсем подругому, нежели в IAR5.x. Код MEMORY { /* Define each memory region */ CODE_MEM (rx) : ORIGIN = 0x0, LENGTH = 0x00003000 MAC_IP_MEM(rx) : ORIGIN = 0x00003000, LENGTH = 0x00002000 Ram32 (rwx) : ORIGIN = 0x40000000, LENGTH = 0x8000 /* 32k */ RAM_ETH_16 (rwx) : ORIGIN = 0x7fe00000, LENGTH = 0x4000 /* 16k */ RAM_USB_8 (rwx) : ORIGIN = 0x7fd00000, LENGTH = 0x2000 /* 8k */ RAM_RTC_2 (rwx) : ORIGIN = 0xe0084000, LENGTH = 0x800 /* 2k */ }
.text : { KEEP(*(.isr_vector)); /*вектора прерываний*/ . = 0x000001FC; /*смещение указателя на адрес CRP*/ KEEP(*(.crp_key)); /*секция CRP*/ *(.text*) /*код программы*/ *(.rodata*) /*константы*/ } > CODE_MEM
.MacIpMem : /*. = 0x00003000;*/ { KEEP(*(.macaddr)) /*размещаем по адресу 0x00003000*/ . = 0x00001000; /*переход на адрес 0x00001000;*/ KEEP(*(.ipaddr)) /*размещаем по адресу 0x00004000*/ } > MAC_IP_MEM Вот так почти правильно размещать свой код в разные областя памяти. Теперь про почти: Инициализируемая константа находится в исходнике, задается следующим образом: const BYTE OurMacAddr[6] __attribute__ ((section(".macaddr"))) = {0x00,0x01,0x02,0x03,0x04,0x06}; Инициализируется мусором!!! Почему???
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Sep 14 2009, 08:54
|

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

|
Цитата(Vitaliy_ARM @ Sep 14 2009, 11:17)  После длительной переписки со службой поддержки выяснилось, что надо было делать совсем подругому, нежели в IAR5.x. Вы конечно извините, но то, что вы показали и исходный ваш вопрос "Можно ли как-нибудь создать один регион памяти из двух кусков" имеют мало общего. Ибо вопрос подразумевает, что задаются два региона и одно описание выходной секции, а линкер впихивает сколько влезет в первый регион и остаток во второй. Вам же нужно было разместить секцию по конкретному адресу, а это совсем другой вопрос. По поводу мусора - надо смотреть листинг и .map
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 14 2009, 09:42
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Сергей Борщ @ Sep 14 2009, 12:54)  Вы конечно извините, но то, что вы показали и исходный ваш вопрос "Можно ли как-нибудь создать один регион памяти из двух кусков" имеют мало общего. Ибо вопрос подразумевает, что задаются два региона и одно описание выходной секции, а линкер впихивает сколько влезет в первый регион и остаток во второй. Вам же нужно было разместить секцию по конкретному адресу, а это совсем другой вопрос. По поводу мусора - надо смотреть листинг и .map Как я понял, вектора прерываний и код должны сидеть в одной секции. У меня в проекте Iar, секции располагались следующим образом: - Вектора прерываний - CRP ключ - Основной код - MAC адрес - IP адрес В IAR каждая секция у меня сидела в своем регионе памяти. Между векторами и основным кодом сидела секция CRP. Но в GNU Linker вроде бы как нельзя разделять их по разным регионам. Поэтому я решил что можно выйти из этой ситуации, создав секцию .text из двух кусков (поэтому так и задал этот вопрос.  , про операцию = ADDR. не догадывался ). Один кусок расположить в свободной области между векторами и CRP, а второй после CRP. Однако так тут так тоже нельзя делать. А надо было выделить один регион памяти и напихать туда по очереди все секции, а адреса смещать при помощи операции .= ADDR. Собственно как тут и сделано: Код .text : { KEEP(*(.isr_vector)); . = 0x000001FC; KEEP(*(.crp_key)); *(.text*) *(.rodata*) } > CODE_MEM Цитата(Сергей Борщ @ Sep 14 2009, 12:54)  По поводу мусора - надо смотреть листинг и .map Про map смотреть сюда?: Код .MacIpMem 0x00003000 0x1004 *(.macaddr) .macaddr 0x00003000 0x6 ./src/Emac.o 0x00003000 OurMacAddr Как можно листинг посмотреть?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
Сообщений в этой теме
sergey sva скрипт Linkera Jan 24 2009, 17:43 Сергей Борщ Цитата(sergey sva @ Jan 24 2009, 19:43) П... Jan 24 2009, 19:23 sergey sva фот файл map, не чего неправильного не вижу, конеч... Jan 25 2009, 17:23 alx2 Цитата(sergey sva @ Jan 24 2009, 22:43) п... Jan 25 2009, 18:19 sergey sva ЦитатаПрямо так и выходит? Как это "память ух... Jan 25 2009, 18:35 alx2 Цитата(sergey sva @ Jan 25 2009, 23:35) О... Jan 26 2009, 10:37  Vitaliy_ARM Как здесь разместить вектора перерывания по указан... Jan 27 2009, 13:26   alx2 Цитата(Vitaliy_ARM @ Jan 27 2009, 18:26) ... Jan 28 2009, 10:45    Vitaliy_ARM Цитата(alx2 @ Jan 28 2009, 13:45) КодSECT... Jan 28 2009, 15:04     Vitaliy_ARM Задам еще, наверное глупый вопрос.
Может ли кто-ни... Jan 29 2009, 10:52     alx2 Цитата(Vitaliy_ARM @ Jan 28 2009, 20:04) ... Jan 29 2009, 14:03 sergey sva Уже какой день разбираюсь, но все еще не могу полу... Jan 30 2009, 17:16 amw Цитата(sergey sva @ Jan 30 2009, 19:16) У... Jan 30 2009, 18:19 sergey sva Помогло
хотел попробовать запустить отладчик ... Jan 30 2009, 19:23 Vitaliy_ARM Цитата(sergey sva @ Jan 30 2009, 22:23) П... Feb 2 2009, 08:28 sergey sva Пробую запустить openocd , не запускается пишет ош... Feb 2 2009, 21:21 gotty судя по всему Вы используете довольно свежую верси... Feb 3 2009, 08:23  sergey sva Цитата(gotty @ Feb 3 2009, 11:23) судя по... Feb 3 2009, 13:52   gotty Цитата(sergey sva @ Feb 3 2009, 15:52) со... Feb 3 2009, 14:02    sergey sva Цитата(gotty @ Feb 3 2009, 17:02) Ответ с... Feb 3 2009, 14:07     gotty Цитата(sergey sva @ Feb 3 2009, 16:07) я ... Feb 3 2009, 14:21      sergey sva Цитата(gotty @ Feb 3 2009, 17:21) Всё вер... Feb 3 2009, 15:33       gotty Цитата(sergey sva @ Feb 3 2009, 17:33) Ус... Feb 3 2009, 15:47        sergey sva Цитата(gotty @ Feb 3 2009, 18:47) А чего ... Feb 3 2009, 16:13         sergey sva ошибки были это сам не правильно запуска(повторно)... Feb 3 2009, 19:36          Vitaliy_ARM Цитата(sergey sva @ Feb 3 2009, 22:36) од... Feb 4 2009, 10:43           amw Цитата(Vitaliy_ARM @ Feb 4 2009, 12:43) А... Feb 4 2009, 12:13            Vitaliy_ARM Цитата(amw @ Feb 4 2009, 15:13) Хм. Я тож... Feb 4 2009, 12:54             sergey sva Цитата(Vitaliy_ARM @ Feb 4 2009, 15:54) П... Feb 4 2009, 13:26              Vitaliy_ARM Цитата(sergey sva @ Feb 4 2009, 16:26) по... Feb 4 2009, 13:36             amw Цитата(Vitaliy_ARM @ Feb 4 2009, 14:54) П... Feb 4 2009, 19:11              Vitaliy_ARM Цитата(amw @ Feb 4 2009, 22:11) 0xe01fc04... Feb 5 2009, 08:51               Vitaliy_ARM Заметил такую штуку.
Когда использовал GDB сервер... Feb 6 2009, 12:24 alx2 Цитата(sergey sva @ Feb 3 2009, 02:21) Во... Feb 3 2009, 13:03 sergey sva Еще есть одна непонятная ситуация, может что подск... Feb 3 2009, 20:38 gotty Цитата(sergey sva @ Feb 3 2009, 22:38) Ещ... Feb 4 2009, 14:32  sergey sva Цитата(gotty @ Feb 4 2009, 17:32) Возможн... Feb 4 2009, 15:04 sergey sva У меня обратная проблема,пока wigller подключен пр... Feb 4 2009, 12:13 alx2 Цитата(sergey sva @ Feb 4 2009, 17:13) но... Feb 5 2009, 10:48  sergey sva Цитата(alx2 @ Feb 5 2009, 13:48) По повод... Feb 5 2009, 17:52   amw Цитата(sergey sva @ Feb 5 2009, 19:52) По... Feb 5 2009, 18:58 sergey sva компиляция линкование и ассемблирование проходит б... Feb 4 2009, 16:29 sergey sva Спасибо теперь все работает. причина была : секци... Feb 5 2009, 19:43 amw Цитата(sergey sva @ Feb 5 2009, 21:43) Сп... Feb 5 2009, 19:48 _Pasha Подскажите, уважаемые, как бороться с такой чепухо... Apr 30 2009, 08:54 amw Цитата(_Pasha @ Apr 30 2009, 11:54) Подск... Apr 30 2009, 15:33 Сергей Борщ Цитата(_Pasha @ Apr 30 2009, 11:54) Пишу ... Apr 30 2009, 20:33       Vitaliy_ARM После разговора со службой поддержики. И после тог... Sep 15 2009, 11:16     alx2 Цитата(Vitaliy_ARM @ Sep 14 2009, 13:17) ... Sep 17 2009, 13:14      Vitaliy_ARM Цитата(alx2 @ Sep 17 2009, 17:14) Наверно... Sep 21 2009, 08:17
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|