Go Down

Topic: Davantage de mémoire Arduino Leonardo ? (Read 1 time) previous topic - next topic

Mizur

Salut à tous,

Je déboule nouvellement dans l'univers de l'Arduino, c'est bien stylé, et merci encore à Skywodd pour ses tutos du tonnerre !

Alors voilà, j'ai récemment fait l'acquisition d'un Arduino Leonardo tout neuf, avec un Ethernet Shield rev3.

Niveau software, je constate que j'ai environ 28Ko d'espace dans l'Arduino pour stocker mon sketch.

Alors ça se passe où tout ça ? RAM, EEPROM ?

Ensuite, 28Ko c'est... Peu. J'ai regardé un peu sur les internets et ce même forum, des shields de RAM par ci, des PROGMEM par là, et d'autres techniques du pauvre pour grapiller quelques octets à droite à gauche.
Sérieusement, y a pas un moyen de gagner une bonne tranche de mémoire ? Même un shield, ou un truc à brancher. >Tecchniquement je maitrise un minimum les électroniques, mais si je peux éviter de souder des trucs partout pour un résultat bancal, ça m'arrangerait bien !


Voilà merci à vous de sauver ma vie de noob  :)

A plus !

B@tto

28 ko c'est la mémoire flash, celle où est stocké le "code". Une fois programmée elle ne bouge plus. La RAM permet de manipuler temporairement des données (variables etc ...) et s'efface dès qu'elle n'est plus alimentée (un RESET quoi). Le préfixe const d'une déclaration, permet de stocker la variable dans la mémoire flash, alors que si tu ne l'utilises pas elle sera stocké dans la RAM (mais sera modifiable). L'EEPROM est une mémoire pour stocker des variables durablement, elle est programmable par le code. Par exemple : tu as un four commandé par arduino avec un écran LCD, l'utilisateur peut régler dessus les paramètre de régulation. Il faut que ces paramètres soit maintenu même si on débranche la prise, et qu'on ait pas non plus à rebrancher le four au pc dès qu'on veut faire une manip. C'est la que l'EEPROM entre en jeu.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

patg_

Faut pas oublier qu'il ne s'agit que de micro-contrôleurs 8 bits aux ressources limitées.
Les programmes sont stockées dans la flash de l'AVR.
Dans la Leonardo il y a 32 KO de Flash dont 4 KO occupés par le bootloader
2.5KO de RAM et  1KO d'EEPROM.

Faut programmer économe et optimisé  :smiley-mr-green:

Sinon t'as des cartes plus performantes embarquant un vrai Linux genre Raspberry Pi ou BeagleBoard.

L'avantage principal de l'Arduino c'est qu'il est très facile d'accès pour les néophytes et relativement bon marché.
Mes Arduineries: http://breizhmakers.over-blog.com/

68tjs

Quote
Faut programmer économe et optimisé  smiley-mr-green


Faut prendre exemple sur Microsoft ? 
Bon, d'accord  [] -->

Mizur

Effectivement B@tto, merci pour l'explication ! C'est bien la mémoire flash que je souhaite agrandir !

Faut pas oublier qu'il ne s'agit que de micro-contrôleurs 8 bits aux ressources limitées.
[...]
Faut programmer économe et optimisé  :smiley-mr-green:

Ceci dit avec 3 lignes de code on peut épuiser le microcontroleur 10 fois plus qu'avec 100Mo de programme, tout dépend de ce qu'on demande :) Si je veux faire du traitement qui recquiert beaucoup de conditions et de tests booleans, je prends beaucoup de place dans la mémoire flash pour finalement un traitement assez facile pour l'Arduino !
Surtout si je switche sur 2 shields en même temps ! :D

Donc on ne peut pas vraiment étendre cette mémoire ...?

68tjs

Recherches la différence entre un microprocesseur et un micro-contrôleur ainsi que sur les architectures internes des deux (Von Neuman et Harward) et tu comprendra la réponse de B@tto.

Un micro-controleur n'est pas conçu pour faire de la grosse programmation mais pour être au plus du matériel.
Il ne fait pas ce que fait un microprocesseur mais il fait des choses qu'un microprocesseur ne sait pas faire.

PS avec 32k de mémoire l'ATMega328p est déjà considéré comme un "gros" microcontrôleur.

Mizur

Je connais la difference entre micro controleur et microprocesseur :)

Le traitement simple auquel je pense est largement a la porté d'un Arduino.

Bien qu'il soit consideré comme gros, le Due a 512Ko, c'est quand même 20 fois plus gros que le Leonardo, même si ca n'est pas la même bete, je parle simplement de davantage de memoire flash !

68tjs


B@tto

Et puis bien souvent c'est la RAM qui est problématique, avant que tu arrives à remplir les 28 ko de flash ...
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Mizur


Ben où est le problème alors ?

Je cherche à avoir plus de mémoire flash, je demande s'il y a un moyen simple de dépasser les 28Ko.


Et puis bien souvent c'est la RAM qui est problématique, avant que tu arrives à remplir les 28 ko de flash ...

Pas pour les petits trucs que je fais, c'est à dire du traitement basique avec beaucoup de lecture/écriture, et carte SD pour les vrais stockages, très peu de variables  :)
28Ko de flash ça se remplit vite quand on manipule l'Ethernet shield en weblient /webserver et qu'en plus on joue avec un LCD, et puis on ne sait jamais, dans des projets futurs.

B@tto

Enfin dans les cas que tu évoques (et comme je le disais avant) c'est la RAM qui est problématique.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Mizur

Je ne connais pas exactement le fonctionnement du codage pour Arduino niveau hardware, d'autant plus que la compilation est assez particulière (de ce qu'on m'en a dit), mais à priori créer et détruire rapidement des variables passe correctement même avec la RAM limitée dont je dispose, enfin d'après les tests que j'ai fait jusque là.

Le seul problème que j'ai en pleine face pour l'heure c'est surtout que mon code est vraiment limité en taille en lui même, donc, de ce que j'en ai compris, par la mémoire flash, les 28Ko en question, non ?

B@tto

C'est ça. Il ya la mega sinon avec 256 KB
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Mizur

D'accord donc il faut se baser sur la mémoire flash de la carte à l'achat et c'est tout ? Merci pour vos réponses en tout cas ! :)

skywodd

Bonjour,

En gros pour résumer ma vision de la chose :
J'ai fait passer un synthétiseur chiptune 100% codé en C orienté objets dans un ATtiny45 (4Ko de flash, 512 octets de RAM).
Commentaire compris le code fait 2600 lignes, ça laisse matière à réfléchir.

28Ko de flash et +2Ko de RAM c'est la richesse tu peut me croire ;)
À l'heure actuelle j'ai eu un seul et unique projet qui ne soit pas passer en flash sur une UNO (prog d'interface graphique , pas assez de place pour les bitmaps).
Si tu sait coder propre et en minimisant ton empreinte mémoire tu peut faire ce que tu veut avec 28Ko de flash.
C'est la RAM qui pose souvent le plus de problème ...

Après si t'est tétu -> STM32F4 discovery, 1Mo de flash, 256Ko de RAM, cpu ARM 32bits à 168MHz.
Si t'arrive à mettre à genou ce monstre de puissance (embarqué) c'est que ton application n'est soit pas bien pensé, soit pas faite pour tourner sur un µC embarqué ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up