|
Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода |
|
|
|
Feb 11 2008, 17:42
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
А кто как защищает код в MCU от несанкционированного выполнения в результате случайного перехода из одной точки программы в другую от воздействия помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения). А? Приведу пример -------------------- lab_1_input: ldi R16 , $00 mov R16 , $98 ... lab_1_output: mov R17 , R5 ----------------------- lab_2_1_input: mov R18, R17 Т.е. допустим программа предусматривает переход к выполнению кодового фрагмента, начинающегося с метки lab_2_1_input только после отработки до конца фрагмента [lab_1_input;lab_1_output] А представим , что от помехи произошёл случайный переход из произвольной точки 1-го фрагмента кода в произвольную точку 2-го фрагмента кода.... Как вы ПРОГРАММНО отлавливаете такие ситуации? Т.е. как Вы реализовываете в своих программах для микроконтроллеров ATmega механизм защиты FLASH-памяти от несанкционированного выполнения кода. Ну т.е. как контролировать, что в данный фрагмент кода вошли не где попало, а через строго определённые на этапе проектирования программы, точки Цитата(Дон Амброзио @ Feb 11 2008, 20:36)  А кто как защищает код в MCU от несанкционированного выполнения в результате случайного перехода из одной точки программы в другую от воздействия помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения). Кстати, причины такого случайного джампа могут быть не только в разрушении PC. Может также случайным образом измениться содержимое ячейки FLASH или содержимое хранимой в ОЗУ таблицы переходов... В любом случае МОЖЕТ произойти переход в точку некоторого логического сегмента кода, которая не предусмотрена данным логическим сегментом FLASH
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
 |
Ответов
|
Feb 11 2008, 18:05
|

Частый гость
 
Группа: Свой
Сообщений: 99
Регистрация: 27-10-07
Из: СПб
Пользователь №: 31 797

