Forum: Mikrocontroller und Digitale Elektronik Arduino code in C code umwandeln


von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

Schönen guten Abend,

ich habe ein, für mein Projekt wunderbares Display gefunden, für den es 
schon eine fertige Library gibt, jedoch ist die für den Arduino.

Ich habe ein wenig gegoogelt und leider nur gefunden wie ich C-Code in 
Arduino-Code umwandle (bzw C auf ein Arduino One) , nicht umgekehrt...

Ich hoffe dass es da eine Möglichkeit gibt, die Library in meinen 
AVR-GCC einzuspielen um so mit meinem Standard C weiter zu machen...

von Cyblord -. (cyblord)


Lesenswert?

Wie wärs mit Arduino Code angucken, denken und dann in C Code 
übersetzen? Was automatisches wird da doch bloss mist machen. Use Brain 
1.0.

von Stephan K. (stephan_k)


Lesenswert?

Welches Display?

von Wilhelm F. (Gast)


Lesenswert?

Was ist denn Arduino-Code?

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

Dieses Display: http://adafruit.com/products/358

Leider habe ich in meinem Leben noch nie mit Arduino gearbeitet :(.

von Wilhelm F. (Gast)


Lesenswert?

coco jack schrieb:

> Dieses Display: http://adafruit.com/products/358

Geht sogar auf dem Steckbrett, wie das Bild aus sieht. Geil. Aber nur 
mit der richtigen Software.

> Leider habe ich in meinem Leben noch nie mit Arduino gearbeitet :(.

Was hat der liebe Gott noch mal vor den Erfolg gesetzt?

Den Schwei*?

von Jasch (Gast)


Lesenswert?

coco jack schrieb:
> Schönen guten Abend,
>
> ich habe ein, für mein Projekt wunderbares Display gefunden, für den es
> schon eine fertige Library gibt, jedoch ist die für den Arduino.
>
> Ich habe ein wenig gegoogelt und leider nur gefunden wie ich C-Code in
> Arduino-Code umwandle (bzw C auf ein Arduino One) , nicht umgekehrt...
>
> Ich hoffe dass es da eine Möglichkeit gibt, die Library in meinen
> AVR-GCC einzuspielen um so mit meinem Standard C weiter zu machen...

Der Standard-Spruch dazu ist: Du kannst aus einem Burger(-Patty) nicht 
wieder eine Kuh machen.

Also Sorry, nein, sowas geht im allgemeinen nicht, jedenfalls nicht 
vollautomatisch. Würde Dir sowieso nix nützen, ein Atmel und was immer 
Du benutzt sind ganz und gar inkompatibel soweit es Hardware-Ansteuerung 
angeht.

Display-Libs gibt es doch jede Menge, sicher dass es keine passende für 
Deine Plattform gibt?

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

Seit es das Internet gibt bin ich mir nie sicher, aber ich bin leider 
auch kein Google-Guru, daher habe ich noch keine gefunden.. :(

Und es sieht sehr kompliziert aus so ein Display selber anzusteuern.. 
ich hätte am liebsten eine Routine die einfach ne Matrix übergibt und 
der Display die dann anzeigt.. die Grafiken selber da reinzubekommen ist 
kein Problem, das habe ich schon oft gemacht.

Falls jemand langeweile hat, der Controller wäre der  ST7735R (ja steht 
in der Überschrift)

Ich mach mich nochmal auf die Suche nach ner C-Library

von Verwirrter Anfänger (Gast)


Lesenswert?

Arduino ist C Code mit libraries!

Hast du dir die library überhaupt auch nur mal angeguckt? das ist eine 
.h Datei und eine .cpp. Ich hab die mal überflogen und das einzige 
Arduino spezifische was ich dadrin gesehen habe waren die Stellen in 
denen die aus Arduino Pin-Bezeichnungen (Digital1, Digital2, ...) wieder 
AVR Standards machen (PB1, PB2, ...).

Guck dir die Library doch einfach mal an, und wenn du dann zu irgendwas 
spezifischen Probleme hast, frag das hier nochmal nach.

von Verwirrter Anfänger (Gast)


Lesenswert?

Sorry, vertan Arduino ist C++ code nicht C.

von Wolfgang M. (procrash)


Lesenswert?

Ich hab auch ein wenig mit Arduino bisher rumexperimentiert und hab mir 
die mitgelieferten Libraries angesehen.

Im Prinzip kannst du jedes beliebige Arduino Project durch den GCC 
jagen. Das sollte ohne Probleme gehen.
Die Libraries im Arduino sind halt ziemlich generisch gehalten damit sie 
auf jedes Board passen.

Was willst du eigentlich genau erreichen? Ist es nur ein simples LCD 
Display ansteuern?
In dem Fall nimm ne fertige Library dies hier im Forum zu finden gibt 
und gut ist. Dann kannst du auf die komplette Arduino Umgebung 
verzichten.

Welches Arduino Board nimmst du?

Ich hab hier das 2560er rumliegen was ich schon recht komplex finde...

von Wilhelm F. (Gast)


Lesenswert?

Jasch schrieb:

> Du kannst aus einem Burger(-Patty) nicht
> wieder eine Kuh machen.

Nee. Das ist ja heute anders. Früher bestand ein Burger aus 
Bestandteilen einer Kuh. Heute hat er sicher die Bestandteile von 5000 
Kühen. Garantiert.

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

z.B. :

void Adafruit_ST7735::writecommand(uint8_t c) {
  *rsport &= ~rspinmask;
  *csport &= ~cspinmask;

  //Serial.print("C ");
  spiwrite(c);

  *csport |= cspinmask;
}

ich wusste nicht dass das C ist

genauer gesagt: Adafruit_ST7735::writecommand(uint8_t c)

normalerweise wäre doch: writecommand(uint8_t c) eine normale Funktion, 
was heißt das vor den ::

von Wolfgang M. (procrash)


Lesenswert?

Hm sieht tatsächlich wie C++ Code aus.
Da müsste man dann tatsächlich den G++ anwerfen.

Was hindert dich eigentlich dran dass zu tun?

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

weil ich grade google was ein "G++" ist ^^

von Wolfgang M. (procrash)


Lesenswert?

Das ist der C++ Compiler

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

also ich bin Momentan im AVR-GCC drin und schaue was er alles includet, 
um ihm das zu geben.. ich hänge grade an #include "pins_arduino.h" und 
#include "wiring_private.h", wobei das erste klar ist, es wäre nur 
ungemein hilfreich wenn ich wissen würde was dort normalerweise drin 
steht.

von Wolfgang M. (procrash)


Lesenswert?

Das sind wie gesagt includes die den Code auf die unterschiedlichen 
Pinbelegungen der verschiedenen Arduino Boards mappen.

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

da das dort ja drinsteht, müssen die Daten ja auch irgenwo existieren..

Ich hab den Arduino - IDE auf dem PC.. ich such mal ob ich die finden 
kann.

von Wolfgang M. (procrash)


Lesenswert?

Die Dateien findest du im Ordner deiner Arduino Umgebung.

Unter OSX beispielsweise ist dass ein Directory das nur erscheint wenn 
man Paktinhalt anzeigen per Rechtsklick aufs Programmicon anwählt.

In Windows sollte das evtl im Jar file mit drin sein, weiss ich aber 
nicht genau. Schau dir dochmal den Ordner an indem sich deine Arduino 
Umgebung befindet.

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

ok, habe alles soweit gefunden.. jetzt muss ich alles nurnoch an meinen 
ATMega 644 anpassen und hoffen dass alles funktioniert (achja und den 
Display bestellen)

von Wolfgang M. (procrash)


Lesenswert?

Na denn, viel Erfolg.
Hoffentlich rauchts und stinkts nicht...

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

Was bedeuten diese Defines in der pins_arduino.h für den ATMega 168 ?
1
#define digitalPinToPCICR(p)    (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))
2
#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1))
3
#define digitalPinToPCMSK(p)    (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0))))
4
#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14)))


sind das die Ext-Interrupt - Pins?

von Wolfgang M. (procrash)


Lesenswert?

Wie gesagt die Libraries sind ein Dschungel und die generische 
Programmierung vereinfacht nicht gerade die Übersicht.
Schau dir doch mal die Dokumentation deines Boards genauer an. Evtl 
kannst du ja den C Compiler noch einige Makros auflösen lassen um 
dahinter zu kommen, wobei ich auch schon feststellen musste dass vieles 
blöderweise in zusätzlich generiertem Code endet.

von Wolfgang M. (procrash)


Lesenswert?

Schau google findet beim ersten Hit schon was dazu:

http://web.archiveorange.com/archive/v/9kgcbRjn6nTftD65Ncry

von Coco J. (Firma: Student) (dathcoco)


Lesenswert?

Ich bestell mir das ganze morgen und fange dannan rumzubasteln... ich 
denke ich werde versuchen aus der Existierenden Lib mir das 
rauszufischen was ich brauche.

habe ein wenig von der Lib verstanden, jedoch habe ich noch nicht 
kapiert wie man mit einer Tabelle umgeht (Siehe PROGMEM). Das sehe ich 
jetzt zum ersten mal.. aber das wird schon..

Falls am ende was brauchbares rauskommt poste ich das hier.

von Herbert (Gast)


Lesenswert?


von Herbert (Gast)


Lesenswert?


von Jasch (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Jasch schrieb:
>
>> Du kannst aus einem Burger(-Patty) nicht
>> wieder eine Kuh machen.
>
> Nee. Das ist ja heute anders. Früher bestand ein Burger aus
> Bestandteilen einer Kuh. Heute hat er sicher die Bestandteile von 5000
> Kühen. Garantiert.

Hehehe, Du scheinst recht sicher zu sein dass da heutzutage überhaupt 
etwas von einer Kuh drin ist. Mein Glaube ist da eher schwach, möge 
Ronald McDonald mir vergeben. ;-)

Gilt übrigens auch für binär vorliegende Libs, wer sagt denn überhaupt 
dass C dabei der Ausgangspunkt war? Könnte ja auch Brainf*ck (wieso 
glaubt die Foren-Software f*ck würde auf Spam hindeuten, ist die von 
Schwachmaten programmiert worden?) gewesen sein. Oder, Gott sei uns 
allen gnädig, Cobol.

von Sin S. (sinbrauchthilfeblyat)


Lesenswert?

Wolfgang M. schrieb:

> Im Prinzip kannst du jedes beliebige Arduino Project durch den GCC
> jagen. Das sollte ohne Probleme gehen.
> Die Libraries im Arduino sind halt ziemlich generisch gehalten damit sie
> auf jedes Board passen.

Ich habe mal gesucht finde dazu aber nichts. Kann man mit dem GCC 
Compiler wirklich einfach eine Arduino Library einfügen und bekommt C 
Code der auf Cortex oder Atmega läuft?


Verwirrter Anfänger schrieb:
> Arduino ist C Code mit libraries!
>
> Hast du dir die library überhaupt auch nur mal angeguckt? das ist eine
> .h Datei und eine .cpp. Ich hab die mal überflogen und das einzige
> Arduino spezifische was ich dadrin gesehen habe waren die Stellen in
> denen die aus Arduino Pin-Bezeichnungen (Digital1, Digital2, ...) wieder
> AVR Standards machen (PB1, PB2, ...).
>
> Guck dir die Library doch einfach mal an, und wenn du dann zu irgendwas
> spezifischen Probleme hast, frag das hier nochmal nach.


Also muss man nur die Pinzuordnungen entfernen und bekommt damit eine 
Header Datei als Librarie welche direkt auf den Controllern von ARM und 
AVR laufen.

Wie bekomme ich das hin. Vor allem will ich am Ende den Code für meine 
richtige Programmierumgebung nutzen und nicht mit dem Umwandler Compiler 
auf den Controller übertragen. Sofern das überhaupt geht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sin S. schrieb:
> Also muss man nur die Pinzuordnungen entfernen und bekommt damit eine
> Header Datei als Librarie welche direkt auf den Controllern von ARM und
> AVR laufen.
Nein, das geht natürlich nicht. Denn die Peripherie (Takterzeugung, 
Interfaces, Timer, Interrupthandling,...) ist vollkomen anders.

Wie ich schonmal schrieb:
> Für dich sind "AVR", "ARM", "Cortex M0", "Arduino" usw. nur irgendwelche
> Worte. Du weißt nicht, was sie bedeuten und was dahintersteckt.
Und genau das selbe trifft auch auf "GCC", "Header-Datei", "Library", 
"Arduino" usw. zu.

BTW: wieviele Threads willst du zu deinem Problem noch aktivieren?
Fass doch einfach alles in dem einen zusammen, sonst kommst du noch mehr 
durcheinander:
Beitrag "NRF51822 wie am besten erlernen mit einem Buch? Geht das?"

: Bearbeitet durch Moderator
von Rolf M. (rmagnus)


Lesenswert?

Sin S. schrieb:
> Ich habe mal gesucht finde dazu aber nichts. Kann man mit dem GCC
> Compiler wirklich einfach eine Arduino Library einfügen und bekommt C
> Code der auf Cortex oder Atmega läuft?

Nein. Arduino nutzt zwar selbst auch GCC als Compiler, ist aber C++, 
nicht C. Dazu kommen die Arduino-Bibliohteken, die auch nicht auf 
magische Weise einfach da sind.

> Also muss man nur die Pinzuordnungen entfernen und bekommt damit eine
> Header Datei als Librarie welche direkt auf den Controllern von ARM und
> AVR laufen.

Nein.

> Wie bekomme ich das hin. Vor allem will ich am Ende den Code für meine
> richtige Programmierumgebung nutzen und nicht mit dem Umwandler Compiler
> auf den Controller übertragen. Sofern das überhaupt geht.

Was ist ein "Umwandler Compiler"?

von grundschüler (Gast)


Lesenswert?

Sin S. schrieb:
> Wie bekomme ich das hin. Vor allem will ich am Ende den Code für meine
> richtige Programmierumgebung nutzen und nicht mit dem Umwandler Compiler
> auf den Controller übertragen. Sofern das überhaupt geht.
1
//+++++ lowlevel
2
#define ll_cs_port  C
3
#define ll_cs_pin   0
4
5
#define ll_cs_high   sbi(PORT(ll_cs_port),ll_cs_pin)
6
#define ll_cs_low    cbi(PORT(ll_cs_port),ll_cs_pin)
7
8
#define lcd_cs_high ll_cs_high
9
#define lcd_cs_low  ll_cs_low

Ein Programm hat üblicherweise einen lowlevel-teil, in welchem i/o-pins 
an den controller angepasst werden. Das unterscheidet sich bei arduino 
und gcc, da die arduino-pins anders definiert sind als die Definitionen 
im Datenblatt. Den lowlevel-Teil muss man bei der Verwendung von 
arduino-Bibliotheken anpassen - den ganzen Rest kann man meist ohne 
Anpassungen übernehmen.

"lcd_cs_low" ist oben die arduino-Funktion, die in gcc übersetzt wurde.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

grundschüler schrieb:
> da die arduino-pins anders definiert sind als die Definitionen
> im Datenblatt. Den lowlevel-Teil muss man bei der Verwendung von
> arduino-Bibliotheken anpassen - den ganzen Rest kann man meist ohne
> Anpassungen übernehmen.
Ja, so weit die hehre Theorie.
Aber im echten Leben geht es ja nicht nur um ein paar simple IO-Pins, 
sondern darum, dass jede einzelne, noch so winzige Komponente beginnend 
ab der Takterzeugung über Timer, Schnittstellen, Interrupts, ... anders 
initialisiert und angesteuert werden muss.

Das einzige, was man "ohne Anpassungen übernehmen" kann, sind dann 
bestenfalls Berechnungen, die keinerlei Hardware brauchen. Und selbst da 
muss man ganz genau hinschauen, dass einem nicht sowas wie ein Alginment 
oder Little/Big-Endian in die Suppe spucken.

von Moko (Gast)


Lesenswert?

Sin S. schrieb:
> Ich habe mal gesucht finde dazu aber nichts. Kann man mit dem GCC
> Compiler wirklich einfach eine Arduino Library einfügen und bekommt C
> Code der auf Cortex oder Atmega läuft?

Und dafür hast Du 10 Jahre gebraucht? duckundweg

von Mark B. (markbrandis)


Lesenswert?

Sin S. schrieb:
> Ich habe mal gesucht finde dazu aber nichts.

Warum gräbst du einen zehn Jahre alten Thread aus?

von seit_z80 (Gast)


Lesenswert?

Warum antwortet ihr auf so etwas? Genauso entsteht der ganze Müll, den 
manche als Spam bzw. trollig ansehen!

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.