Modifications

Sauter à la navigation Sauter à la recherche
1 258 octets ajoutés ,  1 mai 2016 à 13:28
aucun résumé de modification
Ligne 1 : Ligne 1 :  
{{FEATHER-M0-NAV}}
 
{{FEATHER-M0-NAV}}
  −
{{traduction}}
      
== Préambules ==
 
== Préambules ==
Ligne 53 : Ligne 51 :  
  <nowiki>#include <util/delay.h></nowiki>
 
  <nowiki>#include <util/delay.h></nowiki>
   −
you'll get an error that says
+
Vous obtiendrez une erreur comme celle-ci
    
  <nowiki>fatal error: util/delay.h: No such file or directory
 
  <nowiki>fatal error: util/delay.h: No such file or directory
Ligne 61 : Ligne 59 :  
Error compiling.</nowiki>
 
Error compiling.</nowiki>
   −
In which case you can simply locate where the line is (the error will give you the file name and line number) and 'wrap it' with #ifdef's so it looks like:
+
Qui vous permet de localiser (avec précision) la ligne produisant l'erreur (le message d'erreur mentionne le nom de fichier et le numéro de ligne).
 +
 
 +
Si l'inclusion se fait depuis un bibliothèque que vous utilisez, vous pouvez désactiver l'inclusion de la sous bibliothèque litigieuse pour le M0 en l'entourant l'inclusion d'une définition '''#ifdef''' comme celle ci-dessous:
    
  <nowiki>#if !defined(ARDUINO_ARCH_SAM) && !defined(ARDUINO_ARCH_SAMD) && !defined(ESP8266) && !defined(ARDUINO_ARCH_STM32F2)
 
  <nowiki>#if !defined(ARDUINO_ARCH_SAM) && !defined(ARDUINO_ARCH_SAMD) && !defined(ESP8266) && !defined(ARDUINO_ARCH_STM32F2)
Ligne 67 : Ligne 67 :  
#endif</nowiki>
 
#endif</nowiki>
    +
