|
Прошу помочь с подсчетом КС программы |
|
|
|
Feb 20 2007, 22:13
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-05-06
Пользователь №: 16 721

|
Прошу помочь с подсчетом КС программы. Прочитал HELP на линкер, приведенный там пример не заработал (хотя узнал массу нового). Вопросы следующие: 1. Как вытащить начало и конец кода программы в функцию подсчета КС? 2. Есть ли возможность заставить линкер рассчитать CRC32 с заданным мною полиномом? Если можно практические рекомендации.
|
|
|
|
|
 |
Ответов
|
Feb 22 2007, 00:04
|
Группа: Новичок
Сообщений: 11
Регистрация: 3-05-06
Пользователь №: 16 721

|
Уточню задачу. Имеется несколько устройств, с разными AVR (128 и 2560). ПО в этих AVR перекрывается на 20-30%. В том числе совпадает (я надеюсь так сделать) и контроль целостности ПО. Как прицепиться к началу проги я разобрался (конец сегмента прерываний). Непонятно как прицепиться к концу ПО, ведь в каждом устройстве своя программа, свои сегменты и т.д.
|
|
|
|
|
Feb 22 2007, 00:15
|

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

|
Цитата(ПАВ @ Feb 21 2007, 23:04)  Непонятно как прицепиться к концу ПО, ведь в каждом устройстве своя программа, свои сегменты и т.д. Заводите свой сегмент и линкуете его в конец заодно в нем и собственно контрольную сумму размещаете. Цитата(ПАВ @ Feb 21 2007, 23:04)  Как прицепиться к началу проги я разобрался (конец сегмента прерываний). Вообще-то ROMSTART и ROMEND имеют место быть  Код extern int ROMSTART; extern int ROMEND; И все
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 20 2007, 00:05
|
Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668

|
Цитата(ПАВ @ Feb 22 2007, 01:04)  Как прицепиться к началу проги я разобрался (конец сегмента прерываний). Непонятно как прицепиться к концу ПО, ведь в каждом устройстве своя программа, свои сегменты и т.д. Цитата(zltigo @ Feb 22 2007, 01:15)  Заводите свой сегмент и линкуете его в конец заодно в нем и собственно контрольную сумму размещаете. Вообще-то ROMSTART и ROMEND имеют место быть  А зачем, собс-но, весь этот танец с началом и концом программы, когда IARовский линкер сам умеет КС считать? С ней в run-time и сравнивать. Я, например, в очень многих устройствах этот способ использую для контроля целостности программы. Опять же, начало и конец программы не помогут подсчитать КС на этапе компиляции, тогда какая-то постобработка нужна.
|
|
|
|
|
Apr 20 2007, 00:31
|

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

|
Цитата(sz36 @ Apr 19 2007, 23:05)  А зачем, собс-но, весь этот танец с началом и концом программы, когда IARовский линкер сам умеет КС считать? С ней в run-time и сравнивать. Так в run-time же надо ее тоже посчитать, чтобы было что сравнивать. Для этого и нужен. Только зачем считать именно до конца программы, когда можно просчитать до конца памяти? И вот тут уже иаровский линкер лажается. Он считает, что незанятая память содержит нули, а на самом-то деле там 0xFF. Чтобы его результат совпадал с реальным приходится давать команду "заполнить свободное место константой 0xFFFF" и файл прошивки неприлично разбухает. По этой причине я отказался от расчета КС линкером в пользу самописной утилиты, считающей как мне надо и размещающей КС по указанному мной адресу (в конец памяти).
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 20 2007, 09:24
|

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

|
Цитата(zltigo @ Apr 19 2007, 23:55)  Проблем написать утилиту - никаких. Только зачем? Диапазоны подсчета задаются, место расположения контрольной суммы задается, алгоритмов (даже без задания произвольных полиномов) изядное количество. Еще раз: Если в этом диапазоне будут пустоты, то линкер считает, что там 0. А программа в реал-тайме находит там 0xFF. Сумма не совпадает. Чтобы этого избежать, надо указать линкеру заполнить свободное место константой, а это не всегда приемлемо. Цитата(zltigo @ Apr 19 2007, 23:55)  Ну а считать всю память не всегда допустимо Это уже частности. Важно, что считается определенный диапазон, адреса которого фиксированы независимо от размера прошивки. Ибо подсчет (у меня) делает загрузчик, а он понятия не имеет о реальном размере прошивки, он только знает какая область под нее выделена.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 17 2007, 02:48
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 22-06-04
Из: Челябинск
Пользователь №: 88

|
Цитата(Сергей Борщ @ Apr 20 2007, 16:24)  Еще раз: Если в этом диапазоне будут пустоты, то линкер считает, что там 0. А программа в реал-тайме находит там 0xFF. Сумма не совпадает. Чтобы этого избежать, надо указать линкеру заполнить свободное место константой, а это не всегда приемлемо.Это уже частности. Важно, что считается определенный диапазон, адреса которого фиксированы независимо от размера прошивки. Ибо подсчет (у меня) делает загрузчик, а он понятия не имеет о реальном размере прошивки, он только знает какая область под нее выделена. Именно поэтому делаем в *.xcl вот так Код // fill empty code space with 0x00 -H00 // generate a 2-byte crc16 checksum -J2,crc16
|
|
|
|
|
May 17 2007, 03:20
|

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

|
Цитата(lamerok @ May 17 2007, 09:48)  Именно поэтому делаем в *.xcl вот так А что, от заполнения свободного места прошивки нулями вместо 0xFFFF ее размер сильно сохранится? Цитата Чтобы его результат совпадал с реальным приходится давать команду "заполнить свободное место константой 0xFFFF" и файл прошивки неприлично разбухает.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
ПАВ Прошу помочь с подсчетом КС программы Feb 20 2007, 22:13 zltigo Цитата(ПАВ @ Feb 20 2007, 21:13) Прочитал... Feb 20 2007, 22:51        zltigo Цитата(Сергей Борщ @ May 17 2007, 10:20) ... May 17 2007, 03:50         Сергей Борщ Цитата(zltigo @ May 17 2007, 10:50) Серге... May 17 2007, 05:57        lamerok Цитата(Сергей Борщ @ May 17 2007, 06:20) ... May 18 2007, 08:51 Василий Зыков Написал процедуру расчета CRC-кода программы и нат... Mar 29 2007, 10:47 Сергей Борщ Цитата(Василий Зыков @ Mar 29 2007, 09:47... Mar 29 2007, 12:51 Василий Зыков Сам задал вопрос - сам и отвечаю
Изменил определ... Mar 29 2007, 13:14 Faradey Цитата(Василий Зыков @ Mar 29 2007, 12:14... Mar 29 2007, 14:12  Василий Зыков Цитата(Faradey @ Mar 29 2007, 17:12) __fl... Mar 29 2007, 14:55 Runner Сегодня с удивлением обнаружил, что талантливый ли... Sep 19 2009, 17:09 zltigo Цитата(Runner @ Sep 19 2009, 19:09) Сегод... Sep 19 2009, 17:41  Runner Цитата(zltigo @ Sep 19 2009, 19:41) Лучше... Sep 20 2009, 06:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|