PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Einbinden von asuro.h / asuro.c



Andi1888
05.03.2014, 11:48
Hallo,

ich nutze zum Programmieren/Compilieren/Flashen Asuro Flash in der Version 1.8.13.110.
Die Asuro Library die ich verwende ist die V2.8.0rc2
WinAVR verwende ich in der Version 20100110

Nun folgendes Phänomen.
Wenn ich das Test Projekt öffne, kann ich dieses ohne Probleme compilieren und flashen.
Erstelle ich nun ein eigenes Projekt, lege die asuro.c und die asuro.h in das Projektverzeichnis und erstelle eine eigene "new.c" Datei mit foglendem Inhalt:


#include "asuro.h"

int main(void)
{
Init();

while(1)
{
BackLED(OFF,OFF);
StatusLED(OFF);
}
return 0;
}

und compiliere alles, bekomme ich folgende Fehlermeldung:



Linking: Project1.elf
avr-gcc -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I"C:\ProgramData/AsuroFlash/asuro-lib/lib/inc" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms="new.o" new.o --output Project1.elf -Wl,-Map=Project1.map,--cref -L"C:\ProgramData/AsuroFlash/asuro-lib/lib" -lm -lasuro
new.o: In function `main':
C:\ProgramData\AsuroFlash\Projects\Test/new.c:5: undefined reference to `Init'
make: *** [Project1.elf] Error 1
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: new.c
avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I"C:\ProgramData/AsuroFlash/asuro-lib/lib/inc" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms="new.lst" "new.c" -o new.o

ExitCode 2
>Ready.

Wenn ich nun zusätzlich noch die asuro.c einbinde, funktioniert es.

Warum muss ich bei mir immer die asuro.c einbinden, während in allen anderen Programmen immer die asuro.h eingebunden wird?

Muss ich eventuell noch Einstellungen im AsuroFlash vornehmen?

Installiert habe ich AusroFlash unter C:\ProgramData und WinAVR liegt in C:\WinAVR-20100110
Folgende Einstellungen habe ich bereits angepasst:
COM-Port 4
AVR-Path: C:\WinAVR-20100110
Die restlichen Parameter habe ich so gelassen.

gruß
Andi

markusj
05.03.2014, 16:14
Du musst zusätzliche Qulltextdateien (*.c) in das Makefile mit aufnehmen, sieh dort Mal ab Zeile 40 nach. Den Eintrag solltest du in der Form "src += new.c" vornehmen.

mfG
Markus

Andi1888
05.03.2014, 17:01
Du musst zusätzliche Qulltextdateien (*.c) in das Makefile mit aufnehmen, sieh dort Mal ab Zeile 40 nach. Den Eintrag solltest du in der Form "src += new.c" vornehmen.

mfG
Markus

Und das muss ich jedesmal aufs neue machen?
Wenn ich jetzt ein neues Projekt erstelle um z.B. die BackLED's anzuschalten, und ich schreibe den Quellcode dazu in die neue Datei "lampe.c), dann muss ich diese Datei auch in das Makefile schreiben?
Also wäre es am besten, dass ich der*.c Datei der jeweiligen Projekte immer den selben Namen vergebe damit ich das nicht jedes mal im Makefile anpassen muss?

- - - Aktualisiert - - -

Ok, ich habe nun festgestellt, dass ich in einem neuen Projekt links in der "Projekt-Übersicht" mittels Rechtsklick auf den Projektnamen Dateien hinzufügen kann. Wenn ich dort die "asuro.c" hinzufüge, funktioniert es anscheinend.
Soll ich da immer die asuro.c aus dem Ordner "C:\ProgramData\AsuroFlash\asuro-lib\lib" hinzufügen?
Und kann man einstellen, dass dies immer automatisch geschieht, da man die asuro.c ja immer benötigt?

gruß
Andi

markusj
05.03.2014, 19:10
Und das muss ich jedesmal aufs neue machen?
Wenn du mit dem Makefile arbeitest, ja. Den zweiten Teil deines Beitrages bewerte ich aber so, dass du offenbar mit einer Entwicklungsumgebung arbeitest? In dem Fall kommst du komplett ohne das Makefile aus, wenn die Entwicklungsumgebung sich um den Vorgang kümmert. In dem Fall könntest du asuro.h und asuro.c auch einfach immer in den Projektordner kopieren, das ist ja auch nur Quelltext.

