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

 
 
> Cамопрограммирование flash, ( Запись flash ), bootload, переход из RWW в NRWW, чтение констант из flash
Jhohn
сообщение Nov 13 2008, 13:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-08
Пользователь №: 41 579



Здравствуйте!

Разрабатываемое устройство на Atmel 168 (flash = 16k, bootloader = 2048 byte) принимает данные по USB (эта часть уже реализована программно). Среда разработки WinAvr. Программная реализация USB (программа-usb) не маленькая больше чем bootloader. По USB принимаются данные (основная-программа + константы) и перепрошивается flash. Код основной-программы не писался, оочень большая вероятность что это будет > 2 к. У устройства есть два режима программирование (задание конфигурации) и работа самого устройства, для выбора режима имеется вход +5 В на ножку МК при программировании. EEPROM может не хватить поэтому предполагаю запись констант в флеш.

Вопросы:

1) При включении устройства мы переходим в bootload, проверяем вывод и соответственно переходим к jmp(необходимый адрес в flash) ?

2) Можно ли программу-usb расположить в flash принимать данные в ОЗУ потом jmp bootload, писать там код основной программы и обратно в программу в flash? (т.к. программа-usb не помещается в bootload )
т.е. вопрос могу ли я перейти из RWW в загрузчик (NRWW) КАК ? jmp (адрес) ?

3) Ход программирования предполагаю таким:
------( bootload_start см рис память flash ) загрузчик (nrww) [if (port == 1) ] ->
------( Jmp 1 ) к программе-usb ->
------( Jmp 1 ) пишем в озу 128 б принятые данные по usb ->
------( bootload ) оттуда пишем память > Jmp_2 ->
------( Jmp 1 )
reset
Ход выполнения основной программы:
------( bootload ) загрузчик (nrww) [if (port == 0) ] ->
------( Jmp 2 ) к основной-программе

ЕСТЬ ЗАМЕЧАНИЯ?


4) При выполнении основной-программы при считывании констант из flash, как прочесть константы ? (снова в загрузчик читать в озу и обратно?)



Жду замечаний ) Спасибо. smile.gif

Сообщение отредактировал Jhohn - Nov 13 2008, 13:54
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jhohn
сообщение Nov 27 2008, 17:28
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-08
Пользователь №: 41 579



Как всегда о неудачах:

Цитата(Сергей Борщ @ Nov 26 2008, 14:25) *
Нет. Скрипт линкера. Если у вас в makefile скрипт явно не указан через LDFLAGS += -Wl,-T,имя_скрипта, то avr-ld берет подходящий для вашего кристалла из WinAVR/AVR/LIB/LDSCRIPTS. Самый простой способ определить, какой именно - переименуйте всю папку, линкер ругнется на конкретный файл, переименуйте папку обратно. Потом берите этот файл, копируйте в свой проект (можно переименовать, чтобы не путаться), добавляйте LDFLAGS += -Wl,-T,имя_скрипта в нужное место makefile или -Wl,-T,имя_скрипта на вкладку опций линкера в AVRStudio, идите в WinAVR/DOC/binutils/ld, читайте о формате скрипт-файла и правьте его как вам надо.


Нашел файл "avr5.x" почитал указанные скрипты но так и не разобрался с указанным файлом, при разборе много вынес полезного.

Я подумал хорошенько и решил не Рестартиться в boot, а загрузаться в usb_application, соответстенно, проверку того какая программа выполняется делаю в main() ( usb_application )

Код
[code]USB_SECTION                                                            // 0x2800
void main (void)
{

    if(CHECKBIT(PINC,2))                            // usb_section     ->  + 5 V
    {
                                                                                   // инициализация
        for(;;)
        {    

        }
    }    
    else                                            // application_section     ->   0 V
    {
                                                                                   // инициализация
        
        for(;;)
        {
            goto_application();
        }
    }
}



Необходимо загрузится по адресу application_section ( 0x0200), после самопрограммирования, но не получается. Я создал функцию goto_application(); которая начинается с адреса = 0x0200, а пишу я в flash по этому же адресу.
Возможно одна из причин следующая:


Код
APPLICATION_SECTION                             //0x0200
void goto_application(void)
{
    
     LED_ON;
     LED_ON;                  // Три LED_ON
     LED_ON;
}


Если в теле фукцнии goto_application() написалть 3-и оператора, то получаем память программ вида
Код
...
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
:10020000[b]5E9A5E9A5E9A[/b]0895FFFFFFFFFFFFFFFF71
:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE
...
:1034200090915B01982F882790935B0180935A01BC
:1034300020915A0130915B0180916F0190E0822BC5
:10344000932B90935B0180935A0120916A018091A4
:103450005A0190915B01F999FECF92BD81BD20BDCB
:10346000FA9AF99A74CADF91CF911F910895CF9378                      
:10347000DF93329B16C023E02093690081E08DBB6F
:1034800080E48AB980E58AB980E18BB98CE691E065
:10349000D92FC82F86E2809333012093340178948A
:10[b]34A0[/b]00FFCF80E48AB9[b]5E9A5E9A5E9A[/b]FCCFFFFFF6
:1034B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C
...


main() 0x0000346e

то есть код повторяется

Если в теле фукцнии goto_application() написалть 5-ть операторов, то получаем память программ с пятью повторяющимися содами в двух секциях


Если в теле фукцнии goto_application() написалть 20-ть операторов, то получаем память программ вида
Код
...
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
:10020000[b]5E9A5E9A5E9A5E9A5E9A5E9A5E9A5E9A2E
:100210005E9A5E9A5E9A5E9A5E9A5E9A5E9A5E9A1E
:100220005E9A5E9A5E9A5E9A[/b]0895FFFFFFFFFFFF57
:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE
...
:10344000932B90935B0180935A0120916A018091A4
:103450005A0190915B01F999FECF92BD81BD20BDCB
:10346000FA9AF99A74CADF91CF911F910895CF9378
:10347000DF93329B16C023E02093690081E08DBB6F
:1034800080E48AB980E58AB980E18BB98CE691E065
:10349000D92FC82F86E2809333012093340178948A
:10[b]34A0[/b]00FFCF80E48AB90E940001FDCFFFFFFFFF3C
:1034B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C
:1034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C
...


повторяющихся 5E9A не видно

НЕ ПОЙМУ почем функция main() изменяется так странно то добавляет, код код другой секции, то нет...
Может я что-то я что-то делаю не так?


память соответственно 3 оператора, 5 и 20 в файлах
Прикрепленные файлы
Прикрепленный файл  3_led.txt ( 45.01 килобайт ) Кол-во скачиваний: 50
Прикрепленный файл  5_led.txt ( 45.01 килобайт ) Кол-во скачиваний: 42
Прикрепленный файл  20_led.txt ( 45.01 килобайт ) Кол-во скачиваний: 44
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 27 2008, 22:42
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Jhohn @ Nov 27 2008, 19:28) *
Я подумал хорошенько и решил не Рестартиться в boot, а загрузаться в usb_application, соответстенно, проверку того какая программа выполняется делаю в main() ( usb_application )
Можно и так, но что произойдет, если приложения нет или обновление оборвалось на середине? Обычно в задачу загрузчика входит проверка контрольной суммы приложения и передача ему управления лишь в том случае, если контрольная сумма совпала, т.е. приложение работоспособно.

