Je recherche des alternatives (raisonnablement faciles à utiliser et bien testées) aux Wire
bibliothèque. Wire
fonctionne très bien, mais: je nai besoin que de lArduino pour agir en tant que maître I2C et la bibliothèque Wire
semble être un véritable gaspillage de ressources:
Mon objectif est denvoyer des données en bloc (par exemple 32 ou 64 octets). Ces données sont déjà présentes dans un tableau dans SRAM. Maintenant, lorsque vous utilisez la bibliothèque Wire
, vous appelez la fonction TwoWire::write
qui copie vos données dans un 2ème tampon. Ensuite, Wire
utilise la TWI
bibliothèque où twi_writeTo
copie à nouveau les données dans un 3e tampon. Cest « un peu maladroit, nest-ce pas?
Jai vu le DSSCircuits / I2C-Master-Library mais je ne suis pas sûr à quel point il est mature parce quil ny a pas eu de commit après le commit initial qui a maintenant 3 ans.
Commentaires
- Avez-vous réellement des problèmes dutilisation de la RAM? Optimiser quelque chose avant quil ne devienne un problème est souvent un effort inutile.
- Tout se résume à la question de vouloir le faire fonctionner bientôt et / ou portatif vs vouloir le faire fonctionner de manière optimale . Vous êtes bien sûr libre de vous procurer le manuel du programmeur ATmega ‘ et décrire sur le périphérique vous enregistre.
- dsscircuits ‘ La page Web de la bibliothèque principale Arduino I2C affiche cinq révisions de lI2C bibliothèque à laquelle votre lien github est destiné. Cest probablement un bon point de départ pour les révisions que vous avez en tête. Si Wire a eu des corrections depuis janvier 2012, vous pourriez besoin de les ajouter à I2C.
- > Alternatives à la bibliothèque Wire pour I2C écrivez les vôtres. i2c est lun des protocoles les plus faciles à écrire à partir de zéro.
Réponse
Je ne vois aucune objection à utiliser DSS Circuits I2C Master Library .
Elle na peut-être pas été mise à jour depuis quelques années, mais si elle fonctionne, elle ne le sera pas » t besoin de lêtre. Ce nest pas comme si les bibliothèques pour microcontrôleurs devaient prendre en charge de nouveaux pilotes dimprimante, pilotes vidéo, etc.
Si cela fonctionne, cela fonctionne.
La puce na pas changé , et la seule vraie raison des mises à jour ces jours-ci est si lEDI change (ou le compilateur change) de telle manière quil introduit des erreurs de compilation. De telles choses se sont produites assez récemment avec des choses comme PROGMEM ayant des règles plus strictes, par exemple.
Commentaires
- Cette bibliothèque avait lair très prometteuse, mais notez quelle le fait ne prend en charge que les cibles AVR. Puisque les cœurs Arduino ont été développés pour une variété darchitectures, cette bibliothèque ne fonctionnera » que » pour toute carte compatible Arduino. Par exemple, il nest pas compatible avec Adafruit ‘ s STM32F405-based Feather
Answer
Aussi Procyon AVR library vaut la peine dêtre vérifié. Cest un peu vieux maintenant mais très professionnel et un peu minimaliste. Pas beaucoup de dépendances, cela devrait être bien dutiliser uniquement le module I2C. Il ny a pratiquement rien de nouveau dans la partie AVR I2C depuis.
Réponse
La classe Cosa TWI est une approche très différente de la prise en charge des pilotes de périphériques I2C. Il nutilise pas du tout de SRAM supplémentaire pour les tampons. Si un pilote de périphérique nest pas bloquant, il doit gérer la mise en mémoire tampon nécessaire. La classe Cosa TWI prend également en charge les interactions typiques avec les périphériques I2C tels que les modèles maître / esclave, les modèles «décriture de données de lecture de registre» et les transactions lors de lutilisation du multi-threading.
Une bibliothèque logicielle et matérielle Arduino-TWI est disponible. Il utilise la bibliothèque Arduino-GPIO et peut être utilisé sur les cartes basées sur AVR et SAM.
Quelques exemples: TWI Scanner , Horloge / calendrier en temps réel DS3231 , Adaptateur LCD I2C avec PCF8574 .
Réponse
Jai créé moi-même 2 bibliothèques pour une utilisation plus facile et des appels cohérents:
une pour les cibles AVR:
cI2C
un autre utilisant les mêmes fonctions pour toutes les autres cibles (qui est essentiellement un wrapper pour la bibliothèque Wire):
WireWrapper
Les deux sont disponibles dans le gestionnaire de bibliothèque IDE.
Ils fonctionnent tous les deux en tant que maître sans utiliser dinterruption et sont testés sur différentes cibles avec différents esclaves:
– UNO, Nano pour cI2C
– Zéro, dû & ESP8266 pour WireWrapper
Réponse
Vous pouvez utiliser une approche complètement différente de la question principale.En demandant des alternatives, vous avez donné une raison à cela: se débarrasser du code inutilisé dans le binaire. Vous pouvez obtenir la suppression du code inutilisé sans utiliser réellement une bibliothèque alternative. Veuillez garder à lesprit que vous pouvez demander au compilateur et à léditeur de liens dexclure le code inutilisé du binaire compilé. Utilisez simplement les indicateurs de compilation:
CFLAGS += -Wl,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections
La fonction Rach sera dans sa propre section.
LDFLAGS += -Wl,-gc-sections
Ceci indique à GCC denvoyer le drapeau -gc-sections à léditeur de liens qui supprimera les sections inutilisées. Et voilla! Les sections inutilisées sont supprimées.