|
|
  |
Как заполнить свободную память?, программная защита |
|
|
|
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.
|
|
|
|
|
Sep 27 2007, 15:27
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(namelos @ Sep 25 2007, 16:38)  Доброе время суток, господа эмбеддеры. Написал программу в AVRStudio-WinAVR 20070525(avr gcc 4.1.2) . В целях защиты хотелось бы заполнить сводное место Flash-памяти "rjmp 0" и посчитать CRC всего кода программы для проверки целостности. Подскажите пожалуйста, как мне это реализовать. Если можно поподробнее. Заранее спасибо. Чтобы проц поменьше слетал , очень важно !!! сделать правильную разводку питания на проц. Как показывает опыт , при правильной разводке питания может даже не потребоваться собака ( если конечно же речь не идёт о сверхмощьных ЭМ помехах вблизи ) . Это первое . Если хочется побольше надёжность , - совет - не жмитесь и ставьте внешний тактовый генератор . В крайнем случае , если такой возможности нет , то включите у проца бит максимальной амплитуды тактового сигнала . Но внешний генератор вне конкуренции . Не жмитесь на фильтрацию по питанию . Очень непомешает внешний супервизор с отличным от Brown-out проца значением . Т.е. например Brown-out проца заводишь на 4 вольта , а внешний применяешь со значением 4,5 вольта ( например MCP-450 производства Microchip ). Если внешний сброс не применяешь , то через 1 килоом вывод сброса на питание проца , и его же через 0,1 микрофарата об землю. Собаку я включал последний раз лет 5 назад . При тысячах едениц выпущенной продукции вроде бы нареканий нет. Что касается rjmp 0 , то как правильно уже было замечено , должно быть jmp 0 , но смысл в этом нулевой . При старте можно сделать проверку CRC кода (ATMEL в одном из app. показывает как это сделать ) , и если битая память , то заставить девайс перепрошить . Если всё это делаешь , то забываешь о rjmp 0 и о jmp 0 Удачи
|
|
|
|
|
Sep 27 2007, 20:57
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(defunct @ Sep 27 2007, 20:10)  У Вас либо очень простая программа, либо Вы один из немногих гениев которые не допускают ошибок. WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п. Ни то , ни другое . Что касается программ , то по обьёму кода программы конечно же разные , но как правило не менее 30-40К памяти программ ( все программы пишу на асме ) Так что не очень они маленькие , я вас уверяю . И проц шуршит аж воротник заворачивается - прерывание на прерывании . И пожалуйста только не надо приводить старые как мир догмы - писали бы на Си . . . Я и на Си могу , но для меня асм комфортнее . Гением конечно же себя не считаю , и ошибки бывают , кто не грешен ? WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п. Это что же получается - производители вводят в проц апаратные вещи для защиты от кривых программистов ? Неожиданная мысль , очень неожиданная . На самом деле это не совсем так . Вы не задумывались почему некоторые процы (рядовые) ( например MSC-51) работают на 50 MHz , а у AVRов пока планка в 20-24 MHz ? Дело в том , что у AVRов выборка команды производится за 1 такт генератора , но за 4 внутренних такта , которые формируются специальной внутренней аппаратной схемой .Так вот - сбой хотя бы по одному из этих подтактов приводит к разным непредсказуемым последствиям (и подвисаниям в том числе ) . Именно поэтому важна хорошая форма тактовых импульсов , так как на основании её формируются внутренние подтакты . Некоторые производители ( NEC например) применяют для защиты от такого рода вещей специальный аппаратный механизм правильной выборки команды из памяти программ. Именно для подобных вещей держат псов , а не для защиты от программистов !!! . Небольшое лирическое отступление-: когда - то давно , когда я ещё был студентом , нас то и дело доставал препод по программированию составлением алгоритмов . Всех это уж очень достало , и я один раз в сердцах спросил - когда же вместо вской ерунды мы начнём изучать языки программирования ?. На что получил ответ , который оценил позднее - язык программирования это инструмент , а программа - это исскусство и часть души . В корявых руках и скрипка Страдивари будет не более чем куском дерева . Умный был ( надеюсь ещё есть ) препод . Лет 10 назад делал одну програмку . Писал , она работала , дописывал , она опять работала , пока в один момент всё не стало работать очень коряво . . . ( справедливости ради надо сказать что у неё была очень сложная структура ) . Разбираться в огромном куске кода небыло никакого желания - крышу срывало. Было принято волевое решение - взять и разрисовать прогу на блоки , сначала крупные , потом помельче , потом ещё мельче . В итоге ( после месяца спания по 4-5 часов за ночь ) - получилась структурная схема программы. Она была очень тщательно осмыслена и проверена на логику работы . Меня тогда удивило - по структурной схеме мне только и оставалось что просто тупо подставлять ассемблерные операторы , что у меня получалось очень и очень быстро ( за неделю одолел 32К ). Кстати , предыдущий кусок весил 36К . Первое включение после компиляции и прошивки и . . . . . каково же было моё удивление , что программа заработала сразу , и без малейших шороховатостей . Я после включения не изменил в программе ни одной буквы , так до сих пор и работает . После этого случая я любую программу пишу именно так - сначала хорошо обдумываю всю структуру программы , тратя на это прилично времени , затем начинаю на бумаге делать наброски , потом всё чётче и чётче вырисовывается программа , нечто наподобе проявки фотографии , или прорисовки художника. Совет - хотите писать хорошие программы - делайте именно так - я вас уверяю - времени в итоге тратится меньше , сохраняется "бумажная копия" работы программы ( в которой может разобраться при необходимости практически любой грамотный человек , даже далёкий от программирования ). А ошибки ищются на ура . И никакой язык программирования не сравнится по наглядности ( Си в том числе ) . . . Поэтому лично для меня какие из операторов подставить в программу - асм или Си особого значения не имеет . От кривых рук программиста не спасёт ни собака , ни другие аппаратные вещи .
|
|
|
|
|
Sep 27 2007, 22:56
|
Частый гость
 
Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595

