mikrocontroller.net

Forum: Compiler & IDEs AVR-GCC: Problem beim Compilieren


Autor: Henning (Gast)
Datum:

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

Autor: Jim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein &-Zeichen muss da auch gar nicht stehen. Das bedeutet eigentlich
meistens, dass da irgendeine nicht zulässige Zuweisung gemacht wurde.
Schreib doch mal die bemängelten Zeilen hier rein.

Autor: uli (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
den kompleten source Code gibt es hier:
http://www.ulrichradig.de/
http://www.ulrichradig.de/site/avr_webserver/OpenS...

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.

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohh, da war ich mit dem tippen wohl zu langsam. Werd den Code
ausprobieren und mich hier wieder melden.

Autor: Henning (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist loop_until_bit_is_set definiert?

Autor: Henning (Gast)
Datum:

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

Autor: uli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dürfte an der Programmversion liegen.
Meine Version mit der ich das Programmiert habe.

- GCC 3.3.1

- GNU Binutils 2.14

- avr-libc 0.99.90.20030829

Mfg Ulrich Radig

Autor: uli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Habe mal es getestet es liegt an der Version von AVR GCC
ich bin es schon am ändern. Das es auch mit der neuen Version läuft.

Mfg Ulrich

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Hier der neue Source Code

Mfg Ulrich

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Hilfe. Das Compilieren hat nun geklappt. So kann
ich nun das Projekt auseinander nehmen und dabei C ein wenig besser
verstehen.

Bald geht´s dann auch ans löten.

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.