Перейти к содержанию
    

Защита секция кода во FLASH в ATmega

Средства должны оправдывать цели.

уровень защиты от сбоя накладывает расходы (время, более "крутой" мк и пр.) на проект. можно дойти и до дублирования мажоритарности и пр.

Абсолютную защиту не создать да и не всегда она нужна.

Если в случае сбоя мк будет остановлен с выводом кода ошибки, то будет видно что есть проблемы и можно попытаться выяснить какие, а автоперезапуск их скроет.

Или здесь обсуждаются чисто теоретические обоснования устойчивой работы изделия при сбои мк? Может тогда сформулировать необходимые меры для разной степени устойчивости изделия?

Как Вы считаете, что более надёжно:

 

1) Вероятность сбоя устройства равна 10 в минус 9 степени; вероятность того, что этот сбой система не обнаружит (не зарегистрирует) и соотвтетственно не предпримит ни каких мер равна 50%

2) Вероятность сбоя устройства равна 10 в минус 3 степени; вероятность того, что этот сбой система не обнаружит (не зарегистрирует) и соотвтетственно не предпримит ни каких мер равна 0,0000001%

 

И что более надёжно? "Надёжная" система, сбои которой просто не обнаруживаются

или "ненадёжная" система, у которой 99,99999999% сбоев обнаруживаются и предпринимаются соответствующие меры по устранению их последствий

 

 

Как говорится: лучше перебдеть, чем недобдеть.

 

Ибо нафига мне "суперпупернадёжная" система, у которой происходит один сбой в год, но он НЕ ОБНАРУЖИВАЕТСЯ СИСТЕМОЙ. Я лучше возьму систему, у которой сбои происходят каждый день, ну у которой эти сбои НЕ ПРОХОДЯТ НЕЗАМЕЧЕННЫМИ СИСТЕМОЙ

 

 

Т.е. я предлагаю даже УХУДШАТЬ надёжность работы девайса за счёт увеличения вероятности обнаружения сбоя

 

Т.е. я предлагаю даже УХУДШАТЬ надёжность работы девайса за счёт увеличения вероятности обнаружения сбоя
Но это я конечно погорячился, но если встанет такая дилема - я пойду на это

 

 

Если в случае сбоя мк будет остановлен с выводом кода ошибки, то будет видно что есть проблемы и можно попытаться выяснить какие, а автоперезапуск их скроет.
Вот вот.... Пусть и прочтут это сторонники идеи, что использование WDT достаточно для обеспечения надёжной работы программы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ибо нафига мне "суперпупернадёжная" система, у которой происходит один сбой в год, но он НЕ ОБНАРУЖИВАЕТСЯ СИСТЕМОЙ. Я лучше возьму систему, у которой сбои происходят каждый день, ну у которой эти сбои НЕ ПРОХОДЯТ НЕЗАМЕЧЕННЫМИ СИСТЕМОЙ

Как Вы думаете, что лучше вовремя принятое лекарство и продолжение работы, или госпитализация с инфарктом и точный диагноз. Надежная система должна иметь возможности самовосстановления работоспособности в кратчайшее время, для этого WDT в комплексе с другими мерами, например, элементарное протоколирование работы программы в области __nо_init не требует значительных расходов. А о том, что программы надо писать правильно не вижу смысла обсуждать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как Вы думаете, что лучше вовремя принятое лекарство

Дык в описанных коллегами случаях ПРАВИЛЬНОГО лекарства и не будет поскольку диагноз не будет установлен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, стратегия поведения после обнаружения ошибки целиком зависит от назначения устройства. Иногда лучше молча перезагрузиться, иногда - сообщить об ошибке и остановить работу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, стратегия поведения после обнаружения ошибки целиком зависит от назначения устройства. Иногда лучше молча перезагрузиться, иногда - сообщить об ошибке и остановить работу...

+1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да и ещё пожалуйтесь не то, что ихний Watchdog не помогает в случаях бездарного написания програмы

 

У меня есть изделие - модемы на пуле в телекоме. Так вот уже скоро 10 лет будет как они не выключаются. За это время три раза источники менял - кондёры высыхают. Предыдущие стояли - неделю отработать не могли.

 

Короче давайте спорить о вкусе устриц с теми кто их ел.

 

Перепиши пожалуйста мой бездарно написанный кусок проги из 10 строчек на одарённо написанный - хочу увидеть. Раз ты разглагольствуешь - должен же ты отвечачь за свои слова. Хотябы немного. Я думаю там совершенно понятен смысл.

 

Я жду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня есть изделие - модемы на пуле в телекоме. Так вот уже скоро 10 лет будет как они не выключаются. За это время три раза источники менял - кондёры высыхают. Предыдущие стояли - неделю отработать не могли.

 

Короче давайте спорить о вкусе устриц с теми кто их ел.

 

