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

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Как заполнить свободную память?, программная защита
namelos
сообщение Sep 26 2007, 14:47
Сообщение #16


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Разобрался с Intel-hex файловым форматом, но в конце каждой строки hex файла стоят 2 байта 0D 0A, значение которых пока непонятно. Или они просто заканчивают строку?
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 26 2007, 15:07
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



0d 0a = \r\n - это перевод строки


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 26 2007, 15:57
Сообщение #18


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



GDI, спасибо.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 27 2007, 15:27
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 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
Удачи
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 27 2007, 16:10
Сообщение #20


кекс
******

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



Цитата(Yuriy_AVR @ Sep 27 2007, 18:27) *
Собаку я включал последний раз лет 5 назад . При тысячах едениц выпущенной продукции вроде бы нареканий нет.

У Вас либо очень простая программа, либо Вы один из немногих гениев которые не допускают ошибок.
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 27 2007, 20:57
Сообщение #21


Участник
*

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



Цитата(defunct @ Sep 27 2007, 20:10) *
У Вас либо очень простая программа, либо Вы один из немногих гениев которые не допускают ошибок.
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.

Ни то , ни другое . Что касается программ , то по обьёму кода программы конечно же разные , но как правило не менее 30-40К памяти программ ( все программы пишу на асме ) Так что не очень они маленькие , я вас уверяю . И проц шуршит аж воротник заворачивается - прерывание на прерывании . И пожалуйста только не надо приводить старые как мир догмы - писали бы на Си . . . Я и на Си могу , но для меня асм комфортнее .
Гением конечно же себя не считаю , и ошибки бывают , кто не грешен ?
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.
biggrin.gif wink.gif cool.gif
Это что же получается - производители вводят в проц апаратные вещи для защиты от кривых программистов ? Неожиданная мысль , очень неожиданная .
На самом деле это не совсем так . Вы не задумывались почему некоторые процы (рядовые) ( например MSC-51) работают на 50 MHz , а у AVRов пока планка в 20-24 MHz ? Дело в том , что у AVRов выборка команды производится за 1 такт генератора , но за 4 внутренних такта , которые формируются специальной внутренней аппаратной схемой .Так вот - сбой хотя бы по одному из этих подтактов приводит к разным непредсказуемым последствиям (и подвисаниям в том числе ) . Именно поэтому важна хорошая форма тактовых импульсов , так как на основании её формируются внутренние подтакты . Некоторые производители ( NEC например) применяют для защиты от такого рода вещей специальный аппаратный механизм правильной выборки команды из памяти программ. Именно для подобных вещей держат псов , а не для защиты от программистов !!! .
Небольшое лирическое отступление-: когда - то давно , когда я ещё был студентом , нас то и дело доставал препод по программированию составлением алгоритмов . Всех это уж очень достало , и я один раз в сердцах спросил - когда же вместо вской ерунды мы начнём изучать языки программирования ?.
На что получил ответ , который оценил позднее - язык программирования это инструмент , а программа - это исскусство и часть души . В корявых руках и скрипка Страдивари будет не более чем куском дерева
.
Умный был ( надеюсь ещё есть ) препод .

Лет 10 назад делал одну програмку . Писал , она работала , дописывал , она опять работала , пока в один момент всё не стало работать очень коряво . . . ( справедливости ради надо сказать что у неё была очень сложная структура ) . Разбираться в огромном куске кода небыло никакого желания - крышу срывало.
Было принято волевое решение - взять и разрисовать прогу на блоки , сначала крупные , потом помельче , потом ещё мельче . В итоге ( после месяца спания по 4-5 часов за ночь ) - получилась структурная схема программы. Она была очень тщательно осмыслена и проверена на логику работы .
Меня тогда удивило - по структурной схеме мне только и оставалось что просто тупо подставлять ассемблерные операторы , что у меня получалось очень и очень быстро ( за неделю одолел 32К ). Кстати , предыдущий кусок весил 36К .
Первое включение после компиляции и прошивки и . . . . . каково же было моё удивление , что программа заработала сразу , и без малейших шороховатостей . Я после включения не изменил в программе ни одной буквы , так до сих пор и работает . После этого случая я любую программу пишу именно так - сначала хорошо обдумываю всю структуру программы , тратя на это прилично времени , затем начинаю на бумаге делать наброски , потом всё чётче и чётче вырисовывается программа , нечто наподобе проявки фотографии , или прорисовки художника. Совет - хотите писать хорошие программы - делайте именно так - я вас уверяю - времени в итоге тратится меньше , сохраняется "бумажная копия" работы программы ( в которой может разобраться при необходимости практически любой грамотный человек , даже далёкий от программирования ). А ошибки ищются на ура . И никакой язык программирования не сравнится по наглядности ( Си в том числе ) . . . Поэтому лично для меня какие из операторов подставить в программу - асм или Си особого значения не имеет .
От кривых рук программиста не спасёт ни собака , ни другие аппаратные вещи .
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Sep 27 2007, 22:56
Сообщение #22


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

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



