Hallo. Ich habe ein Problem mit den Interrupts beim STM32F3. Ich benutze die HAL. Die Interrupt-Mehtode befindet sich in 'stm32f3xx_it.c'. Und auch dort ist Platz für die Userroutine vorgesehen ('/* USER CODE BEGIN EXTI4_IRQn 0 */'). Jetzt möchte ich auf (globale) Variablen (genau genommen möchte ich den aktuellen Zählerstand eines Zählers abfragen zum Eintreffen) in Datei 'main.c' zugreifen. Wie mache ich das? Danke euch.
Das Zauberwort dazu ist "extern". Wahrscheinlich willst du sie außerdem als "volatile" deklarieren. Ich persönlich bevorzuge, die Zugriffe auf solche variablen indirekt über getter und setter Funktionen zu kapseln. Diese können in einer Header Datei bekannt gemacht werden, die ich überall includiere, wo ich sie brauche. void getLastCommand(char* returnBuffer, int bufSize); void setLastCommand(char* command); Solche Dateien heißen typischerweise globals.h und globals.c. Mache Dir Gedanken über die Tücken der Nebenläufigkeit. Wenn das z.B. eine Zeichenkette ist, könnte der Interrupt sie verändern während sie vom Hauptprogramm gelesen wird (oder umgekehrt). Lösungsansätze findest du, wenn du nach den Stichwörtern "mutex atomic locks" suchst.
Das Problem ist, dass die Variablen im automatisch generierten Bereich der Datei liegen und ich diesen zwar verändern kann, aber bei einer erneuten Code-Generierung wieder verschwunden sind. Das würde ich gerne vermeiden. :/
Daniel schrieb: > Das Problem ist, dass die Variablen im automatisch generierten > Bereich > der Datei liegen und ich diesen zwar verändern kann, aber bei einer > erneuten Code-Generierung wieder verschwunden sind. Das würde ich gerne > vermeiden. :/ Na und? Das kollidiert weder mit gettern/settern noch mit Zugriff über extern deklarationen.
Stefan ⛄ F. schrieb: > Na und? Das kollidiert weder mit gettern/settern noch mit Zugriff über > extern deklarationen. Da hast du nat Recht. Ich denke mit extern ist der Zugriff schneller, daher werde ich es so lösen. Danke! Ist so eine Art des Zugriffs eig good practice?
Daniel schrieb: > Ist so eine Art des Zugriffs eig good practice? Kann man nicht so pauschal sagen. Es birgt auf jeden Fall das Risiko, dass man den Überblick verliert, was jetzt wo "zu hause" ist und wer wie darauf zugreift.
Daniel schrieb: > Jetzt möchte ich auf (globale) Variablen (genau > genommen möchte ich den aktuellen Zählerstand eines Zählers abfragen zum > Eintreffen) in Datei 'main.c' zugreifen. Wie mache ich das? Normalerweise schreibt man solche Dinge wie einen Zählerstand nicht in main hinein, sondern in den zuständigen Handler, der sich ohnehin um diese Variable kümmert. Dann schreibt man deren Bezeichnung mit "extern" in die zugehörige .h hinein, von wo man sie problemlos woanders inkludieren kann. Theoretisch könnte man auch eine main.h schreiben, aber ich empfinde sowas als recht unschön. Hat man sowas nötig, dann zeugt dies von ungünstiger Konstruktion der Firmware. W.S.
W.S. schrieb: > Theoretisch könnte man auch eine main.h schreiben, aber ich empfinde > sowas als recht unschön. Hat man sowas nötig, dann zeugt dies von > ungünstiger Konstruktion der Firmware. > > W.S. Das Problem ist das Template des Generators. Somit ist die Dateistruktur bis auf die eigenen Dateien vorgegeben. Und in main.c befinden sich alle Handles, Initialisierungen und eben auch die main(); Ich meine dass man früher seine Interruptroutinen selbst schreiben konnte/ musste, aktuell sind diese aber sogar schon definiert, wennauch leer. Stefan ⛄ F. schrieb: > Kann man nicht so pauschal sagen. Es birgt auf jeden Fall das Risiko, > dass man den Überblick verliert, was jetzt wo "zu hause" ist und wer wie > darauf zugreift. Das ist auch so mein Gedanke. Aber Danke, deine Lösung ist so perfekt wie einfach.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.