|
Размещение массива в памяти программ, с последующим редактированием hex при перепрошивке |
|
|
|
Jan 12 2011, 10:22
|

Профессионал
    
Группа: Участник
Сообщений: 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 байт все равно можно поместить.
|
|
|
|
|
Jan 12 2011, 11:39
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868

|
Цитата Зачем искать? Изначально в исходнике разместите его по фиксированному адресу. Ну вот в качестве примера я приводил свой файлик. Если там нужное число находится по адресу 0х000027 и я его вижу редактором, то где оно будет после конвертации в bin?
|
|
|
|
|
Jan 12 2011, 12:25
|
Местный
  
Группа: Участник
Сообщений: 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?
|
|
|
|
|
Jan 13 2011, 00:17
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Насчет Hex-редактора. Если Вы открыли хекс-файл в хекс-редакторе, то он отобразит его бинарное представление в удобоворимом для человека и к тому же линейном формате. То есть на каком месте байт поменяли, на таком он и будет поменян. Раньше я писал о размещении массива во Flash - там необходимо задавать БАЙТОВУЮ адресацию. И редактор отображает побайтно (по умолчанию). Так что если в WinAVR задано Код -Wl,--section-start=.TableCoef=0x0800 , то и в редакторе начало массива будет равно 0x800. Но я понял, что изменения в бинарнике будет делать отдельная прога, а не человек! Или это не так? Цитата Кто мешает зашивать отдельно программу и отдельно этот массив? Мешает обычно опыт. Если у человека опыта не хватит, то он может сначала зашить прогу, а потом таким же образом зашить массив, что перетрет прогу. Правильнее надо будет в программаторе открыть прогу, а потом по определенному адресу подгрузить массив, а уже потом шить. Все зависит от человека и его понимания поставленной задачи!! Цитата есть прекрасная тулза уже в составе WinAVR - srec_cat называется Да!!! Я и не знал!! Спасибо за подсказку! Надо будет посмотреть Посмотрел. Тулза прикольная, но для начинающего слишком сложная. Вы бы привели законченный пример для конвертации. не ругайте пианиста - он играет как может!!!
Сообщение отредактировал alexeyv - Jan 13 2011, 00:29
|
|
|
|
|
Jan 13 2011, 04:50
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868

|
Цитата Но я понял, что изменения в бинарнике будет делать отдельная прога, а не человек! Или это не так? Именно так. На уровне пользователя будет удобный (а главное понятный) ему интерфейс. Пользователь выставляет что ему нужно и говорит "прошить железяку". Железяка шьется программатором из-под avrdude. Программа просто запкскает avrdude вегда неизменной командной строкой. Программатор шьет контроллер и все работает. Ограничения на установки накладываются на этапе изменения установок пользователем так чтобы всегда знвчения были валидными. Ну вот такая вот задумка...
|
|
|
|
|
Jan 13 2011, 05:05
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Цитата Как массив ее перетрет, если он по другому адресу? А Вы попробуйте в любом программаторе сначала сделать Open_File/Load_File для одного файла, а потом Open_File/Load_File для другого м посмотрите результаты. Для второго файла обычно используется что-то типа Open_File_At//Load_File_At, где указывается адрес смещения
|
|
|
|
|
Jan 13 2011, 05:40
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Цитата Не знаю как насчет любого, но в AVRStudio есть флажок Erase device before flash programming. Если его снять, то можно шить отдельные части флэш. А Вы пытались без стирания перешить флеш и все работало?? Насколько я помню если в памяти было что-то и оно перешивается без стирания, то в результате будет что-то похожее на логическую сумму того что было и нового содержимого. Ваше утверждение будет работать тогда, когда в ячейках памяти были 0xFF. А если там УЖЕ была какая-то информация, то результат будет не тот что надо, иначе бы операция стирания не требовалась. Во-вторых, я не помню чтобы AVRStudio за раз прошивал сразу два файла.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|