|
Цитата После этого случая я любую программу пишу именно так - сначала хорошо обдумываю всю структуру программы , тратя на это прилично времени Подтверждаю. Из своего немалого опыта программирования для PC вынес (правда, не сразу) эту же мысль - чем больше времени потратишь на тщательное продумывание программы (прежде чем прикасаться к клавиатуре), тем меньше общее время "продумывание+написание+отладка+доведение_до_ума".
|
|
|
|
|
Sep 28 2007, 02:09
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(aaarrr @ Sep 28 2007, 08:27)  Вставлю-ка я свои 5 копеек: Как уже упоминалось ранее, значение 0xFFFF - это код команды SBRS R31, 7. ... SBRS - Skip if Bit in Register is Set 16-bit Opcode: 1111_111r_rrrr_0bbb Соответственно, опкод SBRS R31, 7 = 0xFFF7. Среди документированных я не нашёл инструкцию с опкодом 0xFFFF. Интересно, что делает контроллер, встретив такую инструкцию, пропускает?
|
|
|
|
|
Sep 28 2007, 02:47
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(aaarrr @ Sep 28 2007, 11:24)  AVR Studio декодирует так. Можно эмулятором проверить для надежности. Вот дизасемблер АВРстудии: +00000008: CFFA RJMP PC-0x0005 Relative jump +00000009: FFFF ??? Data or unknown opcode +0000000A: 0000 NOP No operation +0000000B: FFFF ??? Data or unknown opcode "...эмулятором проверить для надежности." - это шутка? Эмулятор даже документированные фичи не все отрабатывает.
|
|
|
|
|
Sep 28 2007, 07:26
|
Участник

Группа: Validating
Сообщений: 64
Регистрация: 16-06-05
Пользователь №: 6 073

|
В процессе отладки с JTAG-ICE на ATmega128 сам наблюдал как попадая на незапрограммированную область процессор доходит до конца флэша и начинает выполнение программы с начала.
Сообщение отредактировал AlexG - Sep 28 2007, 07:27
|
|
|
|
|
Sep 28 2007, 08:49
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Yuriy_AVR @ Sep 28 2007, 00:57)  Это что же получается - производители вводят в проц апаратные вещи для защиты от кривых программистов ? Неожиданная мысль , очень неожиданная . На самом деле это не совсем так . Вы не задумывались почему некоторые процы (рядовые) ( например MSC-51) работают на 50 MHz , а у AVRов пока планка в 20-24 MHz ? Дело в том , что у AVRов выборка команды производится за 1 такт генератора , но за 4 внутренних такта , которые формируются специальной внутренней аппаратной схемой .Так вот - сбой хотя бы по одному из этих подтактов приводит к разным непредсказуемым последствиям (и подвисаниям в том числе ) . Именно поэтому важна хорошая форма тактовых импульсов , так как на основании её формируются внутренние подтакты . Некоторые производители ( NEC например) применяют для защиты от такого рода вещей специальный аппаратный механизм правильной выборки команды из памяти программ. Именно для подобных вещей держат псов , а не для защиты от программистов !!! . Есть у меня одна неразрешенная загадка: в одной программе на MEGA8, интенсивно использующей инструкции Ldd/Std, иногда наблюдались ошибки на границах страницы ОЗУ 0x00..0x100. Это может быть тоже гонка фронтов? А на счет заполнения- NOP - и вся любовь Затем, после rjmp Start, обязательно, CLI и инициализация всего, чего надо, как будто мы не знаем ничего о начальных значениях портов. Теперь у нас "взбрык" от сброса внешне ничем не отличается.
|
|
|
|
|
Sep 28 2007, 10:35
|

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

