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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Размещение массива в памяти программ, с последующим редактированием hex при перепрошивке
777777
сообщение Jan 12 2011, 10:22
Сообщение #16


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(alexeyv @ Jan 12 2011, 15:51) *
С EEPROM согласен, но Flash-память немного больше. Например рядовая программа занимает ~1200 строк в выходном hex-файле

Здесь речь идет не о всей программе, а о 600 байтах. В отдельном HEX-файле! Кто мешает зашивать отдельно программу и отдельно этот массив?
Цитата(alexeyv @ Jan 12 2011, 15:51) *
Длина ограничена форматом HEX-файла - для длины строки дается две позиции - это 255 значений!!!

Да, это я забыл. Но 600 байт все равно можно поместить.
Go to the top of the page
 
+Quote Post
zombi
сообщение Jan 12 2011, 11:01
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(skyled @ Jan 12 2011, 16:00) *
Предположим я преобразую hex в бинарный вид. Как мне там найти те байты, где мой массив лежит? Преобразование часом не заключается в том, чтобы выкинуть из hex лишнее?

Зачем искать?
Изначально в исходнике разместите его по фиксированному адресу.
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 12 2011, 11:39
Сообщение #18


Местный
***

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



Цитата
Зачем искать?
Изначально в исходнике разместите его по фиксированному адресу.
Ну вот в качестве примера я приводил свой файлик. Если там нужное число находится по адресу 0х000027 и я его вижу редактором, то где оно будет после конвертации в bin?
Go to the top of the page
 
+Quote Post
zombi
сообщение Jan 12 2011, 11:53
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(skyled @ Jan 12 2011, 17:39) *
Ну вот в качестве примера я приводил свой файлик. Если там нужное число находится по адресу 0х000027 и я его вижу редактором, то где оно будет после конвертации в bin?

По какому адресу было по томуже и останется!
Чем .bin смотрите?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 12 2011, 12:16
Сообщение #20


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



есть прекрасная тулза уже в составе WinAVR - srec_cat называется.
Она прекрасно всё во всё конвертит и т.д.
Вот её ман: http://pwet.fr/man/linux/commandes/srec_cat


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 12 2011, 12:25
Сообщение #21


Местный
***

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



Цитата(zombi @ Jan 12 2011, 17:53) *
По какому адресу было по томуже и останется!
Чем .bin смотрите?

bin в принципе есть чем посмотреть, UniProg-ом, например. Т.е. как я Вас понял, если в редакторе hex нужный байт был под номером 0х000027 (т.е. 39 по счету если в десятичной) таким он и будет по счету в bin, если я побайтно прочитаю этот bin в массив? Т.е. Если 0х000027==0хCC, то бит №39 (my_mass[0x27] тоже будет 0xCC?
Go to the top of the page
 
+Quote Post
zombi
сообщение Jan 12 2011, 12:33
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(skyled @ Jan 12 2011, 18:25) *
bin в принципе есть чем посмотреть, UniProg-ом, например. Т.е. как я Вас понял, если в редакторе hex нужный байт был под номером 0х000027 (т.е. 39 по счету если в десятичной) таким он и будет по счету в bin, если я побайтно прочитаю этот bin в массив? Т.е. Если 0х000027==0хCC, то бит №39 (my_mass[0x27] тоже будет 0xCC?

Да.
Только в Вашем файле prg_con.hex по адресу 0027H находится байт 0x00, а байт 0хСС по адресу 0026H.

А Вы случаем не забыли что AVR к флэшу пословно адресуется?
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 13 2011, 00:17
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Насчет Hex-редактора. Если Вы открыли хекс-файл в хекс-редакторе, то он отобразит его бинарное представление в удобоворимом для человека и к тому же линейном формате. То есть на каком месте байт поменяли, на таком он и будет поменян.
Раньше я писал о размещении массива во Flash - там необходимо задавать БАЙТОВУЮ адресацию. И редактор отображает побайтно (по умолчанию). Так что если в WinAVR задано
Код
-Wl,--section-start=.TableCoef=0x0800

, то и в редакторе начало массива будет равно 0x800.

Но я понял, что изменения в бинарнике будет делать отдельная прога, а не человек! Или это не так?

Цитата
Кто мешает зашивать отдельно программу и отдельно этот массив?

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


Цитата
есть прекрасная тулза уже в составе WinAVR - srec_cat называется

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


не ругайте пианиста - он играет как может!!!

Сообщение отредактировал alexeyv - Jan 13 2011, 00:29
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 13 2011, 04:20
Сообщение #24


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(alexeyv @ Jan 13 2011, 06:17) *
Если у человека опыта не хватит, то он может сначала зашить прогу, а потом таким же образом зашить массив, что перетрет прогу.

Как массив ее перетрет, если он по другому адресу?
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 13 2011, 04:50
Сообщение #25


Местный
***

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



Цитата
Но я понял, что изменения в бинарнике будет делать отдельная прога, а не человек! Или это не так?
Именно так. На уровне пользователя будет удобный (а главное понятный) ему интерфейс. Пользователь выставляет что ему нужно и говорит "прошить железяку". Железяка шьется программатором из-под avrdude. Программа просто запкскает avrdude вегда неизменной командной строкой. Программатор шьет контроллер и все работает. Ограничения на установки накладываются на этапе изменения установок пользователем так чтобы всегда знвчения были валидными. Ну вот такая вот задумка...
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 13 2011, 05:05
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
Как массив ее перетрет, если он по другому адресу?

А Вы попробуйте в любом программаторе сначала сделать Open_File/Load_File для одного файла, а потом Open_File/Load_File для другого м посмотрите результаты. Для второго файла обычно используется что-то типа Open_File_At//Load_File_At, где указывается адрес смещения

Go to the top of the page
 
+Quote Post
777777
сообщение Jan 13 2011, 05:12
Сообщение #27


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(alexeyv @ Jan 13 2011, 11:05) *
А Вы попробуйте в любом программаторе сначала сделать Open_File/Load_File для одного файла, а потом Open_File/Load_File для другого м посмотрите результаты.

Не знаю как насчет любого, но в AVRStudio есть флажок Erase device before flash programming. Если его снять, то можно шить отдельные части флэш.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 13 2011, 05:40
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
Не знаю как насчет любого, но в AVRStudio есть флажок Erase device before flash programming. Если его снять, то можно шить отдельные части флэш.


А Вы пытались без стирания перешить флеш и все работало?? Насколько я помню если в памяти было что-то и оно перешивается без стирания, то в результате будет что-то похожее на логическую сумму того что было и нового содержимого.
Ваше утверждение будет работать тогда, когда в ячейках памяти были 0xFF. А если там УЖЕ была какая-то информация, то результат будет не тот что надо, иначе бы операция стирания не требовалась.
Во-вторых, я не помню чтобы AVRStudio за раз прошивал сразу два файла.
Go to the top of the page
 
+Quote Post
GDI
сообщение Jan 13 2011, 06:09
Сообщение #29


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

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



Что мешает сперва стереть всё, а потом зашить прогу и массив без промежуточного стирания?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
skyled
сообщение Jan 13 2011, 06:45
Сообщение #30


Местный
***

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



Ну дак так ибудет. Прога с массивом в ее составе льется как один файл при программировании.
Go to the top of the page
 
+Quote Post

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

 


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


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