AVR Default-Interrupt = Endlosschleife.

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

AVR Default-Interrupt = Endlosschleife.

Beitragvon Mathias » 29. Apr 2018, 16:57 AVR Default-Interrupt = Endlosschleife.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 29. Apr 2018, 19:20 Re: AVR Default-Interrupt = Endlosschleife.

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.
mse
 
Beiträge: 1948
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 29. Apr 2018, 19:34 Re: AVR Default-Interrupt = Endlosschleife.

Wird dies gemacht, das man schneller erkennt, wen man den String bei "Name" falsch schreibt ?
Oder einen nutzlosen Interrupt einschaltet. ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 30. Apr 2018, 07:37 Re: AVR Default-Interrupt = Endlosschleife.

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.
mse
 
Beiträge: 1948
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 30. Apr 2018, 15:55 Re: AVR Default-Interrupt = Endlosschleife.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried