ПредишенСледващото

Вие искате да създадете свой собствен зареждане на ОС? Като има предвид, този документ съдържа отговорите на много въпроси във връзка с това ще имате. Повечето от понятията, обхванати тук не са засегнати по-подробно във фиша на микроконтролери, но въпреки тези съвети са важни за проектирането на надеждни bootloaders. Голяма част от информацията, представена тук, може да се намери на avrfreaks.net разпръснати на различни клонове. Въпросите по-долу са подредени от прости до сложни, и за създаване на жизнеспособна зареждане на ОС, може да искате да се разбере отговора, поне за първите 11 въпроса.

За да бъде успешно овладяване на материала предполага, че вече знам защо има зареждане на ОС, собствен програмиране в C език, и са запознати със създаването на общ 8-битови приложения AVR. Този документ се основава на инструмента за AVR-ССЗ с помощта на AVR-библшотеката библиотеки и от типа Makefile. Ако използвате друг инструмент, всичко, както е описано в този документ, е все още валидна, но Makefile примери за код трябва да бъдат
подходящо адаптирани към вашия инструмент.
Също така имайте предвид, че примерите са базирани на AT90USB162 и трябва да бъдат съобразени с вашия AVR за повторна употреба.

Откъде да започнем?

В действителност, зареждане - това е просто нормално приложение на AVR, който се намира в специална зона на флаш памет. В най-простата форма, приложението може да направи AVR зареждане чрез определяне на допълнителни флагове на свръзката, които искате да добавите към своя Makefile:

Каква е площта на NRWW и RWW?

Ето какво наистина трябва да знаете за функциите и областите RWW NRWW:

  • В товарач може да препрограмира прилагането намира в RWW, при изпълнението на товарач не се прекъсва;
  • зареждането на ОС не може да актуализира кода на толкова просто като код за кандидатстване;
  • Заявленията рядко актуализират товарач;
  • Заявленията могат да се актуализират, но това е по-добре да се направи това товарач.

Както товарач актуализира приложението?

Как зареждането на ОС, за да получите програмата, за да препрограмира контролера е до вас. Общи комуникационни канали са UART и USB. обмен на данни по канал може да има свой собствен протокол или стандарт, или като AVR109 DFU. При изпълнението на стандартни протоколи, можете да използвате съществуващите инструменти като AVR Studio, работещи по протокол или Flip AVR109 Atmel, работещ в DFU протокол. Въпреки това, тези стандартни протоколи като цяло са малко по-раздута, но товарача са склонни да бъдат по-малки и по-чист в изпълнението на един прост потребителски протокол. Истината в този случай ще трябва да се развива чрез персонализирано решение за предаване на данни, за да товарача.

Обикновено, зареждането на ОС се прехвърля в даден момент, една страница на паметта. Loader е необходимо да ги запише
страници, за да мигат, предназначена за прилагане, т.е. в RWW. AVR-библшотеката осигурява заглавния файл който има всичко необходимо за това. Тези характеристики са много добре документирани и са придружени от примери. Няколко съвета:

Може ли актуализация буутлоудъра стойности Fyuz?

С AVR е невъзможно. За да направите това, ви е необходим външен програмист.

Защо от BOOTLOADER_SECTION имате нужда ?

Въпреки неговото име BOOTLOADER_SECTION макро не е полезен, когато пишете буутлоудъра. Този макрос просто ви помага да се преразпределят функциите на вашата позиция в раздел NRWW флаш памет. Вероятно за това макро-подходящо име е нещо като NRWW_SECTION.

BOOTLOADER_SECTION макро може да се изисква, ако някое приложение изисква препрограмиране на функцията на свои собствени приложения, като тази функция ще работи само ако тя е направена от razdelaNRWW. BOOT_LOADER_SECTION наистина просто създава специална секция за кодово име на «.bootloader» (друго име за него е по-добре да не я използват), а след това още свързваща флаг позиции тази част е някъде в областта на неизползван раздел NRWW памет. Този подход не се използва често в практиката.

Някои хора са склонни да използват BOOTLOADER_SECTION да напише молба веднъж и товарач в една програма, но това не е добра идея. Товарачът е добро като самостоятелна програма, която не зависи от приложението. Тя ще бъде по-надеждно решение, независимо от факта, че зареждането на ОС е отделно приложение, а след това се създаде, също ще бъде по-лесно.

Как да мига буутлоудъра за микроконтролери?

Как да мига буутлоудъра и прилагането веднага?

Тъй като, надявам се, сте създали отделно заявление и товарач отделно, а след това в крайна сметка ще имате два отделни шестнадесетичен файл с фърмуер (например, app.hex и boot.hex). Възниква въпросът: как да ги и двете, попълнете AVR. Има няколко възможности:

В две стъпки: Напълнете товарач с помощта на външен програмист, както е описано във въпрос номер 6. Може в същото време трябва да инсталирате и изискваните стойности Fyuz включително BOOTSZ и BOOTRST. След това можете просто да използвате нормалния механизъм на товарача за комуникация и прилагане фърмуера в микроконтролера.

В един момент: Комбинирайте app.hex и boot.hex файлове в един и използвате външен програмист за писане на обединената файл към микроконтролера. Може в същото време трябва да инсталирате и изискваните стойности Fyuz включително BOOTSZ и BOOTRST.

Мисля, че най-лесният начин да се съчетаят шестнадесетични файлове, използвайки srec_cat на команден ред. Този инструмент е част от srecord комплект. Той идва с WINAVR и много лесно да инсталирате на Unix-подобни OS. Това е командата, че още е необходимо да използвате:

