| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| 18f4580 bootloader http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=3335 |
Страница 1 от 1 |
| Автор: | gdh [ Вто Ное 28, 2006 2:00 am ] | ||||||||||||||||||
| Заглавие: | 18f4580 bootloader | ||||||||||||||||||
Привет на всички, Опитвам се да подкарам примерния лоадер на ЦЦС-то. Изглежда всичко си работи правилно само дето заредената програма не ще да тръгне. зареждам я със SIOW.exe и във терминала се виждат потвържденията на ПИК-а при четенето. След това ресетвам и пак си се изпълнява application() Малко насляпо го преписвам тоя пример. Във application ли трябва да направя безусловен преход към адреса на новата програма или тя би трябвало да се запише върху нея направо? Или някакъв фюз съм пропуснал. Или пък това: ...also, any buffer on the PC UART must be turned off, or to its lowest setting, otherwise it will miss data. ето и кода Лоадера:
Програмата:
|
|||||||||||||||||||
| Автор: | Predator_MF [ Вто Ное 28, 2006 3:26 am ] | |||||||||
| Заглавие: | ||||||||||
Последно кое от двете ти е проблема - че тръгва application или че нещо не тръгва ? Bootloader-а е направен така, че след качването на целия код, процесора се рестартира, след което почва да се изпълнява това, което си качил. |
||||||||||
| Автор: | gdh [ Вто Ное 28, 2006 11:15 am ] | |||||||||
| Заглавие: | ||||||||||
Проблема е че след ресет отново зацикля безкрайния цикъл на application() вместо да тръгне новата програма. Странното е че ПИК-а не се ресетва сам след записа. В терминала се получава поредица от 11 06 13 11 .... като 06-иците отговарят на броя на редовете в hex-а на програмата. Тъй че си мисля че записа стига до края. Къде ли бъркам?[/quote] |
||||||||||
| Автор: | Predator_MF [ Вто Ное 28, 2006 2:21 pm ] |
| Заглавие: | |
Ами нали това е идеята, поставяш си кода в application() (вместо в main() ) и след като се зареди програмата зацикля там |
|
| Автор: | gdh [ Вто Ное 28, 2006 3:32 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Сигурно аз не се изразявам правилно ... Става въпрос за ето този цикъл
Какъв е смисъла да зареждам програми с лоадера ако всеки път ще се изпълнява безкрайния цикъл на application() ? |
|||||||||||||||||||
| Автор: | Predator_MF [ Вто Ное 28, 2006 4:29 pm ] |
| Заглавие: | |
Идеята е да поставиш кода, който ще се изпълнява в Application()! Реализацията на този bootloader (специално за този на CCS говоря) е да стои "над" твоята програма, при ресет и инициализация на процесора се проверява наличието на джъмпер или окъсен пин (нямам спомен кой точно), при което вместо да се изпълни твоя код, процесора влиза в режим "bootloader". В този режим качваш HEX файла във FLASH-а, като този HEX се презаписва върху стария ти код, единственото нещо което не би трябвало да се презапише е самия bootloader. Ако HEX-а, който качваш в процесора няма bootloader, след презаписване на процесора веднъж, няма да можеш повече да влезеш в режим bootloader, а идеята е да можеш да ъпдейтваш по всяко време...затова поставяш твой код, или самата ти програма във функцията application()....а това "while(True)" е поставено там просто за да не се рестартира процесора постоянно ако качиш само празен bootloader. Махаш while(TRUE) и слагаш твоята програма там. |
|
| Автор: | gdh [ Вто Ное 28, 2006 5:00 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Благодаря за търпението и помоща! От тези примери не успявам да схвана програмната реализация на лоадера. Като концепция ми е ясно. С всичките loader.c, ex_bootloader.c, ex_bootload.c, bootloader.c, bootloader.h единствено се обърквам повече.
Ако програмата ми е наред в такъв случай би трябвало мейна и извикването на bootloader-a да бъде презаписано от новия мейн който да прави това
Това обаче не се случва. |
|||||||||||||||||||
| Автор: | Predator_MF [ Вто Ное 28, 2006 6:30 pm ] | |||||||||
| Заглавие: | ||||||||||
Main() вероятно не се презаписва защото bootloader-а не пише върху себе си....в такъв случай каквото и да сложиш в main() ще се изпълнява main() от bootloader-а, а не това което ти си написал и си вкарал чрез bootloader-а. Затова, просто слагаш кода си в application():
|
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|