Перепиши пожалуйста мой бездарно написанный кусок проги из 10 строчек на одарённо написанный - хочу увидеть. Раз ты разглагольствуешь - должен же ты отвечачь за свои слова. Хотябы немного. Я думаю там совершенно понятен смысл.

 

Я жду.

 

 

А Вы вообще кроме себя тут кого-нибудь читаете?

....

А насчёт вечных циклов - согласен. Не должно их быть. Кроме основного (ну это не про RTOS, я RTOS не употребляю). Счётчик какой-нибудь уменьшаемый д.б. Если он до 0 досчитает - из этого цикла аварийный выход.

 

....

А для счётчика хорошо пара регистров R24, R25 подходит. Адресоваться по ним как по X, Y или Z нельзя, а команду sbiw R24,xx - применять можно.

 

 

Вот Вам ответ.. От себя лишь добавллю термин "счётчик-ограничитель количества итераций цикла" Вам о чём-нибудь говорит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если в случае сбоя мк будет остановлен с выводом кода ошибки, то будет видно что есть проблемы и можно попытаться выяснить какие, а автоперезапуск их скроет.

Вот вот.... Пусть и прочтут это сторонники идеи, что использование WDT достаточно для обеспечения надёжной работы программы

Да будет Вам известно что для WDT в некоторых контроллерах есть отдельный вектор прерывания по переполнению WTD, который позволит проанализировать сбой не выводя программу на общий reset.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот вот.... Пусть и прочтут это сторонники идеи, что использование WDT достаточно для обеспечения надёжной работы программы

 

Да будет Вам известно что для WDT в некоторых контроллерах есть отдельный вектор прерывания по переполнению WTD, который позволит проанализировать сбой не выводя программу на общий reset.

Мне это хорошо известно.. Но я с такими пока не работал...

 

А что это у нас дискусиия зациклилась на обсуждении WDT? Тема то у нас гораздо шире.. Или просто никто больше не знает других методов "борьбы" с явлением, указанном в названии темы? :07:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А че такое бывает чтобы из-за электромагнитных помех грохнулся счетчик команд?

По моему это неудачные попытки нати существующую ошибку в коде. Не нашли списали на э.м помехи.

 

Импульсник на 3квт делали на атмеге. Там тАкие помехи идут и все ок. Я уж не говорю о других устройствах. Если некая помеха по питанию и на пине это еще понятно но случайная запись в PC ..

Изменено пользователем Kris2007

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне это хорошо известно.. Но я с такими пока не работал...

 

А с какими ты работал? Сейчас практически все AVR "такие". Это когда-то на 1200 мне приходилось выкручиваться определяя источник.

 

А что это у нас дискусиия зациклилась на обсуждении WDT? Тема то у нас гораздо шире.. Или просто никто больше не знает других методов "борьбы" с явлением, указанном в названии темы? :07:

 

Просто к моменту когда ты начал обдумывать свои "правильные" методики борьбы, человечество с этим уже работало и над этим думало не один десяток лет. И WDT оказался одним из самых эффективных методов борьбы с зависаниями и сбоями.

 

С чего ты взял, что я не ипользую таймауты к примеру? Потому, что ты не видишь счётчика бесконечных циклов? А вот такой вариант к примеру ты не встречал

...
    lds    sek1,    s7; таймаут по S7
    ldi    tmess,    3; "NO CARRIER"
    ldi    wl,    CONNECTD
    rcall    oCTRL; Ловить "несущую"
...

Может я не просто ухожу из бесконечного цикла, но мне требуется ещё задавать максимальное ожидание и программировать вариант текстового сообщения при выходе?

 

 

А теперь ответь на простой вопрос, раз уж ты уходишь от переписывания моей процедуры.

1) Чем счётчик циклов лучше WDT?

И ещё пару. Данная процедура ждёт пока пойдёт сообщение от терминальной программы. Это сообщение может поступить, например через 40 минут.

2) Как настроить бесконечный цикл чтобы обеспечить данное требование? Или будем пересбрасывать работающую прогу?

Хорошо - упростим задачу. Например событие происходит через 3 минуты максимум. Допустим ты настроил на выход из бесконечного цикла на 4 минуты.

3) Нормально если у тебя устройство будет выходить из возможного виса через 5 минут?

 

Главное ответь на первый вопрос. Меня это очень интересует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А че такое бывает чтобы из-за электромагнитных помех грохнулся счетчик команд?

Бывает, бывает. Молодой человек. Я написал тестовую прогу для ATmega8 которая представляет собой следующее:

 

.cseg

.org 0

;-----------------

.set Number = 0

;-----------------

Begin_Loop :

.set Number = Number +1

ldi R16 , Number

nop

...

nop

cpi R16 , Number

breq PC+0x02

rjmp Crash

;-----------------

.set Number = Number +1

ldi R16 , Number

nop

...

nop

cpi R16 , Number

breq PC+0x02

rjmp Crash

;-----------------

.set Number = Number +1

ldi R16 , Number

