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.
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í.
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č.