bb-offtopic.gif
Цитата
После этого случая я любую программу пишу именно так - сначала хорошо обдумываю всю структуру программы , тратя на это прилично времени

Подтверждаю. Из своего немалого опыта программирования для PC вынес (правда, не сразу) эту же мысль - чем больше времени потратишь на тщательное продумывание программы (прежде чем прикасаться к клавиатуре), тем меньше общее время "продумывание+написание+отладка+доведение_до_ума".
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2007, 23:27
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вставлю-ка я свои 5 копеек:
Как уже упоминалось ранее, значение 0xFFFF - это код команды SBRS R31, 7. Но никто почему-то не обратил внимания на то, что при R31.7=1 процессор может и не выйти на нулевой адрес. Так что заполнение имеет некоторый смысл (по крайней мере, заполнение последнего слова памяти).
Go to the top of the page
 
+Quote Post
ae_
сообщение Sep 28 2007, 02:09
Сообщение #24


Участник
***

Группа: Свой
Сообщений: 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.
Интересно, что делает контроллер, встретив такую инструкцию, пропускает?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2007, 02:24
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



AVR Studio декодирует так. Можно эмулятором проверить для надежности.
Go to the top of the page
 
+Quote Post
ae_
сообщение Sep 28 2007, 02:47
Сообщение #26


Участник
***

Группа: Свой
Сообщений: 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

"...эмулятором проверить для надежности." - это шутка?
Эмулятор даже документированные фичи не все отрабатывает.
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 28 2007, 06:42
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
значение 0xFFFF - это код команды SBRS R31, 7

Я это узнал из дизасма IARа, а разработчики этого компилятора учавствуют в разработке опкодов команд для АВР. Правда это был дизасм кода из еепром, ну не встречается у меня в программе такого опкода...smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
AlexG_changed
сообщение Sep 28 2007, 07:26
Сообщение #28


Участник
*

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



В процессе отладки с JTAG-ICE на ATmega128 сам наблюдал как попадая на незапрограммированную область процессор доходит до конца флэша и начинает выполнение программы с начала.

Сообщение отредактировал AlexG - Sep 28 2007, 07:27
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2007, 07:59
Сообщение #29


Гуру
******

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



Цитата(defunct @ Sep 27 2007, 19:10) *
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.

Watchdog за многие годы спасал один раз и отнюдь не от программых ошибок - индустриальные PCшки попалась и ушла на объекты партия с какими-то дивными сбоями при работе DMA контроллера Ethernet - сносило крышу начисто. Watchdog чуть-чуть-чуть смягчил проблему до того, как через пару дней были приняты меры по обкладыванию работы с Ethernet подушками для обхода дефекта и последующей замены железа на рабочее. В принципе до этого эффекта Watchdog в этом софте размером порядка 300K даже не активировался. Давить программные ошибки Watchdog-ом чистый моветон sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 28 2007, 08:49
Сообщение #30


;
******

Группа: Участник
Сообщений: 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 - и вся любовь smile.gif
Затем, после rjmp Start, обязательно, CLI и инициализация всего, чего надо, как будто
мы не знаем ничего о начальных значениях портов. Теперь у нас "взбрык" от сброса внешне ничем не отличается.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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