AVR Default-Interrupt = Endlosschleife.

Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

AVR Default-Interrupt = Endlosschleife.

Beitrag von Mathias »

Wieso laufen die Interrupt-Proceduren, welche man nicht zugeweisen hat in einer Endlosschleife ?
Ausschnitt aus avrcommon.inc

Code: Alles auswählen

    procedure Default_IRQ_handler; public name '_Default_IRQ_handler';noreturn;
      begin
        while true do
          ;
      end


Das der AVR hängen bleibt, sieht man gut, wen man einen Timer-Interrupt mittels

Code: Alles auswählen

  TIMSK := TIMSK or (1 shl OCIE0A); // Timer0 soll Interrupt auslösen.
 
aktiviert.

Und die folgende Procedure fehlt:

Code: Alles auswählen

  procedure Timer0_Interrupt; public Name 'TIMER0_COMPA_ISR'; interrupt;
  begin
.....
  end;   
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: AVR Default-Interrupt = Endlosschleife.

Beitrag von mse »

Mathias hat geschrieben:Wieso laufen die Interrupt-Proceduren, welche man nicht zugeweisen hat in einer Endlosschleife ?

Ausgelöste IRQ's ohne Behandlungsroutine sind Systemfehler. Die Endlosschleife führt dazu, dass der uP mittels Watchdog rückgesetzt wird.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: AVR Default-Interrupt = Endlosschleife.

Beitrag von Mathias »

Wird dies gemacht, das man schneller erkennt, wen man den String bei "Name" falsch schreibt ?
Oder einen nutzlosen Interrupt einschaltet. ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: AVR Default-Interrupt = Endlosschleife.

Beitrag von mse »

Das wird gemacht, damit ein System bei einem Systemfehler durch den Watchdog rückgesetzt wird. Ein nicht behandelter IRQ ist ein Systemfehler, das darf nicht vorkommen. Zudem hat man beim debuggen die Möglichkeit mit 'Target'-'Interrupt' zu schauen welcher IRQ ausgelöst wurde.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: AVR Default-Interrupt = Endlosschleife.

Beitrag von Mathias »

Zudem hat man beim debuggen die Möglichkeit mit 'Target'-'Interrupt' zu schauen welcher IRQ ausgelöst wurde.
Dies macht Sinn, wie ich schon gesagt habe, ein Tippfehler beim String bei Name. So sieht man, das der IRQ ins leere gegangen ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten