Was passiert wenn keine ISR existiert?

Moderator Persönliche Seite #3967257
Lesenswert?

.. schrieb:
> Wie es wirklich ist, kannst du im Datenblatt bzw. den AN zu deinem µC
> nachlesen.

Ist eher eine Software-Frage.  Die avr-libc (die zusammen mit AVR-GCC
meist benutzt wird), initialisiert die Vektortabelle mit einem Eintrag,
dessen Funktion auf Adresse 0 springt, also ähnlich wirkt wie Reset.

Die Idee dahinter ist, dass es immer ein Programmierfehler ist, und
man ihn so am ehesten bemerkt (anders als eine ISR, die nur aus RETI
besteht).
Persönliche Seite #3967258
Lesenswert?

Markus Steiner schrieb:
> Und wie verhält sich das dann mit dem Interrupt-Flag, wird dieses auch
> ohne ISR zurückgesetzt (also ich meine wenn der Interrupt enabled ist,
> aber keine ISR vorhanden ist)

Speziell für AVR:
Wenn die Routine nur aus einem RETI in der Sprungtabelle besteht ists 
dann halt auch deine ganze Serviceroutine.
Der RETI aktiviert auch wieder das INT-Flag im Statusregister des Core.
Wenn du allerdings so IRQ-Fehler auffangen willst machste dir deine 
eigene Default-ServiceRoutine die z.b. über RS232 meckert.
Technisch gesehen ist dem µC der Begriff ISR unbekannt, er lädt einfach 
nur den Befehl aus der Jump-Tabelle vor dem Eintriff und löscht das 
I-Flag.
#3967268
Lesenswert?

Markus Steiner schrieb:
> Und wie verhält sich das dann mit dem Interrupt-Flag, wird dieses
> auch
> ohne ISR zurückgesetzt (also ich meine wenn der Interrupt enabled ist,
> aber keine ISR vorhanden ist)

Es ist immer eine ISR vorhanden, zumindest beim GCC.
1
00000000 <__vectors>:
2
       0:  0c 94 3e 00   jmp  0x7c  ; 0x7c <__ctors_end>
3
       4:  0c 94 5b 00   jmp  0xb6  ; 0xb6 <__bad_interrupt>
4
       8:  0c 94 5b 00   jmp  0xb6  ; 0xb6 <__bad_interrupt>
5
       c:  0c 94 5b 00   jmp  0xb6  ; 0xb6 <__bad_interrupt>
6
      10:  0c 94 5b 00   jmp  0xb6  ; 0xb6 <__bad_interrupt>
7
      14:  0c 94 c8 03   jmp  0x790  ; 0x790 <__vector_5>
8
...

Da, wo "__bad_interrupt" steht, geht es in die Bad-Interrupt-ISR
1
000000b6 <__bad_interrupt>:
2
      b6:  0c 94 00 00   jmp  0  ; 0x0 <__vectors>

Und da steht dann, dass er wieder von vorne anfangen soll. Das ist aber 
kein Reset. Sondern ein Neustart.

mfg.
#3967280
Lesenswert?

Markus Steiner schrieb:
> Thomas Eckmann schrieb:
>> Und da steht dann, dass er wieder von vorne anfangen soll. Das ist aber
>> kein Reset. Sondern ein Neustart.
>
> Ist der unterschied zwischen Reset und Neustart, dass beim Neustart der
> RAM nicht gelöscht wird?

Beim Reset werden alle Register des Controllers mit Default-Werten 
initialisiert. Beim Neustart passiert da gar nichts. Das bedeutet, dass 
z.B. der Stackpointer nicht auf Anfang steht. Das muss dann per Software 
unbedingt initialisiert werden. Gleiches gilt noch mindstens für das 
SREG.

RAM ist Sache des Programmieres.Oder des Compilers.

mfg.
Gast #3967286
Lesenswert?

Thomas Eckmann schrieb:
> Beim Reset werden alle Register des Controllers mit Default-Werten
> initialisiert. Beim Neustart passiert da gar nichts. Das bedeutet, dass
> z.B. der Stackpointer nicht auf Anfang steht. Das muss dann per Software
> unbedingt initialisiert werden. Gleiches gilt noch mindstens für das
> SREG.

Genau das meinte ich doch, die Register beispielsweise sind doch im RAM, 
oder etwa nicht?
#3967288
Lesenswert?

Markus Steiner schrieb:
> Thomas Eckmann schrieb:
>> Beim Reset werden alle Register des Controllers mit Default-Werten
>> initialisiert. Beim Neustart passiert da gar nichts. Das bedeutet, dass
>> z.B. der Stackpointer nicht auf Anfang steht. Das muss dann per Software
>> unbedingt initialisiert werden. Gleiches gilt noch mindstens für das
>> SREG.
>
> Genau das meinte ich doch, die Register beispielsweise sind doch im RAM,
> oder etwa nicht?

Ja. Von der Adressierung her liegen sie unterhalb des RAM und technisch 
ist das auch RAM. Aber das sind eben die Special Function Register, die 
einen definierten Zustand haben müssen. Schliesslich wird damit die 
Peripherie eingestellt.

Unter RAM versteht man gemeinhin den Arbeitsspeicher. Da ist es 
vollkommen egal, was beim Start drinsteht.

mfg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren