реклама на сайте
подробности

 
 
> CRC в IAR и определение конечного адреса, Подготовка к написанию BootLoadera
SasaVitebsk
сообщение Sep 22 2007, 10:24
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Доброго времени суток.
Где-то по топикам видел (не записал к сожалению), что IAR может автоматически генерить и вставлять CRC в конец проги. Хочу свой BootLoader написать и там это мне обязательно понадобится. Отсюда вопросы.
1) Как и где эту опцию включить в IAR.
2) Как из проги обратится к этой CRC (видимо какая то глобальная переменная есть, которая LINKером генерится)
3) Какая формула CRC, а лучше таблица или п/п.

Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Waso
сообщение Nov 22 2007, 09:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 22 2007, 11:03
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 25 2007, 18:43
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 21:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016