Arduino Wire library gebruik gaat verkeerde kant op.
12 berichten
• Pagina 1 van 2 • 1, 2
Arduino Wire library gebruik gaat verkeerde kant op.
Als jullie het niet erg vinden, dan wil ik even mijn hart luchten.
Ik ben begonnen om Adafruit en Sparkfun zo ver te krijgen, dat ze de Wire library goed gaan gebruiken.
Ongeveer 20% deed het namelijk verkeerd en veel was van Adafruit en Sparkfun gekopieerd.
Als ik nu naar recente code op Github kijk, dan doet misschien wel 50% het verkeerd.
De issues op Github bij Adafruit en Sparkfun laten ze gewoon staan.
Dus ik maak veel issues over de Wire library, maar ik hou het niet meer bij. Sommigen gaan zelfs tegen mij in:
- https://github.com/sleemanj/DS3231_Simple/issues/11
- https://github.com/SingleTact/StandaloneArduino/issues/3
De rare constructies met de Wire library worden steeds merkwaardiger. Gebruik van Wire.endTransmission() na Wire.requestFrom(), allerlei rare timeouts met millis() na een Wire.requestFrom() en speciale ingewikkelde functies om de zogenaamde timeouts te verwerken. Het loopt compleet uit de hand.
Proberen de wereld verbeteren (met betrekking tot de Wire library) is me dus niet gelukt.
Ik zie al voor me wat er gaat gebeuren: op een bepaald moment gaat iemand van het Arduino team de officiële Arduino voorbeelden of documentatie wijzigen naar het verkeerde gebruik.
Ik ben begonnen om Adafruit en Sparkfun zo ver te krijgen, dat ze de Wire library goed gaan gebruiken.
Ongeveer 20% deed het namelijk verkeerd en veel was van Adafruit en Sparkfun gekopieerd.
Als ik nu naar recente code op Github kijk, dan doet misschien wel 50% het verkeerd.
De issues op Github bij Adafruit en Sparkfun laten ze gewoon staan.
Dus ik maak veel issues over de Wire library, maar ik hou het niet meer bij. Sommigen gaan zelfs tegen mij in:
- https://github.com/sleemanj/DS3231_Simple/issues/11
- https://github.com/SingleTact/StandaloneArduino/issues/3
De rare constructies met de Wire library worden steeds merkwaardiger. Gebruik van Wire.endTransmission() na Wire.requestFrom(), allerlei rare timeouts met millis() na een Wire.requestFrom() en speciale ingewikkelde functies om de zogenaamde timeouts te verwerken. Het loopt compleet uit de hand.
Proberen de wereld verbeteren (met betrekking tot de Wire library) is me dus niet gelukt.
Ik zie al voor me wat er gaat gebeuren: op een bepaald moment gaat iemand van het Arduino team de officiële Arduino voorbeelden of documentatie wijzigen naar het verkeerde gebruik.
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino Wire library gebruik gaat verkeerde kant op.
En? Voelt het nu beter?
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Je hebt wel een beetje gelijk, echter als je iets schrijft zoals een request, dan moet je nog een start maken, en ja je hebt gelijk voor een start hoef je geen stop te zetten, maar aan de andere kant is het wel zo netjes, want dan weet je zeker dat er netjes gestopt is. Nee het is niet noodzakelijk, maar wel beter voor de structuur.
Je weet zelf ook wel dat eenmaal gepubliceerde code, bijna niet te veranderen valt. Men probeert natuurlijk de code ook een beetje universeel te houden, zodat ook met een andere library of compiler, er een beetje structuur in zit.
en sterker nog, in de request.from staat al lang een boolean om die stop te creeren, maar er zijn natuurlijk ook compilers die dat niet hebben, vandaar dat het wellicht overvloedig is, maar ook zij hebben wel een punt.
De wereld verbeteren probeert iedereen, en ieder op zijn eigen manier, zelfs poetin en trump, dat betekent nog niet dat we het daar ook mee eens moeten zijn.
Je weet zelf ook wel dat eenmaal gepubliceerde code, bijna niet te veranderen valt. Men probeert natuurlijk de code ook een beetje universeel te houden, zodat ook met een andere library of compiler, er een beetje structuur in zit.
en sterker nog, in de request.from staat al lang een boolean om die stop te creeren, maar er zijn natuurlijk ook compilers die dat niet hebben, vandaar dat het wellicht overvloedig is, maar ook zij hebben wel een punt.
De wereld verbeteren probeert iedereen, en ieder op zijn eigen manier, zelfs poetin en trump, dat betekent nog niet dat we het daar ook mee eens moeten zijn.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Arduino Wire library gebruik gaat verkeerde kant op.
shooter, zij hebben geen punt, echt niet. Daar ben ik al twee jaar mee bezig om dat duidelijk te maken.
De Wire.requestFrom() deed altijd al een stop (en ook een start). De parameter is alleen toegevoegd om de stop weg te kunnen laten.
Het gaat mij nu juist om de Wire library niet verkeerd te gebruiken, zodat de code op alle platforms werkt.
De Wire.beginTransmission() kan niet gebruikt worden om een start te geven, dat is niet wat die functie doet.
De Wire.endTransmission() kan niet gebruikt worden om een stop te geven, dat is niet wat die functie doet.
De Wire.requestFrom() deed altijd al een stop (en ook een start). De parameter is alleen toegevoegd om de stop weg te kunnen laten.
Het gaat mij nu juist om de Wire library niet verkeerd te gebruiken, zodat de code op alle platforms werkt.
De Wire.beginTransmission() kan niet gebruikt worden om een start te geven, dat is niet wat die functie doet.
De Wire.endTransmission() kan niet gebruikt worden om een stop te geven, dat is niet wat die functie doet.
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Adafruit probeert niet eens om de bugs er uit te halen en Sparkfun geeft het op: https://github.com/sparkfun/SparkFun_BNO080_Arduino_Library/issues/3.
Ze hadden een speciale functie gemaakt om een of andere mysterieuze verzonnen timeout te verwerken. Maar ze hebben besloten om die nonsense code er in te laten zitten.
Dus nu gaan waarschijnlijk vele anderen zich als lemmings in dat timeout dal storten
Ze hadden een speciale functie gemaakt om een of andere mysterieuze verzonnen timeout te verwerken. Maar ze hebben besloten om die nonsense code er in te laten zitten.
Dus nu gaan waarschijnlijk vele anderen zich als lemmings in dat timeout dal storten
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Een wiki op Github gemaakt: https://github.com/Koepel/How-to-use-the-Arduino-Wire-library/wiki.
Maar het voelt als duwen tegen een olifant.
Maar het voelt als duwen tegen een olifant.
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Met een paar uitgebreide zoek-opdrachten heb ik ingeschat hoe vaak de Wire library verkeerd wordt gebruikt op Github.
Ik kom op 20 000 keer. Stel dat er gemiddeld 3 keer per repository een fout gemaakt wordt, en ik 50% gemist hebt met mijn zoekopdrachten. Dan zouden er 10 000 (tienduizend) issues nodig zijn.
Dat is te veel. Het gaat me niet lukken om een kantelend effect te creëren waardoor het steeds beter zou kunnen gaan
"Open source" heet dat. Zeg maar gerust met open ogen in het moeras wegzakken.
Ik kom op 20 000 keer. Stel dat er gemiddeld 3 keer per repository een fout gemaakt wordt, en ik 50% gemist hebt met mijn zoekopdrachten. Dan zouden er 10 000 (tienduizend) issues nodig zijn.
Dat is te veel. Het gaat me niet lukken om een kantelend effect te creëren waardoor het steeds beter zou kunnen gaan
"Open source" heet dat. Zeg maar gerust met open ogen in het moeras wegzakken.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Dan zit er niks anders opdan goed sparen en een van die jongens opkopen:)
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Dan wil ik nog hoger richten. Ik zou het liefst de Wire library willen vervangen door iets beters.
De Wire library heeft onhandige namen, zit onhandig in elkaar, is onhandig in het gebruik, enzovoorts.
Een nieuwe I2C library zou niet blocking moeten zijn, geschikt voor snelle processors en geschikt in een multitasking omgeving. Dat je bijvoorbeeld een stuk of wat bytes naar verschillende registers van sensors kunt schrijven, en dat die commando's eerst allemaal in een commando-buffer komen. Met een optionele callback functie. Ook het lezen van een register wordt in die commando-buffer geplaatst en met een optionele callback functie. Met globaal een error afvangen, en/of de error naar een callback functie.
Het schrijven naar een register van een sensor natuurlijk met één functie-call, en ook het lezen met één functie-call.
Vervolgens zou ik een class willen maken die geschikt is voor 95% van de sensors. In die class komt het I2C address, of the sensor repeated start ondersteunt, eventuele delays, 8-bit of 16-bit register address, enzovoorts. Dat gecombineerd met I2C_Anything, zoals de EEPROM.put() en EEPROM.get(), zodat je een uint32_t kunt declareren en dat in één keer kunt opvragen van de sensor.
De beginnende gebruiker ziet dan alleen die sensor class en wordt niet lastig gevallen met I2C dingen. Ik zie I2C als low-level communicatie, daar hoeft een Arduino gebruiker zich niet mee bezig te houden.
Helaas ben ik bij lange niet kundig genoeg om een nieuwe I2C library te schrijven voor de AVR en SAMD processors. Maar een beetje dromen hoe het beter kan kan ik wel
De Wire library heeft onhandige namen, zit onhandig in elkaar, is onhandig in het gebruik, enzovoorts.
Een nieuwe I2C library zou niet blocking moeten zijn, geschikt voor snelle processors en geschikt in een multitasking omgeving. Dat je bijvoorbeeld een stuk of wat bytes naar verschillende registers van sensors kunt schrijven, en dat die commando's eerst allemaal in een commando-buffer komen. Met een optionele callback functie. Ook het lezen van een register wordt in die commando-buffer geplaatst en met een optionele callback functie. Met globaal een error afvangen, en/of de error naar een callback functie.
Het schrijven naar een register van een sensor natuurlijk met één functie-call, en ook het lezen met één functie-call.
Vervolgens zou ik een class willen maken die geschikt is voor 95% van de sensors. In die class komt het I2C address, of the sensor repeated start ondersteunt, eventuele delays, 8-bit of 16-bit register address, enzovoorts. Dat gecombineerd met I2C_Anything, zoals de EEPROM.put() en EEPROM.get(), zodat je een uint32_t kunt declareren en dat in één keer kunt opvragen van de sensor.
De beginnende gebruiker ziet dan alleen die sensor class en wordt niet lastig gevallen met I2C dingen. Ik zie I2C als low-level communicatie, daar hoeft een Arduino gebruiker zich niet mee bezig te houden.
Helaas ben ik bij lange niet kundig genoeg om een nieuwe I2C library te schrijven voor de AVR en SAMD processors. Maar een beetje dromen hoe het beter kan kan ik wel
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino Wire library gebruik gaat verkeerde kant op.
Koepel schreef:
Helaas ben ik bij lange niet kundig genoeg om een nieuwe I2C library te schrijven voor de AVR en SAMD processors. Maar een beetje dromen hoe het beter kan kan ik wel
Kwestie van gewoon beginnen. Dan ga je vanzelf ook meer begrip vormen waarom dingen anders gebeuren dan je zou verwachten.
12 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 20 gasten