Close

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

#11166
Vojtěch Vosáhlo
Účastník

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