Odpověď na: aktualizování firmwaru přes uart
Úvodní stránka › Fórum › Vaše projekty › Arduino › aktualizování firmwaru přes uart › Odpověď na: aktualizování firmwaru přes uart
Jen pár vysvětlení. V kódu jste se ptal proč jsem použil toto:
for(int i = 0; i <= programator.available(); i++){
prichozi[i] = programator.read();
}
//vyhodnoti jestli jsme dostali OK odpoved
if(prichozi[0] == 0x14 && prichozi[1] == 0x10){
return 1;
}else return 0;
A důvod je jednoduchý, bylo to jediné co mi 100% fungovalo. Pokud vám funguje metoda s if, nechte jí, to je určitě lepší ale pro mě nefungovala a nebo jsem ji měl možná špatně zapsanou.
Tyto smyčky:
while (!programator.available()) {
;
}
jsou problém a to už u mě protože program se v nich může zaseknout a jet do nekonečna. Zkuste implementovat kolik pokusů má na to aby získala data, pokud půjde přes limit, vyskočíme z ní. Mohlo by to vypadat třeba takto:
int maxPokusy = 5000;
int pokus = 0;
while (!programator.available() && pokus < maxPokusy) {
pokus++;
}
pokus = 0;
Na toto:
//ZAPIS DAT
programator.write(0x46);//-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-nevim jak ste na to prisel
jsem přišel ze zmíněné stránky, z vlastního odposlechu arduina a z datasheetu. 0x46 převedeno na charakter je F, to znamená že se uploaduje do Flash paměti. Je možnost použít E kdyby jste něco uploadoval do Eeprom.
Jinak žádnou do oka bijící chybu nevidím. Zkoušel jste už program nebo je to pořád „teoretická“ verze?
Vojta