|
Цитата(aaarrr @ Sep 28 2007, 02:27)  Вставлю-ка я свои 5 копеек: Как уже упоминалось ранее, значение 0xFFFF - это код команды SBRS R31, 7. Но никто почему-то не обратил внимания на то, что при R31.7=1 процессор может и не выйти на нулевой адрес. Вы имеете в виду, выход на адрес 0x0001 вместо 0x0000. Да действительно возможно, но не проще ли будет по адресу 0x0001 поставить JMP туда же куда делается в инструкции по адресу 0x0000. Тем более вы упускаете тот факт, что процессор может прыгнуть в несуществующую область памяти, при чтении которой возвращается тот же 0xFFFF, вероятность прыжка в несуществующую область памяти прямопропорциональна количеству оной, например для M16 вероятность прыжка в несуществующую область памяти = (128 - 16)/128 = 7/8 = 0.875 Цитата(zltigo @ Sep 28 2007, 10:59)  В принципе до этого эффекта Watchdog в этом софте размером порядка 300K даже не активировался. Давить программные ошибки Watchdog-ом чистый моветон  Позволю себе несогласиться с вашим выводом. Про моветон можете говорить в форуме по АРМ, у которого имеется возможность обработать или "задампить" крашевую ситуацию (DABT/PABT/UNDF). У AVR'ра нет обработчиков исключений и в промышленных изделиях только WDT может подстраховать в случае серьезного программного сбоя. WDT в AVR можно рассматривать как обработчик исключений. Считаю, что конечный продукт на AVR с отключенным WDT - дилетанство, такое же как если в изделии оставить чип в отладочном режиме (фуз OCDEN).
|
|
|
|
|
Sep 28 2007, 10:49
|

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

|
Цитата(defunct @ Sep 28 2007, 13:35)  Считаю, что конечный продукт на AVR с отключенным WDT дилетанство... Речь шла не о том использовать или нет Watchdog - использовать, а о том, что латать Watcdog-ом программные ошибки, а не фатальные сбои аппаратуры неправильно - софтово система должна быть живучей, обрабатывающей нештатные ситуации и самовыбирающейся из всевозможных положений. Естественно это стоит трудов, времени и кода....
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 28 2007, 11:07
|

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

|
Цитата(zltigo @ Sep 28 2007, 13:49)  Речь шла не о том использовать или нет Watchdog - использовать, а о том, что латать Watcdog-ом программные ошибки, а не фатальные сбои аппаратуры неправильно - софтово система должна быть живучей, обрабатывающей нештатные ситуации и самовыбирающейся из всевозможных положений. Естественно это стоит трудов, времени и кода.... Тогда вы возможно не так поняли мой первый пост. Никто никогда не застрахован от программных ошибок, которые часто проявляются в полевых условиях, а не на стадии цикла тестирования. В ARM с отловом таких ошибок проще - по факту abort'a, сразу есть и место ошибки и стек (в AVR только по WDT). Отлаживать и устранять приходится по дампу памяти снятому в полевых условиях - такой процесс иногда затягивается на месяцы, и пока проблема устраняется, WDT скрывает проблему от потребителя (системе ж надо как-то работать), но он ни в коем случае не скрывает проблему от разработчика.
|
|
|
|
|
Sep 28 2007, 11:18
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(defunct @ Sep 28 2007, 14:35)  Вы имеете в виду, выход на адрес 0x0001 вместо 0x0000. Да действительно возможно, но не проще ли будет по адресу 0x0001 поставить JMP туда же куда делается в инструкции по адресу 0x0000. Тем более вы упускаете тот факт, что процессор может прыгнуть в несуществующую область памяти, при чтении которой возвращается тот же 0xFFFF, вероятность прыжка в несуществующую область памяти прямопропорциональна количеству оной, например для M16 вероятность прыжка в несуществующую область памяти = (128 - 16)/128 = 7/8 = 0.875  Допустим, для MEGA16 PC "13-bit wide", как пишут на несравненном атмеле. Я так понимаю: старшие биты уже в нулях. Далее, пусть глюк пошел по адресной шине. Ну и что - будет не 0xFFFF, а выборка случайной команды по модулю 2^16 или 2^13, т.е. конкретный глюк. Таким образом, в прямую пропорциональность вероятности прыжка... не верю
|
|
|
|
|
Sep 28 2007, 11:22
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(Petka @ Sep 28 2007, 12:51)  В который раз повторяю: нежелательно вешать на ресет ёмкости! Почему? А обьясните мне что будет при пропадании питания? Обьясняю : Если вы рассмотрите структуру порта , то увидите что каждый порт защищён защитными диодами , причём один диод на землю анодом ( защита от отрицательных напряжений ) , другой диод катодом об питание процессора . Так вот при выключении питания верхний диод будет смещён в прямом направлении и разрядит ёмкость на питание . . . Непойму в чём проблема ? Неужели это надо обьяснять ?
|
|
|
|
|
Sep 28 2007, 11:38
|

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

|
Цитата(_Pasha @ Sep 28 2007, 14:18)  для MEGA16 PC "13-bit wide" точно. упустил. Цитата Таким образом, в прямую пропорциональность вероятности прыжка... не верю да ее нет. Но предложение добавить команду перехода по адресу 0x0001 остается в силе, тем более для МК с >=16k флеш, это можно сделать не жертвуя вектором INT0.
|
|
|
|
|
Sep 28 2007, 11:45
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(Rst7 @ Sep 28 2007, 14:18)  Это откуда же такое тайное знание? Вы видели исходник?  Достаточно хотя бы посмотреть в документации на любой AVR тактирование ALU , и попытаться разобраться как вообще происходит работа за 1 такт . MSC-51 делили такты на 12 от нечего делать ? Сейчас MSC-51 как правило делят на 4 , или поступают аналогично AVR. Если верите больше своим глазам , то можите поставить эксперимент : берёте AVR , запускаете на 16 MHz например . Затем вместо 16 MHz запаивает например 27 MHz ( можно найти кристаллы , которые запустятся на этой частоте ) . Так вот работать они будут медленнее чем на 16 MHz . Почему надеюсь обьяснять ненадо ? Цитата(Rst7 @ Sep 28 2007, 15:39)  Проблема в том, что на сбросе этого диода НЕТ. Да , ошибся , извиняюсь . Так а кто его мешает поставить ? ( желательно Шоттки )
|
|
|
|
|
Sep 28 2007, 11:55
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(defunct @ Sep 28 2007, 15:38)  да ее нет. Но предложение добавить команду перехода по адресу 0x0001 остается в силе, тем более для МК с >=16k флеш, это можно сделать не жертвуя вектором INT0. А как быть с другими зверьками помельче? ИМХО, только заполняя нулями неиспользованные ячейки. А вообще, насчет вероятностных методов, о чем Вы,defunct, заговорили - это вовсе не бред. Теоретически, можно и ловушки какие-нибудь ставить, исходя из свойств как кода, так и системы в целом. Другой вопрос - целесообразность
|
|
|
|
|
Sep 28 2007, 12:56
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387