Le {{fname|#if}} s'assure que le fichier d'entête n'est pas inclus pour d'autres architectures.
 +
 +
Si l' #include est directement dans le croquis Arduino, vous pouvez juste essayer de retirer la ligne.
 +
 +
== Démarrage de booloader ==
 +
Sur la plupart des autres AVRs, cliquer sur '''reset''', lorsque celui-ci est branché sur USB, permet de lancer manuellement le bootloader.
   −
The above will also make sure that header file isn't included for other architectures
+
Le bootloader reste actif pendant quelques secondes (time-out) puis passe la main au croquis présent sur la carte.
   −
If the #include is in the arduino sketch itself, you can try just removing the line.
+
'''Sur un M0, vous aurez besoin de double cliquer sur le bouton Reset'''. Vous verrez la LED rouge pulser et vous saurez que le mode bootloader est actif.  
   −
== Démarrage de booloader ==
+
Il n'y a pas de time-out dans le mode Bootloader. Une fois le mode Bootloader activé, la carte reste dans ce mode. Cliquez sur le bouton Reset à nouveau pour redémarre la carte (et exécuter votre Croquis).
For most other AVRs, clicking '''reset''' while plugged into USB will launch the bootloader manually, the bootloader will time out after a few seconds. For the M0, you'll need to double click the button. You will see a pulsing red LED to let you know you're in bootloader mode. Once in that mode, it wont time out! Click reset again if you want to go back to launching code.
      
== L'accès mémoire (Aligned Memory Access) ==
 
== L'accès mémoire (Aligned Memory Access) ==
This is a little less likely to happen to you but it happened to me! If you're used to 8-bit platforms, you can do this nice thing where you can typecast variables around. e.g.
+
Cela ne risque pas forcément de vous arriver mais nous avons rencontré ce problème!  
 +
 
 +
Si vous avez l'habitude des plateformes 8-bits, vous pouvez utiliser des techniques de typecasting de variable comme celle-ci dessous:
    
  <nowiki>uint8_t mybuffer[4];
 
  <nowiki>uint8_t mybuffer[4];
 
float f = (float)mybuffer;</nowiki>
 
float f = (float)mybuffer;</nowiki>
   −
You can't be guaranteed that this will work on a 32-bit platform because '''mybuffer''' might not be aligned to a 2 or 4-byte boundary. The ARM Cortex-M0 can only directly access data on 16-bit boundaries (every 2 or 4 bytes). Trying to access an odd-boundary byte (on a 1 or 3 byte location) will cause a Hard Fault and stop the MCU. Thankfully, there's an easy work around ... just use memcpy!
+
Vous ne pouvez pas avoir la garantie qu'une telle méthode fonctionnera sur une plateforme 32-bits parce que '''mybuffer''' pourrait ne pas être aligné sur 2 ou 4-octets. Voyez l'article "[https://fr.wikipedia.org/wiki/Alignement_en_m%C3%A9moire Alignement en mémoire]" (Wikipedia)
 +
 
 +
L'ARM Cortex-M0 peut uniquement accéder directement à des données bornées en 16-bit (tous les 2 ou 4 octets). Essayer d'accéder à un octet impaire (l'octet en position 1 ou 3) causera une faute matérielle (''Hard Fault'') et stoppera le MCU. Heureusement, il y a un moyen simple pour contourner ce problème... faire un simple {{fname|memcpy}}!
    
  <nowiki>uint8_t mybuffer[4];
 
  <nowiki>uint8_t mybuffer[4];
Ligne 88 : Ligne 97 :     
== Conversion en virgule flottante ==
 
== Conversion en virgule flottante ==
Like the AVR Arduinos, the M0 library does not have full support for converting floating point numbers to ASCII strings. Functions like sprintf will not convert floating point. Fortunately, the standard AVR-LIBC library includes the dtostrf function which can handle the conversion for you.
+
Comme pour les AVR Arduino, la bibliothèque M0 n'a pas un support complet pour pour la conversion des nombres en virgule flottante en chaine ASCII. Les fonctions comme sprintf ne convertira pas les nombres en virgule flottante. Par chance, la bibliothèque standard AVR-LIBC inclus la fonction {{fname|dtostrf}} peut prendre en charge cette conversion.
   −
Unfortunately, the M0 run-time library does not have dtostrf.  You may see some references to using '''#include <avr/dtostrf.h>''' to get dtostrf in your code. And while it will compile, it does not work.
+
Malheureusement, la bibliothèque run-time du M0 ne dispose pas de {{fname|dtostrf}}Vous pourriez rencontrer quelques références utilisant '''#include <avr/dtostrf.h>''' pour inclure dtostrf dans votre code... mais même si cela compile, dtostrf ne fonctionnera pas!
   −
Instead, check out this thread to find a working dtostrf function you can include in your code:
+
Nous vous proposons de prendre connaissance du fil de discussion suivant pour trouver une fonction dtostrf que vous pourriez inclure dans votre code:
    
[http://forum.arduino.cc/index.php?topic=368720.0 http://forum.arduino.cc/index.php?topic=368720.0]
 
[http://forum.arduino.cc/index.php?topic=368720.0 http://forum.arduino.cc/index.php?topic=368720.0]
Ligne 99 : Ligne 108 :       −
The ATSAMD21G18 has 32K of RAM, but you still might need to track it for some reason. You can do so with this handy function:
+
L'ATSAMD21G18 dispose de 32K de RAM mais si vous avez besoin de surveiller votre consommation mémoire, vous pouvez le faire avec la fonction suivante:
    
  <nowiki>extern "C" char *sbrk(int i);
 
  <nowiki>extern "C" char *sbrk(int i);
Ligne 108 : Ligne 117 :  
}</nowiki>
 
}</nowiki>
   −
Thx to [http://forum.arduino.cc/index.php?topic=365830.msg2542879#msg2542879 http://forum.arduino.cc/index.php?topic=365830.msg2542879#msg2542879] for the tip!
+
Trouvé grâce à ce message [http://forum.arduino.cc/index.php?topic=365830.msg2542879#msg2542879 http://forum.arduino.cc/index.php?topic=365830.msg2542879#msg2542879] sur le forum Arduino!
    
== Stocker des données en Flash ==
 
== Stocker des données en Flash ==
If you're used to AVR, you've probably used PROGMEM to let the compiler know you'd like to put a variable or string in flash memory to save on RAM. On the ARM, its a little easier, simply add const before the variable name:
+
Si vous êtes un habitué des AVR, vous avez probablement déjà utilisé PROGMEM qui vous permet de compiler une chaîne de caractère dans la mémoire Flash et permet d'économiser de la RAM.  
 +
 
 +
Sur un ARM, c'est même encore plus simple, il suffit d'ajouter un {{fname|const}} devant le nom de la variable:
    
  <nowiki>const char str[] = "My very long string";</nowiki>
 
  <nowiki>const char str[] = "My very long string";</nowiki>
   −
That string is now in FLASH. You can manipulate the string just like RAM data, the compiler will automatically read from FLASH so you dont need special progmem-knowledgeable functions.
+
Cette chaine est maintenant en FLASH. Vous pouvez manipuler la string (chaîne de caractère) comme s'il s'agissait d'une donnée en RAM, le compilateur fera le nécessaire pour effectuer les lectures en FLASH (vous n'avez donc pas besoin de connaître et utiliser les fonctions ''progmem'').
   −
You can verify where data is stored by printing out the address:
+
Vous pouvez vérifier où sont stockées les données en affichant leur adresse:
    
  <nowiki>Serial.print("Address of str $"); Serial.println((int)&str, HEX);</nowiki>
 
  <nowiki>Serial.print("Address of str $"); Serial.println((int)&str, HEX);</nowiki>
   −
If the address is $2000000 or larger, its in SRAM. If the address is between $0000 and $3FFFF Then it is in FLASH
+
Si l'adresse est $2000000 ou supérieur, c'est stocké en SRAM. Si l'adresse est entre $0000 et $3FFFF alors c'est stocké en FLASH
 +
 
 
{{FEATHER-M0-TRAILER}}
 
{{FEATHER-M0-TRAILER}}
29 917

modifications

Menu de navigation