Цитата(Jhohn @ Nov 27 2008, 19:28) *
НЕ ПОЙМУ почем функция main() изменяется так странно то добавляет, код код другой секции, то нет...
Может я что-то я что-то делаю не так?
поробуйте сделать так: avr-objdump -hdSC file.elf > listing.lss
file.elf - .elf-файл вашей программы. В listing.lss увидите дизассемблированный текст. По этому тексту видно, что "то добавляет" - это компилятор встроил тело вашей функции в точку вызова. Ну и оставил еще одну копию на случай, если вы захотите вызвать ее из другого файла. "То нет"- это когда тело вашей функции такого размера, что вызвать функцию уже выгоднее по размеру, чем встроить ее.
Чтобы не оставалось ненужных копий, почитайте эту ветку. А чтобы компилятор не встраивал функцию goto_application() в main() размещайте их в разных единицах компиляции или примените к ней __attribute__((__noinline__)). Последнее более правильно, ибо компиляторы начали поддерживать многофайловую оптимизацию и начиная с какой-то версии научатся встраивать функции и из других единиц компиляции.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jhohn   Cамопрограммирование flash, ( Запись flash )   Nov 13 2008, 13:38
- - GDI   Почему тут http://www.obdev.at/products/avrusb/prj...   Nov 13 2008, 14:06
- - Jhohn   Цитата(GDI @ Nov 13 2008, 17:06) Почему т...   Nov 13 2008, 14:10
- - GDI   ЦитатаПрограммная реализация USB (программа-usb) н...   Nov 13 2008, 14:57
- - Jhohn   Хочется получить грамотный ответ на поставленный в...   Nov 13 2008, 16:09
|- - SasaVitebsk   Цитата(Jhohn @ Nov 13 2008, 20:09) Хочетс...   Nov 13 2008, 16:43
- - Jhohn   Цитата(SasaVitebsk @ Nov 13 2008, 19:43) ...   Nov 13 2008, 21:19
|- - SasaVitebsk   Цитата(Jhohn @ Nov 14 2008, 01:19) А у ва...   Nov 13 2008, 23:04
|- - defunct   Цитата(Jhohn @ Nov 13 2008, 23:19) А у ва...   Nov 17 2008, 00:18
- - plombir   Цитата(Jhohn @ Nov 13 2008, 16:38) Здравс...   Nov 13 2008, 21:28
- - Jhohn   В процессе записи в Flash сталкнулся с ошибкой: П...   Nov 19 2008, 11:50
|- - aesok   Цитата(Jhohn @ Nov 19 2008, 14:50) BOOTLO...   Nov 19 2008, 11:57
- - Jhohn   Вы правы. Спасибо.   Nov 19 2008, 12:35
- - Jhohn   Мучаю Код /////////////////////////////////////...   Nov 24 2008, 11:21
|- - Сергей Борщ   Цитата(Jhohn @ Nov 24 2008, 13:21) //////...   Nov 24 2008, 13:19
- - Jhohn   может в функции проблема boot_program_page() ? хот...   Nov 24 2008, 12:35
- - Jhohn   Цитата(Сергей Борщ @ Nov 24 2008, 16:19) ...   Nov 25 2008, 10:05
- - SasaVitebsk   Кстати идея Defunct весьма интересна. Можно её даж...   Nov 25 2008, 10:29
|- - defunct   Цитата(SasaVitebsk @ Nov 25 2008, 12:29) ...   Nov 27 2008, 13:45
- - Jhohn   Не могу войти в область загрузчика (bootload sect...   Nov 26 2008, 10:22
|- - Сергей Борщ   Цитата(Jhohn @ Nov 26 2008, 12:22) 1)BOOT...   Nov 26 2008, 10:28
- - Jhohn   Такой дурацкий вопрос: как? вы имеете в виду meikf...   Nov 26 2008, 10:41
|- - Сергей Борщ   Цитата(Jhohn @ Nov 26 2008, 12:41) Такой ...   Nov 26 2008, 11:25
- - Jhohn   Цитата(Сергей Борщ @ Nov 28 2008, 01:42) ...   Nov 28 2008, 14:32
- - Jhohn   Начну с хорошего все работает и прошивается на atm...   Mar 10 2009, 20:59
|- - rx3apf   Цитата(Jhohn @ Mar 10 2009, 23:59) Подска...   Mar 10 2009, 21:15
- - Jhohn   блин, так и есть, вылетело из головы   Mar 11 2009, 04:37


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 02:51
Рейтинг@Mail.ru


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