vyvolání přerušení za běhu přerušení

Zdravím,

chtěl jsem se zeptat na jednu věc. Co se stane, když v nějakém přerušení povolím přerušení sei(); a podprogram toho přerušení bude trvat dostatečně dlouho, aby mezitím přišlo znova to samé přerušení. Je to možné? Přeruší se přerušení tím samým vektorem a začne se provádět znova a po jeho dokončení se dokončí předcházející (to samé jen dříve vyvolané) přerušení?

pro lepší pochopení: Mám podprogram přerušení, který se vyvolává každých 300ms. Většinou provede jen několik příkazů a končí. Jednou za minutu však čte teplotu z teplotních čidel, to ale drvá dlouho (cca 750ms dejme tomu). Řekněme že přišla nová minuta a podprogram (mimo jiné úkoly které provede před čtením teploty) začne číst teplotu. No jo ale po 300ms se vyvolává přerušení znova (to je pro mě žádoucí), provede ony krátké příkazy, teplotu znovu už nečte, protože nebude splněna podmínka. Vnořený podprogram skončí a program se vrátí ke čtení teploty. Až dokončí čtení skončí i první podprogram.

Je tato moje představa správná ? Díky !

Řek bych že jo. Budeš to muset udělat reentrantní pokud jsou tam věci co by kolidovali…

Takovému postupu je lepší se vyhnout.
Volat v přerušení proceduru která trvá 750 ms je silně proti pravidlu, že přerušení má být co nejkratší a nemají se v něm volat žádné funkce.

V přerušení jenom nastav nějaký příznak a čtení teplot dělej v hlavním programu.
Pak nebudeš potřebovat vnořené přerušení.

asi to tak udělám no, už jsem o tom přemýšlel

No neviem 750ms , netrva citanie teploty ale prevod… Budes to mmusiet premysliet urcite sa da poriesit jedbotlive procesy aby to nekolidovalo.

Asi by to šlo pomocí inter. časovače:

  • iniciovat čtení a nastavit časovač, aby vyvolal inter. za 750ms a nastavit vektor inter. na funkci přečtení teploty, ukončit inter.
    ve funkci spuštěné časovačem:
  • přečíst teplotu a zrušit vektor na funkci a stopnout časovač.

Už jsem to vyřešil přes merker díky (nastavení flagu a následné zpracování mimo přerušení) :slight_smile: a ano 750 ms trvá převod.