Forum: Mikrocontroller und Digitale Elektronik CC1101 + Arduino + panstamp libary fehler


von Jannis P. (janpeter)


Lesenswert?

Moin!
Ich versuche derzeit meinen CC1101 zu flashen. Der Sender hat folgenden 
Code:
1
#include "EEPROM.h"
2
#include "cc1101.h"
3
4
CC1101 cc1101;
5
6
#define LEDOUTPUT 7
7
8
// counter to get increment in each loop
9
byte counter;
10
byte b;
11
byte syncWord = 199;
12
13
void blinker(){
14
     digitalWrite(LEDOUTPUT, HIGH);
15
     delay(100);
16
     digitalWrite(LEDOUTPUT, LOW);
17
     delay(100);
18
}
19
20
void setup()
21
{
22
 Serial.begin(38400);
23
 Serial.println("start");
24
25
 // setup the blinker output
26
 pinMode(LEDOUTPUT, OUTPUT);
27
 digitalWrite(LEDOUTPUT, LOW);
28
29
 // blink once to signal the setup
30
 blinker();
31
 
32
 // reset the counter
33
 counter=0;
34
 Serial.println("initializing...");
35
 // initialize the RF Chip
36
 cc1101.init();
37
 cc1101.reset();
38
 cc1101.setSyncWord(&syncWord, false);
39
 cc1101.setCarrierFreq(CFREQ_868);
40
 cc1101.disableAddressCheck();
41
 
42
 Serial.print("CC1101_PARTNUM "); //cc1101=0
43
 b=cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER);
44
 Serial.println(b);
45
 b=cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER);
46
 Serial.print("CC1101_VERSION "); //cc1101=4
47
 Serial.println(b);  
48
 Serial.print("CC1101_MARCSTATE ");
49
 Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
50
 
51
 Serial.println("device initialized");
52
}
53
54
void send_data() {
55
CCPACKET data;
56
 data.length=1;
57
 byte blinkCount=counter++;
58
 data.data[0]=blinkCount;
59
 Serial.print("CC1101_MARCSTATE ");
60
s Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
61
 if(cc1101.sendData(data)){
62
   Serial.print("sent ok :)");
63
   blinker();
64
 }else{
65
   Serial.print("sent failed :(");
66
   blinker();
67
   blinker();
68
 }  
69
}
70
71
void loop()
72
{
73
 send_data();
74
 Serial.println("loop done");
75
 delay(1000);
76
}



Wenn ich auf Flashen klicke kommt er aber nicht mal durchs kompillieren. 
Folgende Fehlermeldung:
1
Sketch wird kompiliert...
2
"C:\Users\Jan\Desktop\arduino-1.8.0\hardware\tools\avr/bin/avr-g++" -c -g -Os  -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10800 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Users\Jan\Desktop\arduino-1.8.0\hardware\arduino\avr\cores\arduino" "-IC:\Users\Jan\Desktop\arduino-1.8.0\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Users\Jan\Desktop\arduino-1.8.0\hardware\arduino\avr\libraries\EEPROM\src" "-IC:\Users\Jan\Desktop\arduino-1.8.0\libraries\panstamp" "C:\Users\Jan\AppData\Local\Temp\arduino_build_460993\sketch\CC1101-Senden.ino.cpp" -o "C:\Users\Jan\AppData\Local\Temp\arduino_build_460993\sketch\CC1101-Senden.ino.cpp.o"
3
In file included from C:\Users\Jan\Documents\Arduino\CC1101-Senden\CC1101-Senden.ino:3:0:
4
5
C:\Users\Jan\Desktop\arduino-1.8.0\libraries\panstamp/cc1101.h: In function 'void setup()':
6
7
C:\Users\Jan\Desktop\arduino-1.8.0\libraries\panstamp/cc1101.h:306:10: error: 'byte CC1101::readReg(byte, byte)' is private
8
9
     byte readReg(byte regAddr, byte regType);