|
Цитата(Petka @ Sep 28 2007, 15:57)  не придумывайте велосипед. есть такой вид микросхем, ресеттеры/мониторы питания называются. размер их будет поменьше чем резистор + диод + конденсатор Только к ним еще резюк надо (как правило они с открытым стоком/коллектором)  , а так действительно тот же MAX809 в SOT23 и резюк займут меньше места.
|
|
|
|
|
Sep 28 2007, 13:28
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(Petka @ Sep 28 2007, 14:57)  не придумывайте велосипед. есть такой вид микросхем, ресеттеры/мониторы питания называются. размер их будет поменьше чем резистор + диод + конденсатор Если внимательно перечитаете что мной написано , то увидите что там как раз и предлагался преимущественно супервизор ( и даже назван какой например ( MCP-130 - 450 ), и написано что в случае . . . бедности применять "резистор + конденсатор + диод +. . ." . И никто и не спорил что интегральный супервизор на голову выше "резистор + конденсатор + диод +. . ." Но супервизору и самому нужна блокировочная ёмкость по питанию. А подтягивающий резюк уже встроен в этот супервизор . Моя фраза "Если внешний сброс не применяешь" задумывалась как "Если внешний супервизор не применяешь" , что возможно и вызвало некоторое недопонимание . Т.е под сбросом в данном случае подразумевался супервизор , а не пин проца .
|
|
|
|
|
Sep 29 2007, 04:41
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334

|
Цитата(mdmitry @ Sep 29 2007, 03:18)  Очень похоже, что кварц на 27 эта 3 гармоника. Что-то давнее говорит мне, что на первой гармонике кварцы до 10 МГц или около этого только могут работать. Данные действительно устарели. Посмотрите информацию о кварцах с обратной(инвертированной) мезаструктурой, частота первой гармоники у них может доходить до 250МГц и более.
--------------------
Всяк хорошая мысля к нам приходит опосля.
|
|
|
|
|
Sep 30 2007, 09:41
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(Petka @ Sep 28 2007, 17:03)   Такого вы не предлагали, это раз. Схему с конденсатором и диодом я не рекомендую использовать даже в "случае бедности" т.к. и в этом случае надёжность будет только хуже чем просто резистор 1-10кОм на питание.  Пожалуйста повнимательнее читайте !!!. Позволю себя процетировать : "Очень непомешает внешний супервизор с отличным от Brown-out проца значением . Т.е. например Brown-out проца заводишь на 4 вольта , а внешний применяешь со значением 4,5 вольта ( например MCP-450 производства Microchip )". Я это не писал ? Только немного ошибся в названии супервизора , вместо MCP-450 правильно должно быть MCP-100-450 ( машинальная ошибка ). Это во первых . А теперь приведите аргументы против резистор + конденсатор + диод. Аргументы типа нерекомендую не считаю аргументами . . .
|
|
|
|
|
Sep 30 2007, 18:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(Yuriy_AVR @ Sep 30 2007, 13:41)  А теперь приведите аргументы против резистор + конденсатор + диод. 1) Не все программаторы будут дожидаться пока конденсатор разрядится. И не произойдёт вход в режим программирования. 2) AVR работают от 1.8 вольт. Какой это диод надо поставить что бы надёжно происходила разрядка конденсатора? 3) Ресет является логическим входом и напряжение на нём большее 0.2 и меньшее 0.9 от напряжения питания считается булево неопределённым. Зачем подавать такой сигнал на вход контроллера? А теперь обьясните что такое волшебное обеспечивает ёмкость на ресете? Задержку при подаче питания? Так она и так обеспечивается внутренней схемой сброса. Дополнительные компоненты, которые увеличивают стоимость, размер платы, и уменьшают надёжность?
|
|
|
|
|
Sep 30 2007, 20:30
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(Kuzmi4 @ Sep 28 2007, 17:16)  2 Yuriy_AVR @ Sep 28 2007, 14:45 - и всё же, расскажите как вы запустили авр-ку на 27 мегагерцах?? И почему она у вас должна была работать медленнее?? Я когда запускаю аврку на 20 МГЦ - она у меня работает быстрей чем на 16-ти.... сейчас сильно болеею , отвечу поздже Цитата(Petka @ Sep 30 2007, 21:29)  1) Не все программаторы будут дожидаться пока конденсатор разрядится. И не произойдёт вход в режим программирования. 2) AVR работают от 1.8 вольт. Какой это диод надо поставить что бы надёжно происходила разрядка конденсатора? 3) Ресет является логическим входом и напряжение на нём большее 0.2 и меньшее 0.9 от напряжения питания считается булево неопределённым. Зачем подавать такой сигнал на вход контроллера?
А теперь обьясните что такое волшебное обеспечивает ёмкость на ресете? Задержку при подаче питания? Так она и так обеспечивается внутренней схемой сброса. Дополнительные компоненты, которые увеличивают стоимость, размер платы, и уменьшают надёжность? 1) 0,1 uF достаточно малая ёмкость , и я ещё не видел ни одного программатора ( включая в том числе и AVRISP и AVRISP MKII и JTAG и JTAG ICE MKII и CHIPPROG+ , ну и конечно же любимый многими PONYPROG , ну и т.д.) который бы не работал с указанной ёмкостью. Итог - я не считаю это аргументом. 2) MBR0520L например , или PRLL5817 ( этот менее распространён , да и несколько хуже по всем характеристикам ) . 3) Ну и в чём проблема ? Всё в рамках закона . Падение на MBR0520L при температуре -25 градусов !!! ( самый, самый худший случай ) 0,28 вольта . При обычных условиях и того лучше - 0,22 вольта и с увеличением температуры ещё падает . Имеем : 1,8 х 0,9 =1,62 вольта ; 1,8 х 0,2 =0,36 вольта . 1,9-0,28 =1,62 !!! 0,36 > 0,28 !!! И это при самых худших условиях !!! Какие у вас ещё аргументы ? Что касается последнего вопроса , то ответ краток - гораздо лучшую помехозащищённость по ВЧ . Попробуете и убедитесь сами .
|
|
|
|
|
Sep 30 2007, 20:49
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Yuriy_AVR @ Oct 1 2007, 00:30)  1) 0,1 uF достаточно малая ёмкость , и я ещё не видел ни одного программатора ( включая в том числе и AVRISP и AVRISP MKII и JTAG и JTAG ICE MKII и CHIPPROG+ , ну и конечно же любимый многими PONYPROG , ну и т.д.) который бы не работал с указанной ёмкостью. Итог - я не считаю это аргументом. Попробуйте отладить какой-нить контроллер с DebugWire с емкостью на сбросе. Цитата Что касается последнего вопроса , то ответ краток - гораздо лучшую помехозащищённость по ВЧ . Попробуете и убедитесь сами . И откуда же лезут такие помехи? По питанию? Дык питание нужно строить. Из эфира? Тоже решается более другими средствами.
|
|
|
|
|
Oct 1 2007, 20:04
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378

