Hallo Sternthaler,
diese Geschichte mit den Mehr-als-ein-Byte-Werten liegt mir immer am Herzen (eigentlich nicht im Magen *gggg*). ABER, soweit ich weiß, wird der Interrupt bei den ATMELControllern verboten, sobald eine ISR angeworfen wird - und erst wieder nach deren RETI erlaubt. Präziser: ich habe softwaremässig keine nested Interrupts installiert (hoffe ich - wenn meine C-Kenntnisse in diesem Punkt stimmen). Bei mir läuft die Regelroutine nach Aufruf aus einer ISR. Bitte deswegen nicht schlagen - ich habe mich ausgiebig um die schnelle Abarbeitung gekümmert, damit ich in den Pausen meiner schnellsten Interrupt-Frequenz mit der ganzen Arbeit sehr locker zurande komme - dass also auch noch andere Aufrufe erfolgen können und kein Interrupt-Stau auftritt.
Also sollte eine neue ISR doch erst gestartet werden, wenn sowohl die rgl_mo_ij als auch die ISR ADC_vect fertig sind. Damit sollten meine je 2-bytigen Zeitvariablen ungestört leben können. Oder habe ich da etwas falsch verstanden? Hoffentlich nicht, sonst - hmmmm, dann müsste ich den ganzen Codeaufbau umwerfen.Code:/* ============================================================================== */ /* === Nicht unterbrechbare ISR für ADC3 auf Pin 26/PC3/mega168 =============== */ ISR(ADC_vect) // _VECTOR(21) { - - - - if (adc3_cnt == 4) rgl_mo_12(); // Aufruf Regeln für mo_12 if (adc3_cnt == 8) rgl_mo_34(); // Aufruf Regeln für mo_34 - - - - } /* ============================================================================== */
PS: Hoffentlich hat Dir der Osterhase "auf Arbeit" kein allzu schweres (Arbeits-) Ei gelegt.







Zitieren

Lesezeichen