10
11
          ^
12
13
CC1101-Senden:44: error: within this context
14
15
  b=cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER);
16
17
                                                         ^
18
19
In file included from C:\Users\Jan\Documents\Arduino\CC1101-Senden\CC1101-Senden.ino:3:0:
20
21
C:\Users\Jan\Desktop\arduino-1.8.0\libraries\panstamp/cc1101.h:306:10: error: 'byte CC1101::readReg(byte, byte)' is private
22
23
     byte readReg(byte regAddr, byte regType);
24
25
          ^
26
27
CC1101-Senden:46: error: within this context
28
29
  b=cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER);
30
31
                                                         ^
32
33
In file included from C:\Users\Jan\Documents\Arduino\CC1101-Senden\CC1101-Senden.ino:3:0:
34
35
C:\Users\Jan\Desktop\arduino-1.8.0\libraries\panstamp/cc1101.h:306:10: error: 'byte CC1101::readReg(byte, byte)' is private
36
37
     byte readReg(byte regAddr, byte regType);
38
39
          ^
40
41
CC1101-Senden:50: error: within this context
42
43
  Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
44
45
                                                                        ^
46
47
C:\Users\Jan\Documents\Arduino\CC1101-Senden\CC1101-Senden.ino: In function 'void send_data()':
48
49
CC1101-Senden:61: error: 's' was not declared in this scope
50
51
 s Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
52
53
 ^
54
55
Bibliothek EEPROM in Version 2.0 im Ordner: C:\Users\Jan\Desktop\arduino-1.8.0\hardware\arduino\avr\libraries\EEPROM  wird verwendet
56
Bibliothek panstamp im Ordner: C:\Users\Jan\Desktop\arduino-1.8.0\libraries\panstamp (legacy) wird verwendet
57
exit status 1
58
within this context

Kann mir jemand helfen was ich falsch mache? Googlen hat leider kein 
Erfolg gebracht :/
Danke!

von Arduinoversager (Gast)


Lesenswert?

Jannis P. schrieb:
> Ich versuche derzeit meinen CC1101 zu flashen.

Jannis P. schrieb:
> Kann mir jemand helfen was ich falsch mache?

Nein, ich kann dir nicht helfen. Denn diesen Baustein
kann man nicht flashen da er gar kein Flash hat.

Aber vielleicht kannst du die Features hochskillen dann
kann man ihn vielleicht doch flashen.

von Kaj (Gast)


Lesenswert?

Was der Fehler ist, steht da doch:
1
error: 'byte CC1101::readReg(byte, byte)' is private

Du benutzt eine private Funktion ausserhalb der Klasse.

von Jannis P. (janpeter)


Lesenswert?

Kaj schrieb:
> Was der Fehler ist, steht da doch:error: 'byte
> CC1101::readReg(byte, byte)' is private
>
> Du benutzt eine private Funktion ausserhalb der Klasse.

Hey danke für die Antwort!
D.h.:
in den dateien

#include "EEPROM.h"
#include "cc1101.h"

die ich aus der Libary ziehe ist dann irgendwas falsch deklariert bzw 
nicht passend für meinen Sketch?
Ich schau mal ob ich ne andere Version der Libary finde oder das 
bearbeiten kann.

von aufmerksamer Leser (Gast)


Lesenswert?

Jannis P. schrieb:
> D.h.:
> in den dateien
>
> #include "EEPROM.h"
> #include "cc1101.h"
>
> die ich aus der Libary ziehe ist dann irgendwas falsch deklariert bzw
> nicht passend für meinen Sketch?

Dein Sketch benutzt Funktionen, die nur bibliotheksintern verwendet 
werden sollen. Das, was Du da abbilden willst, muss anders gehen. Am 
besten die Doku zur Bibliothek noch mal lesen und den Sketch umschreiben 
...