|
Цитата(Petka @ Oct 1 2007, 10:01)  Дело в том, что конденсатор заряжается НЕ мнгновенно и в момент заряда конденсатора напряжение на ресете не будет попадать в рамки положенного для логики. А супервизор срабатывает мгновенно ?  Типичное время срабатывания супервизора при заданном вами напряжении 1,8 вольт составляет порядка нескольких микросекунд . Время заряда ёмкости до напряжения питания определяется как t=0,9RC ( для вывода сброса ) , т.е. при номиналах , указанных мной , составляет порядка 90 микросекунд . Я , например , при программировании использую время запуска тактового генератора 64 микросекунды . Т.е. время зарядки ёмкости сопоставимо с запуском тактового генератора и при появлении активного уровня сброса , генератор работает уже стабильно . При применении внешнего супервизора необходимо выставлять минимальное время запуска генератора , иначе , если время запуска генератора выставлено большим , то применение внешнего супервизора с малым временем срабатывания приведёт к ситуации когда тактовый генератор ещё не запустился , а сброс уже находится в активном состоянии . Вот это и называются грабли . . . А что собственно будет с процессором , если микросекунд эдак 30-50 на выводе сброса будет неопределённое состояние ? Да ничего собственно и не будет . . . Затем достигнет порога логической 1 и всё зашуршит на ура . Цитата(defunct @ Oct 1 2007, 18:50)  Я так понимаю, что когда включен BOD, то на резете емкость не нужна. Если BOD'a нет, RC выполняет его роль, но только в одну сторону (power-on reset), и чем больше емкость тем надежней получается "POR". Если есть кнопка сброс на резете, то емкость хотя бы небольшая нужна. Вообще то мой взгляд на проблему таков : Быстрое нарастание активного состояния на выводе сброса при запускающемся тактовом генераторе ( но ещё не запустившемся окончательно ) очень плохо . Именно поэтому я применяю следующую схему : питание на супервизор подаётся через интегрирующую RC цепочку . Диод MBR0520L включён анодом к сбросу и катодом соответственно к питанию . Параллельно диоду резистор 1 К ( супервизор с внутренним резистором в десятки килоом ) . Интегрирующая цепочка обеспечивает задержку включения для гарантированного запуска генератора + обеспечивает фильтрацию по питанию . Если включён внутренний BOD я всё равно рекомендую ставить ёмкость с резистором . Вообще я совсем не сторонник применения RC в качестве BOD . В качестве подтяжки сброса и дополнительного фильтра да , но не иначе . И вообще я не сторонник большого значения ёмкости - всё должно быть без фанатизма . Приведённые мной значения кажутся мне оптимальными . Цитата(WHALE @ Oct 1 2007, 17:29)  х.. с ним с кварцем,насчет RC цепочки по сбросу хотелось бы понять-она таки нужна или нет?Хотелось бы услышать мнение гуру,как они формируют сброс.Может,заодно и от резистора избавиться,пулл-апом обойтись?  пулл-апом обойтись неполучится - слишком большое значение сопротивления Цитата(defunct @ Oct 1 2007, 01:34)  Вы просто уходите от ответа, на другие вопросы вам ничто не мешало написать километровые ответы. На самом деле дела обстоят так: если вдруг попадется AVR способный работать на 27Mhz, то в силу полностью статической логики он будет работать быстрее чем на 16Mhz в 27/16 раз. То что вы воткнули кварц на 27Mhz и чип работал медленнее чем на 16Mhz может свидетельствовать лишь о проблеме с осциллятором либо с самим кварцем, и частота тактирования у вас была не 27Mhz. От ответа не ухожу , привык сдерживать свои слова . Но чтобы небыло  заведу специальную тему , но несколько поздже , уж пожалуйста извените . Коротко написать не получится .  Цитата(namelos @ Sep 30 2007, 23:39)  Немного оффтопа, но хочется поблагодарить всех за ответы и пожелать Yuriy_AVR поскорей поправиться. Большое спасибо Цитата(xemul @ Sep 30 2007, 23:49)  Попробуйте отладить какой-нить контроллер с DebugWire с емкостью на сбросе.
И откуда же лезут такие помехи? По питанию? Дык питание нужно строить. Из эфира? Тоже решается более другими средствами. Бр.....рррр. Стоять ! ! ! Мухи отдельно , котлеты отдельно . Мы говорим о сбросе или о DebugWire ? Как говорит мой знакомый Одессит - это разные вещи . Когда DebugWire , то естественно ёмкость - лишняя деталь , но когда DebugWire это прототип , то на нём ёмкость не столь критична . Про необходимость качественного питания и разводки я упоминал отдельно . "Из эфира? Тоже решается более другими средствами." Хотелось бы знать какими ? Попробуйте для начала пощёлкать рядом с AVRом люминесцентной лампой , ватт на 40 - 60 ( хорошо бы при этом стартерок неновенький ) . И тогда мы с вам и продолжим разговор . А вы теоретик или практик , простите за любопытство ?
|
|
|
|
|
Oct 1 2007, 20:57
|

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

