SYNAPSE

Kivételkezelés

Kivételkezelés

Kivételes helyzetet általában külsõ hardver megszakítás vagy futási hiba idézhet elõ, de egy megszakító utasítással is kiváltható. Mivel a megszakítások a megfelelõ handler törzsének végrehajtását eredményezik, ezért a handlereket használhatjuk kivételkezelésre.

A kivételkezelés történhet a task szintjén. Egy ilyen kivételkezelõ mechanizmus alapvetõen esemény(eke)t vagy a taskban elõidézett hibá(ka)t kezeli le.

A kivételkezelés történhet még a rendszer szintjén. Ekkor a kivétel (mint pl. egy észlelt hiba esetén elküldött aszinkron megszakítás) a rendszer egy másik taskjától ered.

A Synapse egy magas szintû nyelv eszközeivel, egységesen támogatja a kivételkezelést, akár hardver, akár szoftver eredetû.

A következõ program a nullával való osztáskor fellépõ futási hiba kezelését mutatja be:

# div0.int
task DivisionByZero in "div0.syn"


# div0.syn
handler DivByZero hardware:0
enable hardware # allow further interrupts
put "Division by zero\n"
interrupt DivisionByZero.Exception

handler Exception
# action after a division by zero ...

entry
# on entry, the interrupt hardware vector 0 is installed
loop
enable wait Exception

Idõkorlátozás

Valós idejû mûködés során szükség lehet arra, hogy a rendszer bizonyos esetekben megfelelõen rövid idõn belül reagálhasson különbözõ eseményekre. A Synapse két esetben biztosít lehetõséget a szükséges idõkorlátok biztosítására. Egy task várakoztatásakor és egy ciklus végrehajtásakor.

# One of these software handlers Current and Last must be
# interrupted within the next 20s (2000 * 10 ms/real-time unit)
enable wait Current, Last within 2000


# Exit from the loop must be within the next 10s
# (1000 * 10 ms/real-time unit)
var aByte:byte

loop within 1000
get aByte
exit when aByte = 0
put aByte

Ha a megadott idõkorlátot túllépi a rendszer, futási hiba keletkezik.