- Reichelt Elektronik    Werbung      
Ergebnis 1 bis 9 von 9

Thema: Code / Projekt richtig strukturieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.690
    Hallo!

    Ist nicht eindeutig zu beantworten. Kommt auf das Gesamtkonzept an. Eine brauchbare Variante sind Makros in C. Die kannst Du zentral hinterlegen und im Quelltext nur mit den Makronamen arbeiten. Dann kannst Du das jederzeit nachträglich ändern. Wenn sich nicht nur Pins, sondern auch Schnittstellen ändern, musst Du die umleiten, auf die jeweils richtigen Funktionen. Dann hast Du u.U. für jede definierte Schnittstelle in der zentralen Datei einen Wert, der die Schnittstelle angibt, so dass Du dann nach diesem Wert die Umleitung vornehmen kannst. Noch flexibler geht das über Variablen. Die kann man dann auch zur Laufzeit noch ändern, dann ergibt sich schnell die Möglichkeit eines Setup, wie bei einem Mainboard eines x86 z.B., die Werte kann man dann im Flash speichern oder woanders, wo sie nicht verloren gehen; dann bei Systemstart auslesen und die Werte evtl. übertragen.

    MfG

    Bewehrte Systemlösungen sehen immer so aus, dass man allgemeingültige Funktionen definiert. Z.B. "Read" oder "Write". Dann wird festgelegt, was man dort übertragen kann: Strings (Zeichenketten), Zahlen (Werte), Bytes. Mit Schnittstellenkennung kannst Du dann innerhalb der Funktion die Umleitung auf den jeweils richtigen Code vornehmen, der die Daten über die angegebene Schnittstelle verschickt oder von dort liest. In C(++) selber kann man mehrere Konstruktoren (objektorientiert) erstellen, für jeden speziellen Fall einen, der Compiler sucht sich dann - je nach Übergabeparameter - den Passenden aus, so dass der richtige Code dann am Ende ausgeführt wird. Welches Konzept magst Du lieber? - Das ist die Frage.
    Geändert von Moppi (27.02.2021 um 10:50 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    33
    Beiträge
    1.578
    Hi!

    Makros werde ich wohl definitiv verwenden, variable Schnittstellen brauche ich nicht, weil sich die HW nicht on the fly ändert! Bild   Mir stellt sich aber noch die Frage, wie und wo ich die Markos definiere..
    Wo mache ich die HW-Initialisierungen? Alle in einer Datei, oder jede Schnittstelle in dem jeweiligen Modul (also Spi1 in Sensor X Modul zb)?
    Definiere ich alle Variablen und ändere in Zukunft nur noch diese oder ändere ich jedes mal den Code selbst? Also definiere ich die Pins zb und schreibe den Code mit den Defines oder ändere ich die Pins im Code direkt?

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    927
    Das ist eine Frage der Vorgehensweise.
    Wenn Du beim Erstellen eines neuen Projektes, einer neuen Version oder Variante die Dateien kopierst, kannst Du die Definitionen peux a peux direkt in den Dateien anpassen.
    Wenn Du die Dateien verlinkst (Verweis auf einen projektübergreifenden Ordner), wirst Du wohl die Hardwaredefinitionen extrahieren müssen.

    Beides hat Vor- und Nachteile. Wenn Du willst, das sich Bugfixes oder Erweiterungen automatisch über all Deine Projekte verteilen lassen, nimmst Du die Dateiverlinkung. Wenn Dich davor graut , kopierst Du besser.

    (ohne Versionsverwaltung würd's mich grauen)
    Geändert von Holomino (28.02.2021 um 15:09 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.690
    "define"s sind Textmakros. Wenn Du die verwendest, machst Du das an einer übersichtlichen Stelle, also in einer Datei *.h
    Ich benutze z.B. eine "defines.h". Die binde ich dann an geeigneter Stelle ein. Da weiß ich, stehen meine Makros drin. Beispiel: #define name wert
    Du verwendest dann überall die Makronamen (-bezeichnungen). Der Compiler ersetzt dann die Namen/Bezeichnungen durch den Text dahinter. Da kannst Du auch Code hinschreiben (nicht nur Werte), manchmal kann das nützlich sein.

    MfG


    Code:
    #ifndef __defines__
    #define __defines__
    
    
    
    
    .....
    
    #define LiPoIn_12 A3
    #define LiPoIn_08 A5
    #define LiPoIn_04 A4
    #define bps 115200
    #define INPUT INPUT_PULLUP
    
    #define setStatePin stateVal = 1; digitalWrite(State, 1);
    
    
    
    
    
    #endif
    "stateVal = 1; digitalWrite(State, 1);" ist Code, der in den Quelltext übernommen wird, wenn ich dort "setStatePin" schreibe.
    Mit "#define INPUT INPUT_PULLUP" definiere ich das Makro INPUT neu, als INPUT_PULLUP, das habe ich zum Ausprobieren. Gibt eine Warnung, funktioniert aber.

    - - - Aktualisiert - - -

    Schau mal im Internet nach "Überladen von Funktionen". Du kannst denselben Funktionsnamen mehrfach verwenden, jedes mal mit andern Übergabeparametern und anderem Code, falls Du so was brauchen kannst.

Ähnliche Themen

  1. Ein Stück C-Code - sieht richtig aus, aber es gibt ne Fehlfunktion
    Von oberallgeier im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 28.12.2012, 11:21
  2. RP6: Projekt Morse-Code
    Von Dirk im Forum Robby RP6
    Antworten: 6
    Letzter Beitrag: 21.03.2012, 17:48
  3. C-Programm strukturieren/aufteilen
    Von dreadbrain im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 09.06.2010, 18:27
  4. Wie kopiert man Quelltexte richtig in ein anderes Projekt?
    Von rogerberglen im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 18.08.2007, 11:49
  5. MIDI- Code richtig?
    Von Xtreme im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 15.03.2006, 07:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      12V Akku bauen