Natürlich kannst Du diese Funktion in der cc1101.h auch aus "private" in 
den Bereich "public" ziehen, das ist aber ein übler Hack.

von Nixversteher (Gast)


Lesenswert?

aufmerksamer Leser schrieb:
> Am besten die Doku zur Bibliothek noch mal lesen und den
> Sketch umschreiben

Copy & Paste Maker verstehen nicht eine Doku zur Bibliothek,
sie wissen auch nichts von einer Klasse, geschweige denn
was Public oder Private ist. Deswegen ist jeder Ansatz, Hilfe
zur Selbsthilfe zu geben, sinnlos. Das sollte bereits aus
dem ersten Satz erkennbar sein:

Jannis P. schrieb:
> Ich versuche derzeit meinen CC1101 zu flashen.

von Kaj (Gast)


Lesenswert?

Jannis P. schrieb:
> die ich aus der Libary ziehe ist dann irgendwas falsch deklariert bzw
> nicht passend für meinen Sketch?
Nun, das kann man jetzt sehen wie man will.

Entweder man sieht es so wie du, naemlich dass in dem Code der "Lib" 
etwas falsch ist. Oder man betrachtet es so, dass Du die "Lib" falsch 
benutzt, naemlich nicht so, wie sich der Entwickler der "Lib" das 
gedacht hat.
Letzteres ist die verbreitetere Ansicht da man davon ausgehen kann, dass 
sich der Entwickler der "Lib" (hoffentlich(!)) etwas dabei gedacht hat.

Um das Problem zu verstehen muesstest du dich mal ganz kurz mit OOP, C++ 
und Klassen beschaeftigen.


Ich hab mal kurz in die Headerdatei reingeschaut:
https://github.com/raimue/arduino/blob/master/libraries/panstamp/cc1101.h

Hiernach ist die entsprechende Funktion public und sollte aufrufbar 
sein.
Abgesehen davon ist das Teil aber, wie bei nahezu allem Arduino-Code, 
einfach ein grauss...

von Kaj (Gast)


Lesenswert?

Ich hab deinen Code gerade mal versucht zu compilieren...
1
s Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);

Ich weiss nicht was das 's' da am Zeilen anfang macht, aber das gehoert 
da nicht hin. Wenn ich das 's' da entferne dann compiliert der Code bei 
mir. Gibt zwar einen haufen Warnungen, aber es compiliert.

von Jannis P. (janpeter)


Lesenswert?

Kaj schrieb:

> Oder man betrachtet es so, dass Du die "Lib" falsch
> benutzt, naemlich nicht so, wie sich der Entwickler der "Lib" das
> gedacht hat.

Kann durchaus sein, da die panstamp Lib ja eigentlich für das 
Panstamp/Stick board gedacht ist. Jedoch nutzen viele diese Libary für 
ihren CC1101 also sollte das auch gehen irgendwie. Also ist es wohl der 
Code. Dieser scheint jedoch bei anderen Usern zu funktionieren. z.B. bei 
dir.


> Hiernach ist die entsprechende Funktion public und sollte aufrufbar
> sein.
> Abgesehen davon ist das Teil aber, wie bei nahezu allem Arduino-Code,
> einfach ein grauss...

Ja dieses erstellen der Sketche im ArduinoEditor ist schon etwas schräg 
irgendwie weil man nur eine Datei hat und irgendwie keine Übersich wie 
bei z.B. Eclipse usw.

> Ich weiss nicht was das 's' da am Zeilen anfang macht, aber das gehoert
> da nicht hin. Wenn ich das 's' da entferne dann compiliert der Code bei
> mir. Gibt zwar einen haufen Warnungen, aber es compiliert.

Keine Ahnung woher das "s" kommt. Kompillieren tut er bei mir trotzdem 
nicht :/

Fehlermeldungen sind die gleichen, nur die mit dem "s" fällt weg 
natürlich.

Danke aber schonmal für die Hilfe!

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.