|
Цитата(Yuriy_AVR @ Oct 1 2007, 23:04)  Если включён внутренний BOD я всё равно рекомендую ставить ёмкость с резистором . Ваши взгляды расходятся со взглядами Atmel. Atmel рекомендует устанавливать start-up time наиболее коротким когда используется BOD, RC цепь лишь только внесет задержку, в итоге в MCUCSR получим букет признаков сброса - POR/BOD/RESET. Цитата Вообще я совсем не сторонник применения RC в качестве BOD . Обратите внимание, выше я отметил, что RC может обеспечить только одну функцию - power-on-reset, но никак не полностью заменить функциональность BOD. BOD обеспечивает сброс как при нарастании так и при спаде напряжения питания.
|
|
|
|
|
Oct 1 2007, 21:44
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Yuriy_AVR @ Oct 2 2007, 00:04)  Бр.....рррр. Стоять ! ! ! Мухи отдельно , котлеты отдельно . Стою, боюсь  Цитата Мы говорим о сбросе или о DebugWire ? Как говорит мой знакомый Одессит - это разные вещи . Когда DebugWire , то естественно ёмкость - лишняя деталь , но когда DebugWire это прототип , то на нём ёмкость не столь критична . Я и в серийных коробочках на АВР с dW не обрезаю себе возможность отладки "в поле" предлагаемым Вами способом. dW в серийной прошивке, естесно, запрещается, ресет остается на внутреннем пуллапе. Можно продолжать бороться с бедами контроллеров 5-10-летней давности, но за прошедшее время потроха контроллеров слегка изменились. В частности, АВР могут в большинстве случаев вполне успешно обходиться без внешнего супервайзера. Оставшиеся случаи стОит рассматривать отдельно. Цитата Про необходимость качественного питания и разводки я упоминал отдельно . "Из эфира? Тоже решается более другими средствами." Хотелось бы знать какими ? Да вполне обычными - если со смехотехникой (в том числе, с выбором контроллера, соответствующего условиям эксплуатации) все в порядке, остается трассировка платы и разумное конструктивное исполнение. Цитата Попробуйте для начала пощёлкать рядом с AVRом люминесцентной лампой , ватт на 40 - 60 ( хорошо бы при этом стартерок неновенький ) . И тогда мы с вам и продолжим разговор .  Попробуйте не таскать шнурок на ногу сброса через всю плату. Или попробуйте для продолжения разговора пощёлкать рядом с AVRом люминесцентной лампой, отрезав этот шнурок под корень (т.е. по сбросу ничего, кроме внутреннего пуллапа), и отследить причину сброса. Если будет что-то кроме POR... Странна сама постановка вопроса. Исполнение платы или соответствует ЭМ обстановке, или не очень. Если последнее, то Вы о чем? Цитата А вы теоретик или практик , простите за любопытство ? Я практикующий лекарь, по совместительству художник.
|
|
|
|
|
Oct 2 2007, 03:01
|
Частый гость
 
Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595

|
Цитата(Yuriy_AVR @ Oct 2 2007, 00:04)  Вообще то мой взгляд на проблему таков : Быстрое нарастание активного состояния на выводе сброса при запускающемся тактовом генераторе ( но ещё не запустившемся окончательно ) очень плохо . Не могли бы пояснить, почему Вы так думаете?
|
|
|
|
|
Jan 31 2008, 20:17
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Цитата(defunct @ Sep 28 2007, 15:35)  ... Считаю, что конечный продукт на AVR с отключенным WDT - дилетанство, такое же как если в изделии оставить чип в отладочном режиме (фуз OCDEN). Не могли бы мне обьяснить назначение фуза OCDEN. Вроде бы официальное название его "разрешение отладки", но при любом значении, отладка по JTAGу всегла работает. И почему плохо оставлять этот фуз включенным (OCDEN=0, как я понял)?
|
|
|
|
|
Jan 31 2008, 21:27
|

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

|
Цитата(AndreyKeil @ Jan 31 2008, 23:17)  Не могли бы мне обьяснить назначение фуза OCDEN. Вроде бы официальное название его "разрешение отладки", но при любом значении, отладка по JTAGу всегла работает. И почему плохо оставлять этот фуз включенным (OCDEN=0, как я понял)? Работает JTAG, но например войдя в режим PowerSafe/PowerDown работа JTAG'a прекратится и вы словите "связь с чипом потеряна". С включенной отладкой (OCDEN==0) такого не произойдет, т.к. режимы энергосбережения будут просто эмулироваться, цитата из даташита: If the On-chip debug system is enabled by the OCDEN Fuse and the chip enter Power down or Power save sleep mode, the main clock source remains enabled. In these sleep modes, this will contribute significantly to the total current consumption.Кроме того, включение OCDEN для некоторых AVR'ок подключает регистр OCDR (регистр для общения с отладчиком из отлаживаемой программы). Через этот регистр printf'ом можно выводить сообщения в консоль отладчика. Если вы пользуетесь IAR'овским компилятором и отладчиком, то вероятно уже сталкивались с "Terminal I/O" (и можете себе представить насколько без него хуже).  Цитата из даташита: The OCDR Register provides a communication channel from the running program in the microcontroller to the debugger. The CPU can transfer a byte to the debugger by writing to this location. At the same time, an Internal Flag; I/O Debug Register Dirty – IDRD – is set to indicate to the debugger that the register has been written. When the CPU reads the OCDR Register the 7 LSB will be from the OCDR Register, while the MSB is the IDRD bit. The debugger clears the IDRD bit when it has read the information. In some AVR devices, this register is shared with a standard I/O location. In this case, the OCDR Register can only be accessed if the OCDEN Fuse is programmed, and the debugger enables access to the OCDR Register. In all other cases, the standard I/O location is accessed. Refer to the debugger documentation for further information on how to use this register.Итого с включенным OCD потребление всегда высокое, потребление больше чем обычно и имеется дырка для скачивания вашей прошивки из чипа. Стоит ли оставлять OCD включенным? Вывод можете сделать сами, а можно опять же довериться цитате из даташита: Never ship a product with the OCDEN Fuse programmed regardless of the setting of Lock bits and the JTAGEN Fuse. A programmed OCDEN Fuse enables some parts of the clock system to be running in all sleep modes. This may increase the power consumption.
|
|
|
|
|
Feb 11 2008, 19:04
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(xemul @ Oct 2 2007, 00:44)  Можно продолжать бороться с бедами контроллеров 5-10-летней давности, но за прошедшее время потроха контроллеров слегка изменились. В частности, АВР могут в большинстве случаев вполне успешно обходиться без внешнего супервайзера. +1 У меня так всё и сделано (без супервайзера). Я решил, что если уж атмел может процессоры делать, в которых мульён транзисторов, то уж супервайзер, в котором и два десятка транзисторов не наберётся, он туда уж точно какой надо запихнул. Цитата(xemul @ Oct 2 2007, 00:44)  Попробуйте не таскать шнурок на ногу сброса через всю плату. Или попробуйте для продолжения разговора пощёлкать рядом с AVRом люминесцентной лампой, отрезав этот шнурок под корень (т.е. по сбросу ничего, кроме внутреннего пуллапа), и отследить причину сброса. Если будет что-то кроме POR... У меня процессор все логи, в т.ч. своё включение (от чего он сбросился) во FLASH пишет. А я потом эту FLASH как Mass Storage читаю. FLASH не быстрее чем за месяц заполняется. Так вот, ничего кроме PORF и BORF, я там не видел! А я всегда за этим следил. Вообще то я там WDRF искал и не находил  . А обстановка с помехами там ещё та! Недалеко 6 кВ 1кА. И всё это тиристорами коммутируется. Щас пошёл - RESET на землю коротнул. Лог посмотрел. Всё как положено - EXTRF появился!
|
|
|
|
|
Feb 11 2008, 20:34
|

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

