Forum: Compiler & IDEs Programmstruktur/Codeaufteilung in verschiedene Dateien


von SpäterPan (Gast)


Lesenswert?

Hallo Gemeinde,
ich brauche Hilfe zum grundlegenden Aufbau/Struktur meines 
µC-Programmes. Folgendes soll das Programm erledigen:
-  zeitliche Ansteuerung zweier Relais ( Auf- und Abfahren eines Motors)
-  Relais AUF soll jede Stunde zwei Sekunden angesteuert werden 
(Interrupt-gesteuert)
-  Relais AB soll angesteuert werden, wenn die Gesamtzahl von 
Aufwärtsfahrten erreicht ist, solang bis das Gerät an einen Endschalter 
fährt.

Dateiaufstruktur:

Main.h/c:
-  Initialisierung
-  GetStunde() / GetMinute() / GetSekunde()  Abfrage volle Stunde 
abgelaufen (JA: Rufe Funktion Fahre AUF mit x-Sekunden / NEIN nop)
-  Ist AnzahlFahrten >= GesamtAnzahlFahrten (JA: Rufe Funktion Fahre AB 
bis Endschalter)

Motor.h/c:
-  Funktion FahreAUF(int AnzahlSekunden)
-  Funktion FahreAB()

Timer.h/c:
-  Uhrzeithandling
-  Funktion GetStunde() / GetMinute() / GetSekunde()
-

Wie würdet ihr die Sache angehen? Bin für jeden konstruktiven Kommentar 
dankbar.

Grüße,

von Oliver (Gast)


Lesenswert?

Ja

Oliver

von Karl H. (kbuchegg)


Lesenswert?

SpäterPan schrieb:

> Wie würdet ihr die Sache angehen?

Die 30 Zeilen Code würde ich in eine C-Datei stecken.
Da ist nichts großartiges dabei, was man für andere Projekte groß 
wiederverwendbar brauchen könnte.

> -  Funktion FahreAUF(int AnzahlSekunden)

Schon falsch.

Das ganze läuft auf einen Timer hinaus, der zb alle 1ms eine ISR 
aufruft. In der ISR werden entsprechende Zähler hochgezählt und bei 
bestimmten Zählerständen bzw. je nach Zustand von Flags werden die 
Relais geschaltet. Einziger Punkt den man überlegen kann: Steckt man 
alles in die ISR oder macht man sich die Arbeit Jobflags zu benutzen so 
dass die Hauptschleife in main() die Arbeit macht. Da es aber nur auf 
das Umschalten von Portpins zu geeigneten Zählerständen rausläuft, würde 
ich der Einfachheit halber alles in der ISR machen.


Wenn du in der µC Programmierung mit der Denkweise kommst:
  mache das
  dann warte x Sekunden
  dann mache das

dann hast du schon verloren. Solche Dinge gibt es zwar, sie kommen zb in 
der Bahndlung von Datenübertragungen vor, in denen die Wartezeit im µs 
Bereich sich bewegt, aber den Fall hast du nicht. Bei dir gehts um 
Sekunden und da ist diese Denkweise schon daneben. Deine Denkweise muss 
lauten:
jetzt sind x Zeiteinheiten vergangen, was gibt es da genau jetzt zu tun 
und was folgt daraus?

Zeitsteuerung bedeutet auf einem µC immer den Einsatz eines Timers. So 
wie bei deiner Armbanduhr. Dein Programm ist wie ein Benutzer, der bei 
jedem Ticken der Armbanduhr auf das Zifferblatt schaut und sich 
überlegt, was er tun  muss, wenn der Sekundenzeiger genau da steht, wo 
er steht. Das erledigt er schnell und danach legt er sich wieder auf die 
faule Haut. Bis zum nächsten Ticken des Sekundenzeigers.

von Falk B. (falk)


Lesenswert?

@  SpäterPan (Gast)

>Wie würdet ihr die Sache angehen? Bin für jeden konstruktiven Kommentar
>dankbar.

Wie Karl Heinz schon sagte, das bissel Kram kann man problemlos in einer 
Datei platzieren. Wesentliche Mittel sind Timer, statemachine 
und Multitasking, wenn auch nur wenig.

von Peter S. (spaeterpan)


Lesenswert?

Hallo Leute,
vielen Dank für eure Hilfe. Ich hab mir die Artikel die Woche über mal 
angesehen und gestern Abend gleich mal mit codieren begonnen. Jetzt bin 
ich schon am Ziel....

danke nochmals und vg,
 peter

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
Noch kein Account? Hier anmelden.