Forum: Compiler & IDEs gcc-avr geht nicht unter debian 4.0


von Cooool39 (Gast)


Lesenswert?

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!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Cooool39 wrote:
> ich kann aber auch keine neue Version von avr-gcc installieren!

Wieso nicht?

von Sebastian (Gast)


Lesenswert?

Vielleicht fehlt ja der reguläre gcc, mit dem avr-gcc kompiliert werden 
soll? (Nur geraten, nicht allzu ernst nehmen)

von Oliver (Gast)


Lesenswert?

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

von Werner B. (Gast)


Lesenswert?

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 )

von AndyP (Gast)


Lesenswert?

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

von Cooool39 (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

Das kann nicht kompiliert werden, weil Dateien fehlen.

von Cooool39 (Gast)


Lesenswert?

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/

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Cooool39 (Gast)


Lesenswert?

danke noch mal!

das ist jetzt die hex aus von: /firmware/controllerboard-1612-v01/
oder?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ja genau.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Jörg, das ist WinAVR (20070525) gewesen. Ich hatte für Cooool39 
crosscrosskompiliert ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.