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

 
 
> Прошу помочь с подсчетом КС программы
ПАВ
сообщение Feb 20 2007, 22:13
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 3-05-06
Пользователь №: 16 721



Прошу помочь с подсчетом КС программы. Прочитал HELP на линкер, приведенный там пример не заработал (хотя узнал массу нового). Вопросы следующие:
1. Как вытащить начало и конец кода программы в функцию подсчета КС?
2. Есть ли возможность заставить линкер рассчитать CRC32 с заданным мною полиномом?
Если можно практические рекомендации. help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ПАВ
сообщение Feb 22 2007, 00:04
Сообщение #2





Группа: Новичок
Сообщений: 11
Регистрация: 3-05-06
Пользователь №: 16 721



Уточню задачу. Имеется несколько устройств, с разными AVR (128 и 2560). ПО в этих AVR перекрывается на 20-30%. В том числе совпадает (я надеюсь так сделать) и контроль целостности ПО. Как прицепиться к началу проги я разобрался (конец сегмента прерываний). Непонятно как прицепиться к концу ПО, ведь в каждом устройстве своя программа, свои сегменты и т.д.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 22 2007, 00:15
Сообщение #3


Гуру
******

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



Цитата(ПАВ @ Feb 21 2007, 23:04) *
Непонятно как прицепиться к концу ПО, ведь в каждом устройстве своя программа, свои сегменты и т.д.

Заводите свой сегмент и линкуете его в конец заодно в нем и собственно контрольную сумму размещаете.


Цитата(ПАВ @ Feb 21 2007, 23:04) *
Как прицепиться к началу проги я разобрался (конец сегмента прерываний).

Вообще-то ROMSTART и ROMEND имеют место быть smile.gif
Код
extern int ROMSTART;
extern int ROMEND;

И все smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sz36
сообщение Apr 20 2007, 00:05
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668



Цитата(ПАВ @ Feb 22 2007, 01:04) *
Как прицепиться к началу проги я разобрался (конец сегмента прерываний). Непонятно как прицепиться к концу ПО, ведь в каждом устройстве своя программа, свои сегменты и т.д.


Цитата(zltigo @ Feb 22 2007, 01:15) *
Заводите свой сегмент и линкуете его в конец заодно в нем и собственно контрольную сумму размещаете.
Вообще-то ROMSTART и ROMEND имеют место быть smile.gif


А зачем, собс-но, весь этот танец с началом и концом программы, когда IARовский линкер сам умеет КС считать? С ней в run-time и сравнивать. Я, например, в очень многих устройствах этот способ использую для контроля целостности программы. Опять же, начало и конец программы не помогут подсчитать КС на этапе компиляции, тогда какая-то постобработка нужна.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2007, 00:31
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 20 2007, 00:55
Сообщение #6


Гуру
******

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



Цитата(Сергей Борщ @ Apr 20 2007, 00:31) *
По этой причине я отказался от расчета КС линкером в пользу самописной утилиты, считающей как мне надо и размещающей КС по указанному мной адресу (в конец памяти).

Проблем написать утилиту - никаких. Только зачем? Диапазоны подсчета задаются, место расположения контрольной суммы задается, алгоритмов (даже без задания произвольных полиномов) изядное количество. Ну а считать всю память не всегда допустимо - у меня там еще несколько отдельно записываемых FPGA заливок лежат практически всегда.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2007, 09:24
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
lamerok
сообщение May 17 2007, 02:48
Сообщение #8


Частый гость
**

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


Гуру
******

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

Сообщений в этой теме
- ПАВ   Прошу помочь с подсчетом КС программы   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


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

 


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


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