|
|
  |
Как заполнить свободную память?, программная защита |
|
|
|
Sep 25 2007, 13:00
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324

|
Цитата А в чем защита если заполнить всю память джампами? Использование джампов параллельно WDT, полагаю, снизит вероятность подвисания контроллера. Или Вы думаете, уважаемый GDI, что только WDT уже достаточно?
Сообщение отредактировал namelos - Sep 25 2007, 13:31
|
|
|
|
|
Sep 25 2007, 14:26
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(namelos @ Sep 25 2007, 16:00)  Использование джампов параллельно WDT, полагаю, снизит вероятность подвисания контроллера. Не снизит оно ровным счетом ничего. Заполнять свободное пространство джампами нет смысла, потому что опкод FFFF, которым заполнен флеш, к зацикливанию не может привести, а следовательно PC самостоятельно выйдет на адрес 0. Проверку целостности должна выполнять программа-компаньен (загрузчик) размещенная в boot секции, и реагировать на сбой флеша соответвенно - давать возможность перезашить чип. Но в подавляющем большинстве случаев - достаточно только WDT.
|
|
|
|
|
Sep 25 2007, 14:58
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324

|
Цитата(defunct @ Sep 25 2007, 18:26)  Проверку целостности должна выполнять программа-компаньен (булоадер) размещенная в boot секции, и реагировать на сбой флеша соответвенно - давать возможность перезашить чип. Уважаемый defunct, Сразу появляется вопрос, как организовать проверку целостности? Что проверять, всю программную часть или только часть? По вашим суждениям я понял, что заполнение свободной памяти не имеет смысла, но к сожалению не услышал как это сделать. Как я предствляю, заполнить память возможно только изменением hex-файла с дописанием бинерной команды rjmp 0. Есть ли способ попроще? 2 Kuzmi4, под "подвисанием" контроллера- понимаю зацикленную работу контроллера, например при получении в PC aдреса сводного байта памяти с неизвестным содержанием.
|
|
|
|
|
Sep 25 2007, 15:09
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324

|
Цитата(Kuzmi4 @ Sep 25 2007, 19:02)  В приведённом вами примере собачка - идеальный вариант... Согласен, но прочитав о программной защите с помощью джампа на свободной памяти, задумался как добраться до нее. Да и резервная защита не помешает.
|
|
|
|
|
Sep 25 2007, 15:37
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Какова гарантия ,что не слетят начальные адресса кода ?  ,не поможет ни собака ни джампер. Вообще у меня флеша как правило слетала полностью. Забивать НЕХ запаритесь ,rjmp - это команда относительного перехода ,тоесть каждая последующий адресс перехода в ней на 1 больше,если охота попасть в одну и туже точку. Вообще такие проблемы решаются как правило ваянием простенькой утилитки на компе в течении 30-60 минут
|
|
|
|
|
Sep 25 2007, 16:31
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(namelos @ Sep 25 2007, 17:58)  Сразу появляется вопрос, как организовать проверку целостности? Что проверять, всю программную часть или только часть? У меня проверяется вся секция основной программы. Как это делается - Есть программа упаковщик (на PC), и программа bootloader распаковщик в MK. упаковщик открывает Hex файл, добавляет к нему одну страничку флеш со служебной информацией (дата/время создания, код железа для которого предназначена прошивка, версия, название, CRC и т.п.), шифрует все это дело. В МК зашивается bootloader, лочится секция бутлоадера и основной программы. Потом запакованный ранее файл шьется в МК уже средствами бутлоадера (расшифровывается внутри МК). Bootloader при старте МК провереяет CRC секции основной программы, с CRC записанной в служебной страничке флеш. Если совпадает - передает управление на адрес 0, если не совпадает - включает красный светодиод (если есть) и ждет команд сверху. Цитата По вашим суждениям я понял, что заполнение свободной памяти не имеет смысла, но к сожалению не услышал как это сделать. перепаковать Hex в Bin, добавить требуемую информацию, и перепаковать Bin обратно в Hex. Цитата Как я предствляю, заполнить память возможно только изменением hex-файла с дописанием бинерной команды rjmp 0. Есть ли способ попроще? Если только добавить заполнитель, то возможно есть соответвующая опция линкера, но я этим особо не интересовался.
|
|
|
|
|
Sep 25 2007, 16:46
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата(namelos @ Sep 25 2007, 16:38)  В целях защиты хотелось бы заполнить сводное место Flash-памяти "rjmp 0" Надо бы не Код jamp 0 а Код $ jamp $ Тогда собачка сделает сброс по таймауту, и это будет настоящий(правильный) сброс.
|
|
|
|
|
Sep 26 2007, 08:43
|

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

|
Цитата(GDI @ Sep 26 2007, 10:27)  Другое дело что после подобной перезагрузки(что собакой, что джампом) в ОЗУ будут какие то значения, которые там были на момент сбоя и как это повлияет на дальнейшую работу программы не известно С точки зрения программы содержимое ОЗУ можно рассматривать как такой же случайный мусор, как и при включении питания. Цитата(GDI @ Sep 26 2007, 10:27)  , на и отсюда есть выход - инициализировать переменные перед использованием. Инициализировать надо в любом случае. Ибо при включении питания там тоже может быть что угодно. При написании на С об этом заботится компилятор, точнее модуль cstartup, и он сделает все, что положено (обнулит глобальные переменные, в инициализированные запишет начальные значения). А если код на асме, то инициализировать надо вручную, но все равно это это надо делать в любом случае, даже если не предполагается такой программный рестарт.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 26 2007, 12:12
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Цитата(Сергей Борщ @ Sep 26 2007, 12:43)  С точки зрения программы содержимое ОЗУ можно рассматривать как такой же случайный мусор, как и при включении питания.Инициализировать надо в любом случае. У меня не инициализировались при включении/RESETe регистровые пары X и Y, пока не написал обнуление вручную - "многа думаль". Это было на 90S8515.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|