|
А как вы будете защищать "механизм защиты от несанкционированного выполнения"? А механизм защиты механизма защиты? А от прямого попадания молнии? Используйте WDT от "случайных" зависаний ну и, пожалуй, проверяйте CRC программного кода. Здесь эта тема броде бы обсуждалась
|
|
|
|
|
Feb 11 2008, 18:40
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(Liseev @ Feb 11 2008, 21:05)  Используйте WDT от "случайных" зависаний ИМХО, "случайные зависания" в граммотно разработанной программе невозможны так что и необходимость применения WDT практически равна нулю Цитата(Liseev @ Feb 11 2008, 21:05)  проверяйте CRC программного кода Проверяю Цитата(Liseev @ Feb 11 2008, 21:05)  Здесь эта тема броде бы обсуждалась Обсуждалась...А отслеживаю темы подобной тематики
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 11 2008, 21:34
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Дон Амброзио @ Feb 11 2008, 22:40)  ИМХО, "случайные зависания" в граммотно разработанной программе невозможны так что и необходимость применения WDT практически равна нулю Liseev писал вам правильно, а вы наводите тень на плетень. Естественно, ни о каких программных зависаниях речь не может идти. Но "зависание", как таковое, это не бездействие процессора. Если процессор "завис" после помехи или сбоя - это значит он попал в какой то цикл. Причём цикл обычный, "правильный", только в "неправильное" время. Из этого состояния его и вытягивает WDT. Предложу вам свой метод вставки WDT. 1) Программа отлаживается полностью без WDT. 2) Анализируется текст программы. Выявляются минимальное число мест, где нельзя обойтись без сброса WDT. Надо чётко понимать, чем больше вы ввалите WDR, тем ниже вероятность выведения проца из ступора после сбоя (выше вероятность, что он зациклится там, где предусмотрен WDR). 3) Определяется минимальное время, достаточное для работы без "вылета". 4) Анализируются прерывания. (Здесь кто-то предлагал ставить WDR в регулярных прерываниях. На мой взгляд это возможный, но не самый лучший вариант) 5) В местах установки вами WDR желательно программно анализировать остальные параметры работы программы. Например известные признаки разрешения прерываний, максимальная длительность нахождения программы в том или ином цикле и так далее. 6) Программа инициализации должна анализировать состояние и причину сброса. Должна обеспечивать полную инициализацию всего используемого оборудования, включая умолчания. Сама инициализация должна проводится максимально быстро либо обеспечивать "теневую" работу. Иными словами, в оптимале, чтобы пользователь не замечал пересброса системы. Тестируется.
|
|
|
|
|
Feb 11 2008, 21:52
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(SasaVitebsk @ Feb 12 2008, 00:34)  Liseev писал вам правильно, а вы наводите тень на плетень. Странный у вас метод ведения дисскусии Цитата(SasaVitebsk @ Feb 12 2008, 00:34)  Но "зависание", как таковое, это не бездействие процессора. Да что Вы говорите...Прям открытие для меня сделали..А я прям не знал Цитата(SasaVitebsk @ Feb 12 2008, 00:34)  Если процессор "завис" после помехи или сбоя - это значит он попал в какой то цикл. Причём цикл обычный, "правильный" Ещё раз повторяю (Вы что не читатель? Почему я должен повторять?): В правильно разработанной (грамотной) программе таких циклов (а значит и зависаний) быть не может!!! Цитата(SasaVitebsk @ Feb 12 2008, 00:34)  Предложу вам свой метод вставки WDT.
1) Программа отлаживается полностью без WDT. 2) Анализируется текст программы. Выявляются минимальное число мест, где нельзя обойтись без сброса WDT. Надо чётко понимать, чем больше вы ввалите WDR, тем ниже вероятность выведения проца из ступора после сбоя (выше вероятность, что он зациклится там, где предусмотрен WDR). 3) Определяется минимальное время, достаточное для работы без "вылета". 4) Анализируются прерывания. (Здесь кто-то предлагал ставить WDR в регулярных прерываниях. На мой взгляд это возможный, но не самый лучший вариант) 5) В местах установки вами WDR желательно программно анализировать остальные параметры работы программы. Например известные признаки разрешения прерываний, максимальная длительность нахождения программы в том или ином цикле и так далее. 6) Программа инициализации должна анализировать состояние и причину сброса. Должна обеспечивать полную инициализацию всего используемого оборудования, включая умолчания. Сама инициализация должна проводится максимально быстро либо обеспечивать "теневую" работу. Иными словами, в оптимале, чтобы пользователь не замечал пересброса системы. И как всё это можно применить в многозадачной среде RTOS? http://electronix.ru/forum/index.php?showtopic=43223
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 11 2008, 22:45
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Дон Амброзио @ Feb 12 2008, 01:52)  Ещё раз повторяю (Вы что не читатель? Почему я должен повторять?): В правильно разработанной (грамотной) программе таких циклов (а значит и зависаний) быть не может!!! Вы даже не понимаете что вы пишете. Не понимаете самой сути зависания, а ещё пытаетесь ехидничать. Через год перечитаете свои топики - будет стыдно. Ладно попытаюсь вам объяснить. Представьте себе правильно написанную программу, которая отработана и не содержит не единой ошибки. В ней находится следующий текст например: Код ... ReadLptEPP: sbic pinc,LptSTB ; Строб пришёл? rjmp ReadLptEPP ; иначе повторить sbic pine,WRITE ; Если запись HOST, то продолжить rjmp errLptEPP ; иначе ошибка in wl,ILPT ; ввод данных в wl sbi portc,WAIT ; подтвердить rwaitNoLptSTB: sbis pinc,LptSTB ; Строб сняли? rjmp rwaitNoLptSTB; иначе повторить cbi portc,WAIT ; подтвердить ret ... Теперь представьте себе что произошёл сбой в работе процессора и программа попала в ReadLptEPP либо rwaitNoLptSTB. Не по логике работы программы, а по сбою. Если для вас это непонятно, то представьте, что произошла ошибка во время перехода процессора, либо во время сбоя исказился PC, либо исказился стек и произошёл возврат не туда. Ну что доступно объясняю? Более того чтобы не исказилось и кудабы проц не пошёл, то он заткнётся в каком-нибудь цикле!!!! Это то понятно? В любой программе правильно написаной десятки либо тысячи циклов. Что тут непонятно? Но если ваша программа, например, сидит в цикле ожидания символа из UARTа, а он туда не должен придти, по той банальной причине, что вы не делали запроса и не потому что программа неправильно написана, а потому, что произошёл сбой и программа попала туда, куда не должна была попасть. Что тут не ясно?
|
|
|
|
|
Feb 11 2008, 23:08
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(SasaVitebsk @ Feb 12 2008, 01:45)  Что тут не ясно? Мне всё ясно... Вы привели продемонстрировали сейчас КАК НЕ НАДО ПИСАТЬ ПРОГРАММЫ на примере неправильной организации программы..Я Вам еще раз повторяю: в граммотно спроектированной программе вечных циклов быть не должно не при каких искажениях данных и регистров!!!! Цитата(SasaVitebsk @ Feb 12 2008, 01:45)  во время сбоя исказился PC, либо исказился стек и произошёл возврат не туда Вот в этом, собственно, и вопрос темы. Как спроектировать программу, чтобы она детектировала приведённые Вами явления. Надеюсь из моих объянений и примеров Вы поняли, что Watchdog тут поможет также как козе пятая нога, ибо в граммотно спроетированной программе вечные циклы невозможны Хочу заметить, Господа что я прекрасно себе представляю, что [u]абсолютно все случаи несанкционированного использования кода программно обнаружить невозможно[/u] (а может есть MCU с аппаратной реализацией деления и защиты кода во FLASH?). Цитата(galjoen @ Feb 12 2008, 01:05)  Такой команды у AVR нет. Согласен.. описАлся Цитата(galjoen @ Feb 12 2008, 01:05)  Если это в основном цикле Какой ещё основной цикл в многозадачной многопоточной среде RTOS? И там стеков не один, а несколько...Причём как стеки PC, так и стеки данных
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 11 2008, 23:11
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Дон Амброзио @ Feb 12 2008, 03:02)  Мне всё ясно... Вы привели продемонстрировали сейчас КАК НЕ НАДО ПИСАТЬ ПРОГРАММЫ на примере неправильной организации программы....
Надеюсь из моих объянений и примеров Вы поняли, что Watchdog тут поможет также как козе пятая нога, ибо в граммотно спроетированной программе вечные циклы невозможны Хочу заметить, Господа что я прекрасно себе представляю, что [u]абсолютно все случаи несанкционированного использования кода программно обнаружить невозможно[/u] (а может есть MCU с аппаратной реализацией деления и защиты кода во FLASH?). Простите пожалуйста О ВЕЛИКИЙ. Мне надо ещё долго учиться правильности написания программ. А также правильности её организации. Да вот ещё незадача - разработчики компилятора C IAR (а я по своей дурости его использую как и тысячи других ещё вами не просвещённых) в своих библиотеках тоже совершенно безграмотно пишут. Например при обращении к EEPROM. Безусловно надо всё переписать. Завтра же возьмусь. Правда придётся заказывать новые чипы, так как новый правильный код в старые увы не влезет. Да и завтра же отпишусь на Atmel, Intel, Dallas, Philips, TI и прочие конторы, что для правильно написанной программы "Watchdog тут поможет также как козе пятая нога, ибо в граммотно спроетированной программе вечные циклы невозможны". С уважением, ваш почитатель.
|
|
|
|
|
Feb 11 2008, 23:31
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(SasaVitebsk @ Feb 12 2008, 02:11)  Простите пожалуйста О ВЕЛИКИЙ. Мне надо ещё долго учиться правильности написания программ. А также правильности её организации. Да вот ещё незадача - разработчики компилятора C IAR (а я по своей дурости его использую как и тысячи других ещё вами не просвещённых) в своих библиотеках тоже совершенно безграмотно пишут. Например при обращении к EEPROM. Безусловно надо всё переписать. Завтра же возьмусь. Правда придётся заказывать новые чипы, так как новый правильный код в старые увы не влезет.
Да и завтра же отпишусь на Atmel, Intel, Dallas, Philips, TI и прочие конторы, что для правильно написанной программы "Watchdog тут поможет также как козе пятая нога, ибо в граммотно спроетированной программе вечные циклы невозможны".
С уважением, ваш почитатель. А Вы ещё ИАРу напишите, что у них неправильный ИАР... А вообще "нЕчего на зеркало пенять коли рожа кривая"(с) Если Вы не хотите чуть-чуть больше подумать на стадии проектирования программы, то тут уже Вам не ИАР, не Atmel ни кто-либо ещё уже не поможет Кстати, Господа!! Хочу заметить вот что: 1) Вы мне хорошо расписали необходимость применения WDT в простейшей программе типа СуперЛуп и даже объяснили, где лучше вставлять команду сброса WDT для этого случая... Но при этом ничего не сказали о специфике применения WDT для случая многопоточных приложений в вытесняющей RTOS 2) Что можно применить кроме WDT высказлся только Непомнящий Евгений, а что же остальные? Цитата(SasaVitebsk @ Feb 12 2008, 02:11)  Да и завтра же отпишусь на Atmel, Intel, Dallas, Philips, TI и прочие конторы, что для правильно написанной программы "Watchdog тут поможет также как козе пятая нога, ибо в граммотно спроетированной программе вечные циклы невозможны". Да и ещё пожалуйтесь не то, что ихний Watchdog не помогает в случаях бездарного написания програмы
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 13 2008, 12:47
|

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

