ich habe gerade debian 4.0 installiert kann aber nichts compilieren. es kommt immer die Meldung: make: avr-gcc: Kommando nicht gefunden make: *** [main.o] Fehler 127 ich kann aber auch keine neue Version von avr-gcc installieren!
Cooool39 wrote:
> ich kann aber auch keine neue Version von avr-gcc installieren!
Wieso nicht?
Vielleicht fehlt ja der reguläre gcc, mit dem avr-gcc kompiliert werden soll? (Nur geraten, nicht allzu ernst nehmen)
Es fehlt wohl eher der avr-gcc, bzw. steht er nicht in eimem bekannten Pfad. Also. erst einmal prüfen, ob überhaupt ein avr-gcc installiert ist, und wenn ja, die Pfade richtig einstellen. Oliver
Alle Programme lassen sich per «apt-get» installieren (apt-get install uisp avr-libc binutils-avr gcc-avr). Aber: Die Pakete sind teilweise veraltet, insbesondere aktuelle Versionen der avr-libc sind empfehlenswert. (Auszug aus: http://derjulian.net/mikrocontroller )
Hallo Cooool39, ein paar nützliche Hinweise finden sich auch auf: http://www.heise.de/ct/projekte/machmit/ctbot/wiki/Installationsanleitung#avr-patches Gruss, AndyP
danke erst mal. kann mir einer von euch mal schnell was compilieren? die datein sind im anhang. das wäre echt nett denn die brauch ich umbedingt!
sorry mein fehler! hier ist alles zusamen! http://www.iuse.org/dl/hcan-20071007.tar.gz die datei die ich brauche ist unter /firmware/controllerboard-1612-v01/
Beim ersten Kompilierversuch gibt AVR-GCC aus WINAVR-20070525 einen internen Fehler:
1 | avr-gcc -mmcu=atmega32 -Wall -Werror -Wstrict-prototypes -Os -mcall-prologues -DF_CPU=3686400 -DF_CAN=8000000 -DCAN_SPEED=125000 -I. -I../../canix -I../.. -I../../include -DMCU_atmega32 -DCANIX_SYSLOG -DCANIX_HMS -DCANIX_RTS -DCANIX_EDS -c -o ../../canix/mem_check.o ../../canix/mem_check.c |
2 | ../../canix/mem_check.c:26: internal compiler error: in start_function, at c-decl.c:6035 |
3 | Please submit a full bug report, |
4 | with preprocessed source if appropriate. |
5 | See <URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=browse> for instructions. |
6 | MAKE.EXE: *** [../../canix/mem_check.o] Error 1 |
Die Source (../../canix/mem_check.c) sieht wie folgt aus:
1 | #include <canix/mem_check.h> |
2 | #include <avr/io.h> |
3 | |
4 | #define MASK 0xaa
|
5 | |
6 | extern uint8_t __heap_start; |
7 | |
8 | uint16_t get_mem_unused(void) |
9 | {
|
10 | uint16_t unused = 0; |
11 | uint8_t *p = &__heap_start; |
12 | |
13 | do
|
14 | {
|
15 | if (*p++ != MASK) |
16 | break; |
17 | |
18 | unused++; |
19 | |
20 | } while (p <= (uint8_t*) RAMEND); |
21 | |
22 | return unused; |
23 | }
|
24 | |
25 | void __attribute__ ((naked, section (".init8"))) __init8_mem(void) |
26 | { // hier ist Zeile 26 |
27 | __asm volatile ( |
28 | "ldi r30, lo8 (__heap_start)" "\n\t" |
29 | "ldi r31, hi8 (__heap_start)" "\n\t" |
30 | "ldi r24, %0" "\n\t" |
31 | "ldi r25, hi8(%1)" "\n" |
32 | "0:" "\n\t" |
33 | "st Z+,r24" "\n\t" |
34 | "cpi r30, lo8(%1)" "\n\t" |
35 | "cpc r31, r25" "\n\t" |
36 | "brlo 0b"
|
37 | :
|
38 | : "i" (MASK), "i" (RAMEND+1) |
39 | );
|
40 | }
|
Auslöser für den Fehler ist der Teil
1 | __attribute__ ((naked, section (".init8"))) |
Kommentiert man den ganz oder teilweise (den naked Teil) aus, klappt das Übersetzen. Das ist aber möglicherweise nicht der Sinn des Ganzen. Man kann das Problem durch einen Funktionsprototypen umgehen:
1 | #include <canix/mem_check.h> |
2 | #include <avr/io.h> |
3 | |
4 | #define MASK 0xaa
|
5 | |
6 | extern uint8_t __heap_start; |
7 | |
8 | uint16_t get_mem_unused(void) |
9 | {
|
10 | uint16_t unused = 0; |
11 | uint8_t *p = &__heap_start; |
12 | |
13 | do
|
14 | {
|
15 | if (*p++ != MASK) |
16 | break; |
17 | |
18 | unused++; |
19 | |
20 | } while (p <= (uint8_t*) RAMEND); |
21 | |
22 | return unused; |
23 | }
|
24 | |
25 | void __init8_mem(void) __attribute__ ((naked, section (".init8"))); |
26 | void __init8_mem(void) |
27 | // void __attribute__ ((naked, section (".init8"))) __init8_mem(void)
|
28 | {
|
29 | __asm volatile ( |
30 | "ldi r30, lo8 (__heap_start)" "\n\t" |
31 | "ldi r31, hi8 (__heap_start)" "\n\t" |
32 | "ldi r24, %0" "\n\t" |
33 | "ldi r25, hi8(%1)" "\n" |
34 | "0:" "\n\t" |
35 | "st Z+,r24" "\n\t" |
36 | "cpi r30, lo8(%1)" "\n\t" |
37 | "cpc r31, r25" "\n\t" |
38 | "brlo 0b"
|
39 | :
|
40 | : "i" (MASK), "i" (RAMEND+1) |
41 | );
|
42 | }
|
Das HEX-File ohne sonstige Änderungen ist im Anhang.
danke noch mal! das ist jetzt die hex aus von: /firmware/controllerboard-1612-v01/ oder?
Stefan "stefb" B. wrote: > ../../canix/mem_check.c:26: internal compiler error: in start_function, > at c-decl.c:6035 > Please submit a full bug report, > with preprocessed source if appropriate. Der Bug ist bereits bekannt. Interessant, dass du ihn auch bekommst, ich habe ihn bislang nur gegen die WinAVR-Version des Compilers berichtet gesehen, konnte ihn aber auf FreeBSD und Linux nicht nachvollziehen. Seltsamerweise finde ich den Bugreport im GCC-Bugzilla nicht. Möglicherweise ist er ja inzwischen repariert. > Auslöser für den Fehler ist der Teil >
1 | > __attribute__ ((naked, section (".init8"))) |
2 | >
|
Genau.
> Man kann das Problem durch einen Funktionsprototypen umgehen:
Ja, das ist der sinnvolle workaround.
Stefan "stefb" B. wrote:
> Jörg, das ist WinAVR (20070525) gewesen.
Achso, dann ist meine Welt wieder in Ordnung. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.