Es geht um : https://github.com/bimac/EEPstore Könnte glatt von mir sein. Code fertig, Motivation verbraten. Kommentare sind was für Weicheier und für eine Anleitung reichts erst recht nicht. Jetzt bin ich mal in der anderen Rolle. Ich habe das Gefühl, dass diese Bibliothek das machen könnte, was ich suche. Leider komme ich nicht dahinter, wie ich sie genau benutzen muss, um 2 Werte vom Typ uint16_t im Eeprom abzulegen und irgendwann wieder zu bekommen, bzw. um zu erfahren, ob das lesen geklappt hat.
In https://github.com/bimac/EEPstore/blob/main/src/EEPstore.h reinzugucken ist nicht zumutbar? Das Ding bietet gerade mal drei für Dich nutzbare Funktionen ("Methoden") an: getIfValid getOrSet set
Dann leg mal ein Objekt von dem Typ an..... Und ja, dumm gucken kann ich.
Habe es nicht runtergeladen/probiert. Wüßte aber nicht, was gegen die folgende Anweisung spricht. Hast du sowas bereits probiert? Wenn ja, was war die Fehlermeldung?
1 | EEPstore<uint8_t> store; |
Hmmm, dieser Thread hat das Zeug zum rathole... Mir geht es oft ähnlich wie dem TO: github-Projekte sind häufig nicht viel mehr als einfach nur eine (mehr oder weniger) geordnete Ablage des Codes und etwas Text für den Entwickler, gerade genug, damit er sich damit zurecht findet. Natürlich kann man mit endlichem Aufwand die Funktion auch direkt aus dem Code herauslesen, aber dann ist der Schritt zur kompletten Selbstentwicklung nicht mehr weit. Die allermeisten Autoren haben einfach nicht die Fähigkeit (und das stelle ich wertfrei fest), sich in den (weniger mit dem Projekt vertrauten) Interessierten hinein zu versetzen, und so sieht dann auch das readme aus. Aber echtes Sharing von Projekten sollte wesentlich mehr sein als nur die freie Verfügbarkeit der Sources.
Beitrag #7875998 wurde vom Autor gelöscht.
Thilo L. schrieb: > Mir geht es oft ähnlich wie dem TO: github-Projekte sind häufig nicht > viel mehr als einfach nur eine (mehr oder weniger) geordnete Ablage des > Codes und etwas Text für den Entwickler, gerade genug, damit er sich > damit zurecht findet. Wie sehen denn deine in Github abgelegten Projekte aus. Sind die besser dokumentiert, um für andere die Nutzung möglichst einfach zu machen?
Mülheim K. schrieb: > Habe es nicht runtergeladen/probiert. Wüßte aber nicht, was gegen die > folgende Anweisung spricht. Der Compiler ;-) > Hast du sowas bereits probiert? Jetzt ja. Musste ich ja gleich mal ausprobieren. > Wenn ja, was war die Fehlermeldung? >
1 | Hurz.ino:223:19: error: no matching function for call to 'EEPstore<unsigned char>::EEPstore()' |
2 | EEPstore<uint8_t> store; |
3 | ^~~~~ |
4 | In file included from Hurz.ino:5:0: |
5 | libraries\EEPstore\src/EEPstore.h:38:3: note: candidate: EEPstore<T>::EEPstore(const T&) [with T = unsigned char] |
6 | EEPstore(const T &dataRef) : data(dataRef), crc(calcCRC()) {} |
7 | ^~~~~~~~ |
8 | libraries\EEPstore\src/EEPstore.h:38:3: note: candidate expects 1 argument, 0 provided |
9 | libraries\EEPstore\src/EEPstore.h:36:26: note: candidate: constexpr EEPstore<unsigned char>::EEPstore(const EEPstore<unsigned char>&) |
10 | template <class T> class EEPstore { |
11 | ^~~~~~~~ |
12 | libraries\EEPstore\src/EEPstore.h:36:26: note: candidate expects 1 argument, 0 provided |
13 | libraries\EEPstore\src/EEPstore.h:36:26: note: candidate: constexpr EEPstore<unsigned char>::EEPstore(EEPstore<unsigned char>&&) |
14 | libraries\EEPstore\src/EEPstore.h:36:26: note: candidate expects 1 argument, 0 provided |
15 | |
16 | Bibliothek EEPstore in Version 1.0.4 im Ordner: libraries\EEPstore wird verwendet |
17 | Bibliothek EEPROM in Version 2.0 im Ordner: Nasenbaer\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM wird verwendet |
18 | exit status 1 |
19 | |
20 | Compilation error: no matching function for call to 'EEPstore<unsigned char>::EEPstore()' |
Dann dachte ich, wenn er meint, dann kann er ein Argument haben.
1 | uint8_t ee; |
2 | EEPstore<uint8_t> store(ee); |
Damit konnte ich den Compiler aber auch nicht besänftigen. Er meckerte weiter :
1 | Hurz.ino:224:27: error: 'EEPstore<T>::EEPstore(const T&) [with T = unsigned char]' is private within this context |
2 | EEPstore<uint8_t> store(ee); |
3 | ^ |
4 | In file included from Hurz.ino:5:0: |
5 | libraries\EEPstore\src/EEPstore.h:38:3: note: declared private here |
6 | EEPstore(const T &dataRef) : data(dataRef), crc(calcCRC()) {} |
7 | ^~~~~~~~ |
8 | Bibliothek EEPstore in Version 1.0.4 im Ordner: libraries\EEPstore wird verwendet |
9 | Bibliothek EEPROM in Version 2.0 im Ordner: Nasenbaer\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM wird verwendet |
10 | exit status 1 |
11 | |
12 | Compilation error: 'EEPstore<T>::EEPstore(const T&) [with T = unsigned char]' is private within this context |
Rainer W. schrieb: > Wie sehen denn deine in Github abgelegten Projekte aus. Sind die besser > dokumentiert, um für andere die Nutzung möglichst einfach zu machen? La Paloma pfeif. Es geht mir in diesem Thread auch nicht darum, auf den Entwickler der Bibliothek zu schimpfen.
Flunder schrieb: > Leider komme ich nicht > dahinter, wie ich sie genau benutzen muss, um 2 Werte vom Typ uint16_t > im Eeprom abzulegen und irgendwann wieder zu bekommen, bzw. um zu > erfahren, ob das lesen geklappt hat. Die Lib benutzt get() und put() und baut noch eine CRC drumherum. D.h. Du must Dir erstmal die EEPROM.h anschauen. Hier ist das schön erklärt: https://docs.arduino.cc/learn/built-in-libraries/eeprom/ get() und put() benötigen eine struct, in der Deine Daten definiert sind.
Rainer W. schrieb: > Wie sehen denn deine in Github abgelegten Projekte aus. Sind die besser > dokumentiert, um für andere die Nutzung möglichst einfach zu machen? Eins der immer wieder gern gebrachten Argumente. Hört sich in der ersten Sekunde gut an, ist aber in Wahrheit einfach nur populistisch. Man muss nicht vorführen, dass man gut Klavierspielen kann, ja man muss überhaupt kein Instrument spielen können, um ein schlechtes Spiel nach dem Zuhören kritisieren zu dürfen. Fakt ist nun mal, dass es nur sehr wenig fähige Informationsvermittler gibt, und unter einzelkämpferischen Bastlern noch weniger. Das gilt nicht nur für die Elektrotechnik.
Einfach anwenden, z.B.
1 | uint16_t data; |
2 | EEPstore<uint16_t>::set(data,0); |
Die Funktion getOrSet() sieht recht strange aus. Sie versucht zu lesen, aber wenn die CRC nicht stimmt, überschreibt sie gnadenlos den EEPROM mit irgendwas anderem. In jedem Fall ist danach der Inhalt der struct und das EEPROM identisch, sowie die CRC o.k.
Peter D. schrieb: > D.h. Du must Dir erstmal die EEPROM.h anschauen. Hier ist das schön > erklärt: > https://docs.arduino.cc/learn/built-in-libraries/eeprom/ Da wird in der Headerdatei der Bibliothek gleich ein Objekt der Klasse angelegt. Bei der Bibliothek, um die es mir geht, muss man das noch selber machen und das ist es ja, woran ich bereits scheitere. Da kommt das mit dem template<> erst für die Methoden, hier schon bei der Klasse.
Thilo L. schrieb: > dann ist der Schritt zur kompletten Selbstentwicklung nicht mehr weit Und das sorgt für Transparenz und Verständnis.
Beitrag #7876040 wurde vom Autor gelöscht.
Flunder schrieb: > Jetzt ja. Musste ich ja gleich mal ausprobieren. Und jetzt sollen wir alle mal raten, was Du in der Hurz.ino verzapft hast? Ohne CRC: #include <EEPROM.h> get() und put() Mit CRC: #include <EEPstore.h> getIfValid() und set()
> > Mülheim K. schrieb: > > Habe es nicht runtergeladen/probiert. Wüßte aber nicht, was gegen die > > folgende Anweisung spricht. > Der Compiler ;-) Ja, nach dem absenden erst gesehen, dass der Ctor private ist... Wollte es dann korrigieren, aber das ging nicht mehr. Dann lief ich in die nur alle 30 Minuten Beitragsgrenze für neue Nutzer rein... Der Vorschlag von Loco M. sollte aber funktionieren. Um den OT hier weiter anzuregen. Da github allen offen steht und jeder ein Projekt forken und verbessern darf, bin ich gespannt, ob ich heute Abend einen Pullrequest sehe, der eine kurzes Beispiel hinzufügt. Sollte nicht mehr Aufwand sein, als die Tatsache der fehlenden Doku hier zu bemängeln. Und im herzen sind wir doch hoffentlich alle Pfadfinder und halten uns an deren Statuten.
:
Bearbeitet durch User
Loco M. schrieb: > Einfach anwenden, z.B. >
1 | > uint16_t data; |
2 | > EEPstore<uint16_t>::set(data,0); |
3 | >
|
Genau so funktionierts ! Die Methoden sind wohl so etwas wie static, man braucht also kein Objekt anzulegen.
Peter D. schrieb: > Flunder schrieb: >> Jetzt ja. Musste ich ja gleich mal ausprobieren. > > Und jetzt sollen wir alle mal raten, was Du in der Hurz.ino verzapft > hast? > > Ohne CRC: > #include <EEPROM.h> > get() und put() > > Mit CRC: > #include <EEPstore.h> > getIfValid() und set() 100 Gummipunkte. Genau richtig geraten. Das zugegeben etwas schräge getOrSet() brauche ich nicht. Wird der Autor der Bibliothek für irgendwas benötigt haben. Sei ihm gegönnt.
Georg M. schrieb: > Thilo L. schrieb: >> dann ist der Schritt zur kompletten Selbstentwicklung nicht mehr weit > > Und das sorgt für Transparenz und Verständnis. Hmmm, das ist jetzt so eine ironische Bemerkung, die total an meiner Aussage vorbei geht. Entwickle ich eine Funktion selbst, weil ich mit dem Verständnis einer verfügbaren Lösung nicht zurecht komme, dann steigert das sehr wohl das Verständnis - nämlich mein eigenes. Und mehr ist auch nicht der Anspruch gewesen. Was die Transparenz angeht, so sehe ich nicht, wo diese zum Tragen kommt - ich entwickle meine eigene Lösung und bin happy. Ganz im Gegensatz dazu haben öffentlich verfügbare Projekte sich schon daran zu messen, wie gut sie für die generelle Verdauung seitens Dritter geeignet sind. Und daran hapert's eben bei vielen Projekten. Und um auf einen anderen Reply einzugehen: gerade weil ich weiß, dass ich es (z.B. aus Zeitmangel) nicht unbedingt besser machen würde, stelle ich keine Projekte in Github (oder sonstwo) ein. Frei nach Ch. Lindner: "Lieber etwas garnicht, als schlecht machen."
Thilo L. schrieb: > so eine ironische Bemerkung Überhaupt nicht ironisch. Man hat keine fremden "Black Boxes" in seinem Programmcode — daher die Transparenz. Und das Verständnis. Zumindest bei der Programmierung von 8-Bit-Mikrocontrollern sollte es durchaus möglich sein. Kein Hexenwerk.
Flunder schrieb: > Ich habe das Gefühl, dass diese > Bibliothek das machen könnte, was ich suche. Flunder schrieb: > Ich habe das Gefühl, dass diese > Bibliothek das machen könnte, was ich suche. Leider komme ich nicht > dahinter, wie ich sie genau benutzen muss lade sie nach ChatGPT hoch und schreibe dazu, er möge sie bitte gut kommentieren. Das ist ernst gemeint, auch wenn ich es selbst noch nicht probiert habe. Aber das neue VisualStudio mit Copilot kommentiert meinen Programmcode noch während ich ihn schreibe erschreckend gut. Ich glaube sogar, es passt sich meiner Sprache an. I.E. "das könnte doch glatt von mir kommen". Ist es aber nicht! Oder umgekehrt, ich schreibe erst einen Kommentar, dann einen Funktionsrumpf, zack steht da die fertige Funktion. Manchmal daneben, manchmal nicht. Erschreckend!
Flunder schrieb: > Die Methoden sind wohl so etwas wie static, man > braucht also kein Objekt anzulegen. Die Vereinbarung eines Typs ist erstmal nur ein Bekanntmachen für den Compiler und belegt daher weder RAM noch Code. Der Compiler weiß dadurch, wie er die einzelnen Elemente zugreifen muß und die Größe in Bytes. Man kann also Pointer auf beliebige Variablentypen übergeben und die EEPROM-Funktionen wissen dadurch, wieviel Bytes sie lesen bzw. schreiben sollen. Ein Pointer auf void ist daher nicht erlaubt. Beachten muß man aber, daß das Schreiben Zeit kostet, je nach AVR-Typ etwa 8ms je Byte. Größere Arrays können also dauern. Z.B. schreibt man beim ATmega2560 alle 4kB EEPROM, dauert das ~33s.
Hallo Thilo L. schrieb: > Ganz im Gegensatz dazu haben öffentlich verfügbare Projekte sich schon > daran zu messen, wie gut sie für die generelle Verdauung seitens Dritter > geeignet sind. Und daran hapert's eben bei vielen Projekten. Als (fast) reiner Nutzer muss ich der Aussage, besonders eben bei Arduinobiblotheken zustimmen. Selbst in den Anwendungsbeispielen hat man als nicht "Superprofi" oft viele Fragezeichen vor sich. Oft sind die Beispiele zu kompliziert und umfangreich. Da wird zu viel generelles Wissen vorausgesetzt (gerade für Anfänger oder reine Nutzer, die sich ein Sketch für ihr Problem und Anwendung "zusammensetzen") und einfach zu viel Funktion in den Beispielen hineingequetscht. Aber nicht nur Arduinobiblotheken sind von diesem Problem betroffen: Auch eigentlich großartige Programme wie yt-dlp (als Kommandozeilentool) werden fast ausschlieslich mit "Anleitungen" beschrieben, die zwar sehr umfangreich, aber weitab des Verständnishorizonts der meisten Nutzer sind. Nein, die Kommandozeile und der "Hemdsärmelige" lässige Umgang damit ist eben nicht das Normal und was jeder kann und wo "Selbstverständlichkeiten" jeden bekannt sind. Und auch eigentlich extrem gute und mächtige open source Software (Pakete) werden (zu) oft zuerst mit viel Elan und hineinversetzen in den "einfachen" Anwender dokumentiert und mit Anleitungen unterstützt - aber im Laufe der Weiterentwicklung, die teilweise über Jahrzehnte geht (was sehr gut ist und so manche teure kommerzielle Software und deren teure Abokonzepte endlich zum Nogo werden lässt) geht es bei der guten, aktuellen und einfach "jetzt" in der aktuellen Programmversion zutreffenden Beschreibung schnell begab, werden Neuerungen und Umbenennungen nicht eingepflegt oder die Erklärungen und "neue" Beispiele werden einfach nur schlechter und unmotivierter hingeklatscht. Somit werden eigentlich geniale Programme wie Gimp, Lowless Cut, darktable, Libre (open) Office und viele mehr zu Software für "alte Hasen" oder Forscher die Spaß und Zeit an immer wieder ausprobieren und selbst lernen haben... Für den Anwender, den es um die eigentlichen Funktionen wie z.B. Bildbearbeitung oder Videoschnitt geht, nicht wirklich der sinnvolle Weg. Dass es auch besser geht (wenn aber auch immer noch fernab von optimal - es fehlt an >>durchgehenden<< -im Sinne von vormachen-Beispielen von verschiedenen Workflows und teilweise an Erklärungen von Begriffen, die nichts direkt mit dem Programm zu tun haben wie z.B. "recusive") zeigt die Anleitung von digiKam. Es ist generell traurig, dass man als reiner Anwender immer auf die Arbeit von anderen Anwendern und meist Youtubern hoffen muss, die einem am lebenden Objekt zeigen, wie die Software (die Bibliothek, das Kommandozeilentool) in der Praxis unter Windows (Mac) genutzt wird. Bei Gimp klappt das recht brauchbar (aber auch nicht sofort), bei andern Programmen eher nicht. Sehr viel Programmierarbeit und geniale Funktionen, die endlich auch für die "Masse" sorgen könnte, das überteuerte kommerzielle Programme (und deren frechen Abokonzepten) verschwinden wird einfach verschwendet.- es fehlen (meist) die Anleitungsschreiber, die eben nicht(!) zum Programmierteam gehören und möglichst auch nicht(!) mehr als normale Anwender von Programmieren, Datenbanken usw. kennen.
:
Bearbeitet durch User
Die Klassendeklaration ist gerade mal 40 Zeilen lang und damit auch ohne Kommentare gut verständlich, wenn man bereits ein paar C++-Grundlagen beherrscht. Aber genau da liegt das Problem: Die meisten Arduino-User können kein C++. Viele wissen nicht einmal, dass sie in C++ programmieren. Es wird auch einiges unternommen, um die C++Natur des ganzen Systems zu kaschieren. Bestes Beispiel dafür ist die Dateiendung .ino (statt .cpp, .cc oder .C). Da die Arduino-Entwickler nun einmal eine der komplexesten Sprachen als Basis für ihre Entwicklungsumgebung gewählt haben, muss man halt damit leben und sich irgendwie in die Grundlagen von C++ einarbeiten. Auf https://docs.arduino.cc/ (wo man es eigentlich erwarten würde) findet man leider so gut wie nichts, was einem Anfänger diesbezüglich weiterhelfen könnte. Also bleibt einem nichts anderes übrig, als im Netz nach geeigneten C++-Tutorials zu suchen oder ein C++-Lehrbuch zu beschaffen. Man sollte diesen Weg aber auf jeden Fall gehen, denn die Kenntnis der wichtigsten C++-Grundlagen ermöglicht es nicht nur, fremden Code zu verstehen, sondern etwas komplexeren Code auch selbst zu schreiben. Danach verliert auch EEPstore.h seinen Schrecken :) PS: Trotzdem wäre es für den Autor der EEPstore-Klasse IMHO zumutbar gewesen, zu den drei Funktionen jeweils ein einzeiliges Beispiel zu liefern und dieses mit einem einzelnen Satz grob zu erläutern. Das hätte ihn vermutlich nicht mehr als 15 Minuten gekostet.
:
Bearbeitet durch Moderator
Ich vermute einfach mal, dass die in dieser Bibliothek genutzten Konstrukte im C++ Kurs auch nicht innerhalb der ersten Woche gelehrt werden.
Hallo Frank O. schrieb: > Ich vermute einfach mal, dass die in dieser Bibliothek genutzten > Konstrukte im C++ Kurs auch nicht innerhalb der ersten Woche gelehrt > werden. und Yalu X. schrieb: > Aber genau da liegt das Problem: Die meisten Arduino-User können kein > C++. Viele wissen nicht einmal, dass sie in C++ programmieren. Es wird > auch einiges unternommen, um die C++Natur des ganzen Systems zu > kaschieren.... so und jetzt schaue sich der geneigte Bibliothek-Programmierer mal genau an, was hinter der ->gesamten(!)<- Arduino Idee steht: Ein einfaches Werkzeug für Anwender (also einen "nur" angelernter "Programmierer") bieten, Laien ein Werkzeug bieten, reinen Nutzern dem es nur um die fertige Schaltung / Funktion geht, ein Werkzeug (oder auch nur "Copy Paste Tool") bieten und ähnliches. Nicht umsonst (siehe auch die ursprüngliche Herkunft und das erste Zielpublikum des Arduinogedanken) nennt man in der Arduinowelt die Programme (den Sourcecode) halt Sketches => Skizzen. Skizzen macht man relativ schnell, es sind keine richtigen "Bilder", man muss nicht "Kunst studiert" haben um eine Skizze zu erstellen (fast) jeder kann nach kurzer Einarbeitung skizzieren. Dementsprechend müsste immer (!) die Dokumentation zu Anwendung von Bibliotheken sein, muss es immer auch einfache und kurze Beispiele geben (die nicht wiederum selbst anspruchsvolle Konzepte und "Tricks" nutzen), die langen und Trickreichen für Experten dürfen ja bestehen bleiben, sie "dürfen" halt nur nicht alleine vorhanden sein. Yalu X. schrieb: > Also bleibt einem nichts anderes übrig, als im Netz nach geeigneten > C++-Tutorials zu suchen oder ein C++-Lehrbuch zu beschaffen. Man sollte > diesen Weg aber auf jeden Fall gehen, denn die Kenntnis der wichtigsten > C++-Grundlagen ermöglicht es nicht nur, fremden Code zu verstehen, > sondern etwas komplexeren Code auch selbst zu schreiben. Nein eben nicht - zumindest nicht für die meisten Modellbauer, Lichteffekte Fans, Nachbauer usw. - die wollen (zurecht) einfach nur das Ergebnis haben und diese eventuell leicht modifizieren bzw. aus einzelnen "Blöcken" (und somit Bibliotheken) zusammensetzen. Die Arduiniowelt ist halt von Grundsatz genau auf so ein Publikum ausgelegt. Das "echte" Programmierer mitspielen können (und letztendlich auch "müssen") ist mehr eine Nebenerscheinung. Wenn sie aber mitspielen, dann müssen sie sich den Gegebenheiten anpassen und immer (!) vernünftige, eingängige, gut und verständlich dokumentierte Anleitungen zu ihren Bibliotheken mitliefern.
> Suche Beispiel
Falsches Forum. Hier werden nur Texte geschrieben.
Darius schrieb: > Dementsprechend müsste immer (!) die Dokumentation zu Anwendung von > Bibliotheken sein, muss es immer auch einfache und kurze Beispiele geben > (die nicht wiederum selbst anspruchsvolle Konzepte und "Tricks" nutzen), > die langen und Trickreichen für Experten dürfen ja bestehen bleiben, sie > "dürfen" halt nur nicht alleine vorhanden sein. Ist das Ding, um das es hier geht, offizieller Bestandteil des Arduino-Ökosystems? Nee. Das hat ein wortkarger Florian Rau aus Lissabon auf github veröffentlicht. Wie ist der Threadstarter da überhaupt 'rangekommen?
Harald K. schrieb: > Ist das Ding, um das es hier geht, offizieller Bestandteil des > Arduino-Ökosystems? Ja > Nee. Das hat ein wortkarger Florian Rau aus Lissabon auf github > veröffentlicht. mööp : nicht nur > Wie ist der Threadstarter da überhaupt 'rangekommen? Klickst Du in der IDE links auf den Bücherstapel, scrollst runter bis zu besagter Bibliothek und klickst auf "Installieren".
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.