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
Zeig doch mal Zeile 161 (150 bis 170) aus der rfm12.h Offenbar eine ')' vergessen ;)
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_*/
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.
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.
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.
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
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
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
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
Hi Stefan, hier die Dateien. Habe den Code aus diesem Thread Beitrag "bidirektionale RS232 Funkbrücke mit RFM12" der funktionierte sofort. Gruß Eric
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.