Forum: Projekte & Code owx 1Wire Protokoll für Datenaustausch und Steuerung


von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

Aufgabenstellung: meine Heizungssteuerung soll auf mehrere mcus 
aufgeteilt werden, die sich gegenseitig überwachen und sich 
gegebenenfalls gegenseitig resetten.


Für 1Wire spricht:
Der ds1820 überträgt kleine Mengen von Daten per 1Wire sehr zuverlässig 
über Entfernungen von bis zu 30m. Professionelle Klima-Splitgeräte 
verwenden 1Wire zur Kommunikation zwischen verschiedenen Einheiten. Bei 
1Wire ist der Schritt zu Funk nicht weit.

Das Protokoll lehnt sich an den ds1820 an. 6byte header, beliebige 
payload, zum Schluss 1byte crc.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die in C/C++ nötige Trennung von Deklaration und Definition solltest 
Du Dir noch aneignen.

Bindet man Dein "owx.h" in mehreren Dateien ein, knirscht der Linker -- 
zu Recht. Das sieht bei "owx_command.h" nicht besser aus.

Ansonsten solltest Du Dir noch mal genau owx_rx_byte ansehen. Was 
passiert, wenn "owx_port" nicht definiert ist?

Und die Formatierung Deines Quelltextes ist verbesserungsbedürftig, um 
es zurückhaltend auszudrücken.

Deine "Beschreibung" da oben ist von "ausführlich" oder "detailliert" 
auch optimal weit entfernt.

von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

Rufus Τ. F. schrieb:
>Deine "Beschreibung" da oben ist von "ausführlich" oder "detailliert"
>auch optimal weit entfernt.

Ich habe das Programm noch mal stark vereinfacht und das Protokoll neu 
strukturiert. Sinn des Programms ist, mit minimalem Aufwand eine sichere 
Verbindung zwischen verschiedenen mcus herzustellen. Der Rest erklärt 
sich aus dem Code.


> Bindet man Dein "owx.h" in mehreren Dateien ein, knirscht der Linker --
> zu Recht. Das sieht bei "owx_command.h" nicht besser aus.

Das ist eine Frage der Konvention. Bei owx steht "h" für hierachisch 
untergeordnete Datei zum c-Hauptprogramm. Das vereinfacht die 
Programmierung. Man kann die Dateien aber auch gerne in selbständige 
"c-"Dateien umbenennen. Dann muss man halt Vorkehrungen treffen, damit 
es nicht zu Mehrfach-Deklarationen kommt.

> Ansonsten solltest Du Dir noch mal genau owx_rx_byte ansehen. Was
> passiert, wenn "owx_port" nicht definiert ist?

Wenn owx-pin/port nicht definiert sind, wird es schwierig. Bei 1-wire 
muss man diese eine wire ja irgendwie definieren. Die Trennung in 
owx-pin/port lässt die Einzeldefinition von Direction- ,Port-, und 
Pin-Register entfallen. Kann man aber sicher auch anders machen. Meine 
defines sind nur als Vorschlag gedacht.

von (prx) A. K. (prx)


Lesenswert?

grundschüler schrieb:
> Das ist eine Frage der Konvention.

Stimmt zwar. Aber Konventionen haben oft Gründe. Zur Programmiersprache 
C gehört mehr als der formale Standard. Die Konventionen gehören de 
fakto dazu, zumindest wenn mehrere Leute zusammen arbeiten.

Die meisten Leser mit Erfahrung werden sich das maximal ein paar 
Sekunden ansehen und als unbrauchbar abhaken. Allein schon weil man es 
praktisch komplett neu schreiben müsste.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

grundschüler schrieb:
> Das ist eine Frage der Konvention.

Nein.

> Bei owx steht "h" für hierachisch
> untergeordnete Datei zum c-Hauptprogramm.

Das ist entgegen aller Konventionen.

> Das vereinfacht die Programmierung.

Das gerade tut es nicht, es macht die Sache ziemlich unbrauchbar.

> Man kann die Dateien aber auch gerne in selbständige
> "c-"Dateien umbenennen. Dann muss man halt Vorkehrungen treffen, damit
> es nicht zu Mehrfach-Deklarationen kommt.

Genau dann muss man das dann nicht mehr.

Könnte es sein, daß Du noch nicht so ganz verstanden hast, wie mit 
mehreren Quelltext-Dateien und #include-Anweisungen umzugehen ist, und 
welche Rolle der Linker bei der Angelegenheit spielt?

von grundschüler (Gast)


Lesenswert?

A. K. schrieb:
> Die meisten Leser mit Erfahrung werden sich das maximal ein paar
> Sekunden ansehen und als unbrauchbar abhaken. Allein schon weil man es
> praktisch komplett neu schreiben müsste.

Damit hast du ganz offensichtlich recht. Wenn man fachlichen Austausch 
will, muss man sich an die C-Konventionen halten, auch wenn es ohne 
diese Konventionen manchmal sehr viel leichter geht. Ich werde das 
Programm daher auf reines C umschreiben und dann  noch einmal 
vorstellen.

von R. R. (elec-lisper)


Lesenswert?

Also den misbrauch der Header für mehr als Deklarationen finde ich bei 
weitem nicht so schlimm wie den unformatierten Quelltext. Aber das man 
Quelltext mehr liest als schreibt kommt erst nach ein paar Jahren 
intensiven und großen Projekten.
Jag die Datein doch mal durch ein der Unzähligen Formatierer wie bspw 
uncrustify.

von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

In c-Datei umgesetzt und die c-Datei neu formatiert und auskommentiert. 
Verwendet werden M328 als Master/Slave, diese tauschen jeweils die 
Uhrzeit aus.

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.