Aller au contenu


Photo
- - - - -

programmation arduino...


  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 27 décembre 2012 - 04:24

bonjour,

pour programmer sous arduino, on dit qu'il faut "optimiser" !

alors, sachant que je suis un newbie en prog, je me demande s'il faut créer le plus d'objet possible ou à l'inverse éviter d'en mettre.?

est-ce que je fait d'aller chercher une instruction dans un objet mets plus de temps que d'écrire directement l'instruction au bon endroit.?

sachant que je ne parle que vitesse d'excéution et ralentissement, je ne parle pas du nombre d'octet que prendra le programme fini en ayant ou pas des objets de créé...

Merci et de bonne fetes de fin d'année à tous !!

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#2 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 27 décembre 2012 - 05:04

Attention au terme d'objet. Il ne désigne probablement pas ce à quoi tu penses.

Dans le cas de la programmation Arduino (mais c'est vrai en général), optimiser désigne deux choses : utiliser au mieux la mémoire (les données nécessaires sont présentes une fois et une seule) et réduire au minimum l'augmentation du temps d'exécution avec l'augmentation de taille de données. En algorithmique, on parle de complexité. Optimiser, c'est trouver le compromis qui maximise les performances de ton système.

Il faut donc créer les variables nécessaires à ton programme, mais pas plus, et éviter au maximum les imbrications de boucle très coûteuses. Chaque instruction a un coût, il faut donc réfléchir à la manière dont le programme peut être écrit en éliminant les instructions inutiles. De plus, accéder à une donnée en mémoire "vive" est bien moins coûteux qu'accéder à une donnée d'origine matérielle. En gardant ces principes en tête, tu devrais avoir un programme correct, s'il n'est optimal.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#3 Donpi

Donpi

    Habitué

  • Membres
  • PipPip
  • 154 messages

Posté 27 décembre 2012 - 05:46

On optimise pas que sous arduino ! non mais !


Pour optimiser ton code tu dois tout d'abord définir pour quoi tu veux l'optimiser ou dans quel but.

Dans certain cas on va préférer la maintenance ou l'évolutivité au détriment de la performance. Tout dépend des but/priorités de chacun

L'optimisation est la dernière touche à apporter a ton code. Si c'est fait trop tôt tu risque d'avoir l'effet inverse.

Si je peu te donner un conseil sur la marche a suivre, dans un premier temps concentre toi sur l'architecture et déclare autant d'objet que tu en a besoin de sorte a ce que ton code soir le plus compréhensible possible. A ce stade on se fiche de la performance, le programme doit juste fonctionner et gérer tout les cas de figures.

Une fois cette étape faite, tu sais si ton code a besoin d'être optimiser ou non. Si ton robot fonctionne comme il se doit, a quoi bon changer pour changer.
Garde le dans un coin comme point de référence pour pouvoir comparer tout les cas de figures avec une base qui fonctionne.

Et surtout test a mort. En développement une syntaxe qui semble plus rapide ne l'est pas forcement. La seul et unique façon de savoir c'est de mesurer.

#4 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 27 décembre 2012 - 11:51

OK ! merci pour vos réponses !
je vais... réfléchir à tout ça !!!

1er étape: un code qui marche à 100% !

to be continued... ;-)

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#5 ChristianR

ChristianR

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)
  • Interests:Arduino, programmation, électronique...

Posté 26 janvier 2013 - 11:31

Optimiser, c'est aussi aussi
- insérer des commentaires dans son code, pour arriver à se relire plus tard // :kez_11:/>
- donner des noms très explicites aux variables
- éviter de consommer de la mémoire pour rien (RAM limitée sur Arduino...)
- passer le moins de temps possible dans les interruptions
- structurer avec des fonctions chaque fois qu'un bout de code est répété plusieurs fois
- tester chaque morceau séparément avant de tout assembler.
Christian

#6 JIG

JIG

    Membre

  • Membres
  • 19 messages

Posté 29 janvier 2013 - 11:40

Quand le code fonctionne, c'est déja pas mal !
Après effectivement on peut toujours améliorer.
Par exemple en remplacant des lignes de code par des sous-routines (fonctions) appelées plusieurs fois dans le pg.
Les commentaires : TRES IMPORTANT. Car après quelques mois on ne sait plus toujours ce que l'on voulait faire !
Eviter aussi, tant que cela peut se faire, les variables globales.
Si ton organigramme est clair sur le papier, le programme sera d'autant plus facile à réaliser.
Moi, j'ai plutôt tendance à pisser de la ligne avant d'être clair dans les idées.
Dans l'ordre des choses, il faudrait :
- faire un cahier des charges: description générale de ce qui doit se réaliser
- décrire pas à pas ce qui doit se passer
- voir comment on va tester les différents points du pg
- prévoir des fonctions pour chaque point du pg
- les ecrire et mettre en appli le tout....
Et quand ça ne marche pas...aller se coucher, ça va mieux le lendemain...
Bon courage.

#7 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 30 janvier 2013 - 09:42

Après effectivement on peut toujours améliorer.
Par exemple en remplacant des lignes de code par des sous-routines (fonctions) appelées plusieurs fois dans le pg.
[...]
Eviter aussi, tant que cela peut se faire, les variables globales.


Attention tout de même.
On ne programme pas un système embarqué comme on programme un programme en PC.
Sur PC, on n'est pas vraiment limité en ressources (mémoire/vitesse). Donc oui, on proscrit les variables globales, on décompose son code au maximum, etc.
Pour du système embarqué au contraire, on a souvent peu de mémoire et une horloge peu rapide. Faire la blinde de fonction te fait dupliquer les variables que tu passes en paramètres. Tu encombres inutilement ta pile. Le mieux, si tu utilises une variable dans la plupart des fonctions, c'est d’allouer tes variables dans le tas. Dans ce cas, faire une variable globale te permet de ne pas la passer en paramètre à tes fonctions et donc de ne pas la dupliquer en mémoire.

Les variables globales sont donc à utiliser avec modération et parcimonie, mais ne sont pas proscrites en système embarqué, au contraire.

Mon site internet : http://ferdinandpiette.com/


#8 JIG

JIG

    Membre

  • Membres
  • 19 messages

Posté 30 janvier 2013 - 10:36

Merci "Black"
Ce que tu dis est certainement exact pour les microcontrôleur comme l'Arduino. Je n'y avais pas pensé.
Mais comme en programmation, j'ai souvent bagarré pour limiter mes variables globales, que ça m'est resté...
Je soupire de soulagement...
Jac




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users