3 votes

avr-gcc vs Arduino sur platform.io

J'utilise platform.io comme un IDE pour la programmation des MCU AVR. Je débute dans la programmation des AVR (j'ai une formation en C/C++ et en programmation sur les systèmes d'exploitation, pas sur les systèmes embarqués, bien que j'aie fait quelques travaux sur Arduino dans le passé) et l'utilisation de PlatformIO me permet de compléter le code pour les registres/broches, c'est pourquoi je l'utilise.

Il semble que je ne puisse pas passer du framework Arduino à avr-gcc dans PlatformIO sans perdre la complétion du code.

Je me demande s'il y a des inconvénients à garder l'Arduino en tant que cadre ?

Je sais que Arduino utilise avr-gcc à l'arrière, mais j'ai lu qu'il fait encore un peu de configuration sans que les utilisateurs le sachent (comme le réglage de Timer0 pour les délais, dont j'ai besoin puisque je l'utilise comme source d'horloge pour USI sur mon ATTiny85).

Sinon, existe-t-il un moyen, dans PlatformIO, de conserver la complétion de code et la fonction utiliser avr-gcc au lieu d'Arduino ?

Gracias.

EDIT : Je suis soit sur OSX soit sur linux (ubuntu).

6voto

Cedric Points 494

Comme l'a souligné ivankravets sur le site de l PlatformIO plate-forme communautaire (voir : https://community.platformio.org/t/avr-programming-without-arduino-framework/525/4 ), il suffit de supprimer la ligne framework = arduino de la platformio.ini pour se débarrasser du framework Arduino et travailler en C nu pour avr-gcc.

2voto

zmo Points 10611

Je n'ai jamais utilisé PlatformIO Ma réponse n'est basée que sur mes connaissances (étendues) du développement des AVR et de la structure Arduino.

Le cadre Arduino est utilisant AVR-libc (le cadre standard de bas niveau qui vous donne tous les outils dont vous avez besoin pour programmer sur AVR), et ajoute une couche d'abstraction de sorte que vous ne manipulez pas directement les registres, mais utilisez une interface plus facilement compréhensible.

Ainsi, lorsque vous écrivez sur une broche, au lieu de regarder le numéro de la patte du circuit intégré de l'AVR, vous cherchez la patte correspondante. PORT pour le configurer et le muter, vous utilisez digitalWrite() sur le conseil d'administration Le numéro de la broche. Ainsi, quel que soit le circuit intégré, la broche restera la même avec des capacités cohérentes.

La définition des broches est faite en utilisant un fichier d'en-tête qui est donné au compilateur en fonction de votre cible dans votre IDE (donc si vous utilisez un Arduino Mega ou un Leonardo la correspondance entre le port/pin de l'AVR et le pinout de la carte changera radicalement).

Étant donné votre description de PlatformIO Il utilise ces informations pour vous donner le brochage approprié en fonction de la configuration de la carte. Il tire également parti de l'approche orientée objet de l'infrastructure Arduino, de sorte que vous pouvez facilement compléter les méthodes lorsque vous utilisez des singletons (comme lorsque vous utilisez Serial ).

En utilisant la libc AVR brute, d'un autre côté, il est plus difficile d'obtenir une complétion significative, parce que la plupart des opérations sont faites sur des registres qui sont déclarés par des alias de préprocesseurs, et tout le code est en C pur, donc la complétion de code n'est pas vraiment utile (vous ne pouvez pas lister toutes les méthodes qui s'appliquent à un objet donné comme avec l'exemple de Serial).

Ensuite, Arduino offre une approche de haut niveau pour prototyper du code embarqué, que vous pouvez ensuite retravailler lorsque vous avez besoin d'optimiser le temps et/ou l'espace. Et certains projets (comme le firmware Marlin pour les repraps) utilisent une sorte d'approche hybride, en réimplémentant de nombreuses parties de l'interface Arduino d'une manière plus optimisée (comme digitalWrite ou le Serial objet).

En fin de compte, je vous conseille d'abandonner platform.io ou le arduino et passez à eclipse si vous aimez vraiment les interfaces graphiques des IDE, ou mieux, utilisez votre éditeur puissant préféré (comme vim/nvim, emacs, atom, sublime ) pour qu'il traite le code AVR comme n'importe quel autre code C.

1voto

datafiddler Points 501

Si vous travaillez sur un projet Arduino incluant les internes d'avr-gcc en utilisant le plugin VisualMicro et VisualStudio (Community Edition), toutes les fonctions de complétion de code, de coloration syntaxique, de déclaration goto, etc. fonctionnent pour tout ce qui se trouve dans votre projet et toutes les bibliothèques.

Est-ce que c'est ce que vous cherchez ?

Bien sûr, VisualMicro est ennuyeux si vous les utilisez "gratuitement".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X