INT-ek kezelése (mi van ha INT alatt beesik a következő?)
Nem. Csak nem varja meg, hogy a 1-1 karakter el ment e, hanem pufferbe rakjam, es onnan kuldozgeti szepen az AVR.
9600 eseten a bufferelten adsz 10 byte-t, akkor a főprogreamod 10 ms-ig all.
Ha bufferelten, akkor a bufferbe bekerul, es kuldodik, mig a foprogramod mar tuvabb szalad. gyakorlatilag paralell megy a kuldes es a programfutasod... Nyertel ~7 msec-t!
9600 eseten a bufferelten adsz 10 byte-t, akkor a főprogreamod 10 ms-ig all.
Ha bufferelten, akkor a bufferbe bekerul, es kuldodik, mig a foprogramod mar tuvabb szalad. gyakorlatilag paralell megy a kuldes es a programfutasod... Nyertel ~7 msec-t!
Sziasztok,Robert írta:lefut a megszakitas, kiugrik a foprogramba, majd azonnal a következő megszakításba...
Ja es a főprogramod nem fut.
Amúgy 11 msec a megszakításban???? Azért az durva tervezési hiba...
Pont ilyesmire keresem a választ. Több megszakítást még nem kezeltem egyszerre, ezért nem tudom, hogy is fog működni a dolog.
Szóval adott a következő szituáció
Aktiválva vannak a következő megszakítások:
urxc
urxc1
timer1
Int0
Minden egyes megszakítás rutinja úgy kezdődik, hogy "Disable Interrupts". Ezt azért csinálom így, hogy a megszakítást ne szakítsa meg egy másik megszakítás. Ezután elvégzi a dolgát a rutin, majd miután visszatérne, Enable Interrupts.
Szóval a kérdés az, hogy mi történik akkor ha egy megszakítás alatt befut mondjuk még pluszba a maradék három. Miután visszatérek az elsőből, fogja érzékelni a progi, hogy ott van még másik 3 lekezelendő megszakítás? Ha igen, hogy dönti el, hogy melyikkel kezdjen?
Van jó megoldás több megszakítás helyes kezelésére?
Aki ezt megkérdezi, annak nem lehet! Sőt tilos!
Asemblerben (Gépi kódban) programozva megoldható lenne, de ahhoz tudni kellene programozni!
A lényeg, ha nem szabályosan akarsz kilépni neked kel kezelni a Vermet!
Különben összeomlik a rendszer!

Ui.: Ez a Megszakítás kezelése topik! A Szubrutin már másik téma lenne!

Asemblerben (Gépi kódban) programozva megoldható lenne, de ahhoz tudni kellene programozni!
A lényeg, ha nem szabályosan akarsz kilépni neked kel kezelni a Vermet!
Különben összeomlik a rendszer!
Ui.: Ez a Megszakítás kezelése topik! A Szubrutin már másik téma lenne!
Szubrutin a főprogramban került meghívásra?
Egyszerű: az elején add ki a disable interrupts utasítást, majd a legvégén (end sub előtt) az enable interrupts-ot. Így ami a tiltás alatt esett be INT kérés, az az engedélyezés _után_ kerül végrehajtásra. De ha többször esik be INT, akkor is csak 1x hajtódik végre.
Főszabály:
Megszakítási alprogramot másik INT-l nem szakíthatsz meg (na jó van kiskapu, de az már necces!)
ha mégis ez szükséges akkor:
-> xMega processzor
-> ASM programozás
-> bascom virtuóznak kell lenni...
Ált. nem kell ilyen szoros időzítés...
Egyszerű: az elején add ki a disable interrupts utasítást, majd a legvégén (end sub előtt) az enable interrupts-ot. Így ami a tiltás alatt esett be INT kérés, az az engedélyezés _után_ kerül végrehajtásra. De ha többször esik be INT, akkor is csak 1x hajtódik végre.
Főszabály:
Megszakítási alprogramot másik INT-l nem szakíthatsz meg (na jó van kiskapu, de az már necces!)
ha mégis ez szükséges akkor:
-> xMega processzor
-> ASM programozás
-> bascom virtuóznak kell lenni...
Ált. nem kell ilyen szoros időzítés...
Igen, a subrutin a főprograból kerül meghívásra.
A disable-enable int-es megoldás már nekem is eszembe jutott, de az adott programban ez a megoldás csak amolyan áthidaló vagy szükségmegoldás lenne, ezért szerettem volna vmi jobbat.
Mindegy, akkor marad ez, amit javasoltál vagy átírom a programot, úgy, hogy ne legyen benne subrutin, és máris megoldódik a probléma.
Üdv,
A disable-enable int-es megoldás már nekem is eszembe jutott, de az adott programban ez a megoldás csak amolyan áthidaló vagy szükségmegoldás lenne, ezért szerettem volna vmi jobbat.
Mindegy, akkor marad ez, amit javasoltál vagy átírom a programot, úgy, hogy ne legyen benne subrutin, és máris megoldódik a probléma.
Üdv,
