Modifications

Sauter à la navigation Sauter à la recherche
1 213 octets ajoutés ,  5 septembre 2013 à 16:11
Ligne 48 : Ligne 48 :  
Habituellement, tout ce que vous avez besoin de faire, c'est un '''reserve()''' sur les objets String ayant une longue durée de vie et dont vous savez pertinent que le longueur va augmenter au fur et à mesure que votre programme effectue ses traitements.
 
Habituellement, tout ce que vous avez besoin de faire, c'est un '''reserve()''' sur les objets String ayant une longue durée de vie et dont vous savez pertinent que le longueur va augmenter au fur et à mesure que votre programme effectue ses traitements.
   −
You can do better with C strings, but if you just follow these guidelines for String objects, they work nearly as efficiently and using them is so much easier.
+
Vous pouvez obtenir de meilleurs résultats avec les 'C strings' mais si vous suivez ces recommandations sur les objets String, vous obtiendrez presque la même efficacité en les utilisant bien plus facilement.
    
== Placer vos données constantes en PROGMEM ==
 
== Placer vos données constantes en PROGMEM ==
Data items declared as PROGMEM do not get copied to SRAM at startup. They are a little less convenient to work with, but they can save significant amounts of SRAM. The basic Arduino reference for PROGMEM is [http://arduino.cc/en/Reference/PROGMEM here] (''Anglais, Arduino.CC''). And there is a more detailed tutorial on the subject [http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=38003 here] (''Anglais, AVRFreaks.Net'').
+
Les données déclarées comme PROGMEM ne sont pas copiées en SRAM au démarrage du sketch/croquis.  
 +
 
 +
Il est un peu moins facile de travailler avec ces donnée mais cela économise une quantité significative de mémoire SRAM. Vous trouverez [http://arduino.cc/en/Reference/PROGMEM les références de PROGMEM sur le site d'Arduino.CC] (''Anglais, Arduino.CC''). Finalement, vous trouverez des informations détaillée dans [http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=38003 ce tutoriel traitant de ce sujet] (''Anglais, AVRFreaks.Net'').
    
== Réduire la taille des Buffers ==
 
== Réduire la taille des Buffers ==
   −
=== Allocation des Buffers et Array ===
+
=== Allocation des tableaux et mémoires tampons ===
If you allocate a buffer, make sure it is no bigger than it needs to be.
+
Si vous allouez des tableau (''Array'') et des mémoires tampons (''buffers''), assurez vous de ne pas les faire plus grand que vraiment nécessaire.
   −
=== Buffers dans les librairies ===
+
=== Mémoire tampons dans les librairies ===
Also be aware that some libraries allocate buffers behind the scenes that may be candidates for trimming as well.
+
Vous devez également savoir que certaines librairies allouent des mémoires tampons (''buffer'') pour leur bon fonctionnement. Ces derniers peuvent aussi être des candidats pour les cure d'amaigrissement.
   −
=== Buffers bystèmes ===
+
=== Mémoire tampon systèmes ===
Another buffer hidden deeply in the system is the 64 byte serial receive buffer. If your sketch is not receiving a lot of high-speed serial data, you can probably cut this buffer size in half - or maybe even less.
+
Une autre mémoire tampon (''buffer'') caché très profondément dans le système est le buffer de 64 bytes/octets de réception pour la connexion série.  
   −
The Serial buffer size is defined in HardwareSerial.cpp. This file can be found in your Arduino install directory:
+
Si votre croquis/sketch ne recoit pas beaucoup de données à haute vitesse, vous pouvez probablement diviser la taille de ce buffer par 2 (ou peut-être même plus).
 +
 
 +
La taille du buffer série est définie dans HardwareSerial.cpp. Ce fichier peut être trouvé dans votre répertoire d'installation Arduino.:
    
'''....\Arduino-1.x.x\hardware\arduino\cores\arduino\HardwareSerial.cpp'''
 
'''....\Arduino-1.x.x\hardware\arduino\cores\arduino\HardwareSerial.cpp'''
   −
Look for the line:
+
Cherchez après la ligne:
    
'''#define SERIAL_BUFFER_SIZE 64'''
 
'''#define SERIAL_BUFFER_SIZE 64'''
   −
And change it to 32 or less.
+
et changez la valeur 64 vers 32 (ou moins).
    
== Réduire les variables surdimensionnées ==
 
== Réduire les variables surdimensionnées ==
Don't use a float when an int will do. Don't use an int when a byte will do. Try to use the smallest data type capable of holding the information.  
+
N'utilisez pas un "float" lorsqu'un "int" suffirait. N'utilisez pas un "int" si un "byte" convient.  
 +
 
 +
Essayez d'utiliser le plus petit type de donnée capable de contenir l'information.  
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Ligne 117 : Ligne 123 :     
== Pensez globalement. Allouez localement ==  
 
== Pensez globalement. Allouez localement ==  
Let's have another look at how SRAM is used (and abused):
+
Revenon sur notre diagramme d'utilisation (et d'abus) de la SRAM:
    
{{ADFImage|Arduino-Memoire-41.jpg|480px}}
 
{{ADFImage|Arduino-Memoire-41.jpg|480px}}
Ligne 124 : Ligne 130 :  
=== Variables Globales et Statiques ===
 
=== Variables Globales et Statiques ===
   −
Global and Static variables are the first things loaded into SRAM. They push the start of the heap upward toward the stack '''and they will occupy this space for all eternity'''.
+
Les variables globales et statiques sont les premières variables à être chargées en SRAM. Elle repousse le début de la ''heap'' (le tas) vers la ''stack'' (la pile) '''et occuperont cet espace pour l'éternité'''.
 +
 
 +
=== Allocations dynamiques ===
 +
L'allocation dynamique des données et objets fait grandit la ''heap'' (tas) en direction de la ''stack'' (tas).
   −
=== Dynamic Allocations ===
+
Au contraire des variables globales et statiques, ces variables peuvent être désallouée (de-allocated) pour libérer de l'espace mémoire. '''Mais cela n'implique pas forcement une diminution/réduction de la taille de la ''heap'' (tas)!'''. S'il y a d'autre données dynamiques au dessus de la désallocation, le dessus de la ''heap'' (tas) ne bouge pas. Lorsque la ''heap'' (tas) est plein de trou comme un fromage suisse on dit que la "'''heap est fragmenté'''".
Dynamicaly allocated objects and data cause the heap to grow toward the stack. Unlike Global and Static variables, these variables can be de-allocated to free up space. '''But this does not necessarily cause the heap to shrink!''' If there is other dynamic data above it in the heap, the top of the heap will not move. When the heap is full of holes like swiss cheese we call it a "'''fragmented heap'''".
      
=== Variables Locales ===
 
=== Variables Locales ===
Every function call creates a stack frame that makes the stack grow toward the heap. Each stack frame will contain:
+
Chaque appel de fonction crée un "stack frame" qui contient des informations importantes (critiques) lors du retour d'appel de fonction. Ce "stack frame" est empilé sur la ''stack'' (la pile) avant l'appel de fonction ce qui fait grossir la ''stack'' qui se rapproche de la ''heap'' (le tas).
   −
* All parameters passed to the function
+
Chaque "stack frame" contient:
* All local variables declared in the function.
     −
This data is usable within the function, but '''the space is 100% reclaimed when the function exits'''!
+
* Tous les paramètres passés à la fonction
 +
* toutes les variables locales déclarées dans la fonction
 +
 
 +
Ces données sont utilisables à l'intérieur de la fonction, mais '''l'espace est récupéré à 100% à la sortie de la fonction'''!
    
=== Les bons trucs! ===
 
=== Les bons trucs! ===
* '''Avoid dynamic heap allocations''' - These can quickly fragment the limited heap-space.
+
* '''Evitez les allocation dynamiques sur la heap''' - Elle peuvent rapidement fragmenter l'espace disponible pour la ''heap'' (tas).
* '''Prefer local to global allocation''' - Stack variables only exist while they are being used. If you have variables that only are used in a small section of your code, consider making that code into a function and declaring the variables local to the function.
+
* '''Préférez les allocations locale aux allocations globales''' - les variables sur la ''stack'' pile n'existent que durant leur utilisation. '''SI''' vous avez des variables qui ne sont utilisées que dans une petite section de votre code '''ALORS''' considérez l'utilisation d'une fonction avec cette variable déclarée dans la fonction.
 +
 
 +
{{Arduino-Memoire-TRAILER}}
29 917

modifications

Menu de navigation