Question:
Stocker les flotteurs et les lire à partir du flash
fuenfundachtzig
2015-06-14 13:46:48 UTC
view on stackexchange narkive permalink

Comment stocker les flottants en flash et comment les lire à partir de là? (J'ai besoin d'une table de recherche pour les paires de valeurs flottantes.)

La partie de stockage ne semble pas être si difficile que cela compile:

  PROGMEM float value1 = 1.23456;  

Mais comment les lire? Dois-je les copier octet par octet dans une variable flottante, ou y a-t-il un meilleur moyen? (J'utilise un Arduino ATmega 328p avec des flotteurs de 4 octets.)

Deux réponses:
Majenko
2015-06-14 14:40:31 UTC
view on stackexchange narkive permalink

Il y a une macro d'aide dans avr-libc qui est conçue juste à cet effet:

  #define pgm_read_float_near (address_short) __LPM_float ((uint16_t) (address_short)) Lit un flottant depuis le espace programme avec une adresse 16 bits (proche) Remarque L'adresse est une adresse octet. L'adresse se trouve dans l'espace programme. 

Utilisez-le comme:

  PROGMEM float pi = 3.141592653; // valeur constante en diamètre flashfloat = 24,332154; // valeur utilisateur variablefloat circumference = diamètre * pgm_read_float_near (&pi);  
dlchambers
2016-12-02 22:22:42 UTC
view on stackexchange narkive permalink

Je me rends compte que l'OP demandait une valeur unique, mais j'ai pensé ajouter des informations sur la récupération d'un tableau.

  const float pmdata [] PROGMEM = {1.0, 2.0, 3.0};  

puis récupérez ainsi:

  float val = pgm_read_float (&pmdata [idx]);  


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...