mikrocontroller.net

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


Autor: Cooool39 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Wieso nicht?

Autor: Sebastian (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 )

Autor: AndyP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Cooool39,

ein paar nützliche Hinweise finden sich auch auf: 
http://www.heise.de/ct/projekte/machmit/ctbot/wiki...

Gruss,
AndyP

Autor: Cooool39 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das kann nicht kompiliert werden, weil Dateien fehlen.

Autor: Cooool39 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beim ersten Kompilierversuch gibt AVR-GCC aus WINAVR-20070525 einen 
internen Fehler:
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
../../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.
See <URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=browse> for instructions.
MAKE.EXE: *** [../../canix/mem_check.o] Error 1

Die Source (../../canix/mem_check.c) sieht wie folgt aus:
#include <canix/mem_check.h>
#include <avr/io.h>

#define MASK 0xaa

extern uint8_t __heap_start;

uint16_t get_mem_unused(void)
{
  uint16_t unused = 0;
  uint8_t *p = &__heap_start;

  do
  {
    if (*p++ != MASK)
      break;

    unused++;

  } while (p <= (uint8_t*) RAMEND);

  return unused;
}

void __attribute__ ((naked, section (".init8"))) __init8_mem(void)
{ // hier ist Zeile 26
  __asm volatile (
      "ldi r30, lo8 (__heap_start)" "\n\t"
      "ldi r31, hi8 (__heap_start)" "\n\t"
      "ldi r24, %0" "\n\t"
      "ldi r25, hi8(%1)" "\n"
      "0:" "\n\t"
      "st Z+,r24" "\n\t"
      "cpi r30, lo8(%1)" "\n\t"
      "cpc r31, r25" "\n\t"
      "brlo 0b"
      :
      : "i" (MASK), "i" (RAMEND+1)
      );
}


Auslöser für den Fehler ist der Teil
__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:
#include <canix/mem_check.h>
#include <avr/io.h>

#define MASK 0xaa

extern uint8_t __heap_start;

uint16_t get_mem_unused(void)
{
  uint16_t unused = 0;
  uint8_t *p = &__heap_start;

  do
  {
    if (*p++ != MASK)
      break;

    unused++;

  } while (p <= (uint8_t*) RAMEND);

  return unused;
}

void __init8_mem(void) __attribute__ ((naked, section (".init8")));
void __init8_mem(void) 
// void __attribute__ ((naked, section (".init8")))  __init8_mem(void)
{
  __asm volatile (
      "ldi r30, lo8 (__heap_start)" "\n\t"
      "ldi r31, hi8 (__heap_start)" "\n\t"
      "ldi r24, %0" "\n\t"
      "ldi r25, hi8(%1)" "\n"
      "0:" "\n\t"
      "st Z+,r24" "\n\t"
      "cpi r30, lo8(%1)" "\n\t"
      "cpc r31, r25" "\n\t"
      "brlo 0b"
      :
      : "i" (MASK), "i" (RAMEND+1)
      );
}


Das HEX-File ohne sonstige Änderungen ist im Anhang.

Autor: Cooool39 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke noch mal!

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
>
> __attribute__ ((naked, section (".init8")))
> 

Genau.

> Man kann das Problem durch einen Funktionsprototypen umgehen:

Ja, das ist der sinnvolle workaround.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:

> Jörg, das ist WinAVR (20070525) gewesen.

Achso, dann ist meine Welt wieder in Ordnung. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.