www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik rfm12lib lässt sich nicht coimpilieren


Autor: Michael W. (michel72)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ,

ich versuche in Codeblock 10.5 mit dem avr-gcc 4.3.2 die RFM12lib 
(http://www.das-labor.org/wiki/RFM12_library) zu compilieren und bekomme 
bei folgender Zeile :
//non-inlined version of rfm12_data
//warning: without the attribute, gcc will inline this even if -Os is set
//non-inlined version of rfm12_data
//warning: without the attribute, gcc will inline this even if -Os is set
void __attribute__ ((noinline)) rfm12_data(uint16_t d)
{
  SS_ASSERT();
  #if !(RFM12_SPI_SOFTWARE)
  SPDR = d>>8;
  while(!(SPSR & (1<<SPIF)));

  SPDR = d & 0xff;
  while(!(SPSR & (1<<SPIF)));

  #else
  spi_data(d >> 8   );
  spi_data(d &  0xff);
  #endif
  SS_RELEASE();
}


//non-inlined version of rfm12_read
//warning: without the attribute, gcc will inline this even if -Os is set
uint16_t __attribute__ ((noinline)) rfm12_read(uint16_t c)
{
  uint16_t retval;
  SS_ASSERT();

  #if !(RFM12_SPI_SOFTWARE)
  SPDR = c>>8;
  while(!(SPSR & (1<<SPIF)));
  retval = SPDR<<8;
  SPDR = c & 0xff;
  while(!(SPSR & (1<<SPIF)));
  retval |= SPDR;

  #else
  retval =  spi_data(c >> 8   );
  retval <<= 8;
  retval |= spi_data(c &  0xff);
  #endif
  SS_RELEASE();
  return retval;
}


diesen Fehler :
Zeile 59 und 79 sind jeweils die Function Header.

Hat Jemand eine Idee ? Ich habe es natürlich auch schon ohne :
_attribute_ ((noinline))
probiert ohne Erfolg.



..\Utils\RFM12lib\include\rfm12_spi.c|59|error: expected ')' before 'd'|

..\Utils\RFM12lib\include\rfm12_spi.c|79|warning: data definition has no 
type or storage class|
..\Utils\RFM12lib\include\rfm12_spi.c|79|warning: type defaults to 'int' 
in declaration of 'uint16_t'|
..\Utils\RFM12lib\include\rfm12_spi.c|79|warning: 'noinline' attribute 
ignored|
..\Utils\RFM12lib\include\rfm12_spi.c|79|error: expected ',' or ';' 
before 'rfm12_read'|

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich vermute mal, das hat nichts mit dem attribute zu tun, der Compiler 
kennt 'uint16_t' nicht, sind die <stdint.h> eingebunden?

Gruß,
Bernhard

P.S.: Ich hasse s, wenn *.c files per include eingebunden werden, das 
ist schlechter Programmierstil!

Autor: Michael W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

danke für den Tipp, werde ich heute Abend gleich mal testen.
Bin jetzt kein C - Crack , aber das die .C includiert wird ist wohl dem 
Umstand zu verdanken, dass diese Lib 2 Wrapper Dateien benötigt.

Gruß
Michael

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ist ja nicht Deine Schuld... man macht sowas meiner Meinung nicht, 
und es geht auch anders...
Ich vermute, das hat manchmal mit Optimierungen zu tun. Wenn man die 
inkludiert, dann kann der Linker unbenutzte Funktionen rausschmeissen. 
Wenn man das anders erreichen will muß man halt Libraries so bauen, wie 
das unter Unix üblich ist...

Aber wie gesagt, ich denke der Compiler kennt die C99 uintxx_t Typen 
nicht...also gcc mit '-std=c99' aufrufen oder <stdint.h> einbinden...

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.