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  Další
Autor Zpráva
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 13:13 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
problem musi byt jinde, protoze toto funguje

if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF)))
appStart(ch);


kdyz startuje aplikace z HW resetu led 2x blikne, po WD ne.


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

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
ta konstrukce by měla udělat jen to, že po resetu z watchdogu nebo brown-out nebo power-on by to mělo jít rovnou na start aplikace. Jinak se spouští load programu.

_________________
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: stř 22.10.2014 14:14 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
tak jsem zkusil zakomentovat mcusr=0, ale to bootloader nefunguje


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 14:38 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Protože to čeká na load kódu. Ten nepřichází a tak to resne watchdog v bootloaderu. A tak pořád dokola.

_________________
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: stř 22.10.2014 14:50 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
moc nerozumím tomu co píšeš. WD není v defaultu aktivní ? a mcusr by mel byt 0 ?

no a nemáš nějaký nápad jak to udělat ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 14:50 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Při tom zakomentování MCUSR = 0; na začátku funkce main v bootloaderu zkus dát jedno volání MCUSR = 0; do svého zdrojáku aplikace přímo na začátek funkce setup() s tím, že si stav před vynulováním nejprve uložíš do své globální proměnné takto:

Kód:
uint8_t MyRstFlags;

void setup()
{
  MyRstFlags = MCUSR;
  MCUSR = 0;
  ....

a kromě toho ještě v tom bootloaderu další volání MCUSR = 0; pod řádek s tím podmínečným voláním appStart takto:

Kód:
  ...
  ch = MCUSR;
//  MCUSR = 0;
  if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF)))
      appStart(ch);

  MCUSR = 0;

  ...

Po resetu z watchdogu nebo brown-out nebo power-on by to mělo jít rovnou na start aplikace a tím se načte do MyRstFlags stav MCUSR po tom konkrétním resetu. Jinak se MCUSR vynuluje a pak se spustí load programu.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 15:23 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
to nulovani dat pod podminku jsem take testnul a to nejde.
Nulovat MCUSR v hlavnim codu take nejde protoze ho tam nenahrajes. Prelozim bootloader flasnu pres ISP a tim koncim.

do appstart(ch) se predava to ch a to se urcite nejak musi precis


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 15:24 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
MCUSR se ale naplní tu _BV(WDRF) | _BV(BORF) | _BV(PORF) nebo se pletu? Nějak mi uniká přesný význam téhle části

if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF)))

podle mě to nejdřív vyhodnotí, zda je nastaven některý z bitů (WDFR nebo BORF nebo PORF) registru MCUSR a podle toho buď spustí aplikační kód nebo load kódu do paměti. A pak tyto bity nastaví na 1.

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: stř 22.10.2014 15:31 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
MCUSR je registr kde jednotlive bity urcuji typ restartu,

WDRF) | _BV(BORF) | _BV(PORF toto je jako maska kde se vyhodnocuji jednotlive bity

aspon teda doufam


WDRF to je ten co mne zajima 3 bit, pokud je zde 1 tak je to prizna WDT coz je 8, ale ja vzdy prectu 8 i po HW resetu.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 15:35 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
nemelo by byt to nulovani v rutine ktera udela restart kdyz app neni a zustane to vyset .
to odpovida i tomu ze to nemaka kdyz je nulovani za podminkou


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 15:43 
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:
MCUSR se ale naplní tu _BV(WDRF) | _BV(BORF) | _BV(PORF) nebo se pletu?

Ne. Podmínka if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF))) nic nenaplňuje. Je to pouze test zda proměná ch je nenulová a současně zda je nastaven některý z bitů WDRF, BORF nebo PORF a pokud ano tak se zavolá funke appStart.


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

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
podle mě není rozdíl v tom, jestli je to vynulování před nebo za podmínkou.

_________________
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: stř 22.10.2014 15:55 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 225
Bydliště: Plzeň, ČR
Drondys píše:
MCUSR se ale naplní tu _BV(WDRF) | _BV(BORF) | _BV(PORF) nebo se pletu?
Ne. Podmínka if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF))) nic nenaplňuje. Je to pouze test zda proměná ch je nenulová a současně zda je nastaven některý z bitů WDRF, BORF nebo PORF a pokud ano tak se zavolá funke appStart.


makro _BV() by ale přece ty bity mělo naplnit. proč by to tam jinak bylo?

_________________
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: stř 22.10.2014 15:57 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
jaroslav.falcon píše:
do appstart(ch) se predava to ch a to se urcite nejak musi precis

Problém je v tom, že v bootloader ve funkci appstart to nelze vložit do žádné proměnné přímo tvého programu jelikož ty pro bootloader nejsou přístupné a tak se to ukládá do registru R2. Jenže uchování hodnoty v registru R2 zřejmě není zaručeno do doby než se zavolá kód tvé aplikace. Takže v době kdy se zavolá kód tvé aplikace je zřejmě už hodnota registru R2 přepsaná.

Ještě mě napadá možnost zkusit zapsat v bootloaderu ve funkci appstart tu hodnotu na nějakou pevně definovanou adresu v EEPROM a tu pak načíst ve tvém programu.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 16:03 
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:
makro _BV() by ale přece ty bity mělo naplnit. proč by to tam jinak bylo?

Ne. Makro _BV() nenaplňuje MCUSR nýbrž pouze pro test vůči proměnné ch v těle podmínky IF vrací hodnotu 1 bitově posunutou o počet bitů odpovídající v parametru makra předané hodnotě viz níže je deklarace toho makra.

Kód:
#define _BV(bit) (1 << (bit))


Nahoru
 Profil Soukromé album  
 
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  Další

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 9 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