Forum: Mikrocontroller und Digitale Elektronik Interrupt funktioniert nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von buell23 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich habe eine etwas blöde Frage.
Ich habe auf dem Nucleo Board stm32l476rg ein Interrupt implementiert, 
sprich EXTI auf PC12. Das hat auch gut funktioniert.
Jetzt habe ich das Programm 1:1 auf mein Board übertragen und muss 
feststellen, dass er im Debugger nicht mehr in den Interrupt springt.
Das funktioniert jetzt irgendwie überhaupt nicht, der Code ist aber der 
selbe. Der chip auf dem Board ist STM32L432RCI6.

Kann jemand helfen?

Vielen Dank

von Mike R. (thesealion)


Bewertung
0 lesenswert
nicht lesenswert
Hast du auch die StartUp Files angepasst?

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
buell23 schrieb:
> Jetzt habe ich das Programm 1:1 auf mein Board übertragen

Schlecht. Der neue Prozessor hat IMHO nur die Hälfte an RAM - damit ist 
der Stack nicht benutzbar, denn der wird Top-of-RAM initialisiert.

Du musst das Projekt neu übersetzen mit den korrekten Einstellung für 
den neuen Prozessor. Neben dem RAM könnte sich auch die Interrupt Vektor 
Tabelle geändert haben - siehe Startup Files.

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
Siehst Du den Pin Change im Debugger (EmbSys Registers)?


Viele Grüße, Stefan

von buell23 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich denke, das sollte passen.
Ich habe mit CUBEMX den Workordner erstellt und meinen Code Stück für 
Stück per copy and paste übertragen.
Den neuen Chip habe ich direkt im CUBEMX angewählt.

Ich weiss jetzt nicht, ob der Trigger wirklich kommt oder nicht.
Beim Nucleo Board habe ich direkt immer 3.3V an den Pin kurz angelegt 
und es funktionierte so.

Wenn ich im Debugger den Pin aktiviere, sprich high schalte ist das ja 
kein externer Trigger.

Wenn ich doch am Messpunkt ein 3,3V Signal drauf gebe, müsste es doch in 
den Interrupt springen.

von buell23 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
buell23 schrieb:
> Ich denke, das sollte passen.
> Ich habe mit CUBEMX den Workordner erstellt und meinen Code Stück für
> Stück per copy and paste übertragen.
> Den neuen Chip habe ich direkt im CUBEMX angewählt.
>
> Ich weiss jetzt nicht, ob der Trigger wirklich kommt oder nicht.
> Beim Nucleo Board habe ich direkt immer 3.3V an den Pin kurz angelegt
> und es funktionierte so.
>
> Wenn ich im Debugger den Pin aktiviere, sprich high schalte ist das ja
> kein externer Trigger.
>
> Wenn ich doch am Messpunkt ein 3,3V Signal drauf gebe, müsste es doch in
> den Interrupt springen.

Ich habe mich auf Mike R. damit bezogen, sorry.
Was meint ihr genau mit den startup files?

von Amateur (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>Was meint ihr genau mit den startup files?

Beim Kopieren ist das Hirn ausgeschaltet!

In dem Moment, in dem Du den Prozessor wechselstet, wechselst Du auch - 
meist - einige Konstanten. So auch die von der Speichergröße abhängige 
initialisierungskonstante. Üblicherweise wird die letzte Speicherstelle, 
per default genutzt - für den Stack. Ist der "neue" Speicher jetzt 
kleiner, so zeigt dieser Wert ins Nirwana, also hinter den tatsächlich 
verfügbaren Speicher. Ist der Neue größer, so verschenkst Du Platz. 
Letzteres merkst Du aber nicht.

Übrigens: Mit Hirn meine ich den Compiler, der nicht nur Deinen Sermon 
überprüft, sondern, entsprechend dem angegebenen Prozessor, auch 
Codeanpassungen vornimmt.

von buell23 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Amateur schrieb:
>>Was meint ihr genau mit den startup files?
>
> Beim Kopieren ist das Hirn ausgeschaltet!
>
> In dem Moment, in dem Du den Prozessor wechselstet, wechselst Du auch -
> meist - einige Konstanten. So auch die von der Speichergröße abhängige
> initialisierungskonstante. Üblicherweise wird die letzte Speicherstelle,
> per default genutzt - für den Stack. Ist der "neue" Speicher jetzt
> kleiner, so zeigt dieser Wert ins Nirwana, also hinter den tatsächlich
> verfügbaren Speicher. Ist der Neue größer, so verschenkst Du Platz.
> Letzteres merkst Du aber nicht.
>
> Übrigens: Mit Hirn meine ich den Compiler, der nicht nur Deinen Sermon
> überprüft, sondern, entsprechend dem angegebenen Prozessor, auch
> Codeanpassungen vornimmt.

Ok, ich verstehe ungefähr worauf du hinaus willst.
Was schlägst du jetzt genau vor was ich tun soll?
Ich habe das Programm schon mehrmals komplett kompiliert.

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
Schau doch erstmal, ob da elektrisch auch was ankommt. Also Pin auf den 
aktiven Pegel legen und im Debugger schauen, ob das Pin-Register das 
auch anzeigt.

Gruß, Stefan

von buell23 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Stefan K. schrieb:
> Schau doch erstmal, ob da elektrisch auch was ankommt. Also Pin
> auf den
> aktiven Pegel legen und im Debugger schauen, ob das Pin-Register das
> auch anzeigt.
>
> Gruß, Stefan

Das habe ich jetzt gemacht und an die Messpunkte weitere Kabel 
angelötet.
Das Signal kommt an, aber jetzt tut es auch irgendwie, wobei der Autor: 
Amateur (Gast) auch irgendwie Recht gehabt hat. Ich hatte zuvor 
irgendwie eine axf Dateigrösse von 1000Bytes und eine Programmgrösse von 
64bytes.

von Feldkurat K. (feldkurat)


Bewertung
0 lesenswert
nicht lesenswert
buell23 schrieb:
> Das Signal kommt an, aber jetzt tut es auch irgendwie, wobei der Autor:
> Amateur (Gast) auch irgendwie Recht gehabt hat. Ich hatte zuvor
> irgendwie eine axf Dateigrösse von 1000Bytes und eine Programmgrösse von
> 64bytes.

Das passiert, wenn man im Radio an einem Tag 10x das gleiche Lied von 
Nena hören muß:

https://www.youtube.com/watch?v=6W51gDVMjxo

-Feldkurat-

von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht lesenswert
An wie vielen Stellen ein Programm, das für einen anderen Prozessor 
geschrieben wurde hängen kann, lässt sich nicht vorhersagen.

Manchmal ist es wirklich nur ein anderer Speicher, schau die einfach mal 
die Möglichkeiten einer beliebigen Prozessorlinie an: Andere 
Speichergröße, andere Flash-Größe, zusätzliche Anschlüsse usw.
Das kann aber bis zu völlig anderen Befehlscodes, für ein und die selbe 
Sache gehen.

Üblicherweise weiß Dein Compiler, durch die Typangabe, was Sache ist. So 
hat der Programmierer auch nichts damit zu tun. Aber, was der Compiler 
üblicherweise nicht tut bzw. kann, ist überprüfen, ob Deine Angaben auch 
stimmen.
Auf diese Weise kann man absichtlich, oder auch aus Versehen, Code für 
einen anderen Prozessor generieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.