|
CRC в IAR и определение конечного адреса, Подготовка к написанию BootLoadera |
|
|
|
 |
Ответов
|
Nov 22 2007, 09:29
|

Местный
  
Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470

|
Почему линкер при линковке требует больше места чем ему требуется на самом деле? Смотрю map-файл или готовый бинарник, сгенеренный когда линкеру дается весь флеш и затем задаю это (даже немного большее) значение как ROMEND. Код -DBOOTSIZE=00008000 //-DAPPMAXSIZE=00010000 -DAPPMAXSIZE=0000AB0F -DROMSTART=(00100000+BOOTSIZE) -DROMEND=(00100000+BOOTSIZE+APPMAXSIZE) Тогда линковщик начинает ругаться: Код Error[e16]: Segment DATA_C (size: 0x2e3c align: 0x2) is too long for segment definition. At least 0xc24 more bytes needed. The problem occurred while processing the segment placement command "-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND", where at the moment of placement the available memory ranges were "CODE:1108f6-112b0f" Reserved ranges relevant to this placement: 108000-1083a7 ICODE 1083a8-1108a5 CODE 1108a6-1108bf INITTAB 1108c0-112b0f DATA_ID Если дать ему эти нехватающие 0xC24 байта, то линкуется нормально, но это выделенное пространство заполняет как пустое неиспользованное место. Почему? На всяк случай приложил map и xcl файлы.
Прикрепленные файлы
pack.zip ( 2.65 килобайт )
Кол-во скачиваний: 23
|
|
|
|
|
Nov 22 2007, 11:03
|

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

|
Цитата(Waso @ Nov 22 2007, 11:29)  Почему линкер при линковке требует больше места чем ему требуется на самом деле? Это баг. Примерно догадываюсь, откуда он идет. Судя по адресам речь об ARM. Безусловный переход в ARM может быть сделан одним из двух способов - B label и LDR PC,=label (аналоги RJMP и JMP у AVR). Во втором случае требуется еще одно слово для хранения абсолютного адреса (label) в виде константы. В коде место под константу зарезервировано. При линковке линкер смотрит, может ли он дотянуться до метки командой B label. Если может, вставляет эту команду и удаляет ставшую ненужной константу с адресом label. Предполагаю, что код может просматриваться в несколько проходов, ибо переходы, которые были слишком длинными на первой итерации, после удаления части констант тоже могут заменены на короткие. Таким образом размер кода уменьшается. Видимо подсчет размера кода и выдача сообщения об ошибке происходит перед операцией замены длинных переходов на короткие. Это мое мнение, просто предположение. Увы, обход только один - выделить чуть больше памяти и вручную смотреть, что получившийся код уместился в имеющуюся память. Ой. только сейчас увидел: Цитата(vladimir_ad @ Sep 27 2007, 12:51)  Вы не поняли. Пример не работает - crc всегда 0. Ага, ошибочка: if (crc & (1U<<15))
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 25 2007, 18:43
|

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

|
Цитата(Сергей Борщ @ Nov 22 2007, 13:03)  Видимо подсчет размера кода и выдача сообщения об ошибке происходит перед операцией замены длинных переходов на короткие. Тема получила неожиданное продолжение на другом форуме, там же рецепт обхода проблемы. Еще не проверял.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
SasaVitebsk CRC в IAR и определение конечного адреса Sep 22 2007, 10:24 prottoss Цитата(SasaVitebsk @ Sep 22 2007, 18:24) ... Sep 22 2007, 10:30 zltigo Цитата(SasaVitebsk @ Sep 22 2007, 13:24) ... Sep 22 2007, 10:36 prottoss Processing
With the Processing options you can sp... Sep 22 2007, 10:57 SasaVitebsk Вроде понял
получилось
-J2,crc16,1,(CODE)E4-E6
Но... Sep 22 2007, 14:27 zltigo Можете завести свой сегмент и всегда линковать его... Sep 22 2007, 15:16  SasaVitebsk Цитата(zltigo @ Sep 22 2007, 18:16) Может... Sep 22 2007, 17:30   zltigo Цитата(SasaVitebsk @ Sep 22 2007, 20:30) ... Sep 22 2007, 17:40 SasaVitebsk Спасибо огромное. Sep 23 2007, 16:00 igorAT Доброго времени суток.
SasaVitebsk, если Вы разобр... Sep 24 2007, 13:12 Сергей Борщ Цитата(igorAT @ Sep 24 2007, 16:12) Кодvo... Sep 26 2007, 21:39 vladimir_ad Цитата(igorAT @ Sep 24 2007, 17:12) while... Sep 26 2007, 13:40 Сергей Борщ Цитата(vladimir_ad @ Sep 26 2007, 16:40) ... Sep 26 2007, 20:29  vladimir_ad Цитата(Сергей Борщ @ Sep 27 2007, 00:29) ... Sep 27 2007, 08:51   Сергей Борщ Цитата(vladimir_ad @ Sep 27 2007, 11:51) ... Sep 27 2007, 09:10    vladimir_ad Цитата(Сергей Борщ @ Sep 27 2007, 13:10) ... Sep 27 2007, 10:51 Waso Рецепт работает, благодарю!
Еще вопрос по CRC... Nov 27 2007, 09:13 Сергей Борщ Цитата(Waso @ Nov 27 2007, 11:13) В иаре ... Nov 27 2007, 11:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|