Hi, bei Arduino Sketches gibt es Funktionsaufrufe wie Wire.begin(), Serial.begin(), Wire.recive(), .. Ich dachte C ist nicht objektorientiert? nanu? Danke ;)
Dann sind Wire.begin, Serial.begin und Wire.recive wahrscheinlich einfach nur Funktionspointer.
man kann sich solche sachen prima selbst schnell zusammenbasteln habe es mal versucht bei wenigen funktionen is das brauchbar ... ab einer gewissen menge an funktionen bläht es aber ganz schön zB 12k flash ohne dieses struct 12,8k flash mit dieser stuct umd zB uart.print( xxxx) zu schreiben je größer das projekt desto größer der speicherbedarf
> Ich dachte C ist nicht objektorientiert? OOP fängt im Kopf an, nicht in der Programmiersprache, prinzipiell sind Strukturen in C Klassen, da ist halt alles public. Im Linux-Kernel [1] arbeitet man so, die Methoden sind dann Funktionszeiger. Ob OOP so toll ist, dass man sowas machen muss, bleibt im Auge des Betrachters. [1] https://ezs.kr.hsnr.de//TreiberBuch/html//sec.technik.html
Gast schrieb: > ok, vielen dank. > > und wie setz ich soetwas selbst um? Indem du in deinem schlauen C-Buch erst mal das Kapitel über Funktionspointer wieder und wieder studierst. Danach überlegst du dir, was wohl passieren würde, wenn du einer Struktur neben den eigentlichen Datenfeldern ein paar Funktionszeiger verpasst und wie man die benutzen könnte. Und wenn du soweit bist, kannst du anfangen kreativ zu werden :-)
1 | struct { |
2 | void bar = foo_bar; |
3 | } foo; |
4 | |
5 | void foo_bar () { |
6 | |
7 | }
|
8 | |
9 | void main () { |
10 | foo.bar(); |
11 | }
|
nur bin ich mir innerhalb von struct bei void nicht sicher.. welchen typ muss ich denn für eine funktion angeben?
lex schrieb: > nur bin ich mir innerhalb von struct bei void nicht sicher.. welchen typ > muss ich denn für eine funktion angeben? http://www.mikrocontroller.net/articles/FAQ#Funktionszeiger
Hi, danke für die vielen Antworten.. Dann müsste es ja folgendes tun:
1 | typedef void (*voidFn)( void ); |
2 | |
3 | struct { |
4 | voidFn bar = foo_bar; |
5 | } foo; |
6 | |
7 | void foo_bar () { |
8 | |
9 | }
|
10 | |
11 | void main () { |
12 | foo.bar(); |
13 | }
|
Klar, über den Sinn kann man streiten, aber ich finde es macht das ganze übersichtlicher und ich persönlich find i2c.send() einfach schöner wie i2c_send().. könnt auch daran liegen, dass sich ein . minimal einfacher tippt wie _ ;)
häufige verwendung bläht wie gesagt da überall im ram und flash mit 16bit pointern rumgeworfen wird übersichtlich ist es auf jeden ...
für die kleineren Projekte wirds reichen ;) bei den größeren ist dann halt die Frage ob man lieber einen µC größer nimmt, um die bei größeren Projekten besonders wichtige Übersicht zu gewährleisten.. ich hab derweil übrigens im source vom arduino gesucht und bin auf die libraries gestoßen.. die sind in c++ geschrieben.. und auf der offiziellen seite ist auch ein tutorial, wie man selber libraries schreibt ;)
Der Beitrag hat den selben Titel wie dieser Thread: Beitrag "Objekte in C" Hier wird beschrieben, wie man "quasi" Objekte in C erzeugen kann.
>bei Arduino Sketches gibt es Funktionsaufrufe wie >Wire.begin(), Serial.begin(), Wire.recive(), .. >Ich dachte C ist nicht objektorientiert? nanu? Die Arduino Bibliotheken sind in C++ geschrieben. Deshalb ist die Objektorientiertheit kein Problem.
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.