Hallo Leute,
Ich studiere Physikalische Technik und habe bald eine Klausur über
Mikroprozessortechnik. Ich bin durch googlen auf diese Website hier
gefunden und hätte eine Frage. Ich habe hier eine Altklausur ohne
Lösungen aber der Professor hat uns manche Dinge nicht so gut erklärt.
Ich wollte Fragen ob mir jemand von euch sagen kann ob diese Antworten
von mir richtig sind und wenn nein was die Lösung wäre.
Mfg Alex
Da hättest Du lieber im Kurs aufpassen müssen, denn der Prof ist ein
Spaßvogel. "Polled interrupt", LOL - vielleicht wollte er diejenigen
trollen, die kein Englisch können. Das ist ein Oxymoron.
Ansonsten sind die meisten Antworten falsch oder unvollständig. Wenn
sich alles auf den LPC1769 bezieht, wären beispielsweise 4 Bytes
zwischen den 32-bittigen Interrupt Addressen.
Und welche "Anweisung" ein Compiler plaziert, ist ja auch eher ein
Witz.
Der Programmierer gibt Anweisungen an den Compiler, der Compiler gibt
binäre Daten raus. An der Interrupt Adresse im Flash, ROM oder RAM steht
jedenfalls die Adresse der Handler Funktion plus 1.
Alex schrieb:> Tut mir leid ich habe ein besseres Bild hochgeladen.
Nö, hast Du nicht. Ist es zu viel verlangt, die Antworten hier -
deutlich lesbar, gekennzeichnet durch die Antwort-Buchstaben mit Klammer
- hinzuschreiben?
So auf den ersten Blick wäre das Studium der Angabe von Adressen im MC
schon mal ein guter Ansatz.
Jim M. schrieb:> Da hättest Du lieber im Kurs aufpassen müssen, denn der Prof ist ein> Spaßvogel. "Polled interrupt", LOL - vielleicht wollte er diejenigen> trollen, die kein Englisch können. Das ist ein Oxymoron.>> Ansonsten sind die meisten Antworten falsch oder unvollständig. Wenn> sich alles auf den LPC1769 bezieht, wären beispielsweise 4 Bytes> zwischen den 32-bittigen Interrupt Addressen.>> Und welche "Anweisung" ein Compiler plaziert, ist ja auch eher ein> Witz.>> Der Programmierer gibt Anweisungen an den Compiler, der Compiler gibt> binäre Daten raus. An der Interrupt Adresse im Flash, ROM oder RAM steht> jedenfalls die Adresse der Handler Funktion plus 1.
Tut mir leid ich dachte das Bild sollte in Ordnung sein.
Danke für die Antwort, es ist so dass es eigentlich nur ein Nebenfach
ist und ich hatte davor weder mit C noch mit Mikroprozessoren etwas zu
tun. Wir haben in der Vorlesung nur Prinzipien behandelt und nicht
programmiert. Ein Praktikum war auch vorhanden, es waren allerdings nur
2 Termine und die Aufgaben waren vorgegeben ohne Erklärung warum man
etwas macht. Ausserdem war es ein anderer Mikrocontroller.
Ich habe ausserdem nochmal alles abgeschrieben und ein besseres Bild
gemacht.
Die Fragen aus dem Test, leider sind viele auf die Grafik bezogen:
a) Markieren Sie einen „polled interrupt“ und einen „vectored interrupt“
in der Tabelle.
b) Wie viele Bytes sind zwischen den einzelnen Interrupt Adressen?
c) Welche Art von Anweisung wird der Compiler an die Interrupt Adressen
platzieren?
d) Markieren Sie in der Tabelle oben die internen Interrupts.
e) Bei Programmen mit Interrupts finden Sie häufig global deklarierte
Variablen. Warum?
f) Weshalb müssen Sie in der Interruptroutine das Interruptflag löschen?
Jim M. schrieb:> Da hättest Du lieber im Kurs aufpassen müssen, denn der Prof ist ein> Spaßvogel. "Polled interrupt", LOL - vielleicht wollte er diejenigen> trollen, die kein Englisch können. Das ist ein Oxymoron
Das ist kein Oxymoron, sondern du hast keine Ahnung.
Beim Vectored Interrupt(z.B. AVR) springt das Programm auf einen diesem
Interrupt zugeordneten Vektor. Beim Polled Interrupt(z.B. PC) wird ein
IRQ ausgelöst und das Programm oder Betriebssystem muß abfragen(pollen),
welche Quelle den IRQ ausgelöst hat.
Alex V. schrieb:> Die Fragen aus dem Test,
Was genau hast Du an
Dieter F. schrieb:> die Antworten hier -> deutlich lesbar, gekennzeichnet durch die Antwort-Buchstaben mit Klammer> - hinzuschreiben?
nicht verstanden?
Dieter F. schrieb:> Alex V. schrieb:>> Die Fragen aus dem Test,>> Was genau hast Du an>> Dieter F. schrieb:>> die Antworten hier ->> deutlich lesbar, gekennzeichnet durch die Antwort-Buchstaben mit Klammer>> - hinzuschreiben?>> nicht verstanden?
Tut mir leid ich will eure Zeit hier nicht verschwenden, ich bin mir bei
meinen Antworten eh nicht sehr sicher deswegen dachte ich das es nicht
nötig ist sie mit hinzuschreiben.
a) Markieren Sie einen „polled interrupt“ und einen „vectored interrupt“
in der Tabelle.
-> In beigefügten Bild
b) Wie viele Bytes sind zwischen den einzelnen Interrupt Adressen?
-> 0x98 bis 0x9C vier Bits = 1/2 Byte??
c) Welche Art von Anweisung wird der Compiler an die Interrupt Adressen
platzieren?
-> Funktion, festlegen der Interrupt Service Routine.
d) Markieren Sie in der Tabelle oben die internen Interrupts.
-> Interrupttabelle im Bild, da hab ich leider keine Antwort.
e) Bei Programmen mit Interrupts finden Sie häufig global deklarierte
Variablen. Warum?
-> Die Variablen sind für das Main-Programm notwendig und werden nur
von
der ISR bearbeitet
f) Weshalb müssen Sie in der Interruptroutine das Interruptflag löschen?
-> Sonst kann das Programm nicht weiter laufen bzw. kein weiterer
Interrupt ausgelöst werden.
Alex V. schrieb:> a) Markieren Sie einen „polled interrupt“ und einen „vectored interrupt“> in der Tabelle.> -> In beigefügten Bild
Die mit einer Quelle sind vectored, die mit mehreren Quellen polled.
Sieht richtig aus.
> b) Wie viele Bytes sind zwischen den einzelnen Interrupt Adressen?> -> 0x98 bis 0x9C vier Bits = 1/2 Byte??
Unsinn.
Der Vektor geht von 0x98 - 0x9B. Und das sind 4 Bytes. Das passt dann
auch ins 4er Alignment für die Adrssierung. 0x9C ist der Anfang des
nächsten.
0x90..0x93
0x94..0x97
0x98..0x9B
0x9C..0x9F
> c) Welche Art von Anweisung wird der Compiler an die Interrupt Adressen> platzieren?> -> Funktion, festlegen der Interrupt Service Routine.
Einen Sprung in die ISR.
> d) Markieren Sie in der Tabelle oben die internen Interrupts.> -> Interrupttabelle im Bild, da hab ich leider keine Antwort.
Sollte klar sein.
> e) Bei Programmen mit Interrupts finden Sie häufig global deklarierte> Variablen. Warum?> -> Die Variablen sind für das Main-Programm notwendig und werden nur> von> der ISR bearbeitet>
ISRs sind keine Funktionen und haben daher keinen Return-Wert und können
nicht parametriert werden. Sie dienen dem Datenaustausch zw. der ISR und
dem Rest des Programms.
> f) Weshalb müssen Sie in der Interruptroutine das Interruptflag löschen?> -> Sonst kann das Programm nicht weiter laufen bzw. kein weiterer> Interrupt ausgelöst werden.
Weil dieser Controller es nicht selbst macht und der Interrupt nach
Verlassen der ISR wieder aufgerufen würde. Womit das ganze System dann
lahmgelegt wird. Ob andere IRQs trotzdem drankommen, ist von deren
Priorität abhängig. Wie das bei diesem Conroller ist, weiß ich nicht.
Ich kenne den nicht.