- 12V Akku mit 280 Ah bauen         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Headerdatei(en) für ATMega32

  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056

    Headerdatei(en) für ATMega32

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Da ich den Roboter von meldano gekauft habe arbeite ich mich gerade in die Programmierung vom Mega32 ein. Da keine Headerdateien dabei waren erstelle ich mir selbst welche mit Funktionen zu z.B. PWM. Ich habe einmal gelesen, dass man Funktionen nicht in *.h- Dateien packen soll sondern nur Definitionen. Stimmt das (auch wenn es geht) oder ist es egal. Ich würde sonst die Definitionen in eine *.h-Datei packen und die Funktionen in eine *.c-Datei und diese mit #include einbinden.

    Was würdet ihr für Funktionen einbauen? Ich habe mir eine Liste mit funktionen zusammengeschrieben in der z.B. eine Funktion für Vorwärts- und Rückwartsfahren, drehen, verschiedene Rampen (beschleunigen, bremsen für Vorwärts und Rückwärts) und einige Schreib und Lesebefehle (Bit, Nibble und Byte lesen, schreiben und negieren).

    Ich will die Dateien so auslegen, damit ein Anfänger diese "leicht" versteht und anwenden kann. Außerdem will ich die Dateien gut kommentieren, damit auch ein Anfänger diese Abändern kann (z.B. Ausgänge definieren,...)

    Meine Fragen noch einmal kurz zusammengefasst:

    >Funktionen in h-Dateien oder in c-Dateien?
    >Was für Funktionen würdet ihr einbauen?

    Über Anregungen und Kritik würde ich mich freuen.

    MfG Hannes

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Zur ersten Frage:
    Funktionen stehen niemals in einer Header-Datei (außer inline-Funktionen).
    In eine Header-Datei gehören ausschließlich Deklarationen (bitte nicht verwechseln mit Definition).

    Zur zweiten Frage kann ich nicht viel sagen, weil ich den Roboter nicht kenne.

    Gute Dokumentation ist ein sehr guter Vorsatz, dafür kann ich Dir doxygen wärmstens empfehlen.

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Dann werde ich die Funktionen in eine C-Datei schreiben. Unterschied zwischen Definitionen und Deklarationen kenne ich. Als Beispiele
    Definition => #define Led PC3
    Deklarationen => int timer;
    Zur zweiten Frage kann ich nicht viel sagen, weil ich den Roboter nicht kenne.
    https://www.roboternetz.de/phpBB2/ze...131&highlight=

    Ich will allerdings keine Dateien für nur meinen Roboter, sondern allgemein für Mega32 schreiben. Die Platine ist auch kein fertiger Bausatz oder Fertiggerät sondern von Meldano entwickelt worden.

    Das mit Doxygen werde ich mir näher anschauen.

    MfG Hannes

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von 021aet04
    Unterschied zwischen Definitionen und Deklarationen kenne ich. Als Beispiele
    Definition => #define Led PC3
    Deklarationen => int timer;
    Nein.

    Code:
    Variable:
    
        Definition:
    
            int timer;
     
        Deklaration:
    
            extern int timer;
    
    Funktion:
    
        Definition:
    
            void SomeFunc (int param) {
                //Code
            }
    
        Deklaration:
    
            void SomeFunc (int param);
      
            auch möglich: void SomeFunc (int);
            ersteres ist aber vorzuziehen
    Und #define ist keines von beiden. Das ist nur ein Präprozessor-Makro.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Ich finde diesen Überblick sehr hilfreich weil er kurz, bündig und ziemlich umfassend ist. Aber ein Überblick ersetzt natürlich weder ein Lehrbuch (z.B. den Kernighan-Ritchie - ich weiß, das ist nicht jedermanns Sache) noch ersetzt diese Sammlung die tollen Hilfestellungen der Forumskollegen.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von oberallgeier
    Ich finde diesen Überblick sehr hilfreich weil er kurz, bündig und ziemlich umfassend ist.
    Und leider auch falsch ist im Hinblick auf das Thema hier. Was unter 3.3 aufgelistet ist, ist eben keine Variablendeklaration, sondern eine Variablendefinition.
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von sternst
    ... Und leider auch falsch ist ...
    Danke sternst für den Hinweis. Im KR ist dieses Thema nicht so schön verständlich dargestellt. Dafür habe ich jetzt im VORWORT zur deutschen, zweiten Ausgabe (ISBN 3-446-15497-3) gelesen:
    Zitat Zitat von Das Übersetzerteam
    Wir konnten im allgemeinen sehr wortgetreu übersetzen, mit einer wesentlichen Ausnahme: im Deuschen kann man Deklarationen, die Eigenschaften von Namen vereinbaren, völlig von Definitionen unterscheiden, die dazu auch noch Speicherplatz bereitstellen, denn für beide Vorgänge zusammen gibt es im Deutschen noch den Oberbegriff der Vereinbarung. Diese Unterscheidung sollte vor allem die C-Sprachbeschreibung im Anhang A leichter verständlich machen.
    Und irgendwie ging für meine Lese dann im weiteren Verlauf des Buches Definition und Deklaration etwas unter - weil dafür oft "Vereinbarung" steht.

    Fazit: ich bin wieder mal einen Schritt tiefer vorgedrungen.
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Fazit: ich bin wieder mal einen Schritt tiefer vorgedrungen.
    Nicht nur du.

    Ich habe in meiner Elektronikmappe aus der Schule das hier gefunden. Das haben wir vom Fachlehrer bekommen. Hier ist eine C-Zusammenfassung, die ich euch nicht vorenthalten möchte.
    http://www.inf.hs-anhalt.de/Service/...menfassung.htm

    Das mit der Funktiondefinition bzw. Deklaration ist mir jetzt klar, aber was ist der Unterschied zwischen Variablendefinition und Deklaration?

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Zitat Zitat von 021aet04
    Das mit der Funktiondefinition bzw. Deklaration ist mir jetzt klar, aber was ist der Unterschied zwischen Variablendefinition und Deklaration?
    Bei der Deklaration einer Variable wird Speicherplatz für sie reserviert. Das ist das ganz normale "Anlegen" einer Variable:

    Code:
    int foo;
    oder
    int foo = 111;
    Willst Du nun diese Variable, sofern sie global ist, in einer anderen Datei bekannt machen, musst Du sie für die andere Datei definieren. Dies geschieht normalerweise in der Headerdatei zu der C-Datei, in der die Variable deklariert ist (analog zu Funktionen). Der einzige Unterschied zur Deklaration ist das Attribut extern.
    Mal ein Beispiel:

    Code:
    Datei: test.c
    ----------------
    //Deklaration der Variable
    int foo;
    
    Datei: test.h
    ----------------
    //Definition der Variable
    extern int foo;
    
    Datei: main.c
    ----------------
    #include "test.h"
    
    //Die Variable foo kann nun auch hier verwendet werden!
    Gruß,
    askazo

    PS: Dein Link funktioniert nicht

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von 021aet04
    ... was ist der Unterschied zwischen Variablendefinition und Deklaration?
    Als C (-äh) - Programmierer in den Kinderschuhen kann ich da ja nicht kompetent antworten. Aber ich versuchs mal nachzuarbeiten. Der KR - siehe Posting oben - hat diesen Unterschied nicht so vorgestellt, dass ich ihn bisher verstanden habe. Aber ich nehme an, dass die Übersetzer ziemlich kompetent waren, und die haben einmal im Vorwort eine Aussage dazu getroffen, siehe Quote oben. Deutlich erläutert steht es in einer Fußnote, S 9 der gleichen Ausgabe:
    Zitat Zitat von Das Übersetzerteam von KR
    * Wir unterscheiden zwei Arten von Vereinbarungen: Definitionen, die Objekte erzeugen, und Deklarationen, die nur die Eigenschaften von Objekten festlegen. A.d.Ü.
    Die Schwäche bei der Erklärung von Definition und Deklaration im KR finde ich schon deswegen bedauerlich, weil dort z.B. auch steht:
    Zitat Zitat von KR auf Seite 26
    Ein Hinweis auf die Geschichte: die größte Änderung zwischen ANSI-C und früheren Versionen betrifft Deklaration und Definition von Funktionen. In der ursprünglichen Definition von C hätte man . . . .
    Da ich eben, morgens, nach einer deutlichen Erläuterung gesucht habe, finde ich auf Seite 32 genau die richtige Stelle (morgens, nicht mitternachts - da war ich einfach zu blind, als dass ich beim suchenden Querlesen das entdeckt hätte). Ein bisschen versteckt ist diese wichtige Unterscheidung trotz des Hinweises "Beachten sie ..." aber schon - man muss den KR halt wirklich SEHR aufmerksam lesen :
    Zitat Zitat von KR auf Seite 32
    Beachten Sie, ... Definition bezeichnet die Vereinbarung, in der für eine Variable Speicherplatz reserviert wird; Deklaration bezeichnet die Vereinbarungen, die zwar die Variable beschreiben, aber eben keinen Speicherplatz reservieren.
    Und seltsamerweise steht heute (das war doch gestern noch nicht drin . . . ) im Sachverzeichnis des KR sogar "... Definitionen ... und Deklaration 32, ...". Wie sich Bücher über Nacht manchmal verändern . . . Lustig, nein, eher verwirrend, ist ja nun, dass externe Deklarationen von Variablen und Funktionen üblicherweise in den sogenannten Definitionsdateien gesammelt werden.

    Damit habe ich den Unterschied mal so grob verstanden. Mehr wird die bewusst durchgeführte Übung beim Programmieren bringen. Leider hatte ich in der Schule nie C gelernt, das wurde garnicht angeboten. Das bißchen, das ich kann, musste ich mir weitgehend selbst beibringen - na ja, nicht ganz. Zum Glück gibt es Kollegen wie sternst e.a. die immer wieder weiterhelfen, wenns gar zu arg hakt.
    Ciao sagt der JoeamBerg

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad