Arduino code in C code umwandeln

Gast #2803341
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...
Gast #2803363
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?
Gast #2803365
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
Gast #2803366
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.
#2803372
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...
Gast #2803375
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 ::
Gast #2803384
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.
#2803388
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.
Gast #2803405
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?
#2803406
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.
Gast #2803411
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.
Gast #2804862
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.
#6982474
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.
Moderator (Firma: Titel) Persönliche Seite #6982600
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?"
#6982623
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"?
Gast #6982662
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.
Moderator (Firma: Titel) Persönliche Seite #6982681
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren