Forum: Mikrocontroller und Digitale Elektronik Problem RFM12 Library von Manuel Stahl


von Stefan S. (eric996)


Lesenswert?

Moin,

mache gerade Gehversuche mit einem RFM12 Modul.
Benutze die Library von der Seite
http://www.mikrocontroller.net/articles/AVR_RFM12 von Manuel Stahl
Version: RFM12_V3.zip

SW: AVR Studio    4.18.684
HW: STK500 mit ATtiny 2313

Hauptroutine sieht so aus:

#include "rfm12.h"
void main ()
{
 RFM12_init();
while(1)
 {  }
 }
rfm12.h + rfm12.c +fifo.h sind includiert

Beim Compilierversuch wird sofort der Fehler:

/rfm12.h:161: error: expected ')' before 'autoLock' angezeigt
Muss noch etwas in die Hauptroutien eingebunden werden?

Gruß Eric

von Hunt W. (hunt_work_er)


Lesenswert?

Zeig doch mal Zeile 161 (150 bis 170) aus der rfm12.h
Offenbar eine ')' vergessen ;)

von AVR (Gast)


Lesenswert?

Hallo,

das ist der Bereich

#define RFM12FREQ(freq)  ((freq-430.0)/0.0025)   // macro for 
calculating frequency value out of frequency in MHz


void RFM12_init(void);


*void RFM12_setDataFilter(bool autoLock, bool fastMode, bool analog, 
uint8_t dqdThres);*


void RFM12_setReceiverBandwidth(RFM12_VDI_t vdi, RFM12_RxBW_t bandwidth, 
RFM12_GAIN_t gain, RFM12_RSSI_t drssi);


void RFM12_setCenterFrequency(uint16_t freq);


void RFM12_setBaudrate(uint32_t baud);


void RFM12_setTransmitPower(RFM12_Power_t power, RFM12_TxDev_t 
deviation);


uint8_t RFM12_dataInReceiveBuffer();


uint8_t RFM12_receiveByte();


uint8_t RFM12_transmitByte(uint8_t data);


inline uint16_t RFM12_status(void);

#endif /*RFM12_H_*/

von c-hater (Gast)


Lesenswert?

AVR schrieb im Beitrag #3194332:

> *void RFM12_setDataFilter(bool autoLock, bool fastMode, bool analog,
> uint8_t dqdThres);*

Das sieht ziemlich eigenartig aus. Etwa so, als wäre es mal 
auskommentiert gewesen, aber irgendwie sind die '/' vor bzw. nach den 
'*' verloren gegangen.

So, wie es da steht, macht es jedenfalls keinen Sinn.

Mal abgesehen davon, daß überflüssige Füllworter wie 
'void'-Funktionsergebnisse sowieso keinen Sinn machen, aber das ist ein 
ganz anderes Thema. In der Krücke, die du und viele andere für eine 
Programmiersprache halten, muß man das halt so hinschreiben, auch wenn 
es völlig redundant ist.

von Stefan W. (dl6dx)


Lesenswert?

Eric S. schrieb:
1
#include "rfm12.h"
2
3
void main ()
4
 {
5
 RFM12_init();
6
 while(1)
7
   {
8
   }
9
 }

> Beim Compilierversuch wird sofort der Fehler:
> /rfm12.h:161: error: expected ')' before 'autoLock' angezeigt


AVR schrieb im Beitrag #3194332:
1
void RFM12_setDataFilter(bool autoLock, bool fastMode, bool analog, uint8_t dqdThres);

Du musst auch die Systemheader einfügen, die die entsprechenden 
Datentypen definieren. Im Minimum sehe ich da
1
#include <stdint.h>
2
#include <stdbool.h>

Grüße

Stefan

PS: Falls du noch kein Grundlagenbuch über C durchgearbeitet hast: 
Jetzt ist der richtige Zeitpunkt, das zu tun.

von AVR (Gast)


Lesenswert?

Danke für die Info,

die Systemheader habe im im Vorfeld schon mal eingebunden.

#include "rfm12.h"
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <util/delay.h>

void main ()
{
  RFM12_init();

while(1)
  {  }

 }
was den Compiler aber nicht veranlasst wieder den Fehler:
rfm12.h:161: error: expected ')' before 'autoLock'
auszuspucken.

c-hater schrieb:
> Das sieht ziemlich eigenartig aus. Etwa so, als wäre es mal
> auskommentiert gewesen, aber irgendwie sind die '/' vor bzw. nach den
> '*' verloren gegangen.

Die Sterne sind mein Fehler, habe versucht die Zeile fett 
darzustellen.

von Stefan W. (dl6dx)


Lesenswert?

AVR schrieb im Beitrag #3195044:
> #include "rfm12.h"
> #include <stdint.h>
> #include <stdbool.h>

Ändere mal die Reihenfolge.

Erst die Systemheader, dann die des Projekts.

In rfm12.h werden Definitionen aus stdint.h und stdbool.h verwendet. 
Woher soll der Compiler die denn kennen, wenn du diese Header erst nach 
rfm12.h einbindest?

Viele Grüße

Stefan

von Stefan S. (eric996)


Lesenswert?

Hallo Stefan,

habe die include Reihenfolge geändert, ohne Erfolg.

Bei Einfügen der //#include <stdbool.h> habe ich gleich 37 Errors
Danke für deine Mühe.

Gruß Eric

von BasicFanHasser (Gast)


Lesenswert?

c-hater schrieb:
> Mal abgesehen davon, daß überflüssige Füllworter wie
> 'void'-Funktionsergebnisse sowieso keinen Sinn machen, aber das ist ein
> ganz anderes Thema. In der Krücke, die du und viele andere für eine
> Programmiersprache halten, muß man das halt so hinschreiben, auch wenn
> es völlig redundant ist.

void und kein void ist in C redundant? Aus welcher Basic-Grotte bist du 
denn entfleucht?


MfG

von Stefan W. (dl6dx)


Lesenswert?

Hi Eric,

poste mal deinen kompletten Programmcode und die RFM12-Header (bitte
als Attachment), damit ich das mal selbst compilieren kann.

Sonst kommen wir nicht weiter.

Grüße

Stefan

von Stefan S. (eric996)


Angehängte Dateien:

Lesenswert?

Hi Stefan,

hier die Dateien.
Habe den Code aus diesem Thread

Beitrag "bidirektionale RS232 Funkbrücke mit RFM12"

der funktionierte sofort.

Gruß Eric

von Stefan W. (dl6dx)


Lesenswert?

So, hab das mal durch den Compiler laufen lassen.

Wird stdbool.h mit eingebunden, ist in rfm12.h nur ein Fehler (die nicht 
definierte inline-Funktion RFM12_status).

Mit rfm12.c sieht es aber deutlich schlechter aus. Das ist nämlich für 
eine CPU mit SPI-Interface vorgesehen (hat der Tiny2313 nicht), 
weiterhin wird der Timer 5 verwendet, den es nur bei den "ganz großen" 
ATMega gibt (z.B. ATMega 2560).

Da wirst du etwas mehr anpassen müssen.

Grüße

Stefan

PS: Zum obsoleten Datentyp prog_uint8_t siehe z.B. den 
Beitrag "Problem mit "prog_uint8_t" bei AVR Studio 6"

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.