Hallo Gemeinde, ich hätte da mal ne Frage: Ich möchte an einem Arduino/etc. 2 Instanzen von Wire.h initialisieren. Die erste Instanz soll einen Bus betreiben, der diverse Arduinos verbindet, hier wäre der einzelne Arduino Slave (abgesehen von einer zentralen Instanz, die dann Master ist). Eine zweite Instanz soll I2C-typische End/Zwischengeräte verwalten (Shifter, Sensoren, Aktoren...), dh. hier ist der jeweilige Arduino immer Master. Problemstellung hier ist bis dato: Bei 2 aufgerufenen Instanzen ist praktisch immer nur die zuletzt initialisierte aktiv (ließ sich leider auch durch xyz.listen() nicht ändern). Ist es also möglich zwei I²C-Instanzen zu initialisieren, von denen eine im Master- und die andere im Slave-Betrieb funktioniert? Grüße, Nabu T.
Ja wenn man zwei I2C Busse hat kann man das natürlich auch programmieren, wenn man das nicht hat, muss man sich eine andere Lösung suchen.
Hallo Karl, Das war ja gerade die Frage: … eine andere Lösung … Ist denn der Arduino überhaupt in der Lage per Wire.h mehrere verschieden konfigurierte Instanzen zu betreiben? Grüße, Nabu T.
Moin, meinst du mit Arduino einen Atmega328? der hat nur einen Hardware IIC, den zweiten müsstest du in Software machen, also nicht mit wire.h. eine Alternative wäre vllt. den Bus zwischen den Arduinos mit UART zu machen. Für IIC über mehr als ein paar 10cm gehts sowieso nur mit viel Glück ohne weiteres, da musst du messen und anpassen/Pullup ändern/Kabel ordentlich verlegen/Geschwindigkeit reduzieren... Wie hast du das ganze verkabelt, oder ist das bis jetzt nur Theorie? und was soll es werden wenns dann mal läuft?
Hast du denn zwei Hardware Einheiten, die I2C Master sein können? Was ist wire.h? Kann man das sich ansehen? Wenn ja, dann findet man dort die Antwort.
Der ATmega328PB hat 2 HW-I2C. Man kann aber auch ein HW-I2C als Interrupt benutzen und ein SW-I2C per Bit-Banging.
:
Bearbeitet durch User
Karl M. schrieb: > Hast du denn zwei Hardware Einheiten, die I2C Master sein können? kommt drauf an welchen "Arduino" er hat, der gängige mit Atmega328p hat nur eine, nur der "Due" hat zwei (der hat auch nen Cortex-M3). > Was ist wire.h? eine Arduino Library, findest du im Internet, z.B. hier https://www.arduino.cc/en/reference/wire Wenn zwischen den Arduinos mehr als 10-20 cm liegen (in summe ca. <50cm) ist IIC sowieso nicht des erste mittel der Wahl, dann kann man UARt nehmen und wenns dann mal 10m werden sollen nen Bus Treiber und muss keine Software ändern.
:
Bearbeitet durch User
Wie bereits meine Vorposter gesagt haben: Ohne zweiten IIC geht da gar nichts. Ob Deine Bibliothek überhaupt mehrere Ports unterstützt ist eine weitere Frage. Bleiben nur noch: 1. Eine Tüte voller Gatter, die zwischen zwei Schnittstellen umschalten können. Hier gibt es eventuell fertige Lösungen. Schau mal z.B. bei Maxim nach. 2. Eine Softwarelösung, die aber leicht zum Full-Time-Job für Computy werden kann. 3. Ein µP der von Haus aus zwei Schnittstellen unterstützt und eventuell auch zugehörige Bibliotheken besitzt. 4. Eine Erweiterung, die in Hardware (Extrachip) realisiert werden kann.
Hallo K.S. Kurze Vorgeschichte zu unserem Kleinkunstprojekt: Innerhalb eines mobilen Gehäuses werden interaktionsabhängige Abläufe strukturiert. Diverse Aktoren (Pümpchen, Motörchen, Dimmer, Anzeigen...) nehmen programmgesteuerte Zustände ein. Diverse Sensoren (Schalter, Taster, RFID's, Potis...) werden Einfluß auf diesen Programmablauf haben (im Prinzip 'ne größere Spielbox) Grundidee hier war halt die Trennung des zentralen Programmablaufs von der Peripheriesteuerung. Wir hätten da den zentralen yC (hier wegen WLAN höchstwahrscheinlich einen NodeMCU/ESP8266), dieser wird per MQTT globale Variablen managen (funktioniert bereits). An diesen wollen wir per Bus 1 separate yC's hängen, diese leisten dann die ganze Aktoren/Sensoren-Arbeit (dies wiederum dann über den Bus 2). Verwendung werden hier ArduinoNano/ATMega328P und/oder ebenfalls NodeMCU/ESP8266 finden (schlicht eine Baugrößenfrage). Das ganze findet innerhalb eines Kubikmeters statt (abgesehen von MQTT), es sollten also keine Leitungsprobleme auftreten. Die meisten Sensorenkonfigurationen sind standalone bereits getestet, nun kommt hier also das Zusammenspiel zum Zuge. Jeder Bus für sich funktioniert als Prototyp bereits ebenfalls. Kliffhanger sind hier zur Zeit: - das parallele Betreiben zweier I²C-Busse an einem yC - das wäre dann eine nächste Anfrage: Multi-RFID-Reader Grüße, Nabu T.
Da haben mal wieder lauter Leute halbgar geantwortet, die sich mit Arduino weder auskennen noch nachgeschaut haben. Wenn man keine Ahnung, soll man einfach mal ... In den Dateien wire.h/wire.cpp befindet sich Arduinos Implementierung der I²C Schnittstelle. Die Klasse heisst TwoWire. Wenn man sich deren Quelltext anschaut sieht man sehr deutlich, dass es nur eine Instanz geben kann. Hier haben die Arduino Macher das Konzept der Objektorientierung völlig falsch umgesetzt und sind obendrein einfach davon ausgegangen, dass alle Mikrocontroller maximal eine I²C Schnittstelle haben. Ein schönes Indiz für die Qualität der Arduino Software. Du brauchst eine alternative Soft-I²C Library für deinen Mikrocontroller. Die wire.h vom ESP8266 Core ist Soft-I²C und unterstützt mehrere Instanzen. So sollte es gehen:
1 | TwoWire wire1 = TwoWire(); |
2 | TwoWire wire2 = TwoWire(); |
3 | |
4 | setup() |
5 | {
|
6 | wire1.begin(4,5); |
7 | wire2.begin(12,13); |
8 | }
|
Hallo Stefanus, das sieht schon mal nach einem Weg aus (TwiWire). Werde mal ein paar Tests machen, melde mich dann... Grüße Nabu T.
Der Slave Modus ist zumindest in der ESP8266 Version 2.3.0 gar nicht implementiert. Für ATmega könnte diese Alternative helfen: https://playground.arduino.cc/Main/SoftwareI2CLibrary
Stefanus F. schrieb: > In den Dateien wire.h/wire.cpp befindet sich Arduinos Implementierung > der I²C Schnittstelle. Die Klasse heisst TwoWire. Wenn man sich deren > Quelltext anschaut sieht man sehr deutlich, dass es nur eine Instanz > geben kann. Wenn du meinst, dass die meisten Arduinos nur eine Wire Instanz benötigen, da sie nur eine TW Hardware haben, dann ja. Gegenbeispiel: Der Arduino DUE mit 2 TWI, der kennt Wire und Wire1 Und das sind ganz sicher ZWEI Instanzen. Also: Der Spruch ist damit als Lüge entlarvt! Stefanus F. schrieb: > Hier haben die Arduino Macher das Konzept der Objektorientierung völlig > falsch umgesetzt und sind obendrein einfach davon ausgegangen, dass alle > Mikrocontroller maximal eine I²C Schnittstelle haben. Ein schönes Indiz > für die Qualität der Arduino Software. Auch das ist als Lüge entlarvt. Wahr ist natürlich: Eine Instanz pro vorhandener Hardware TWI Einheit. Mehr geht auch nicht! Eine ISR pro Hardwareeinheit. ------------ Stefanus F. schrieb: > Da haben mal wieder lauter Leute halbgar geantwortet, die sich mit > Arduino weder auskennen noch nachgeschaut haben. Schaue bitte in den Spiegeln. bevor du nächstes mal auf den Arduino bashing Zug aufspringst. ----------- Nabu T. schrieb: > Ist es also möglich zwei > I²C-Instanzen zu initialisieren, von denen eine im Master- und die > andere im Slave-Betrieb funktioniert? Warum nicht nur eine Instanz, wenn der µC nur eine Instanz kann? Denn diese eine Instanz kann sowohl Master, als auch Slave spielen. ------------- Stefanus F. schrieb: > Du brauchst eine alternative Soft-I²C Library für deinen > Mikrocontroller. Die wire.h vom ESP8266 Core ist Soft-I²C und > unterstützt mehrere Instanzen. Ist klar, voll die Ahnung! Die ESP8266 Wire Implementierung kann nur Master. Nicht Slave. Dein Vorschlag entspricht also in keinster Weise den Anforderungen: Master UND Slave.
Arduino Fanboy D. schrieb: > Lüge, Lüge, entlarvt Ganz toll, wisch Dir mal den Schaum vorm Mund weg. Geht es Dir jetzt besser? Er will auf einem zentralen ESP8266 mehrere Master-Instanzen und dann auf vielen ATmega oder ESP8266 jeweils eine Slave Instanz. Dass er auf dem ESP8266 keinen Slave machen kann, habe ich geschrieben. Aber schön, dass Du diese Einschränkung gerade auch nochmal neu entdeckt hast. Man kann ja nicht oft genug darauf hinweisen, nicht wahr?
Du bist mal wieder beim lügen erwischt worden... Da kannst du dich winden und wenden wie ein Pillewurm.
Hallo... sorry, wurde wohl missverstanden. Auf dem zentralen/"oberen" yC eine I²C-Master-Instanz, um nach "unten" zu telefonieren. Auf den "unteren" yC's jeweils eine I²C-Slave-Instanz, für Telefonate von "oben" und eine I²C-Master-Instanz für die Ansteuerung der Peripherie. Grüße.
Nabu T. schrieb: > sorry, wurde wohl missverstanden. Um wie viele Geräte dreht es sich? Warum nicht alle an einen Bus? Warum die Fixierung auf I2C, für alles?
> sorry, wurde wohl missverstanden...
Sag ich doch. Soviel zum Thema "lügen". Mit solchen Anschuldigungen
solltest du (Arduino Fanboy) etwas vorsichtiger sein - auch bei anderen.
Dein Auftreten ist in den letzten Tagen extrem aggressiv.
Bedenke, dass die meisten falschen Infos ihre Ursache in falschem
Kenntnisstand haben. Ich gehe davon aus, dass hier niemand absichtlich
andere in die Irre führt. Und wenn schon, dann handelt es sich in der
Regel im Ironie, nicht um Lügen.
Nabu T. schrieb: > sorry, wurde wohl missverstanden. also ich habs schon so verstanden, den Rest einfach ignorieren, dass ist hier leider normal. und immer dran denken, don't feed the trolls Die software IIC library von Stefanus wird wohl das beste für dich sein, abhängig davon wie viel Geschwindigkeit du brauchst, 100kHz sollten locker drin sein, 1MHz eher nicht. Davon abhängig dann halt den Master oder Slave in Software machen.
K. S. schrieb: > Die software IIC library von Stefanus naja, von mir ist die nicht. Aber wir haben Dich verstanden.
Stefanus F. schrieb: > Mit solchen Anschuldigungen > solltest du (Arduino Fanboy) etwas vorsichtiger sein Lies dir deinen eigenen Beitrag nochmal durch. Gespickt mit Arduinobashing und Unwahrheiten. Und da du offensichtlich genügend Kompetenz besitzt, um die Angelegenheit objektiv zu beurteilen, sind das nicht nur Unwahrheiten, zumindest keine Versehentlichen, sondern ehr Lügen. Eine nach der anderen habe ich dir widerlegt. Aber schön, dass du dich auch mal auskotzen konntest... Vielleicht gehts dir ja jetzt besser. Bemerke: Wenn du Wahr sprichst, stimme ich dir zu! Verhältst du dich wie ein Arschloch, dann gibt es Kontra. So war es bisher, und so wird es bleiben.
Nabu T. schrieb: > Problemstellung hier ist bis dato: Bei 2 aufgerufenen Instanzen ist > praktisch immer nur die zuletzt initialisierte aktiv Und was ist daran ein Problem? Probleme gibt es nur dann, wenn beide Instanzen echt parallel arbeiten müssen, d.h. eine im Interrupthandler, die andere im Main. Ansonsten einfach vor jedem Transfer (Start,Daten,Stop-Sequenz) die entsprechende Instanz initialisieren.
Arduino Fanboy D. schrieb: > Eine nach der anderen habe ich dir widerlegt. > > > Aber schön, dass du dich auch mal auskotzen konntest... > Vielleicht gehts dir ja jetzt besser. > > > Bemerke: > Wenn du Wahr sprichst, stimme ich dir zu! > Verhältst du dich wie ein Arschloch, dann gibt es Kontra. > > So war es bisher, und so wird es bleiben. Kann nicht einer mal mit diesem wirklichen Arschloch Dummbatzboy aufräumen? Habt ihr keinen Mumm in den Knochen? Ich bin nur gelegentlich hier. Ihr seit fast jeden Tag anwesend. Und lasst euch von diesem komischen Dummbatzboy jeden Tag neu frech sein. Ich kann euch nicht verstehen.
Roth schrieb: > Ihr seit fast jeden Tag anwesend. Und > lasst euch von diesem komischen Dummbatzboy jeden Tag neu frech sein. > Ich kann euch nicht verstehen. Weise gesprochen. Es fällt mir jedoch nicht leicht, still zu bleiben, wenn ich geschickt plausibel als Lügner oder anderer Bösewicht dargestellt werde. Denn was will ich ganz sicher nicht sein. Diese Störenfriede sind teilweise sehr redegewandt, die nageln einen mit Worten an die Wand, wenn man nicht aufpasst. Sicher, gar nicht reagieren ist oft vernünftiger. Aber wenn man derart angegriffen wird, dann wirken Hormone statt Vernunft. Ich möchte Lernen, diese Abwehr-Reflexe zu kontrollieren.
Roth schrieb: > Kann nicht einer mal mit diesem wirklichen Arschloch Dummbatzboy > aufräumen? Du hast hier bisher auch eher Beratungsresistenz als Kompetenz gezeigt. Da kommt von unserem fanboy bedeutend mehr. Sein Auftreten ist unpassend, allerdings hat er in dem Punkt Recht, dass Stefanus erstmal sagst "wer keine Ahnung hat, soll nichts schreiben" und dann selbst unwissentlich falsche Behauptungen aufstellst. @Arduino-fanboy Das ändert nichts an der schlechten Qualität der Arduino-Bibliothek. Nicht nur für eine C++-Bibliothek ist die vergleichsweise schlecht geschrieben.
avr schrieb: > Du hast hier bisher auch eher Beratungsresistenz als Kompetenz gezeigt. > Da kommt von unserem fanboy bedeutend mehr. Sorry, aber ich nicht "beratungsresistent", sondern war schlicht und einfach in C/C++ ANFÄNGER. Was man aus meinen Kommentaren auch zig fach entnehmen konnte. Wenn man denn wollte. Vielleicht schreibt hier noch jemand unter meinem Alias, das weiß ich nicht, aber ich habe bestimmt keinen Speck gemacht. Noch nie. Wenn man mit "beratungsresistent" allerdings meint, dass ein Anfänger sich von einem professionellen "Arschloch" und "Lügner" nennen lassen MUSS, ohne sich dagegen wehren zu dürfen, dann habt ihr recht. Dann bin ich wirklich beratungsresistent. Aber ganz bestimmt nicht in C/C++. dort lerne ich gerne dazu und bedanke mich bei jedem. Einfach meine Kommis lesen und du siehst, dass es so ist.
avr schrieb: > @Arduino-fanboy > Das ändert nichts an der schlechten Qualität der Arduino-Bibliothek. > Nicht nur für eine C++-Bibliothek ist die vergleichsweise schlecht > geschrieben. Der Versuch ist nett, aber ich kann mich nicht für die Arbeit anderer Rechtfertigen. Und schon gar nicht die Verantwortung übernehmen. Merke: Es gibt nicht "die Arduino-Bibliothek", sondern Tausende. Erarbeitet von tausenden(?) Programmierern. Für Dutzende von Plattformen. Und da sind sehr wohl hochwertige Libs bei. Dein Rundumschlag ist also wenig angemessen. Polemik: Bist du auch ein Arduino Basher? Natürlich gibt es Defizite. Dinge, welche nicht optimal gelöst sind. Aber es ist ein offenes System. Jeder, auch du, kannst dort deine Änderungen einbringen. Kritik, auf den Punkt gebracht, ist gut. Verbesserungen wären wichtiger. Rundumschläge, alles in einen Topf werfen, ist mindestens ungerecht. > Die Kritik an anderen hat noch keinem die eigene Leistung erspart. > Quelle: Noël Coward ---------------------- Stefanus F. schrieb: > Weise gesprochen. Mit dem Roth möchtest du dich, gegen mich, verbrüdern? Interessant! Stefanus F. schrieb: > plausibel als Lügner Sehr gut erkannt! Aber anstatt zuzugeben, dass du erwischt wurdest, versuchst (auch) du dem Boten das Übel ans Hemd zu kleben. (total menschlich, aber völlig unreflektiert) Du tust mir leid. Saugst dir Dinge aus den Fingern, stellst sie als Wahrheit hin, und wirst erwischt. Dumm gelaufen. Stefanus F. schrieb: > Denn was will ich ganz sicher nicht sein. Fein! Das glaube ich dir! Die Frage ist: Warum tust du das dann? Warum verhältst du dich dann so? (einen Teil der Antwort kann ich dir liefern, für den Rest bist du selber zuständig) Stefanus F. schrieb: > Ich möchte Lernen, > diese Abwehr-Reflexe zu kontrollieren. Vielleicht kann ich dir auch dabei helfen. Zumindest stehe ich dir als Sparringspartner zur Verfügung. Das folgende gilt wohl für alle Menschen (also auch für mich), auch wenn ich es hier jetzt deutlich auf "DU" münze. Deine Kompetenz ist begrenzt. Deine Sinne sind begrenzt. Du bist nicht in der Lage die vollständige Realität wahrzunehmen. Dein Verhalten, Lücken im Wissen mit Fantasiegebilden auszumalen, ist voll menschlich. Denn es erlaubt dir, auch mit unvollständigem Wissen zu überleben. Insbesondere in Notlagen. Deine unbezweifelbare Kompetenz, auf manchen Gebieten verschafft dir eine gute und berechtigte Basis für eine gehörige Portion Selbstvertrauen. Dummer weise überträgst du dieses Selbstvertrauen auch auf Teilgebiete, wo du nicht so sattelfest bist. Dadurch verwandeln sich deine Meinungen und (Vor)Urteile in Behauptungen und leicht widerlegbare Unwahrheiten, welche du selber nicht mehr bezweifelst. Wie sich an unseren vorherigen Streitigkeiten belegen lässt, bist du in einem solchen Fall, mit freundlichen Worten darauf hingewiesen, nicht bereit Einsicht zu zeigen. Sondern fühlst dich angegriffen, und gehst schnell zu Gegenangriffen über. Leider vergisst du dabei, dass solche Attacken keinesfalls deiner Position mehr Wahrheitsgehalt verleihen. Als "Gegner" hat man dann im Grunde nur zwei Möglichkeiten, Rückzug(was deinen Irrtum dann unterstützen würde), oder sich auf die Eskalationsspirale einzulassen. Die Haltung "Ich mag Arduino nicht" kann ich problemlos respektieren. Aber dass du daraus ableitest, dass Arduino grundsätzlich Mist ist, und das bei jeder möglichen Gelegenheit raus posaunst, ist wenigstens lästig. Aber der Versuch von dir, das dann mit irrationalen/falschen Argumenten zu untermauern ist jämmerlich, und so wie hier geschehen leicht zu widerlegen. Das würde sich alles deutlich milder gestalten, wenn du besser zwischen Wissen und Behauptung/Fantasie unterscheiden würdest. Merke: Verallgemeinerungen/Behauptungen sind falsch, wenn sich Gegenbelege finden lassen. Verallgemeinerungen/Behauptungen sind unglaublich hilfreich, da sie das Leben/Entscheidungsfindungen stark vereinfachen. Folgender Effekt zeigt sich bei dir: Projektion! Wie schon gesagt: Du bist nicht in der Lage die vollständige Realität wahrzunehmen. Du hast dir ein Bild von der Welt gemacht. Dieses Bild existiert NUR in deinem Kopf. Wie ein Diaprojektor projizierst du dein Bild der Welt, auf die Welt. Und das ist genau das was du siehst! Dein eigenes Bild von der Realität auf der Realität abgebildet. Und jetzt kommt so ein "Arschloch" wie ich daher, und möchte sich nicht deiner Projektion anpassen. Dann klatscht es in deiner Projektion, sie bekommt Sprünge. Plötzlich zeigt sich, das Realität und Projektion nicht übereinander passen. Wer ist daran schuld? Ich, der dir sagt: So gehts nicht? Die Realität? Die keine Alternativen zulässt! Wäre es in solchen Fällen nicht ehrenhaft, einen Irrtum einzugestehen, und die Projektion anzupassen? Dank deiner Unzugänglichkeit, bei solchen Projektionssprüngen, gehe ich dich jetzt härter an. Sonst ist es offensichtlich nicht möglich deine Merkschwelle zu überschreiten. Und dann ist es an dir, dich dazu zu entscheiden, entweder mich dafür zu verurteilen (den Boten töten), oder deine Projektion anzupassen und damit gleichzeitig deine Kompetenz zu steigern. Folgendes ist passiert: Dein gründlich versauter Beitrag, voller Arduino Verachtung und Unwahrheiten, weckt im gleichen Maße bei mir Verachtung für den Autor, also für dich. Ist das ungerecht? Diese Verachtung schütte ich dann in Kübeln zurück. Ein wenig, wie ein Spiegel. Ja, es wäre mir sehr recht, wenn dir solche Blamagen in Zukunft erspart bleiben würden! Tipp: > Du musst dein Ändern leben. ---------- Roth schrieb: > Vielleicht schreibt hier noch > jemand unter meinem Alias, Melde dich vernünftig an! Und poste dann NUR mit diesem Alias. Dann dürfte sich das Problem erledigt haben.
Nabu T. schrieb: > Hallo Stefanus, > das sieht schon mal nach einem Weg aus (TwiWire). Werde mal ein paar > Tests machen, melde mich dann... > Grüße Nabu T. Was kam dabei heraus?
Arduino Fanboy D. schrieb: > blablablablablubblub ... (1012 Wörter (drei A4 Seiten)). Ich würde gerne wissen, was dir passiert ist. Ehrlich, meine Abneigung ist weg. Ich habe nur noch Mitleid
Arduino Fanboy D. schrieb: > Merke: > Es gibt nicht "die Arduino-Bibliothek", sondern Tausende. > Erarbeitet von tausenden(?) Programmierern. > Für Dutzende von Plattformen. > Und da sind sehr wohl hochwertige Libs bei. Einstellige Prozentzahlen?
Arduino Fanboy D. schrieb: > avr schrieb: >> @Arduino-fanboy >> Das ändert nichts an der schlechten Qualität der Arduino-Bibliothek. >> Nicht nur für eine C++-Bibliothek ist die vergleichsweise schlecht >> geschrieben. > Der Versuch ist nett, aber ich kann mich nicht für die Arbeit anderer > Rechtfertigen. Und schon gar nicht die Verantwortung übernehmen. > > Merke: > Es gibt nicht "die Arduino-Bibliothek", sondern Tausende. > Erarbeitet von tausenden(?) Programmierern. > Für Dutzende von Plattformen. > Und da sind sehr wohl hochwertige Libs bei. Es geht hier um I2C und die Arduino-Wire-Library. Und deren Qualität ist halt nicht so prall. AFAICS hat das niemand hier auf alle Arduino-Libs verallgemeinern wollen. Wenn man ordentlich objektorientiert entwickelt, dann sollte man problemlos mehrere Instanzen einer Klasse instanziieren können - oder die Klasse sollte besser als Singleton implementiert (und dokumentiert!) sein.
Ralf D. schrieb: > dann sollte man > problemlos mehrere Instanzen einer Klasse instanziieren können Ja, mag sein... Geht aber nur, wenn auch wenn min. 2 TWI Hardware Einheiten vorhanden sind und so wird es auch gemacht. 2 Instanzen für 1 TWI Einheit machen keinen Sinn und werden auch nicht funktionieren. Gilt auch für SPI, Serial EEPROM, und vergleichbare. Deren Instanziierung wird in den Libs vorgenommen. Eine Instanziierung durch den User ist nicht vorgesehen und konsequenter Weise nirgendwo dokumentiert. Ralf D. schrieb: > sollte besser als Singleton implementiert Das hat den doofen Nachteil, dass solche Instanzen per new erzeugt werden müssen und damit der Speicherverbrauch, welcher am Ende der Kompilierung angezeigt wird, je mehr Singeltons eingesetzt werden, um so weniger stimmt. Auf dem PC mag das nicht sonderlich ins Gewicht fallen. Ich kann mit dem Verzicht auf new (meist) recht gut leben. Auch wenn mich die Instanziierung, in den Libs selber, schon manchmal stört. Ist es wirklich so, dass eine Library automatisch dadurch schlecht ist, wenn nicht alle C++ Features bis zur Grenze ausgeschöpft werden? OK, wenn dir dieses "Qualitätsmerkmal" für ein vernichtendes Urteil reicht, dann muss das wohl so sein.
Arduino Fanboy D. schrieb: > Es gibt nicht "die Arduino-Bibliothek", sondern Tausende. > Erarbeitet von tausenden(?) Programmierern. > Für Dutzende von Plattformen. > Und da sind sehr wohl hochwertige Libs bei. Ich setze Arduino tatsächlich zum prototyping ein. In größeren Projekten dagegen eigentlich nie. Das liegt an hauptsächlich 2 Gründen: a) das Konzept, also der strukturelle Aufbau gefällt mir nicht. Dazu gehört auch der strikte Verzicht auf Templates, welche die Peripherie gut abbilden hätten können. -Z.B. SPIMaster<SPI2>, wäre ein Konzept, dass ich aus C++ Sicht sinnvoll fände. -Der IO-Zugriff wäre über Templates ebenfalls kein Flaschenhals. -da ich fast immer eigene Hardware verwende, bringt das Pin numbering Konzept keinen Vorteil, im Gegenteil man benötigt mehr Zeit. Plattformunabhängigkeit sehe ich hier nicht, weil man bei einer neuen Hardware, die Pins auch wieder neu zuordnen muss (außer man verwendet die shields, die oftmals schaltungs- und layouttechnisch bescheiden sind). b) ich verwende häufig Peripherie, die nicht von Bibliotheken unterstützt wird. Dann schreibe ich lieber meine eigenes HAL, die bei größeren Projekten soweit abstrahiert, dass ich die eigentliche Software auch am PC entwickeln und debuggen kann. Getestet wird in dieser Phase nur was nur auf der Hardware getestet werden kann. Abgesehen davon werden viele Mikrocontroller die ich nutze unterstützt. Eine andere Struktur der library hätte komplette Mikrocontrollerfamilien unterstützen können. So muss jeder Typ manuell hinzugefügt werden. Die Änderungen würden die Bibliothek nicht unbedingt komplizierter machen, aber anfängergeeignet wäre sie nicht mehr. Aber genau aus diesem Grund gibt es konzeptionelle Defizite die sich durch die ganze Bibliothek ziehen.
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.