Odeslat nové téma Odpovědět na téma  [ Příspěvků: 75 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5
Autor Zpráva
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: čtv 23.10.2014 23:33 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Sláva.
Ještě to shrnu.

Typy resetu:
Power On reset - v R2 je hodnota 5 dec, 101 binárně což odpovídá nastavení BORF a PORF v MCUSR
Watchdog reset - v R2 je hodnota 8 dec, 1000 binárně což odpovídá nastavení WDRF v MCUSR
External reset - nelze otestovat protože se spouští sekce bootloaderu která nahrává program a pak následuje Watchdog reset takže místo očekávané hodnoty 2 je tam 8
Brown out reset - netestoval jsem ale mělo by tam být 4 dec, 100 binárně což odpovídá nastavení BORF v MCUSR

Toto nefunguje na standardní vezri optibootu! Je třeba stáhnout novou verzi z google code.

Přečtení registru R2
Kód:
// toto je globální proměnná, ve které bude stav po resetu
uint8_t MyRstFlags __attribute__ ((section(".noinit")));

// deklarace vlastní funkce pro umístění do kódové sekce .init0
void SaveResetFlags(void) __attribute__ ((naked))
                          __attribute__ ((section (".init0")));

// tělo funkce
void SaveResetFlags(void)
{
  // uložení stavu resetu z R2
  // do vlastní globální proměnné MyRstFlags
  __asm__ __volatile__ ("mov %0, r2\n" : "=r" (MyRstFlags) :);
}

// zbytek budou tvoje další funkce a klasické funkce
// setup() a loop(), ve kterých budeš číst stav po resetu
// z globální proměnné MyRstFlags.



Funkce SaveResetFlags se v programu nevolá.


D.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 7:46 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
Datel píše:
Toto nefunguje na standardní vezri optibootu! Je třeba stáhnout novou verzi z google code.

Nemáš tady překlep ?
nemá to být takto:

toto nefunguje se standardní verzí bootloaderu. Je třeba nahradit optibootem z google .


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 8:27 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Bootloader, který se dodává s vývojovým prostředím Arduino to má takto
Kód:
  if (!(ch & _BV(EXTRF))) appStart();

takže tam nelze v aplikaci přečíst, co způsobilo reset.

To je v bootloaderu Optiboot který je na google code.
Ve verzi 5.0 je to
Kód:
  if (!(ch & _BV(EXTRF))) appStart(ch);


a ve verzi vývojové
Kód:
 
* modified Adaboot no-wait mod.
* Pass the reset reason to app. Also, it appears that an Uno poweron
* can leave multiple reset flags set; we only want the bootloader to
* run on an 'external reset only' status
if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF)))
      appStart(ch);


Možná to mají i jiné verze bootloaderu ale ty jsem nezkoušel.

D.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 8:35 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
Ještě upozorním, že standardní bootloader po WDT vytuhne, tak že WDT se standartem nelze použít.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 8:57 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Vytuhne jen ten NE optiboot ze standardní verze.

D.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 10:11 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
Datel píše:
Vytuhne jen ten NE optiboot ze standardní verze.

D.


ano.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 10:37 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Divím se, že s tím ještě někdo nic neudělal.
Bylo by zajímavé zjistit, proč to zatuhne.

D.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 14:28 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Datel píše:
Divím se, že s tím ještě někdo nic neudělal.

Možná, že v novějších verzích instalace vývojového prostředí je to už opraveno i ve standardním bootloaderu.

Datel píše:
Bylo by zajímavé zjistit, proč to zatuhne.

Myslím, že je to zmíněno v tom článku co jsem na něj odkazoval. Původní bootloader asi ve starších verzích nenuluje nastavení WDT a tak po provedení WDT vynuceném z aplikace sice dojde k resetu, ale pak to zůstane viset v nekonečné smyčce resetů při následném provádění bootloaderu. Může se to jevit jako vytuhnutí programu, ale ve skutečnosti se to pak neustále resetuje a z bootloaderu se to už nikdy nedostane do programu dokud se nevypne napájení.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 14:34 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Pokud si dobře vzpomínám tak pak ani reset nepomohl a musel se znovu naloudovat kód.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 15:02 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Datel píše:
Pokud si dobře vzpomínám tak pak ani reset nepomohl a musel se znovu naloudovat kód.

Jo je možné, že se to neopraví ani vypnutím napájení, ale je to zřejmě stejná chyba co jsem zmínil tj, že se to na začátku starého bootloaderu prostě nenuluje.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 15:02 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Citace:
Původní bootloader asi ve starších verzích nenuluje nastavení WDT a tak po provedení WDT vynuceném z aplikace sice dojde k resetu, ale pak to zůstane viset v nekonečné smyčce resetů při následném provádění bootloaderu. Může se to jevit jako vytuhnutí programu, ale ve skutečnosti se to pak neustále resetuje a z bootloaderu se to už nikdy nedostane do programu dokud se nevypne napájení.


To se teď dělá tady

Kód:
void watchdogConfig(uint8_t x) {
  WDTCSR = _BV(WDCE) | _BV(WDE);
  WDTCSR = x;
}


x je rovno 0.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 15:07 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Ano v bootloaderu optiboot se na začátku appStart volá watchdogConfig(WATCHDOG_OFF), ale ve starších verzích původního bootloaderu to nebylo.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 15:09 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Nebylo a myslím, že to tam není ani dneska. Teda v té verzi ne optiboot. Ale to už jsem psal výše.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 15:13 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Datel píše:
Nebylo a myslím, že to tam není ani dneska. Teda v té verzi ne optiboot. Ale to už jsem psal výše.

Zřejmě máš starou verzi. Já jsem si zaktualizoval vývojové prostředí pro Arduino někdy v lednu 2014 a tam už je to i v původním bootloaderu opravené takto:

Kód:
...

ch = MCUSR;
MCUSR = 0;

WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;

if (! (ch &  _BV(EXTRF))) app_start();

...


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: pát 24.10.2014 15:18 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Aha, to jsem přehlídnul.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 75 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 8 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  

 

  Powered by phpBB® Forum Software © phpBB Group  Český překlad – phpBB.cz 

 

NAVRCHOLU.cz