nop

...

nop

cpi R16 , Number

breq PC+0x02

rjmp Crash

;-----------------------

......

......

......

;-----------------

.set Number = Number +1

ldi R16 , Number

nop

...

nop

cpi R16 , Number

breq PC+0x02

rjmp Crash

;-----------------------

rjmp Begin_Loop

;-----------------------

Crash :

 

; Зажечь светодиод

...

 

; Остановиться

;------------------------

После подачи помехи в виде электромагнитной наводки от пьёзозажигалки мне удавалось как зажечь светодиод

 

Импульсник на 3квт делали на атмеге. Там тАкие помехи идут и все ок. Я уж не говорю о других устройствах. Если некая помеха по питанию и на пине это еще понятно но случайная запись в PC ..

У меня тоже в условиях эксплуатация все девайсы работают нормально. А когда я над ними "издеваюсь" с помощью пьезозажигалки, то порой такие "чудеса" наблюдаю

 

А с какими ты работал? Сейчас практически все AVR "такие"

Не звизди.. :twak:

"Все такие" говоришь? А как же ATmega 8, 8515, 8535, 64, 128..А?

 

А как же ATmega 8, 8515, 8535, 64, 128..А?
В них по WDT происходит полноценный сброс, а не прерывание

 

Просто к моменту когда ты начал обдумывать свои "правильные" методики борьбы, человечество с этим уже работало и над этим думало не один десяток лет. И WDT оказался одним из самых эффективных методов борьбы с зависаниями и сбоями.

Дык с зависаниями или сбоями? Вы уж определитесь.. Ибо понятие "сбой" гораздо шире понятия "зависание"

 

раз уж ты уходишь от переписывания моей процедуры.

Странный ты.. Ну на тебе твою переделанную процедуру (хотя я же объяснял тебе выше как это сделать. Неужели для тебя это так сложно? :07: )

 

...

ldi R25 , high ( Border_Counter)

ldi R24 , low ( Border_Counter)

ReadLptEPP:

sbiw R25:R24 , 1

breq Crash

sbic pinc,LptSTB ; Строб пришёл?

rjmp ReadLptEPP ; иначе повторить

...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не звизди.. :twak:

"Все такие" говоришь? А как же ATmega 8, 8515, 8535, 64, 128..А?

 

В них по WDT происходит полноценный сброс, а не прерывание

Используйте m88, m165, m1281...

 

Дык с зависаниями или сбоями? Вы уж определитесь.. Ибо понятие "сбой" гораздо шире понятия "зависание"

А что по вашему есть "зависание"?

 

Странный ты.. Ну на тебе твою переделанную процедуру (хотя я же объяснял тебе выше как это сделать. Неужели для тебя это так сложно? :07: )

 

...

ldi R25 , high ( Border_Counter)

ldi R24 , low ( Border_Counter)

ReadLptEPP:

sbiw R25:R24 , 1

breq Crash

sbic pinc,LptSTB ; Строб пришёл?

rjmp ReadLptEPP ; иначе повторить

...

На частоте 14745600 максимальное время - 22мс. При 4-ёх байтном счётчике ~ 40 минут.

Итак вопрос чем ваш вариант лучше применения WDT? Не будем здесь обсуждать 1.5 кратное увеличение длины кода и прочие нюансы. Вчём прелесть? Я действительно хочу понять вашу мысль.

 

Дело в том, что некоторые применяют как раз противоположные подходы. К примеру, для перехода в 0 инициализируют WDT и делают цикл. Вот как раз отрывок из Atmel-овского avr231

                        case TYPE_RESET:
                            busReplyByte(ERROR_OK);
                            for(;;);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К примеру, для перехода в 0 инициализируют WDT и делают цикл.

Это не для "перехода в 0" делается , а для перевода микроконтроллера в определённое исходное состояние, именуемого сбросом

 

Используйте m88, m165, m1281...
Не я выбираю MCU: что мне дали, то я и юзаю ( я последнее время больше программером работаю, хотя я могу и платы разводить, и схемы проектировать). Мне дают готовый девайс и я пишу для него прогу

 

А что по вашему есть "зависание"?
Вы точно не читаете то, что уже написано. Я же написал выше, что " понятие "сбой" гораздо шире понятия "зависание"". Из чего следует, что зависание - это частный случай сбоя и зависание далеко не исчерпывает все возможные виды сбоев

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не я выбираю MCU: что мне дали, то я и юзаю ( я последнее время больше программером работаю, хотя я могу и платы разводить, и схемы проектировать). Мне дают готовый девайс и я пишу для него прогу

 

Ну тогда Вы себе сами ногу простреливаете ;) Если не можете настоять на нужном камне при разработке железа, то будете всю жизнь мучаться :)

 

Другое дело - бывают разработки, когда каждая копейка на счету, там будешь и экономить, и извращаться так, что мало не кажется. Но, я так понимаю, к Вам это не относится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...