PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mbed Mikrocontroller Bibliotheken Header



peterfb
11.03.2018, 01:52
hi wer kennt sich auf mbed aus?? ich schreibe gerade eine arduino roboter bibliothek um und bekomme folgenden Fehler angezeigt leider weiß ich nicht mehr weiter.Anbei die.c die .h und das main Programm.

33333
33334
33335

i_make_it
11.03.2018, 09:14
Wie sind denn Deine C++ Kenntnisse hinsichtlich Klassen, Konstruktor etc.?



Da der Konstruktor bei der Definition eines Objektes immer automatisch aufgerufen wird, darf er in der Regel
nicht
im private-Bereich der Klasse stehen. Sie könnten ansonsten kein Objekt der Klasse definieren da der Konstruktor nicht aufgerufen werden kann.


Vergleiche mal die Struktur Deiner .ccp und .h mit funktionierenen Libraries bzw. lies ggf. mal etwas zu Klassen/Konstruktoren/Destruktoren dem Aufbau und den Bedingungen.
Im geposteten Code sehe ich kein "public:". Wenn der so vollständig ist, fehlt da noch einiges.

peterfb
11.03.2018, 10:37
also cpp hab ich bislang nicht gemacht, wir machen in der Uni c. Ich hab mal meine .cpp in .c umgenannt da ich weiterhin mit c programmieren möchte.Gibts es da bei den Klassen und Strukturen unterschiede zwischen c und cpp ?
Ich habe das ganze jetzt mal übersichtlicher gestaltet und es sieht nun so aus...
Danke für die Hilfe

33336
33337
33338

HaWe
11.03.2018, 10:52
also cpp hab ich bislang nicht gemacht, wir machen in der Uni c....
Gibts es da bei den Klassen und Strukturen unterschiede zwischen c und cpp ?


in C gibt es keine Klassen, sondern nur Strukturen.
Nur in C++ gibt es Klasssen, das ist ja genau der Grund, warum C++ auf der Basis von C entwickelt wurde.

C++ ist im Wesentlichen C90 plus Klassen plus Vererbung plus Overloading plus stream,
mit teilweise auch strengeren Regeln als C, nicht immer C99-kompatibel,
und C++ Syntax und Sprachumfang sind extrem Versions-abhängig ( C++(98), C++(03), C++(11), C++(14), C++(17) ) .

Arduino basiert auf C++ (die älteren Versionen C++(03), ab 1.6.6 dann C++(11))


PS,
Könntest du deinen Code bitte als Text in Code-Tags posten?!?

peterfb
11.03.2018, 10:57
achso okay top.
ja ich habe eine roboter bib aus arduino mit cpp die ich nun auf mbed importieren will als c bib.
33339
33340
Ich hoffe du hast das gemeint mit code in Textform

Danke für eure/deine Hilfe

HaWe
11.03.2018, 11:03
achso okay top.
ja ich habe eine roboter bib aus arduino mit cpp die ich nun auf mbed importieren will als c bib.
33339
33340
Ich hoffe du hast das gemeint mit code in Textform



nein
poste bitte den korrekten vollständigen Sourcecode in normaler Textform, so wie hier...!


#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd (0x20,16,2);
void setup()
{
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.setCursor(0,0);
lcd.print("Hello,world");
lcd.setCursor(0,1);
lcd.print("LCD I2C");
}



aber C++ Libs auf ANSI C runter-portieren .... na dazu viel Glück...! 8)

peterfb
11.03.2018, 11:05
das sind nur kleine bibs die einen roboter fahren lassen, denke das sollte gehen?


// include this library's description file
#include "Shieldbot.h"

#define right1 D5 //define I1 interface
#define speedPinRight D6 //enable right motor (bridge A)
#define right2 D7 //define I2 interface
#define left1 D8 //define I3 interface
#define speedPinLeft D9 //enable motor B
#define left2 D10 //define I4 interface


int speedmotorA = 255; //define the speed of motorA
int speedmotorB = 255; //define the speed of motorB

void Shieldbot::motor()
{
DigitalOut right1(D5);
DigitalOut speedPinRight(D6);
DigitalOut right2(D7);
DigitalOut left1(D8);
DigitalOut speedPinLeft(D9);
DigitalOut left2(D10);}





// ensure this library description is only included once
#ifndef Shieldbot_h
#define Shieldbot_h


// include types & constants of Wiring core API
#include "mbed.h"

// library interface description
class Shieldbot
{
public:

void motor();


};

#endif

HaWe
11.03.2018, 11:08
ja, so kann man's lesen.
Aber class:: etc gibts halt nicht in C.

peterfb
11.03.2018, 11:46
kannst du mir anhand meines Beispiels das einmal richtig zeigen? ich hab mir das mal in coocox in c mit typedef usw angeschaut und versucht aber bekomme trotzdem noch Fehlermeldungen :(

HaWe
11.03.2018, 11:52
ich selber kann kein C++, und C++ zu C portieren erst Recht nicht. Ich verwende nur die Arduino C++ Libs so wie sie sind.

Der einfachste Weg, den ich sehe:
Verwende weiter C++ mit g++, und wenn du aus Arduino-Libs alles herausstreichst was mit mit Serial() oder Wire() zu tun hat, kann man die Libs auch in jeder anderen Plattform/Umgebung weiter verwenden, wenn es denn ein g++ Compiler ist mit der gleichen Version: es ist ja alles regelrechter C++ Code, mehr nicht.
Ich habe sogar schon Arduino- C++ -Libs auf einem Raspberry Pi unter Linux C++ compilieren und laufen sehen.

peterfb
11.03.2018, 12:03
In erster Linie geht es mir darum die mbed Befehle wie DigitalIn usw zu verwenden anstatt das in Arduino mit zb pinMode(right1,OUTPUT); Ist das irgendwie importierbar ohne von c++ auf c wechseln zu müssen? Unten sieht man wie ich es gerne möchte und im zweiten code wie es in arduino ist. Das meinte ich mit Importieren.




#define right1 D5 //define I1 interface
#define speedPinRight D6 //enable right motor (bridge A)
#define right2 D7 //define I2 interface
#define left1 D8 //define I3 interface
#define speedPinLeft D9 //enable motor B
#define left2 D10 //define I4 interface


int speedmotorA = 255; //define the speed of motorA
int speedmotorB = 255; //define the speed of motorB

Shieldbot::Shieldbot()
{
DigitalOut right1(D5);
DigitalOut speedPinRight(D6);
DigitalOut right2(D7);
DigitalOut left1(D8);
DigitalOut speedPinLeft(D9);
DigitalOut left2(D10);}


int speedmotorA = 255; //define the speed of motorA
int speedmotorB = 255; //define the speed of motorB

Shieldbot::Shieldbot()
{
pinMode(right1,OUTPUT);
pinMode(right2,OUTPUT);
pinMode(speedPinRight,OUTPUT);
pinMode(left1,OUTPUT);
pinMode(left2,OUTPUT);
pinMode(speedPinLeft,OUTPUT);
pinMode(finder1,INPUT);
pinMode(finder2,INPUT);
pinMode(finder3,INPUT);
pinMode(finder4,INPUT);
pinMode(finder5,INPUT);
}

HaWe
11.03.2018, 12:21
C++ kann auch ANSI C code mitkompilieren, aber nicht umgekehrt.

Wenn also deine mbed C Libs in C++ Sourcecode #included werden können, spricht nichts dagegen, nur musst du den mbed C-Compiler durch einen C++ Compiler ersetzen (falls er das nicht sowieso schon ist).

aber ich kenne mbed auch nicht, habe es nie verwendet (viel zu kompliziert)