mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Studio Funktionen aus einer externen Datei aufrufen


Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein funktionierendes Programm.
Innerhalb der Main Schleife rufe ich nur eine Funktion auf die 
ausserhalb der Main Schleife(davor) existiert.
Das hat bis jetzt alles wunderbar funktioniert.
Da innerhalb der Funktion Variablen definiert sind die auch in Main 
verwendet werden habe ich nun diese in eine Var.h kopiert und mit extern 
erweitert.
Meine Funktion habe ich dann in ein weiteres File Funk.c kopiert und 
zuvor mit include die Var.h includet.
Nun habe ich gelesen, dass ich nur die Funk.c in meine Source Files 
aufnehmen muss jedoch funktioniert dies nicht.
Bei Keil habe ich immer noch eine zusätzliche Headerdatei mit den 
externen Funktionen gebraucht jedoch dies funktioniert auch nicht.

Als Fehler kommt immer gcc plugin error Objektfile is not found on 
expected location Pfad\Programm-elf.

Wo liegt mein Fehler ??????????

Danke schon mal

TOM

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe nun mal ein Testprojekt gemacht das ich linke konnte.
Kann jemand mir sagen ob dies richtig ist wie ich es mache!!!!

Sorry Anfänger.

main.c
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/ex_Funktionen.h>

unsigned char i,r;

int main(void)
{

  for(;;)
  {
    r = test();
  }
  return 0;
} 

Funktion.c
#include <Main.h>
unsigned char test(void)
{
  i= i+r;
  i++;
}
Main.h
extren unsigned char i,r;

ex_Funktionen.h
unsigned char test(void)

Eventuell muss die Deklaration von test noch mit extern erweitern.

Danke schon mal.

TOM

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versteh es einfach nicht.
Wenn ich das Projekt mache wie oben ist alles OK.
Addiere ich nun eine zweite Datei zu Source Files(in Summe 
3,Main,Func1,Func1).
Deklarier diese auch in ex_Funktionen.h und rufe sie aus Main.c auf 
kommt Objektfile not found ......
Wenn ich die zweite Funktion in das *.c file der ersten kopiere und das 
*.c file der zweiten komplett auskommentiere ist der Fehler weg.

Hatte schon mal jemand ein ähnliches Problem eventuell ein Bug von AVR 
Studio???

Gruss

TOM

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Programmierer;

es kann doch nicht sein, dass Ihr alle ohne Headerdateien arbeitet.
Also kommt schon gebt Euch einen Ruck und helft mir, habe echt keine 
Ahnung an was es liegt das es nicht klappt.

ZU den *.c Dateien diese liegen alle im gleichen Ordner, die 
Headerdateien im Ordner WinAVR...\avr\include\avr\*.h

Nun addiere ich alle drei *.c dateien in den Ordner SourceFiles von AVR 
Studio.
Drücke ich nun F7 (Build active Configuration)
kommt der Fehler
gcc plug-in: Error: Objektfile not found on the expected location 
C:\Pfad der *.c Files\default\Projekt.elf

Lösche ich nun die Funktion2.c aus den SourceFiles Ordner von AVR Studio 
und schreibe die Funktion in Funktion1.c speichere alles.
Drücke ich nun F7 (Build active Configuration) ist alles OK
Build succeeded with 0 warnings.

Kann mir das jemand erklären an was es liegt oder was ich falsch mache 
eventuell muss ich auch noch etwas bei AVR Studio einstellen.

Hier mal noch die C und H-Files

Ich bin verzweifelt habe schon alles versucht doch immer das gleich 
Fehler Fehler und wieder Fehler.

In meinem eigentlichen Projekt mochte ich die Funktionen eben auslagern 
um eine bessere Ubersucht in Main zu erreichen.

Habe vorher mit Keil programmiert und dort alle Funktionen in 
Bibliotheken gepackt und auch Hedaerfiles erstellt und dort hat es 
geklappt und bei AVR Studio nicht.
Muss ich eventuell nit der Funktionen*.c noch etwas machen bevor ich sie 
ins Main.c einbinden kann?

BitteBitte  helft mir.

Gruß und Danke

TOM

main.c
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/ex_Funktionen.h>

unsigned char i,r,t,z;
unsigned char Data[10];
int main(void)
{

  for(;;)
  {
    test1();
    t = Data[0];
    test2();
    z = Data[1];
    r++;
    Data[2] = i;
    Data[3] = r;
  }
  return 0;
} 
Funktion1.c
#include <Main.h>
void test1(void)
{
  i= i+r;
  Data[0]=i;
  i++;
}
Funktion2.c
#include <Main.h>
void test2(void)
{
  i= i+r;
  Data[1]=i;
  i++;
}
Main.h
extern unsigned char i,r,t,z;
extern unsigned char Data[10];
ex_Funktionen.h
void test1(void);
void test2(void);

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

kommt schon gebt mir einen Tipp wie es funktioniert.
Ok Funktion aus einer Ecternen Datei aufrufen ist etwas blöd geschrieben 
do leider kann ich es nicht mehr ändern.
Ich möchtre einfach nur die Funktionen in seperate *.c Dateien schreiben 
und diese dann über H-Files wieder einbinden.
Ich versuche schon seit gestern dies hinzubekommen und meine Nerven 
liegen so langsam blank.
Lasst mich nicht mit mir selbst kommunizieren.


DANKE

TOM

Autor: Jörg X. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schnapp dir das nächstbeste C-Buch (notfalls geht auch das 
http://www.galileocomputing.de/openbook/c_von_a_bi... ) und 
schau nach, wie #includes funktionieren und wie man mehrere .c-Files 
compiliert

:( Jörg

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.