Tableau de char (malloc ou progmem) et aide a la mise en place
salut,
dans mon projet, j'utilise plusieurs tableaux de char, maintenant que la fonctionnalité est la, je passe l'étape d'optimisation.
si j'ai bien compris:
- progmem permet de stocker mes tableaux de char dans la flash.
- malloc, realloc, free, etc... pour la gestion de tableaux dynamique.
donc le du jeux est de privilégié des tableaux dont la taille est connu, pour limiter l'utilisation de la ram?
dans mon projet, j'utilise plusieurs tableaux de char, maintenant que la fonctionnalité est la, je passe l'étape d'optimisation.
si j'ai bien compris:
- progmem permet de stocker mes tableaux de char dans la flash.
- malloc, realloc, free, etc... pour la gestion de tableaux dynamique.
donc le du jeux est de privilégié des tableaux dont la taille est connu, pour limiter l'utilisation de la ram?
un conseil : ne joue pas avec malloc, realloc, free sur un arduino.
mets ça de côté pour l'instant, sauf si tu n'as vraiment pas le choix.
concernant progmem :
prenons un truc comme
ce truc est présent dans le code compilé, stocké dans la mémoire flash.
lorsque l'arduino est sous tension, il est également présent dans la ram, stocké comme une variable globale.
il te bouffe donc 50 octets de ram en permanences.
et comme tu plein de messages que tu veux pouvoir afficher, cela te fait une collection de trucs qui bouffent rapidement toute la ram de l'arduino.
a noter que les conséquences sont les mêmes pour un simple
le texte est stocké sous forme de tableau de caractères en ram. l'adresse de sa première cellule est passée en paramètre d'appel de la méthode println().
progmem va te permettre de ne pas avoir une image systématique de tes chaines de caractères dans la ram de l'arduino.
celles-ci restent uniquement stockées dans la mémoire flash.
la contrainte, c'est qu'elle ne peuvent être accédées directement par le programme.
lorsque que tu veux récupérer une chaîne de caractères, il faut commencer par la recopier dans une variable (tableau de char) déclaré en ram.
mets ça de côté pour l'instant, sauf si tu n'as vraiment pas le choix.
concernant progmem :
prenons un truc comme
code: [select]
char mon_texte[] = "le joli message que je veux afficher quelque part";
ce truc est présent dans le code compilé, stocké dans la mémoire flash.
lorsque l'arduino est sous tension, il est également présent dans la ram, stocké comme une variable globale.
il te bouffe donc 50 octets de ram en permanences.
et comme tu plein de messages que tu veux pouvoir afficher, cela te fait une collection de trucs qui bouffent rapidement toute la ram de l'arduino.
a noter que les conséquences sont les mêmes pour un simple
code: [select]
serial.println("le joli message que je veux afficher quelque part");
le texte est stocké sous forme de tableau de caractères en ram. l'adresse de sa première cellule est passée en paramètre d'appel de la méthode println().
progmem va te permettre de ne pas avoir une image systématique de tes chaines de caractères dans la ram de l'arduino.
celles-ci restent uniquement stockées dans la mémoire flash.
la contrainte, c'est qu'elle ne peuvent être accédées directement par le programme.
lorsque que tu veux récupérer une chaîne de caractères, il faut commencer par la recopier dans une variable (tableau de char) déclaré en ram.
Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Tableau de char (malloc ou progmem) et aide a la mise en place
arduino
Comments
Post a Comment