mikrocontroller.net

Forum: Compiler & IDEs Objekte in C?


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bei Arduino Sketches gibt es Funktionsaufrufe wie
Wire.begin(), Serial.begin(), Wire.recive(), ..

Ich dachte C ist nicht objektorientiert? nanu?

Danke ;)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sind Wire.begin, Serial.begin und Wire.recive wahrscheinlich 
einfach nur Funktionspointer.

Autor: Michael W. (retikulum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind Funktionsaufrufe und keine Objekte.

Michael

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Col. Trautman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, vielen dank.

und wie setz ich soetwas selbst um?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: lex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct {
    void bar = foo_bar;
} foo;

void foo_bar () {

}

void main () {
    foo.bar();
}

nur bin ich mir innerhalb von struct bei void nicht sicher.. welchen typ 
muss ich denn für eine funktion angeben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke für die vielen Antworten..
Dann müsste es ja folgendes tun:
typedef void (*voidFn)( void );

struct {
    voidFn bar = foo_bar;
} foo;

void foo_bar () {

}

void main () {
    foo.bar();
}

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 _ ;)

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
häufige verwendung bläht wie gesagt da überall im ram und flash mit 
16bit pointern rumgeworfen wird
übersichtlich ist es auf jeden ...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Beitrag hat den selben Titel wie dieser Thread:

Beitrag "Objekte in C"

Hier wird beschrieben, wie man "quasi" Objekte in C erzeugen kann.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.