|
Цитата(Дон Амброзио @ Feb 12 2008, 01:31)  2) Что можно применить кроме WDT высказлся только Непомнящий Евгений, а что же остальные? Вы же и так все знаете, зачем Вам еще что-то советовать?! Цитата Но это я конечно погорячился, но если встанет такая дилема - я пойду на это Горячий испанский парень. Цитата Вот Вам ответ.. От себя лишь добавллю термин "счётчик-ограничитель количества итераций цикла" Вам о чём-нибудь говорит? это еще что за зверь такой "счетчик ограничитель". В RTOS каждая задача - это бесконечный цикл. Цитата Мне это хорошо известно.. Но я с такими пока не работал... Слова дойстойные анекдота.  Цитата Тема то у нас гораздо шире.. Или просто никто больше не знает других методов "борьбы" с явлением, указанном в названии темы? тема ваша тупая на самом деле, и в том виде в каком задача поставлена в первом посте - не имеет решения вообще. Цитата Не звизди.. Куда смотрят модераторы?! Пора бы немного остудить гарячего парня. Цитата ( я последнее время больше программером работаю, хотя я могу и платы разводить, и схемы проектировать). 50% боксер / 50% сторожевая собака © какой-то мультик Цитата Чуть-чуть пошевелить мозгами для Вас мучение? опять хамство. Цитата У меня наприммер в моих программах работающих в среде моей же RTOS  Цитата Спасибо Вам большое...Я давно уже хотел Вам это предложить... Да стеснялся.. Боялся Вас обидеть... полное хамство. Цитата А кто хамил? И где? И почему бы Вам свои благодарности было не написать в привате? Зачем тему-то замусоривать? Вы. В каждом посте. Потому что меня Ваша манера ведения дискуссии просто бесит. Пришел всезнающий барин, и давай всем объяснять какаие они л...и., какой уж тут приват. Тему эту уже не замусоришь, она и так замусорена вашими постами "от и до".
|
|
|
|
|
Feb 13 2008, 16:08
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(defunct @ Feb 13 2008, 15:47)  это еще что за зверь такой "счетчик ограничитель". "На свете есть много такого, мой друг, Горацио, что и не снилось нашим мудрецам"(С) Цитата(defunct @ Feb 13 2008, 18:12)  Я собсно хочу отметить, что задача автора ветки - нерешаемая. Ее можно только обойти, но не решить. ПринимаетсяЯ немного неправильно сформулировал задачу. Я написал в исходном сообщении: А кто как защищает код в MCU от несанкционированного выполнения в результате случайного перехода из одной точки программы в другую от воздействия помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения). А? А правильно бы надо было так (ведь именно это меня и интересует): А кто как организует код программы, чтобы программа детектировала (обнаруживала) случайные переходы из одной точки программы в другую, вызванные воздействием помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения) т.е. переходы, не предусмотренные на этапе проектирования программыЦитата(galjoen @ Feb 13 2008, 17:34)  Согласен, что защита не 100%. Вот я и говорю, что не 100% но всё же эффект ведь налицо от применения "программных методов" Что эти Господа так упираются против использования программных методов обнаружения сбоев? Не понимаю Цитата(mig2002 @ Feb 13 2008, 16:20)  А что касается несанкционированных помех и т.д., то эти вопросы лучше решать другими способами (экранами, фильтрами, убрать подальше от источника помех.....). Конечно лучше... И плюс для подстраховки рассыпать в проге код обнаружения случайных джампов...Так...На всякий пожарный
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 13 2008, 23:51
|

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

|
Цитата А кто как организует код программы, чтобы программа детектировала (обнаруживала) случайные переходы из одной точки программы в другую, вызванные воздействием помехонесущего электромагнитного поля Детектировать случайный переход из одной точки программы в другую своевременно и безболезненно для текущей выполняющейся программы невозможно. Стало быть вопрос лишь в масштабах последствий такого сбоя (по убыванию): 1. Нарушение памяти программ. 2. Нарушение содержимого регистров / памяти данных - в последствии к "подвисанию" неверной работе части программы. 3. Порча незначительных данных например пакета защищенного кодом защиты. (плохо конечно, но с этим можно смириться). 4. Чисто везение, прыжек в участок кода - который ничего не испортил (например из финализации одной функции в финализацию другой с подобными параметрами). Везение рассматривать не будем. Итого лечить надо только 1 и 2. Первое лечится с помощью дублирования кода программы. Определяется и устраняется эта ошибка при очередной перезагрузке устройства. Как правило после такого сбоя устройство перезагружается по WDT. Второе - система продолжает работать но часть функций отказала. Лечится перезагрузкой, перезагрузка делается опять с помощью WDT. Вопрос в том где и как сбрасывать WDT чтобы последствия сбоя были 100% устранены. Решить этот вопрос можно например введя мониторинг статуса каждой задачи. Если используется RTOS, то сделать это достаточно просто - idle task (задача с самым низким приоритетом) периодически оцнивает состояние каждой задачи, если все задачи в порядке - WDT сбрасывается. Состояние же каждой задачи должно определяться индивидуально, для каждой задачи свой отдельный таймаут. Пусть имеется некое устройство, которое занимается опросом некоторых датчиков по одному интерфейсу, и отправляет результаты - по другому. Тогда работу этого устройства можно разбить на 5 задач: 1. idle (занимается контролем WDT) 2. обслуживание передачи по интерфейсу датчиков. 3. обслуживание приема по интерфейсу датчиков. 4. обслуживание передачи по интерфейсу хоста. 5. обслуживание приема по интерфейсу хоста. Статус первой задачи всегда Ок (коль уж в нее попали, то стало быть она работает). Статус 2-й задачи переходит в состояние Alert если счетчик отправленных пакетов не изменяется в течение заданного таймаута. Статус 3-й задачи определяется таймаутом "за n секунд не принято ни одного байта" Статус 4-й задачи определяется аналогично 2-й и наконец статус 5-й - аналогично 3-й. Если хотя бы одна задача не в порядке, то в задаче 1 запрещаем прерывания и подвешиваем систему циклом while( K * WDT_CYCLE) __no_operation(); где WDT_CYCLE - константа, соответвующая количеству циклов эквивалентное интервалу WDT. K - коэффициен >1, для гарантии сброса МК. Если вдруг получается так, что мы выходим из этого цикла. Тогда WDT вероятно тоже сбойнул - пытаемся: 1. Выполнить аппаратный сброс (если заранее предусмотрели управление внешней схемой сброса). 2. Выполнить прыжек по RESET вектору (т.к. хуже уже все равно не будет). PS: До сих пор, против "случайных прыжков" этих программных мер мне хватало с головой.
|
|
|
|
|
Feb 14 2008, 00:30
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(defunct @ Feb 14 2008, 02:51)  Детектировать случайный переход из одной точки программы в другую своевременно и безболезненно для текущей выполняющейся программы невозможно. В корне не согласен с этой аксиомой(откуда Вы это взяли). 100% случайных джампов конечно никогда не отловить. А вот если предположить что джампы на любую величину смещения относительно заданной точки равновероятны, то можно отловить большинство случайных джампов.. Отловить в смысле обнаружить в программе, что случайный джамп имел место. Выше уже приводилось по крайней мере 2 метода как это сделать Цитата(defunct @ Feb 14 2008, 02:51)  Как правило после такого сбоя устройство перезагружается по WDT. С чего Вы это взяли? Допустим во FLASH некоторый код изменился так, что вместо команды установки флага "Пришёл пакет извещения о пожаре" будет команды сброса этого флага. И девайс будет работать нормально просто в любом случае будет считать, что у него всё ОК и никакого пожара нет. И соответственно никакого зацикливания/зависания не произойдёт, а девайс при этом будет находиться в неисправном состоянии Цитата(defunct @ Feb 14 2008, 02:51)  Второе - система продолжает работать но часть функций отказала. Лечится перезагрузкой Сама по себе перезагрузка, как таковая, ничего не лечит. Она просто сбрасывает MCU периферию в исходное состояние. Более того, она не позволит установить причину перезагрузки. Например если зацикливание было вызвано самопроизвольным изменением регистра UBRR из-за чего UART перестал принимать пакеты извне или случайым сбросом флага разрешения прерываний от UART, то после перезагрузки вся периферия сброситься в исходное состояние и мы не узнаем "а чё это было-то?" Цитата(defunct @ Feb 14 2008, 02:51)  если все задачи в порядке - WDT сбрасывается. Состояние же каждой задачи должно определяться индивидуально, для каждой задачи свой отдельный таймаут. А кто будет считать этот тайм-аут?
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 14 2008, 00:33
|

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

