AVR-GCC: Problem beim Compilieren

Gast #177420
Lesenswert?
• ▲
▼
ich will mich in C fuchsen und hab dazu mittlerweile alle Hürden
geschaft, kann nun Quelltext schreiben und compilieren und nun auch in
den AVR laden. Soweit alles wunderbar. Aber: da ich einen kleinen
Webserver aufbauen möchte und mich das Projekt von Ulrich Radig
interessiert habe ich seinen Quellcode geladen und in PN2 geöffnet.
will ich nun compilieren klappt das nicht, obwohl ich die unveränderten
original Dateien von seiner Website verwende. Der Compiler beendet mit
follgender Meldung:
---
Compiling: main.c

avr-gcc -c -mmcu=atmega128 -I. -g -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 main.c -o main.o
In file included from main.c:51:
./device.c: In function `Write_Ethernet_Frame':
./device.c:154: error: invalid lvalue in unary `&'
In file included from main.c:76:
./interrupt4.c: In function `__vector_5':
./interrupt4.c:120: error: invalid lvalue in unary `&'
./interrupt4.c:126: error: invalid lvalue in unary `&'
make.exe: *** [main.o] Error 1

> Process Exit Code: 2
---
mir stellt sich die Frage, was ich falsch eingestellt haben könnte bzw.
was am Code falsch ist. in der Datei device.c gibt es in Zeile 154
garkein & Zeichen. in der 2ten Datei sieht es in den beiden Zeilen
genauso trübe für & Zeichen aus.

Ich kann leider nur rätselraten: zB. müssen alle .c Dateien im makefile
eingetragen werden, auch wenn sie in der main.n includiert werden?

Vielleicht hängt es auch ganz woanders. wenn jemand einen Tip hat bitte
hier melden.

Ich wollte das Archiv von Ulrichs Webserver neu laden, konnte das aber
nicht, weil sich der Browser scheinbar in einer Reload Endlosschleife
aufhängt. Ich hab nur die Dateien der Version 1.04 auf Platte gelagert.
Welche Version die Aktuelle ist weiß ich leider auch nicht.

Danke schonmal für jede Hilfe in Voraus!
Gast #177422
Lesenswert?
• ▲
▼
hallo,

Der Code wurde nunmehr von mehreren Personen getestet ich nehme mal
nicht an das es am Code liegt.
@Henning gebe mal Nachricht ob die Einstellungen klappen die ich
zugemailt habe.

Mfg Ulrich
Gast #177423
Lesenswert?
• ▲
▼
den kompleten source Code gibt es hier:
http://www.ulrichradig.de/
http://www.ulrichradig.de/site/avr_webserver/OpenSource/SourceCodeCPP_V1.04.zip

die Funktion Write_Ethernet_Frame, die bemängelt wird, sieht so aus:
--
void Write_Ethernet_Frame (char *buffer,unsigned int bufferlen)
{
  if (bufferlen < 0x40)
    {
    for (int a = (bufferlen-4);a <= 0x44;a++)
      {
      buffer[a] = 0x20;
      }
    bufferlen = 0x40;
    }

  WriteRTL (cr,0x22);
  WriteRTL (tpsr,txstart);
  WriteRTL (rsar0,0x00);
  WriteRTL (rsar1,0x40);
  WriteRTL (isr,0xFF);
  WriteRTL (rbcr0,(bufferlen & 0x00ff) - 4);
  WriteRTL (rbcr1,(bufferlen & 0xff00) >>8);
  WriteRTL (cr,0x12);

  for (int a = 0; a < (bufferlen - 4);a++)
    {
    WriteRTL (rdmaport,buffer[a]);
    }

--->  loop_until_bit_is_set(ReadRTL(isr),rdc);

  WriteRTL (tbcr0,(bufferlen & 0x00ff) - 4);
  WriteRTL (tbcr1,(bufferlen & 0xff00) >>8);
  WriteRTL (cr,0x24);
}
--
die zeile mit dem Pfeil ist Nr. 154

die Datei interrupt4.c habe ich mal angehängen, um es hier
übersichtlicher zu machen. Die Function __vector_5 kann ich darin
allerdings nicht finden der Fehler zeigt in SIGNAL (SIG_INTERUUPT4) auf
die Zeilen "if (bit_is_set(..." wenn ich das noch richtig in
Erinnerung habe (bin grad an nem anderen Rechner)

Die Fehlermeldung deutet ja eigentlich auf einen fehler im Quellcode.
Nur kann ich damit leider nichts anfangen, denn ich will C ja erst mit
diesem Projekt lernen. Habe bislang Delphi und Konsorten am PC
programmiert bzw. Asm was Elektronik angeht.
Angehängte Dateien:
Gast #177425
Lesenswert?
• ▲
▼
Das Problem ist immernoch das selbe. Auch verwende ich die selben
Einstellungen in pm2. Ebenfalls habe ich Versucht make per Komandozeile
zu starten, es follt aber die selbe Ausgabe. es wird also vermutlich
wirklich an meinen Programm Versionen liegen...

@ulrich
es währe nett, wenn du deine Programmversionen checken kannst, ich
verwende

- GNU Binutils 2.15:
- GCC 3.4.1:
- avr-libc 1.0.4:
- Programmers Notepad 2.0.5.34 (was aber wohl unerheblich ist)

Hab die Versionsnummern aus der Readme auf dem WinAVR Verzeichnis. Ist
also nicht soo viel Aufwand das zu prüfen. Danke im Voraus.
Gast #177427
Lesenswert?
• ▲
▼
die betreffende Befehlzeile ist also:
loop_until_bit_is_set(ReadRTL(isr),rdc);

ist wie follgt definiert: (habs in der sft_defs.h gefunden)
#define loop_until_bit_is_set(sfr,bit) do { } while (bit_is_clear(sfr,
bit))

und ruft wiederum
#define bit_is_clear(sfr, bit)   (!(_SFR_BYTE(sfr) & _BV(bit)))

aus. dh. es muss ein sfr sein, das ReadRTL liefert.

und da ReadRTL wie follgt definiert ist "int ReadRTL (char
rtl_addr)"
kommt ein integer wert zurück. wohl in einem register wie r16. wenn das
richtig ist dürfte ja dort der hänger sein.
aber: integer ist größer als r16 fassen kann (zumindestens, wie ich es
kenne) und ziehlt die fehlermeldung wirklich darauf ab?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren