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

 
 
 
Reply to this topicStart new topic
> Как заполнить flash nop'ами
EugeNNe
сообщение Jan 30 2007, 08:19
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Есть Мега64. Использовано только 70% флэша. Как заполнить
оставшуюся неиспользованную флэш память оператором "nop"?
Используем компилятор GCC. Вопрос в том может ли GCC сгенерить
код определённого размера чтобы пространство вне основной проги
заполнялось пустым оператором.
Go to the top of the page
 
+Quote Post
bgc
сообщение Jan 30 2007, 09:30
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 30-07-06
Из: Москва
Пользователь №: 19 188



В IAR в опциях компилятора есть возможность заполнить неиспользуемую CODE memory определенным кодом. Что-то похожее может быть в GCC


--------------------
Окружающий мир - не иссякающий источник сюрпризов!
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Feb 1 2007, 07:22
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Ну в общем никто не знает....Нормальный компилятор должен как то это делать....
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 1 2007, 15:22
Сообщение #4


кекс
******

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



зачем это надо?
Хотите чтобы программа дольше шилась и флеш изнашивался быстрее?
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Feb 1 2007, 15:49
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



В требованиях к системам критичных к безопасности железа есть
требование которое говорит о том, что если не задействован весь
флэш или озу программ то он должен заполнится оператором "nop". Во всех компиляторах
с которыми я работал и которые делали код для систем управления
промышленными установками для производства микроэлектронных
компонент эта функция стояла по умолчанию.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 1 2007, 17:10
Сообщение #6


кекс
******

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



Для AVR нет принципиальной разницы в поведении ядра на опкодах
0xFFFF (то чем заполнен флеш в результате команды CHIP_ERASE)
и
0x0000 (NOP)
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 1 2007, 20:31
Сообщение #7


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Не это ли вас интересует?
objcopy −−gap−fill=val
Fill gaps between sections with val. This operation applies to the load address (LMA) of the
sections. It is done by increasing the size of the section with the lower address, and filling in the
extra space created with val.

Кстати заполнять надо не NOPами (или XORами, которым соответсвует код 0xff), а JMPами на ресет (или какой нибудь другой вектор ), что для старших мег будет весьма непросто.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 2 2007, 01:58
Сообщение #8


кекс
******

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



Цитата(beer_warrior @ Feb 1 2007, 19:31) *
Кстати заполнять надо не NOPами (или XORами, которым соответсвует код 0xff), а JMPами на ресет (или какой нибудь другой вектор ), что для старших мег будет весьма непросто.

Опять же каков в этом смысл?
После прогонки по всему массиву памяти проц выйдет на RESET сам.
Тут более уместно будет поставить команду CLI сразу по PROG_START, чтобы пере-инициализация после такого сбоя прошла без сюрпризов от включенной периферии.
Но думаю компиляторы достаточно умны чтобы позаботиться об этом самостоятельно.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 2 2007, 02:22
Сообщение #9


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Опять же каков в этом смысл?После прогонки по всему массиву памяти проц выйдет на RESET сам.

Да вобщем-то особого смысла и нету, особенно когда речь идет о длинных переходах. Но когда-то такое практиковалось.

Цитата
Тут более уместно будет поставить команду CLI сразу по PROG_START, чтобы пере-инициализация после такого сбоя прошла без сюрпризов от включенной периферии.Но думаю компиляторы достаточно умны чтобы позаботиться об этом самостоятельно


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


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Feb 2 2007, 07:40
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Да мы тоже думали о том есть в этом смысл или нет, пришли к тому что нет. Но наше ПО проходит экспертизу, эксперт говорит надо делать так - значит нодо, иначе не пройдём экспертизу, с ними спорить бесполезно.



Заполнение джампами кажется более логичным, но сказано nop'ами - значит nop'ами.
Go to the top of the page
 
+Quote Post
boez
сообщение Feb 2 2007, 14:23
Сообщение #11


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

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Цитата(BigBolt @ Feb 2 2007, 06:40) *
Да мы тоже думали о том есть в этом смысл или нет, пришли к тому что нет. Но наше ПО проходит экспертизу, эксперт говорит надо делать так - значит нодо, иначе не пройдём экспертизу, с ними спорить бесполезно.
Заполнение джампами кажется более логичным, но сказано nop'ами - значит nop'ами.


Ну значит avr-objcopy --gap-fill 0x00 --pad-to 0x10000 oldfile.elf newfile.elf

Или совместить это с преобразованием в выходной файл:

avr-objcopy --gap-fill 0x00 --pad-to 0x10000 -O ihex theproject.elf theproject.hex
или
avr-objcopy --gap-fill 0x0000 --pad-to 0x10000 -O binary theproject.elf theproject.bin

Кстати - инструкции 0xffff я в списке не нашел вообще. Она неопределенная?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 2 2007, 19:03
Сообщение #12


Гуру
******

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



Относительный смысл имеет только заполнение чем-то вроде софтового прерывания/системного вызова/брейпойнта. Цель - выйти на отладочную процедуру, как минимум фиксирующую состояние регистров и кусочек стека. Дальнейшее поведение у меня зависит от наличия подключенной отладочной консоли - если есть - стоим и ждем. В консоле есть возможность покопаться по памяти, MCB, ТСВ и прочему. Для систем на x86 еще и дизассемблер встроен smile.gif.
Если нет - перезапуск cо светодиодной индикацией призывающей взглянуть на 'интересное' sad.gif в логе при случае. Естественно, это мееет смысл для случая когда контроллер более менее 'общительный' и/или может где-то сохранить подробности вылета.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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