Arduino, avr-gcc et les puristes

Hello,

Venant du monde C/C++, je suis un peu perplexe face à l'environnement "too easy" de l'IDE Arduino, qui cache tout derrière la scène, alors qu'un sketch est un programme C++ standard, basé sur avr-libc, wiring et des classes C++ Arduino.

De plus, je n'apprécie pas trop cet éditeur, qui ne fait pas de complétion automatique, et je suis allergique à Java.

En faisant des recherches sur comment écrire "nativement" en C++ en utilisant avr-gcc et avrdude, je suis tombé sur une étape intermédiaire :

Je suis sous Gentoo et ai écrit ma version de ces 2 .deb (on appelle ça "ebuild"' dans le jargon Gentoo) et ça marche !

Il suffit de créer un Makefile, qui inclut Arduino.mk, puis faire "make", "make upload" et le sketch est envoyé sur l'arduino !

Magique, non ?

Y a-t-il d'autres "extrémistes" qui font tout juste avec les outils de base ?

Question subsidiaire : est-ce simple de se passer d'Arduino et Wiring, et de n'utiliser que avr-gcc/avr-libc/avrdude ?

XavierMiller:
Venant du monde C/C++, je suis un peu perplexe face à l'environnement "too easy" de l'IDE Arduino, qui cache tout derrière la scène, alors qu'un sketch est un programme C++ standard, basé sur avr-libc, wiring et des classes C++ Arduino.

Oui, menfin à la base c'est quand même le but du projet Arduino que de simplifier les choses au maximum afin de permettre aux personnes n'ayant que très peu de bases en programmation/électronique de démarrer un projet rapidement, il serait ironique de lui reprocher d'y être parvenu, du moins en partie.

XavierMiller:
De plus, je n'apprécie pas trop cet éditeur, qui ne fait pas de complétion automatique, et je suis allergique à Java.

Moi non plus, mais ça n'est pas pour ça qu'il est pire que les autres. Depuis des années je programme quasi exclusivement avec vim, quel que soit le langage, pas parce qu'il est meilleur qu'un autre, mais simplement parce que j'y suis habitué. L'expérience montre que les IDE sont tous plus ou moins épouvantables, et plus qu'une question de bien/pas bien, celui que l'on préfère est tout simplement celui dont on a réussi à dompter les défauts.

XavierMiller:
En faisant des recherches sur comment écrire "nativement" en C++ en utilisant avr-gcc et avrdude, je suis tombé sur une étape intermédiaire :
[...]
Il suffit de créer un Makefile, qui inclut Arduino.mk, puis faire "make", "make upload" et le sketch est envoyé sur l'arduino !
Magique, non ?

Oui, mais pour en revenir à ta première remarque, c'est un peu "too easy" et ça cache tout derrière la scène, en gâchant le plaisir d'écrire un joli Makefile soi-même :slight_smile: Nan s't'une blague.

XavierMiller:
Y a-t-il d'autres "extrémistes" qui font tout juste avec les outils de base ?

Oui, enfin parler d'"extrémistes" c'est un peu... extrême :slight_smile: Encore une fois, le principal est d'atteindre le but qu'on s'était fixé au départ, les moyens utilisés importent peu au final__*__. Sauf si bien sûr le but est d'apprendre à maîtriser lesdits moyens.

XavierMiller:
Question subsidiaire : est-ce simple de se passer d'Arduino et Wiring, et de n'utiliser que avr-gcc/avr-libc/avrdude ?

Tout dépend de ce qu'on appelle simple. En fait, en restant dans l'environnement Arduino, je crois qu'il doit presque être possible de faire des trucs qui fonctionnent, même légèrement complexe, sans jamais avoir lu la datasheet du microcontrôlleur. À l'inverse, lorsque l'on sort de ce cocon protecteur, il faut presque la connaître par cœur. J'exagère mais c'est un peu l'idée.

* à ne pas confondre avec « la fin justifie les moyens ».

Faut quand même relativiser un peu : oui certes on ne voit pas vraiment "l'arrière salle", m'enfin si on suit ta logique on devrait tous coder en assembleur ...

L'environnement est quand même très performant : comme le dit Haifger on a pas à se taper toute la datasheet dès qu'on veut programmer quelque chose. Perso je bosse aussi sur MSP430 et Code Composer, et franchement même si c'est pas la mère à boire, je suis quand même bien moins efficace : faut apprendre des registres aux noms presque exotiques, d'une fois à l'autre t'oublies quasiment tout, et si tu changes de µC tu peux tout te retaper ...

Et puis d'expérience j'ai quand même remarqué que d'une manière générale les personnes calées dans le domaine ont tendance à sortir l'artillerie lourde un peu trop automatiquement alors qu'on peut faire vraiment beaucoup de choses avec un Atmega328 sans avoir besoin d'écrire un makefile. Et perso j'ai jamais eu un seul problème de fiabilité (soft ou hard) avec un Atmega ... Donc au final c'est quand même bien foutu :slight_smile:

Après l'IDE bon certes, il est assez épuré, y'a quelques trucs bizarres qui irrite un peu et il n'a pas bougé depuis des années mais après tout, il fait très bien son job.

Atmel AVRStudio
C'est un environnement natif où on contrôle tout, sans être obligé de faire de la ligne de commande et du makefile.
Y'a des moments où la méthode "Arduino" me gonfle aussi.

Concernant l'éditeur le problème est facile à régler puisqu'il y a une option "éditeur externe" dans les préférences.

Pour le reste

  • si on a pas envie de trop s'investir on fait avec et après tout pour des petits projets l'ensemble est assez efficace.. Encore que lorsque je vois certaines questions sur le forum je me dis que ce n'est pas encore assez simplifié.
  • sinon on abandonne l'environnement Arduino et on travail "dans les règles" on se fait un environnement de développement. On se créé des librairies (parce que on a pas envie de devoir se référer à la datasheet à chaque fois qu'on veut accéder à un IO ou à un périphérique intégré) et on fait des makefile.

