ich denke, so resige änderungen wirds ncht mehr geben.
die .c dateien müssen auch mit kopiert werden.
hinzufügen oder includieren brauchst du sie glaube ich nicht, sondern das passiert durch die .a-datei (sofern ich das richtig kapiert habe)
Druckbare Version
ich denke, so resige änderungen wirds ncht mehr geben.
die .c dateien müssen auch mit kopiert werden.
hinzufügen oder includieren brauchst du sie glaube ich nicht, sondern das passiert durch die .a-datei (sofern ich das richtig kapiert habe)
Hallo inka, (auch damaltor),
NEIN, die C-Dateien brauchen nicht irgendwohin kopiert zu werden!
Es ist ausreichend, wenn die Entwicklungsumgebung weiss wo die LIB ist. Da die LIB die Datei Datei libasuro.a IST, und sie in das Standard-Verzeichnis für Library's von euch kopiert werde soll, findet sie eigendlich jede Umgebung ganz alleine.
Hier noch ein Tipp:
Wo eigendlich ist das LIB-Verzeichnis?
inka hat oben als Muster c:/WinAVR/avr/lib angegeben. Das müsste für die meisten auch OK sein.
Ich selber installiere alle Programme immer an einer anderen Stelle, dann ist der Pfad zur LIB aber auch anders. Bei mir heist es dann C:\Programme\Meine\Prog\AVR-Win\avr\lib.
Wichtig: Wenn ihr nicht sicher seid, wo das Lib-Verzeichnis ist, sucht einfach nach "ranlib.exe", bei mir kommt dann C:\Programme\Meine\Prog\AVR-Win\avr\bin. Jetzt seid ihr sehr dicht bei dem Lib-Verzeichnis.
(Upss, hoffe, dass das hilft)
Hier noch mal eine weitere KurzInfo (oben schon erwähnt):
- alte, original-Datei asuro.c zerlegt in viel *.c-Dateien
- alle *.c-Dateien werden zu *.o übersetzt.
- alle *.o-Dateien werden in der asuro.a NUR zusammengefasst.
---> Alles was notwendig ist, ist IN der asuro.a-Datei.
Die 'blöde' asuro.h ist nur dafür da, damit der Compiler weiss, dass es das Zeug überhaupt gibt. (Natürlich auch für die dort definierten #define-Zeilen)
hi Sternthaler,
werden die neuen *.c dateien auch auf netzwerklaufwerken gesucht (und gefunden?), muss ich den pfad dahin nicht angeben?
hier ein versuch, wie es eben nicht geht :-( :
ich habe die lib mit hilfe der setup.exe in das netzwerkverzeichnis Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib installiert. Die installation verlief problemlos...
beim compilieren kommen diese meldungen:
ich habe in avr noch die folgenden verzeichnise mit angegen:Code:rm -rf herman_sw_linie.o herman_sw_linie.elf dep/* herman_sw_linie.hex herman_sw_linie.eep
Build succeeded with 0 Warnings...
avr-gcc.exe -I"Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc2\lib\lib\inc" -I"Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\AsuroLib\lib" -mmcu=atmega8 -Wall -gdwarf-2 -DF_CPU=8000000UL -Os -fsigned-char -MD -MP -MT herman_sw_linie.o -MF dep/herman_s
w_linie.o.d -c ../hermann_sw_linie/herman_sw_linie.c
avr-gcc.exe -mmcu=atmega8 herman_sw_linie.o -o herman_sw_linie.elf
herman_sw_linie.o: In function `RaceStart':
../hermann_sw_linie/herman_sw_linie.c:100: undefined reference to `PollSwitch'
../hermann_sw_linie/herman_sw_linie.c:101: undefined reference to `PollSwitch'
../hermann_sw_linie/herman_sw_linie.c:111: undefined reference to `StatusLED'
../hermann_sw_linie/herman_sw_linie.c:114: undefined reference to `Msleep'
../hermann_sw_linie/herman_sw_linie.c:117: undefined reference to `StatusLED'
../hermann_sw_linie/herman_sw_linie.c:118: undefined reference to `BackLED'
../hermann_sw_linie/herman_sw_linie.c:122: undefined reference to `PollSwitch'
../hermann_sw_linie/herman_sw_linie.c:123: undefined reference to `PollSwitch'
../hermann_sw_linie/herman_sw_linie.c:131: undefined reference to `Msleep'
../hermann_sw_linie/herman_sw_linie.c:134: undefined reference to `BackLED'
herman_sw_linie.o: In function `main':
../hermann_sw_linie/herman_sw_linie.c:47: undefined reference to `Init'
../hermann_sw_linie/herman_sw_linie.c:51: undefined reference to `FrontLED'
../hermann_sw_linie/herman_sw_linie.c:52: undefined reference to `MotorDir'
../hermann_sw_linie/herman_sw_linie.c:53: undefined reference to `MotorSpeed'
../hermann_sw_linie/herman_sw_linie.c:57: undefined reference to `LineData'
../hermann_sw_linie/herman_sw_linie.c:67: undefined reference to `BackLED'
../hermann_sw_linie/herman_sw_linie.c:76: undefined reference to `BackLED'
make: *** [herman_sw_linie.elf] Error 1
Build failed with 17 errors and 0 warnings...
Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\lib\ (da sind die *.c dateien)
und
Y:\georg\hobby\roboter\asuro\_asuro_lib\2_7_rc3\As uroLib\lib\inc\ (da ist die asuro.h z.b.)
- die vom avr mit "undefined reference to " gemeldeten befehle sind doch schon mit der lib 2.6.1 gelaufen, oder? Sind die in der 2.7 nicht mehr drin?
deshalb habe ich mit der 2.7. lib weiter experimentiert:
- alle neuen *.c als sourcefiles dazu-addiert/als sourcefiles hinzugefügt
- das verzeichnis mit den *.h dateien in den project einstellungen hinzugefügt
das kompilieren verlief ohne fehlermeldung, das hexfile hat allerdings nicht weniger als die 42 ursprünglichen pages sondern 69!
Hat man damit eines der angestrebten ziele verfehlt? Oder mache ich etwas falsch?
das prinzip der geteilten lib ist, dass nur die funktionen die gebraucht werden auch kompiliert werden. wenn aber alle dateien zugefügt wurden, dann werden auch alle kompiliert, und das programm ist riesig...
muss ich dann entscheiden welche *.c notwendig ist? Für einen anfänger schwierig - da war die asuro.c als ganzes einfacher :-(
nein. du musst nur die .h datei includieren. durch diese wird dann in der .a datei geschaut welche .c dateien benötgt werden (bzw. .o-dateien). theoretisch sollte das alles sien.
Hallo m.a.r.v.i.n,
da das Programm examples/IRCollisionTest der Asuro Library v270rc3 nicht funktioniert, habe ich mich an Dein Posting erinnert und endlich Deinen Vorschlag mit folgendem Programm getestet:Zitat:
Zitat von m.a.r.v.i.n
Leider funktioniert es nicht richtig:Code:#include "asuro.h"
char *msgG="GREEN\r\n";
char *msgR="RED\r\n";
char *something=NULL;
int main(void)
{
Init();
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
OCR2 = 0xF7; // Pulsbreite 8
while (1)
{
// "magic_1"
UCSRB = 0; // UART TX disable
OCR2 = 0xF7; // Pulsbreite 8
if (PIND & (1 << PD0))
{ StatusLED(GREEN); something=msgG; }
else
{ StatusLED(RED); something=msgR; }
// "magic_2"
OCR2 = 0x91; // Pulsbreite fuer 36kHz
SerPrint(something);
// Msleep(50);
}
return 0;
}
Wieso kommt RED so selten, obwohl ich den Abstand auch klein und groß gemacht habe?
- ohne SerPrint() ist der LED-Output OK
- mit SerPrint() ohne Msleep() gibt's nur GREEN, unabhängig vom Abstand
- mit SerPrint() und Msleep(50) gibt es ab und zu sogar "Audio" (bell character), und folgenden Output:
Code:GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
GREEN
REEN
GREEN
FREEN
GREEN
GREEN
GREEN
GREEN
FREEN
...
Und vor allem, wieso wird nicht RED in einer Zeile geschrieben, sondern REEN, FREEN, ...?
Hallo Hermann,
ich hatte es mit dem folgendem Programm probiert.
Hier erfolgt eine serielle Ausgabe allerdings nur, wenn eine Taste gedrückt wurde.
Mit deinem Programm bekomme ich dasselbe Ergebnis wie du. Merkwürdig. :-kCode:int main(void)
{
unsigned char sw;
Init();
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
ocr2 = 0xFE;
while (1)
{
UCSRB = 0;
OCR2 = ocr2;
if (PIND & (1 << PD0))
StatusLED(GREEN);
else
StatusLED(RED);
sw = PollSwitch();
if (sw & 0x01)
ocr2 = 0xFE; //Pulsbreite 1
if (sw & 0x02)
ocr2 = 0xFD; //Pulsbreite 2
if (sw & 0x04)
ocr2 = 0xFB; //Pulsbreite 4
if (sw & 0x08)
ocr2 = 0xF7; //Pulsbreite 8
if (sw & 0x10)
ocr2 = 0xEF; //Pulsbreite 16
if (sw & 0x20)
ocr2 = 0x90; //Pulsbreite 110
if (sw)
{
OCR2 = 0x91;
PrintInt(sw);
SerPrint(" ");
PrintInt(ocr2);
SerPrint("\r\n");
}
// Msleep(100);
}
return 0;
}