www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Projekt mit mehreren Files und Interrupt


Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte ein großes Projekt auteilen und sparate Funktionen / Abläufe 
auslagern in separate .c Dateien. Jetzt habe ich eine Frage bezüglich 
Interrupts. Ich habe noch nicht angefangen, daher hier der Code, den ich 
mir vorstelle:

Hauptprogramm:
main.c
#include {alles mögliche}
#include "Funktion_eins.h"
#include "Funktion_zwei.h"

#define alles mögliche

ISR (Timer0_vect)
{
...code...
}

void Funktion_drei (void)
{
...code...
}

void main (void)
{
  for(;;)
  {
    ...code...
    MachWas(); // siehe Funktion_eins.c
    ...code...
    NochMehr(); // siehe Funktion_zwei.c
    ...code...
    Funktion_drei(); // siehe oben
  }
}

Funktion_eins.c
#include "Funktion_eins.h"

void MachWas(void)
{
...code...
}

Funktion_zwei.c
#include "Funktion_zwei.h"

void NochMehr(void)
{
...code...
}

Funktion_eins.h
void MachWas(void)

Funktion_zwei.h
void NochMehr(void)

So und nun meine Frage:
Generell: stimmt die Struktur?
zu Interrupt: Wenn ich mich in eine der beiden (externen)Funktionen 
(eins oder zwei) befinde und der Timer0 (Im Hauptfile) einen Interrupt 
erzeugt, wird dann auch meine ext. Funktion unterbrochen? Oder muss 
ichin dieser Funktion.C auch eine ISR anlegen bzw auf den Hauptfile 
verweisen?

Autor: LordZiu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M.B. schrieb:
> So und nun meine Frage:
> Generell: stimmt die Struktur?

Naja, man legt normalerweise nicht für jede Funktion ein separates File 
an, sondern versucht logisch zusammenhängede Funktionen in extra Files 
zu bündeln.

> zu Interrupt: Wenn ich mich in eine der beiden (externen)Funktionen
> (eins oder zwei) befinde und der Timer0 (Im Hauptfile) einen Interrupt
> erzeugt, wird dann auch meine ext. Funktion unterbrochen? Oder muss
> ichin dieser Funktion.C auch eine ISR anlegen bzw auf den Hauptfile
> verweisen?

Natürlich wird sie unterbrochen. Wenn du eine Funktion in einem anderen 
File hast, hat dass doch nichts mit der Ausführung des Programmes zu 
tun. Ein Programm wird immer schön Schritt für Schritt ausgeführt - bis 
es ein Interrupt unterbricht - dann gehts weiter.
Das Auslagern in andere Files hat doch größtenteils nur was mit der 
Übersichtlichkeit zu tun. Nach dem Compilieren hast du ein großes 
Programm, dass nicht mehr weiß, aus welchen Files sein Code kam. Ist 
auch unwichtig für die Ausführung.

Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LordZiu schrieb:
> M.B. schrieb:
>> So und nun meine Frage:
>> Generell: stimmt die Struktur?
>
> Naja, man legt normalerweise nicht für jede Funktion ein separates File
> an, sondern versucht logisch zusammenhängede Funktionen in extra Files
> zu bündeln.

Ja das ist mir schon klar, aber diese Funktionen werden in diesem Fall 
recht groß sein und praktisch eine eigenes Programm abarbeiten, was 
eigentlich schon eine Main ist, aber nur selten oder einmalig zur 
initialisierung benötigt wird und mir den wesentlichen Code schwer 
lesbar machen würde.

LordZiu schrieb:
> Natürlich wird sie unterbrochen.

Ja, vielen Dank. Ich war mir nicht ganz sicher, aber jetzt im nachhinein 
betrachtet ist das ja auch völlig logisch! Aber trotzdem Danke für deine 
Antwort, du hast mich sicherer gemacht.
Da es ein großes Projekt werden soll, wollte ich von Anfang an alles 
übersichtlich gestalten und späteres umstrukturieren vermeiden. Das 
führt nämlich zu 99% zu Fehlern, bei denen keiner mehr durchblickt.

Dann mal los...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M.B. schrieb:

> Da es ein großes Projekt werden soll, wollte ich von Anfang an alles
> übersichtlich gestalten und späteres umstrukturieren vermeiden.

Mach dir deswegen keine Sorgen.
Auch wenn du von Anfang an alles 'richtig gemacht' hast, wirst du um 
späteres umstrukturieren nicht umhin kommen.

> Das
> führt nämlich zu 99% zu Fehlern, bei denen keiner mehr durchblickt.

globale Variablen an einer Stelle sammeln
gute Variablennamen wählen
gute Funktionsnamen wählen
keine elends lange Funktionen schreiben
saubere Code-Formatierung
nichts als in Stein gemeißelt ansehen, sondern ruhig auch grundlegende
 Dinge verändern wenn sich rausstellt, dass eine Entscheidung nicht
 so toll war.
Seinen Code immer kritisch betrachten

damit kriegt man die Dinge schon in den Griff

Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde mir deine Tipps zu Herzen nehmen. Dank des Forums habe ich 
schon einige gute Hinweise finden und Umsatzen können.
Ich bin immer offen für neues bzw. bewährtes.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.