Като алтернатива, можете ръчно да се слеят app.hex boot.hex файлове и файлове с няколко редакции:

Всеки шестнадесетичен файл има един последен запис, който гласи, че "файла завършва." Ето защо, след като ръчно асоциация, която искате да редактирате обединената шестнадесетичен файл - да се намери в него до края на запис файл, който се намира в края на app.hex (след сливането някъде по средата на файла) и да го изтриете. Записването е тип 01. Записът байт в шестнадесетичен формат Intel поръчка е 4 байта, така че записа действително ще изглежда така: «: 00000001FF». Цялата линия (този в средата, а не в края на файла), трябва да бъдат отстранени.

Възможно ли е да се прекъсне зареждането на ОС да се използва?

Да, това е достатъчно, за да каже на процесора да се използва вектор прекъсване се намира в района на товарача вместо в зоните на употреба. За да направите това някъде в началото на кода на буутлоудъра (да се използва за прекъсване), ще трябва да добавите линии като тези:

След това по време на прекъсване на програмата щанда ще бъде настроен на подходящо място според таблицата с прекъсване на товарача. За нормална работа, по-горе последователност на код трябва да бъде компилиран с оптимизации, също трябва ръчно да се гарантира, че в резултат на събранието в писмени инструкции за изпълнение за 4 цикъл на машината.

Какво трябва да се зарежда, на първо място - товарач или прилагането?

Почти винаги, най-добре е да инсталирате BOOTRST Fyuz за зареждане стартира първият след рестарта на микроконтролер. Когато зареждане започва след първото рестартиране ще perezalit програма независимо от това дали кодът за кандидатстване е повреден или напълно отсъства.

За най-добри резултати, трябва да Downloaders, че те са малки, надеждни и рядко се променя от програмата. От деня, в който изпратите вашето устройство в експлоатация, което наистина няма да искате да го промените на зареждането на системата. Заявление, а напротив изисква по-голяма свобода по отношение на обновяването. Ако грешката се появява заявление, което води до повреда или катастрофа, или по време на флаш попълнете има прекъсване на тока здрав зареждане на ОС, която ще бъде пусната първо да може да се коригира ситуацията без проблеми.

Ако заявлението е пуснат след нулиране на устройство, за да се реши проблема, можете да използвате външен програмист. Но ако устройството не осигурява интерфейс за свързване на устройството за програмиране, устройството може да се наложи да се изхвърлят или спойка.

Как мога да разбера, когато товарача да тече заявление?

Има много възможности. Ако устройството има бутон или друго входно механизъм, можете да изпратите на съответния сигнал на пипане. Тогава зареждането на ОС обикновено започва прилагането веднага. И ако бутонът не е натиснат по време на процеса по възстановяване, след което товарача продължава изпълнение. Това е един пример за това как работи товарач STK500 чип.

Друг често срещан решение за зареждане е да се провери външна комуникация връзката към специалния символ по време на стартиране. Отново, товарача обикновено започва прилагането веднага, а продължава да се изпълнява само след проверка външен канал за комуникация и получаване на отговор от очакваното или за търсене на данни. Един пример за този подход е Atmel Butterfly.
В този случай нито едно от тези решения не са подходящи. Нашата устройство има никакви бутони, и ние бихме искали приложението да работи при нормални условия много бързо. само външни комуникации канал е USB, за съжаление, USB устройство изисква известно време (по отношение на процесора), преди да е възможно да се обменя данни с домакина.
Така че това е, което ние направихме: Ако приемем, че AVR има EEPROM, можете да го съхранявате в стойността на байт, който показва кога товарача трябва да продължи да работи и кога да стартирате приложението. Това двустепенен подход. На първо място, някъде в началото на кода на буутлоудъра, което трябва да се добави нещо като това:

След това, някъде в жалбата, в частта от кода, обработването на които вече се знае със сигурност, че приложението да работи правилно, добавя следното:

Аз също предлагат начин да се принуди зареждане на заявлението. Ти просто трябва да се почисти байта APP_RUN и да се избегне по-късно преброяване. Ние го реализира в нашата молба, и това е направено с помощта на командите, изпратени чрез USB към програмата работи на компютъра.

Един недостатък на този подход е, че EEPROM Atmel по повечето контролери има ресурс от 100 000 запис / изтриване цикли. Тъй като този подход води до два цикъла на изтриване / запис по време на всяко пускане в експлоатация, а след това можете да получите ресурси ограничен устройството 50,000 цикъла рестартиране. Реших, че за нашата молба, че продължителността на живота на устройството е средно 13,7 години при 10 рестартирания ден. Това ограничение може да се подобри, ако износване EEPROM клетки разпределени.

Както товарач стартира прилагането?

Но това не е всичко. Когато просто стартирате приложението по този начин на микроконтролера се връща към първоначалното си състояние, тъй като е след рестартиране. регистрират стойности не са изчистени, и в периферията не е изключен. Има две общи начини да се справят с това. Първият подход е да се задейства умишлено нулиране с помощта на таймера за пазител. Това ще доведе до нулиране на микроконтролер в първоначалното му състояние и да се започне зареждане на ОС (ако имате малко BOOTRST). Ако условията, които са причинили на зареждането на ОС вече не е (например, не задръжте натиснат бутона по-дълго), товарача трябва да започне прилагането веднага. Трябва да започнете изпълнението на молба възможно най-бързо, докато промените са засегнали възможно най-малко от средствата от микроконтролер. Ето един пример:

След това програмата трябва изрично да конфигурирате всички средства, които тя възнамерява да използва.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!