|
Цитата(galjoen @ Feb 11 2008, 22:04)  +1 У меня так всё и сделано (без супервайзера). Я решил, что если уж атмел может процессоры делать, в которых мульён транзисторов, то уж супервайзер, в котором и два десятка транзисторов не наберётся, он туда уж точно какой надо запихнул. У меня процессор все логи, в т.ч. своё включение (от чего он сбросился) во FLASH пишет. А я потом эту FLASH как Mass Storage читаю. FLASH не быстрее чем за месяц заполняется. Так вот, ничего кроме PORF и BORF, я там не видел! А я всегда за этим следил. Вообще то я там WDRF искал и не находил  . А обстановка с помехами там ещё та! Недалеко 6 кВ 1кА. И всё это тиристорами коммутируется. Щас пошёл - RESET на землю коротнул. Лог посмотрел. Всё как положено - EXTRF появился! Вопрос по регистру MCUSR Кому приходилось пользоваться флагами из регистра MCUSR? Возьмем для примера tiny15. Рис.14 на стр.15 его описания. (rev.1187D-12/01) Мне нужно, чтобы при включении питания не устанавливался флаг EXTRF. На сколько может быть задержан фронт reset относительно фронта VCC, чтобы этот флаг не устанавливался? И каким внутренним сигналом происходит запись в регистр MCUSR? На этой же странице написано, что сигнал reset гарантированно распознается, если его длительность превышает 500нс. При максимальном сопротивлении подтягивающего резистора 122кОм и входной емкости вместе с емкостью монтажа порядка 4пФ постоянная времени входной цепи уже как раз 500нс. Т.е. при таком раскладе получается, что при включении питания всегда будут устанавливаться два флага PORF и EXTRF. А для улучшения помехозащищенности рекомендуется еще шунтировать вход reset емкостью... Судя по логике текста описания, если длительность сигнала reset будет меньше 500нс, то он все равно может быть распознан, хотя и не гарантированно. Непонятно также с флагом BORF, если включена схема Brown-out. Поскольку порог срабатывания этой схемы больше, чем у схемы Power-on, то при включении питания она сработает позже и флаг BORF тоже может оказаться установленным. Как же при всем при этом идентифицировать причину сброса?
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 11 2008, 21:05
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Дон Амброзио @ Feb 11 2008, 23:34)  Мне нужно, чтобы при включении питания не устанавливался флаг EXTRF. Из практики (ATmega64 и AT90CAN128) знаю, что EXTRF и как никогда не устанавливается (я RESET ни к чему не подсоединял). Но если что, его ведь сбросить всегда можно (и нужно). Я когда MCUCSR читаю (в числе первых 10 команд), после этого его сразу-же его сбрасываю (все флаги). Чтоб в следующий раз знать от чего сброс произошел. Цитата(Дон Амброзио @ Feb 11 2008, 23:34)  Непонятно также с флагом BORF, если включена схема Brown-out. Поскольку порог срабатывания этой схемы больше, чем у схемы Power-on, то при включении питания она сработает позже и флаг BORF тоже может оказаться установленным. BORF иногда устанавливается. Если при включении дребезг контакта выключателя был. Напряжение питания увеличивалось-уменьшалось (кругом кондёры стоят). Цитата(Дон Амброзио @ Feb 11 2008, 23:34)  Как же при всем при этом идентифицировать причину сброса? А вот так и идентифицировать.PORF=0 значит что-то не так. А что - другие флаги показывают. Но лучше всего опытным путём всё это проверить. Я проверял! А вообще это  .
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|