Personnellement, je fais de l'arduino pour m'amuser ou pour des petits projets et franchement même avec ses singularités et ses petits désagréments l'IDE arduino me suffit largement.

Merci pour les premières réactions. Je continue à suivre la discussion :wink:

XavierMiller:
Question subsidiaire : est-ce simple de se passer d'Arduino et Wiring, et de n'utiliser que avr-gcc/avr-libc/avrdude ?

En gros, tu veux une solution simple pour faire quelque chose de plus compliqué :wink:

Une solution: tu choisis un environnement de développement qui supporte le micro-contrôleur de ta carte Arduino et c'est parti ! L'IDE Arduino, c'est juste une facilité, rien ne t'empêche d'utiliser autre chose ou même de programmer en assembleur.

Pour ma part, je n'utilise l'ide arduino que pour de petits projets où l'optimisation n'est pas de rigueur. Sinon, je code sous l'éditeur PSPad, surtout parce qu'il connaît plein de couleurs (pas seulement le orange) et propose un résumé du code (un peu comme un .h) qui permet de naviguer très intuitivement dans le code.

Java me donne des boutons à moi aussi, mais pas autant que le core arduino et toutes ses fonctions. Du coup, j'ai créé une carte utilisable dans l'ide sans aucune fonction ou lib à rallonge qui me fait gagner du temps d'exécution et des octets de mémoire.

Après, comme j'utilise beaucoup les registres en direct, et depuis le temps, je connais (par exemple) par coeur le fonctionnement des timers. Ca n'empêche pas que je suis toujours obligé de sortir le datasheet pour savoir quelle valeurs mettre dans les TCCRnX, car ça, ça ne rentre pas et c'est toujours différent d'un µC à l'autre. De même, pour accéder aux pins I/O, j'ai un tableau que je dois sortir à chaque fois pour savoir à quel port correspond une pin...Inconvénient : il faut avoir deux écrans, l'un pour programmer, l'autre pour afficher les PDF, du papier et des crayons. Avantage : je découvre tous les jours une nouvelle fonction hard du µC et ça me fait avancer très vite.

J'utilise toujours l'ide pour uploader... Il faut que je me penche sur AVR studio, pas encore pris le temps...

En conclusion, à chacun de définir son environnement, selon ses besoins. Si on grade à l'esprit qu'au bout du fil, c'est un ATMEGA, on peut tout faire :wink:

... je suis justement en train de coder en assembleur avec NotePad++ et un makefile maison :sweat_smile:
C'est grave docteur ?

Perso :

  • Pour faire de l'arduino (pour mon blog, petits projets comme ça, ...) -> IDE arduino de base.
  • Pour des trucs un peu complexe -> Makefile + Notepad++ et code AVR-C
  • Quand j'ai besoin de debug -> AVR Studio (j'ai juste à import mon code et le makefile)

Franchement une fois que tu t'est fait ton petit lot de code AVR-C pour divers trucs (port série, SPI, ...) que tu fasses de l'arduino ou du C de base ça change rien du tout.