Hallo
Hast du den Path eingetragen? Unter Arbeitsplatz->Eigenschaften->Erweitert->Umgebungsvariablen->Path.Zitat:
Das setup sagt jedoch: kein AVR da! Warum?
Gruß
mic
Druckbare Version
Hallo
Hast du den Path eingetragen? Unter Arbeitsplatz->Eigenschaften->Erweitert->Umgebungsvariablen->Path.Zitat:
Das setup sagt jedoch: kein AVR da! Warum?
Gruß
mic
OK jetz weiß ich wies geht.
Folgendes:
Wer eine alte WinAVR Version hat diese Deinstallieren
Pathvariable löschen (in der Registry und der Systemsteuerung)
-> bei mir waren die komischerweiße unterschiedlich
Neue AVR Version installieren (wegen neuem Compiler)
AVR Asuro Lib instaöllieren
Fehlermeldung ignorieren
Geht.
Jetzt kommt bei mir aber:
print.c:137: warning: pointer targets in passing argument 1 of 'SerPrint' differ in signedness
heißt das das eine Librury doppelt ist oder stimmt der Quellcode von SerPrint nocht?
Mein Programm sieht an der stelle so aus:
PrintInt(msright);
habs aber auch schon so versucht
PrintInt(msright [5]);
die PrintInt sieht so aus:
und die SerPrint soCode:void PrintInt (
int wert)
{
char text [7]; // "-12345"
itoa (wert, text, 10);
SerPrint (text);
}
Code:void SerPrint (
unsigned char *data)
{
unsigned char i = 0;
while (data [i] != 0x00)
UartPutc (data [i++]);
}
Hallo NomiS,
diesen warning kannst du ausnahmsweise mal vergessen.
Die SerPrint()-Funktion erwartet einen String, der mit "unsigned char"-Variablen definiert ist.
Da z.B. ein Aufruf der Funktion mit "SerPrint ("Hallo");" gemacht wird, wird hier leider ein "signed char" in die Funktion gegeben.
Diese Version vom Compiler liefert dir hierfür nun ein warning.
Dieses warning kannst du beheben, indem du in der Funktion PrintInt() die Variable text auf "unsigned char" umbaust. Dann allerdings kann es sein, das die Funktion itoa() rummeckert.
Aber Achtung, nicht bei jedem warning kommst du so ungeschoren davon.
Gruß Sternthaler
@ Sterntaler
Hi danke das du dich hier auch mal einmischst!!!
Ich habe mit der neuen Lib leider immer noch Probleme.
Ich Arbeite mit der neuen AVR Version 20070525.
Diese hat schon eine eigenes make. Ich habe trotzdem noch mal ein make und ein clean ersetllt. Wenn ich nun mein Programm mit dem orginal make ausführe kommt:
mit der selbsterstellten kommt:Code:> "make.exe" all
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT globals.o -MF dep/globals.o.d -c globals.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT adc.o -MF dep/adc.o.d -c adc.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT encoder.o -MF dep/encoder.o.d -c encoder.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT encoder_low.o -MF dep/encoder_low.o.d -c encoder_low.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT i2c.o -MF dep/i2c.o.d -c i2c.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT leds.o -MF dep/leds.o.d -c leds.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT lcd.o -MF dep/lcd.o.d -c lcd.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT motor.o -MF dep/motor.o.d -c motor.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT motor_low.o -MF dep/motor_low.o.d -c motor_low.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT print.o -MF dep/print.o.d -c print.c
print.c: In function 'PrintInt':
print.c:98: warning: pointer targets in passing argument 1 of 'SerPrint' differ in signedness
print.c: In function 'PrintLong':
print.c:137: warning: pointer targets in passing argument 1 of 'SerPrint' differ in signedness
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT rc5.o -MF dep/rc5.o.d -c rc5.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT sound.o -MF dep/sound.o.d -c sound.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT switches.o -MF dep/switches.o.d -c switches.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT time.o -MF dep/time.o.d -c time.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT uart.o -MF dep/uart.o.d -c uart.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT version.o -MF dep/version.o.d -c version.c
avr-ar cru libasuro.a globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o motor.o motor_low.o print.o rc5.o sound.o switches.o time.o uart.o version.o
rm -rf *.o *~
> Process Exit Code: 0
> Time Taken: 00:02
in meinem Ordner erscheint nach dem Compilieren aber kein Hex file und wenn ich nach test.hex suche kommen nur die schon fertigen vom Hersteller.Code:> "D:\ASURO\ASURO_src\FirstTry\Test-all.bat"
D:\ASURO\ASURO_src\FirstTry>make all
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT globals.o -MF dep/globals.o.d -c globals.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT adc.o -MF dep/adc.o.d -c adc.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT encoder.o -MF dep/encoder.o.d -c encoder.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT encoder_low.o -MF dep/encoder_low.o.d -c encoder_low.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT i2c.o -MF dep/i2c.o.d -c i2c.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT leds.o -MF dep/leds.o.d -c leds.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT lcd.o -MF dep/lcd.o.d -c lcd.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT motor.o -MF dep/motor.o.d -c motor.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT motor_low.o -MF dep/motor_low.o.d -c motor_low.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT print.o -MF dep/print.o.d -c print.c
print.c: In function 'PrintInt':
print.c:98: warning: pointer targets in passing argument 1 of 'SerPrint' differ in signedness
print.c: In function 'PrintLong':
print.c:137: warning: pointer targets in passing argument 1 of 'SerPrint' differ in signedness
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT rc5.o -MF dep/rc5.o.d -c rc5.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT sound.o -MF dep/sound.o.d -c sound.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT switches.o -MF dep/switches.o.d -c switches.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT time.o -MF dep/time.o.d -c time.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT uart.o -MF dep/uart.o.d -c uart.c
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -I./inc -MD -MP -MT version.o -MF dep/version.o.d -c version.c
avr-ar cru libasuro.a globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o motor.o motor_low.o print.o rc5.o sound.o switches.o time.o uart.o version.o
rm -rf *.o *~
> Process Exit Code: 0
> Time Taken: 00:02
Was kann ich noch alles falsch gemacht haben. Funktioniert die Lib wenn da Process Exit Code: 0 steht?
aktualisiere das fenster mal, ich hatte mit nem windoof pc mal das probllem dass die hexfiles zwar sa waren, aber erst nach dem druck auf F5 sichtbar wurden...
Hallo NomiS,
ich glaube, dass du aktuell den Wald vor lauter Bäumen nicht siehst. (Ist nicht böse gemeint, sondern liegt in der Natur/Verständnis der Dinge wenn es um eine Lib geht.)
Dein geposteter Screenshot sagt mir folgendes:
- Du rufst im Verzeichnis D:\ASURO\ASURO_src\FirstTry\ die BAT-Datei Test-all.bat auf.
- Dein Makefile übersetzt schön brav alle angegeben Dateien:
--- globals.c
--- adc.c
--- encoder.c
--- encoder_low.c
--- i2c.c
--- leds.c
--- lcd.c
--- motor.c
--- motor_low.c
--- print.c --- mit den 2 warnings zur Funktion SerPrint() wegen signedness
--- rc5.c
--- sound.c
--- switches.c
--- time.c
--- uart.c
--- version.c
Diese Dateien stammen alle aus der Asuro-Lib. Sie haben eigendlich nichts im Verzeichnis D:\...\FirstTry\ verloren. In diesem Verzeichnis wird ja von der ASURO-CD nur das Originalprogramm zum 'ersten Versuch' abgespeichert. Und die Entwickler vom ASURO wusten ja noch nichts davon, dass wir im Forum eine Lib basteln.
Jetzt kommt aber noch aus deinem geposteter Screenshot folgende Zeile:
"avr-ar cru libasuro.a globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o motor.o motor_low.o print.o rc5.o sound.o switches.o time.o uart.o version.o"
Auch dieses Kommando wird fehlerfrei ausgeführt.
Aber was wird damit gemacht?
--- Das Programm avr-ar wird aufgerufen.
--- Steuernde Parameter dafür sind "cru"
Als Ergebnis wird dir die dann angegeben Datei libasuro.a gebaut. Die muss nun im Verzeichnis D:\ASURO\ASURO_src\FirstTry\ 'rumliegen'.
Alle weiteren Angaben mit dem .o am Ende sind die Übersetzten C-Dateien.
Was macht cru? Es sammelt Object-Dateien (*.o) zu/in einer Lib-Datei (*.a)
- c: create (ohne warung, wenn *.a angelegt werden muss)
- r: replace (ersetzen oder neu hinzufügen von *.o Dateien)
- u: update (nur ersetzen, wenn die *.o-Datei neuer ist als der Inhalt in *.a)
(Ruf mal zum Spaß avr-ar in einem DOS-Fenster auf. Nicht erschrecken, es kommen nur die 'paar' Parameter, die man da mitgeben kann.)
Du hast nicht eine HEX-Datei, sondern eine LIB-Datei fehlerfrei erzeugt.
Ich bin mir relativ sicher, das dies aber nicht dein Wunsch ist.
Gibt es in deinem Verzeichnis D:\ASURO\ASURO_src\FirstTry\ noch irgendeine C-Datei, in der du eigenen Programmcode reingeschrieben hast? Meistens wird hier im Forum die Datei test.c benutzt. (Mann/Frau ist ja so faul das Makefile anzupassen.)
Du solltest mal kurz sagen ob du nur die LIB erstellen willst, oder ob du ein eigenes Programm in D:\...\FirstTry\ übersetzen möchtest.
Gruß Sternthaler
Hi Sterntaler,
erst mal zu deiner Frage. Ich möchte mein Programm mit den Funktionen aus der Lib übersetzen.
Also in das ASURO_src habe ich die Lib kopiert da es anfangs nicht funktioniert hat. Das Asuro.h/.c file sind aber die neuen. Es gibt aber die Lib auch noch mal in einem anderen Ordner. Mein c-file liegt in ASURO_src.
Wenn ich aber nur das makefile make.bat clean.bat und mein test.c in dem ordner lasse kommt das:
Ich habe libasuro.a aber in C:\Programmiertools\Winavr\avr\libCode:> "C:\Programmiertools\ASURO_src\FirstTry\Test-all.bat"
C:\Programmiertools\ASURO_src\FirstTry>make all
make: *** No rule to make target `globals.o', needed by `libasuro.a'. Stop.
> Process Exit Code: 2
> Time Taken: 00:00
Das makefile wurde auf C:\Programmiertools\Winavr\ angepasst.
So ich habe das ganze jetzt noch mal anderst versucht.
Ich habe in ASURO_src zwei Ordner.
Den Orginal First try mit:
test.c -> meins
makefile -> verändet auf avr pfad
test-all.bat -> wird von avr als make verwendet
clean.bat -> wird von avr als clean verwendet
dann gibt es den Ordner lib. Das ist der Lib-Ordner aus dem ZipFile.
Dort bin ich auf makelib gegangen und habe das auurolib a file in avr/lib
1.) kopiert -> dann mekert avr
2.) ausgeschnitten dann kommt
ich habe das make auch schon in die lib kopiert und und und. Im moment fallen mir keine Lösungsmöglichkeiten mehr ein.Code:> "C:\Programmiertools\ASURO_src\FirstTry\Test-all.bat"
C:\Programmiertools\ASURO_src\FirstTry>make all
make: *** No rule to make target `globals.o', needed by `libasuro.a'. Stop.
> Process Exit Code: 2
> Time Taken: 00:00
Also bei mir funktioniert das Ganze mit der neuen lib auch nicht. Immerhin findet er inzwischen alle lib-Teile, jedoch erstellt er mir keine hex-Datei.
An was kann das liegen??
Code:
C:\ASURO_SRC\AsuroLib\lib>make all
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
make: *** No rule to make target `test.hex', needed by `all'. Stop.
> Process Exit Code: 2
Hallo,
was treibt ihr beiden (becci und NomiS) eigentlich da? :Haue
NomiS kopiert alle Files aus dem Lib Ordner in den FirstTry Ordner und becci kopiert das Makefile aus dem FirstTry Ordner in den lib Ordner.
So kann das nichts werden.
Also nochmal ganz von Anfang.
Im lib Ordner stehen die Quellfiles der Asuro Lib. Dort gibt es auch ein spezielles Makefile zum Erstellen der Lib, d.h. es wird ein File libasuro.a erzeugt, kein test.hex File. Die erzeugt Lib wird zudem noch in das WinAVR-Lib Verzeichnis kopiert, damit es beim Erzeugen eines Projektes auch gefunden wird. Das alles wird durch Aufruf der Datei make-lib.bat gemacht. Evtl muß man vorher noch im Makefile den Pfad zum WinAVR Lib Verzeichnis anpassen, damit in das richtige Verzeichnis kopiert wird.
im examples\FirstTry Ordner befindet sich ein Beispielprojekt mit einem Makefile zum Erstellen des Beispielsprojektes (das erzeugt eine test.hex).
Zum Erstellen des test.hex Files wird aber die vorher erstellte Asuro Lib benötigt.
Ich hoffe bis zum Wochenende iene neue Asuro Lib veröffentlichen zu können. Dann wird die Installation und das ganze drumherum viel einfacher.
Bis dann.