Du kannst in eine Quellcode-Datei aber ruhig etwas mehr Funktionalität hineinstecken als das An-/Ausschalten der Back-LEDs - Zu viele Dateien werden auch irgendwann (ohne sinnvolle Struktur) unübersichtlich.

mfG
Markus

m.a.r.v.i.n
05.03.2014, 21:43
Wenn du mit der AsuroLib v2.8 arbeitest, geht das Erstellen eines neuen Projektes etwas anders.

1. Du kopierst den kompletten Ordner 'FirstTry' aus dem Examples Ordner in einen neuen Ordner deiner Wahl.
2. Dann kannst du sofort loslegen ohne das Makefile zu änderen oder zusätzliche Files zu kopieren. Nim einfach die test.c und schreib dein Programm.
3. Übersetzen starten mit Aufruf der make_all.bat

An das Makefile musst du nur ran:
* wenn sich die Beispiele nicht übersetzen lassen (Anpassen der Pfade, etc)
* wenn du zusätzliche C-Files verwenden willst, die nicht schon in der Lib vorhanden sind
* wenn dein Programm anders heissen soll als test.c

Kein kopieren von Asuro.c oder Asuro.h. Die werden alle aus dem Lib Ordner mit eingebunden.

Andi1888
05.03.2014, 22:33
Wenn du mit der AsuroLib v2.8 arbeitest, geht das Erstellen eines neuen Projektes etwas anders.

1. Du kopierst den kompletten Ordner 'FirstTry' aus dem Examples Ordner in einen neuen Ordner deiner Wahl.
2. Dann kannst du sofort loslegen ohne das Makefile zu änderen oder zusätzliche Files zu kopieren. Nim einfach die test.c und schreib dein Programm.
3. Übersetzen starten mit Aufruf der make_all.bat

An das Makefile musst du nur ran:
* wenn sich die Beispiele nicht übersetzen lassen (Anpassen der Pfade, etc)
* wenn du zusätzliche C-Files verwenden willst, die nicht schon in der Lib vorhanden sind
* wenn dein Programm anders heissen soll als test.c

Kein kopieren von Asuro.c oder Asuro.h. Die werden alle aus dem Lib Ordner mit eingebunden.

Ich verwende doch aber das universelle Programm AsuroFlash (EierlegendeWollmilchSau)
Da funktioniert das ganze etwas anders oder?

gruß
Andi

markusj
06.03.2014, 11:18
Ich verwende doch aber das universelle Programm AsuroFlash (EierlegendeWollmilchSau)
Das AsuroFlash das ich kenne kümmert sich nur um die Übertragung des fertigen Binärprogramms/Hexfile an den ASURO. Mit der ASURO-Bibliothek und Makefiles hat das nichts zu tun. Entweder du hast ein anderes Programm (glaube hier kursierte irgendwann Mal ein AsuroStudio oder sowas?) oder verstehst etwas falsch.

mfG
Markus

Andi1888
06.03.2014, 17:02
Entweder du hast ein anderes Programm (glaube hier kursierte irgendwann Mal ein AsuroStudio oder sowas?).

Richtig, ich verwende dieses (https://www.roboternetz.de/community/threads/22627-Alternative-zu-Flashnnn-exe?p=210858&viewfull=1#post210858) Tool.
Vielleicht kennt sich ja jemand anderes aus, oder Osser (https://www.roboternetz.de/community/members/24162-Osser) selbst hat noch eine Idee.

m.a.r.v.i.n
06.03.2014, 18:09
Ich verwende doch aber das universelle Programm AsuroFlash (EierlegendeWollmilchSau)
Upps, sorry, dass hatte ich übersehen.

Ob das Teil noch mit der aktuellen Lib funktioniert, kann ich nicht sagen. Das Tool wurde leider nicht weitergepflegt. Ich muss mir das noch mal installieren und testen, dann weis ich mehr.
Ein Fehler, der mir spontan einfällt, ist der falsche Pfad zur AsuroLib. Defaultmässig ist 'asuro-lib' eingestellt, installiert wird aber nach 'asuro_lib'.

Das AsuroFlash TestProjekt benutzt eine alte Version der AsuroLib (V2.6). Dort musste immer asuro.c und asuro.h in einen neuen Projekt Ordner kopiert werden.