|
Цитата(Дон Амброзио @ Feb 14 2008, 02:13)  В корне не согласен с этой аксиомой(откуда Вы это взяли). 100% случайных джампов конечно никогда не отловить. Потому что: 1. Они случайны, а это значит что можно прыгнуть из "RET" одной функции на "RET" другой. 2. Есть вероятность сбоя детектора, поясню - достаточно мощная EM помеха, способная привести к прыжку бог знает куда, также легко может нарушить содержимое памяти. Ну и Вы сами говорите что 100% нельзя отловить, а раз 100% нельзя отловить то зачем их ловить?! Чаще выгоднее мониторить конкретные узлы МК. И делать recovery там где это возможно, но не всегда это возможно вообще... А вообще, советую поработать с ARM, прыжки случайные там отлавливаются самим процессором на раз аппаратурой процессора. Сильная EM помеха приводящая к случаному прыжку и Вы раньше или позже, но 100% попадете в один из трех Exception'ов DABT/PABT/UNDEFABT.
|
|
|
|
|
Feb 14 2008, 07:11
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(defunct @ Feb 14 2008, 03:33)  Ну и Вы сами говорите что 100% нельзя отловить, а раз 100% нельзя отловить то зачем их ловить?! CRC тоже 100% защиты не даёт. CRC16 не более чем в 65536 раз защищённость повышает, а CRC32 не более чем в 0x100000000 раз. Что тогда и CRC не пользоваться? Это-же не 100%! Цитата(defunct @ Feb 14 2008, 03:45)  Конечно сбой надо продетектить, +1 Цитата(defunct @ Feb 14 2008, 03:45)  Речь о том, что до сброса мы не сможем отдетектить нарушение FLASH. Ну это просто очень накладно пересчитывать CRC флеша постоянно в процессе работы. Совершенно не накладно. В задаче с наименьшим приоритетом по 1-му слову за раз. У меня это основной цикл. У вас это idle таск. Только срабатывать это должно не сразу. А например, когда 2 раза подряд CRC не совпало. Цитата(defunct @ Feb 14 2008, 04:06)  Так в чем вопрос - переходите на ARM с MMU. В старших моделях (920T и выше) мало того, что каждому килобайту памяти можно настроить параметры доступа, так еще определяется и "выровнянность" кода. А если прыгнули внутри одного блока - то DATA_ABORT обеспечен, т.к. сбой произойдет из-за искаженных данных. Но и в младших моделях некоторые прелести MMU есть, а цена такая же как и на меги. У ARM код из ОЗУ берётся. А в ОЗУ код гораздо больше изменениям от помехи подвержен, чем во FLASH. Хотя-бы при переписывании его туда.
|
|
|
|
|
Feb 14 2008, 15:35
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(galjoen @ Feb 14 2008, 10:11)  У ARM код из ОЗУ берётся. Ээээ...Тогда они однозначно менее надёжны, поскольку ОЗУ попортить помехе гораздо легче чем ПЗУ Цитата(singlskv @ Feb 14 2008, 12:38)  И прыгают они у Вас исключительно на код, а на данные размещенные во флеш видимо никогда не прыгают Прыгают и на данные, но я данные храню в специальном дезактивированном формате, поэтому если даже проц запрыгнет на данные ничего ужасного не произойдёт... Цитата(Rst7 @ Feb 14 2008, 09:25)  Просто выполнено как положено, не раз тут методики правильного проектирования обсуждали. +Цитата(Rst7 @ Feb 14 2008, 09:25)  до сих пор поражаюсь, там такая петля была по земле, жуть... Странно.. Я читал совершенно другие "методики правильного проектирования". Что наооборот землю надо пускать кольцом по краю платы
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 14 2008, 18:45
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(singlskv @ Feb 14 2008, 21:10)  Ой... Да ничо, ничо Цитата(singlskv @ Feb 14 2008, 21:10)  а Вы не просветите нас про Ваш дезактивированный формат ? или еще не придумали как это должно выглядеть... Почему же...Придумал.. И давно уже юзаю...У меня данные храняться в команде CPI Rd , K. Как Вы, конечно же знаете, код этой команды 0011KKKK ddddKKKK. Отсюда 12 из 16 бит ячейки флэшь можно заюзать под данные. Т.е. 25% объёма флешь мы теряем в случае такого способа хранения данных.. Но зато !!!! Если в результате случайного джампа проц попадёт на область данных, то он просто выполнить цепочку команд CPI Rd , K а в конце области данных у меня стоит джамп JMP CRASH
Сообщение отредактировал Дон Амброзио - Feb 14 2008, 18:56
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 14 2008, 18:51
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Дон Амброзио @ Feb 14 2008, 21:35)  Почему же...Придумал.. И давно уже юзаю...У меня данные храняться в команде CPI Rd , K. Как Вы, конечно же знаете, код этой команды 0011KKKK ddddKKKK. Отсюда 12 из 16 бит ячейки флэшь можно заюзать под данные. Т.е. 25% объёма флешь мы теряем в случае такого способа хранения данных.. Но зато !!!! Если в результате случайного джампа проц попадёт на область данных, то он просто выполнить цепочку команд CPI Rd , K а в конце области данных у меня стоит джамп JMP CRASH Хотелось бы увидеть реальный пример хранения ну например таблиц CRC16 modbus в "дезактевированном" состоянии.... Цитата Нет в ATmega-х таких команд Ээээ..., Вы правда знаете все команды ATmega ? LDS,STS это какие-то другие команды ? не 32 бит ? Ну уж просветите, наш Гуру...
|
|
|
|
Сообщений в этой теме
Дон Амброзио Защита секция кода во FLASH в ATmega Feb 11 2008, 17:42  Liseev Цитата(Дон Амброзио @ Feb 11 2008, 21:40)... Feb 11 2008, 19:32        SasaVitebsk Цитата(Дон Амброзио @ Feb 12 2008, 03:31)... Feb 12 2008, 08:41         Дон Амброзио Цитата(SasaVitebsk @ Feb 12 2008, 11:41) ... Feb 12 2008, 12:01             Дон Амброзио Цитата(defunct @ Feb 14 2008, 03:33) Пото... Feb 14 2008, 00:49              defunct Цитата(Дон Амброзио @ Feb 14 2008, 02:49)... Feb 14 2008, 00:55               Дон Амброзио Цитата(defunct @ Feb 14 2008, 03:55) Вооб... Feb 14 2008, 01:26                defunct Цитата(Дон Амброзио @ Feb 14 2008, 03:21)... Feb 14 2008, 01:34                 Дон Амброзио Цитата(defunct @ Feb 14 2008, 04:34) Поче... Feb 14 2008, 01:40                  defunct Цитата(Дон Амброзио @ Feb 14 2008, 03:40)... Feb 14 2008, 01:43                singlskv Цитата(Дон Амброзио @ Feb 14 2008, 04:26)... Feb 14 2008, 09:38             Дон Амброзио Цитата(defunct @ Feb 14 2008, 03:33) А во... Feb 14 2008, 01:05              defunct Цитата(Дон Амброзио @ Feb 14 2008, 02:56)... Feb 14 2008, 01:06              defunct Цитата(galjoen @ Feb 14 2008, 09:11) Сове... Feb 14 2008, 15:18            Дон Амброзио Цитата(Дон Амброзио @ Feb 14 2008, 03:30)... Feb 14 2008, 00:35            defunct Цитата(Дон Амброзио @ Feb 14 2008, 02:30)... Feb 14 2008, 00:45      galjoen Цитата(Дон Амброзио @ Feb 12 2008, 02:08)... Feb 12 2008, 00:33   galjoen Цитата(Дон Амброзио @ Feb 11 2008, 20:42)... Feb 11 2008, 22:05 Непомнящий Евгений Ну как вариант - расставить assert-ы по всей проге... Feb 11 2008, 19:26 Дон Амброзио Цитата(Непомнящий Евгений @ Feb 11 2008, 22... Feb 11 2008, 20:15 arttab Средства должны оправдывать цели.
уровень защиты о... Feb 12 2008, 01:45 Дон Амброзио Цитата(arttab @ Feb 12 2008, 04:45) Средс... Feb 12 2008, 05:05  VladimirYU Цитата(Дон Амброзио @ Feb 12 2008, 08:05)... Feb 12 2008, 06:23   Дон Амброзио Цитата(VladimirYU @ Feb 12 2008, 09:23) К... Feb 12 2008, 06:35  adc Цитата(Дон Амброзио @ Feb 12 2008, 08:05)... Feb 12 2008, 12:49   Дон Амброзио Цитата(adc @ Feb 12 2008, 15:49) Вот вот.... Feb 12 2008, 13:03    SasaVitebsk Цитата(Дон Амброзио @ Feb 12 2008, 17:03)... Feb 12 2008, 13:36  tyro Цитата(Дон Амброзио @ Feb 12 2008, 08:05)... Feb 13 2008, 07:56   Дон Амброзио Цитата(tyro @ Feb 13 2008, 10:56) Обсужда... Feb 13 2008, 09:39    zltigo Цитата(Дон Амброзио @ Feb 13 2008, 12:36)... Feb 13 2008, 09:42     Dog Pawlowa Цитата(zltigo @ Feb 13 2008, 13:42) За те... Feb 13 2008, 09:49      zltigo Цитата(Dog Pawlowa @ Feb 13 2008, 12:49) ... Feb 13 2008, 10:02       Дон Амброзио Цитата(zltigo @ Feb 13 2008, 13:02) Для н... Feb 13 2008, 10:51 Непомнящий Евгений ИМХО, стратегия поведения после обнаружения ошибки... Feb 12 2008, 06:39 VladimirYU Цитата(Непомнящий Евгений @ Feb 12 2008, 09... Feb 12 2008, 06:43 Kris2007 А че такое бывает чтобы из-за электромагнитных пом... Feb 12 2008, 13:21 Дон Амброзио Цитата(Kris2007 @ Feb 12 2008, 16:21) А ч... Feb 12 2008, 16:18  SasaVitebsk Цитата(Дон Амброзио @ Feb 12 2008, 20:18)... Feb 12 2008, 17:00   Дон Амброзио Цитата(SasaVitebsk @ Feb 12 2008, 20:00) ... Feb 12 2008, 17:14    SasaVitebsk Цитата(Дон Амброзио @ Feb 12 2008, 21:14)... Feb 12 2008, 19:16     Дон Амброзио Цитата(SasaVitebsk @ Feb 12 2008, 22:16) ... Feb 12 2008, 19:56      SasaVitebsk Цитата(Дон Амброзио @ Feb 12 2008, 23:56)... Feb 12 2008, 21:34       Дон Амброзио Цитата(SasaVitebsk @ Feb 13 2008, 00:34) ... Feb 12 2008, 21:44  adc Цитата(Дон Амброзио @ Feb 12 2008, 19:18)... Feb 13 2008, 06:12   Дон Амброзио Цитата(adc @ Feb 13 2008, 09:12) Всегда п... Feb 13 2008, 09:26    adc Цитата(Дон Амброзио @ Feb 13 2008, 12:26)... Feb 13 2008, 09:39     Дон Амброзио Цитата(adc @ Feb 13 2008, 12:39) Как можн... Feb 13 2008, 09:57      galjoen Цитата(Дон Амброзио @ Feb 13 2008, 12:57)... Feb 13 2008, 10:19       galjoen Цитата(galjoen @ Feb 13 2008, 13:19)
Я т... Feb 13 2008, 10:53       adc Цитата(galjoen @ Feb 13 2008, 13:19) Цита... Feb 13 2008, 11:25        galjoen Цитата(adc @ Feb 13 2008, 14:25) Но ведь ... Feb 13 2008, 12:24   galjoen Цитата(adc @ Feb 13 2008, 09:12) Всегда п... Feb 13 2008, 09:41 Rst7 ЦитатаНе я выбираю MCU: что мне дали, то я и юзаю ... Feb 12 2008, 18:23 Дон Амброзио Цитата(Rst7 @ Feb 12 2008, 21:23) Если не... Feb 12 2008, 18:50 arttab хорошо что не подрались...
может для начала оп... Feb 13 2008, 02:02 Schtirlitz Надо отделить мух от котлет. Ибо проблема надежнос... Feb 13 2008, 09:31 Дон Амброзио Цитата(Schtirlitz @ Feb 13 2008, 12:31) И... Feb 13 2008, 09:41 Дон Амброзио Цитата(Schtirlitz @ Feb 13 2008, 12:31) Н... Feb 13 2008, 09:44  Schtirlitz Цитата(Дон Амброзио @ Feb 13 2008, 12:44)... Feb 13 2008, 10:01   Дон Амброзио Цитата(Schtirlitz @ Feb 13 2008, 13:01) А... Feb 13 2008, 11:14 mig2002 Возвращаясь к первоначальному вопросу могу посовет... Feb 13 2008, 11:01 mig2002 В принципе, однозначного решения данного вопроса б... Feb 13 2008, 11:43 Дон Амброзио Цитата(mig2002 @ Feb 13 2008, 14:43) В пр... Feb 13 2008, 12:09  mig2002 Цитата(Дон Амброзио @ Feb 13 2008, 14:09)... Feb 13 2008, 13:20 Дон Амброзио Вообще сейчас скажу крамольную мысль (только чур н... Feb 13 2008, 12:16 Rst7 ЦитатаА у вас как с ЭМС? С наносекундными импульса... Feb 13 2008, 12:50 galjoen Цитата(Rst7 @ Feb 13 2008, 15:50) У меня ... Feb 13 2008, 14:34  defunct Цитата(galjoen @ Feb 13 2008, 16:34) Може... Feb 13 2008, 15:12   Дон Амброзио Цитата(defunct @ Feb 13 2008, 18:12) угу,... Feb 13 2008, 15:51    defunct Цитата(Дон Амброзио @ Feb 13 2008, 17:51)... Feb 13 2008, 17:16     Дон Амброзио Цитата(defunct @ Feb 13 2008, 20:16) Я же... Feb 13 2008, 18:35      galjoen Цитата(Дон Амброзио @ Feb 13 2008, 21:35)... Feb 13 2008, 19:17 IgorKossak Считаю своим долгом всем напомнить, что неплохо бы... Feb 13 2008, 13:26 adnega Недавно дорабатывал текстовое информационное табло... Feb 13 2008, 13:50 defunct ЦитатаПосле аппаратных доделок табло перестало лов... Feb 13 2008, 14:09 Rst7 ЦитатаУ меня-то пластмассовый корпус 120*60*32 мм.... Feb 13 2008, 14:41 galjoen Цитата(Rst7 @ Feb 13 2008, 17:41) И в под... Feb 13 2008, 15:53  Rst7 Цитата(galjoen @ Feb 13 2008, 17:53) Объя... Feb 14 2008, 06:25 Дон Амброзио Не секрет, что стоимость простых MCU упала до стои... Feb 14 2008, 15:56 zltigo Цитата(Дон Амброзио @ Feb 14 2008, 18:56)... Feb 14 2008, 16:05 Rst7 ЦитатаСтранно.. Я читал совершенно другие "ме... Feb 14 2008, 17:35
3 страниц
1 2 3 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|