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.
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.
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.
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
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.