-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Auslagern

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.04.2007
    Alter
    31
    Beiträge
    40

    Auslagern

    Anzeige

    Hallo,
    kann man bei der Progammierung eines AVR Programmteile (Funktionen, Initialisirungen...) auslagern?
    Bei Java kann man einfach Objektorientiert Programmieren und so das ganze Programm deutlich übersichtlicher machen. Ich weiß zwar das, dass auch mit C++ gehen soll, aber kann ich das auch auf µC anwenden?
    Falls ja wüste ich gerne noch warum man nirgends Programmbeispiele in diese Richtung finded.
    Falls nein wäre ich natürlich über Alternativen dankbar (evtl. mit eigenen headern?).
    Danke für jede Hilfe

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373
    Hi,
    ja das geht schon in C. Du kannst ja beliebig viele c und h Dateien erstellen und dann in deiner main aufrufen.
    mfg franz

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.04.2007
    Alter
    31
    Beiträge
    40
    wie rufe ich eine andere .c Datei auf (einfach mit #include <name.c> geht das nicht)? Alles was ich über Dateien gefunden habe bezog sich auf das arbeiten am PC, also schreiben und lesen. Ich möchte aber das der Quellcode der sich in der entsprechenden Datei befinded an die Stelle geschrieben wird an der ich sie eingebunden habe. Ich benutze AVR Studio.
    Geht das dann nur in main oder auch im oberen Teil des Programms?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373
    Hallo,
    ja genau du musst die Funktion oder was auch immer in die main mit #include einbinden dann sollts auch klappen. Musst aber drauf achent dass du bei den Funktionsvariablen externe Variablen benutzt.
    mfg franz

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Normalerweise sieht das ganze so aus:

    main.c
    Code:
    #include <avr/io.h>
    #include "init.h"
    
    int main (void)
    {
    init_timer(); //includierte Funktion
    //Weiter mit Hauptprogramm
    }
    init.c
    Code:
    void init_timer()
    {
    //Was auch immer Du hier machen möchtest
    }
    init.h
    Code:
    void init_timer(void); //Prototyp für die Funktion
    Gruß,
    askazo

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.04.2007
    Alter
    31
    Beiträge
    40
    Hey,
    ich habe es wohl noch immer nicht verstanden.

    Ich habe folgendes Testprogramm:

    main.c:
    Code:
    #include <avr/io.h>
    #include "incl.h"
    
    int main (void)
    {
    	DDRC |= (1<<PC0);		  //PortC 0 als Ausgang
    
    	while(1){
    		Modul();
    	}
    }
    incl.c:
    Code:
    void Modul (void){	
    	PORTC = 0x01; 
    }
    und incl.h:
    Code:
    void Modul(void);
    Ich bekomme aber immer folgende Fehler:
    ../incl.c:2: error: 'PORTC' undeclared (first use in this function)
    ../incl.c:2: error: (Each undeclared identifier is reported only once
    ../incl.c:2: error: for each function it appears in.)
    make: *** [incl.o] Error 1

    Darf ich den Pin nicht im Modul auf eins setzen? Ich habe schon 3 Tutorials durchgelesen, es ffunzt aber noch immer nicht.
    Ich bin für jeden Tipp dankbar.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Hallo noppf,

    Du musst auch in der incl.c die Datei <avr/io.h> includieren, Dort ist nämlich PORTC definiert. Am besten includierst Du auch die incl.h mit rein. Für Headers hat sich übrigens folgender Aufbau als günstig erwiesen:
    Code:
    #ifndef _HEADERNAME_H_
    #define _HEADERNAME_H_
    
    Deine defines und Prototypen
    
    #endif
    Durch die #ifndef..#define..#endif-Struktur werden Fehler verhindert, falls man aus Versehen die Datei mehr als einmal im selben Modul includiert.

    MfG Mark

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    sehr "quick&dirty", sollte man auch nicht machen und entspricht auch keinem standard:

    incl.c:
    Code:
    PORTC = 0x01;
    dann in main.c an passender stelle ein #include"incl.c" rein. beim compilieren wird dann der inhalt von incl.c an der stelle eingefügt, was einem ein paar bytes spart, weil nichts auf den stack gepushed wird.

    trotzdem nicht zu empfehlen! wollte es nur der vollständigkeit halber erwähnen. *kleinmachwegflitz*

    gruesse

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    16.04.2007
    Alter
    31
    Beiträge
    40
    DANKE nun geht es *freu*
    Warum ist es nicht zu empfehlen? Was wäre denn die Alternative?

    Ich würde nicht an jeder Stelle an der ich einen Pin setzen möchte ein #include "incl.c" einfügen sondern die Funktion Modul() aufrufen (natürlich etwas brauchbarer angepasst).

    Sollte ich noch etwas ändern?

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    sobald du ein stück code auf diese weise öfter einbindest, wird dein programm auch dementsprechend grösser. man muss also abwägen, ob nicht eine funktion (die ja nur einmal im programm steht) besser geeignet ist, wenn der speicher knapp ist/wird.

    ausserdem ist es, soweit ich weiss, nicht standardgemäss, es kann also bei einem anderen compiler schiefgehen (weiss ich aber selber nicht so ganz sicher - bisher hats immer geklappt).

    auf jeden fall macht es den code schwerer lesbar, und die gefahr, dass sich irgendwann fehler einschleichen und man selbst nimmer durchblickt ist um einiges grösser als bei funktions-aufrufen.

    guter stil ist es auf jeden fall auch nicht.. ^^
    vielleicht kann jemand etwas genaueres dazu sagen.

    gruesse von der katz

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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