PROGMEM

Bonjour à tous,

Je suis tous nouveau dans le monde Arduino et mes bases en programmation sont plus que faible.
Je me penche sur un programme que j’ai récupéré sur le net qui permet d’afficher sur un écran une position GPS et une vitesse. Quand je veux le compiler, j’ai un message d’erreur et je ne comprend pas comment résoudre ce problème. J’ai, normalement, toutes les libraires qu’il faut.

Le voilà:

^
C:\Users\MATHIE~1\AppData\Local\Temp\build3830181348074181981.tmp\data.h:75:1: error: ‘prog_uchar’ does not name a type
prog_uchar bigNumbers [96] PROGMEM = {
^

et voici le bout de code qui semble poser problème:

//==========================================================//
// Prints a display big number (96 bytes) in coordinates X Y,
// being multiples of 8. This means we have 16 COLS (0-15)
// and 8 ROWS (0-7).
static void printBigNumber(char string, int X, int Y)
{
setXY(X,Y);
int salto=0;
uchar bigNumbers [96];
for(int i=0;i<96;i++)
{
if(string == ’ ') {
SendChar(0);
} else
SendChar(pgm_read_byte(bigNumbers[string-0x30]+i));

if(salto == 23) {
salto = 0;
X++;
setXY(X,Y);
} else {
salto++;
}
feedgps();
}
}
//==========================================================//

Mon problème apparait 6 fois dans le code mais à chaque fois pour la même structure de code, du coup j’imagine qu’une fois que c’est corrigé pour une c’est corrigé pour les 6.

Avez vous une idée et une solution à me proposer :wink:

Merci

Mathieu

il faudrait pas que tu fasses un #include <arduino.h> suivi d’un #include <progmem.h> au début de data.h ?

Merci pour la réponse.

J’ai déjà mis avr/pgmspace.h

Voila ce que j’ai au début du code:

#include <EEPROM.h>
#include “EEPROMAnything.h”
#include “mySoftwareSerial.h”
#include “TinyGPS.h”
#include “PinChangeInt.h”
#include <Wire.h>
#include “avr/pgmspace.h”

Autre question, quelle est la différence entre les “” et les <> ?

Pour moi le problème viendrai de uchar bigNumbers [96]; et/ou SendChar(pgm_read_byte(bigNumbers[string-0x30]+i));

Merci

MathieuP:
C:\Users\MATHIE~1\AppData\Local\Temp\build3830181348074181981.tmp\data.h:75:1: error: ‘prog_uchar’ does not name a type

l’erreur ci-dessus indique que dans la ligne 75 du fichier “data.h”, il y a un type non reconnu.

MathieuP:
Voila ce que j’ai au début du code:

#include <EEPROM.h>
#include “EEPROMAnything.h”
#include “mySoftwareSerial.h”
#include “TinyGPS.h”
#include “PinChangeInt.h”
#include <Wire.h>
#include “avr/pgmspace.h”

Oui, mais du sketch (ou croquis). Les #include de sont pas transmissibles : par exemple, Wire.h ne sait pas que tu as inclus EEPROMAnything.h mais TinyGPS.h le sait! Par contre, TinyGPS.h ne sait pas que tu as inclus arduino.h (qui est inclus d’office dans ton sketch, à ton insue).

MathieuP:
Autre question, quelle est la différence entre les “” et les <> ?

Voilà, tu as tout deviné, ça vient de là!

“” dit d’inclure un fichier qui est dans le même répertoire que ton sketch. Mais s’il n’y est pas, il ira le chercher ailleurs, comme si tu l’avais inclus en <>.
<> dit d’inclure un fichier qui est dans le répertoire général des librairies.
(je me trompe peut-être… je débute de ce côté).

Ceci dit, j’ai un petit projet en ce moment où j’utilise une dizaine de fichiers .h dans le même répertoire que mon sketch. Ben au début, j’avais la même vilaine surprise que toi, genre le type word n’était pas reconnu dans le .h que je voulais inclure. il m’a suffit d’ajouter “#include <arduino.h>” en tête de chacun de mes fichiers .h pour que tout rentre dans l’ordre…

A cause de ridicules petites choses de ce genre, comme le dit Mapou Yanga-Mbiwa, y’a tout qui marche pas.

Si je me rappelle bien une réponse de Skywodd c’est parce que le compilateur compile fichier par fichier pour obtenir des fichiers *.o.

Pour qu’il puisse compiler sans générer d’erreurs il faut considérer chaque fichier c ou cpp comme totalement indépendant. C’est donc normal que si on utilise une fonction arduino dans un fichier annexe il faille inclure <arduino.h> pour que le compilateur connaisse à l’avance les fonctions qu’il va rencontrer.

En cas d’inclusions hierarchiques il peut se produire des tentatives d’inclusion de fichier déjà inclus.
D’où les directives en en-tête de fichier *.h:
#ifndef MACHIN_H
#define MACHIN_H
// bla bla
// bla bla
#endif // MACHIN_H

Merci pour vos réponses, je commence à mieux comprendre le fonctionnement des librairies.

J’ai encore besoins de vos conseils. Lors de la compilation j’ai ce message d’erreur:

C:\Users\MATHIE~1\AppData\Local\Temp\build2340314187325560.tmp\data.h:8:1: error: ‘prog_uchar’ does not name a type
prog_uchar logo PROGMEM = {
^
C:\Users\MATHIE~1\AppData\Local\Temp\build2340314187325560.tmp\data.h:8:28: error: expected unqualified-id before ‘=’ token
prog_uchar logo PROGMEM = {
^
C:\Users\MATHIE~1\AppData\Local\Temp\build2340314187325560.tmp\data.h:76:1: error: ‘prog_uchar’ does not name a type
prog_uchar bigNumbers [96] PROGMEM = {
^
C:\Users\MATHIE~1\AppData\Local\Temp\build2340314187325560.tmp\data.h:76:38: error: expected unqualified-id before ‘=’ token
prog_uchar bigNumbers [96] PROGMEM = {
^
Erreur lors de la compilation.

Je n’arrive pas à voir le problème et en plus j’utilise la même structure plusieurs fois et le compilateur ne signale pas des erreurs partout. Je pense que ça peut venir de la taille des paramètres. Ils sont peut être trop gros.

Je mets en pièce jointe le code qui pose problème car il est trop gros pour être collé dans le message.

Merci pour vos réponses

data.h (18.1 KB)

Tu dois modifier tes librairies, car elles sont anciennes et ne sont plus compatibles avec l'IDE que tu utilises.

Pour les messages d'erreur ci-dessus :
Dans le fichier data.h, remplacer tous les "prog_uchar" par "const char"

Bonjour,

J’ai essayer de changer les “prog_uchar” par “const char” mais il n’y a pas de changement.

In file included from GPS_Toy.ino:19:0:
C:\Program Files\Arduino\libraries\Progmem/progmem.h:13:15: error: ‘prog_const’ does not name a type
typedef const prog_const attribute ((progmem));
^
In file included from GPS_Toy.ino:36:0:
C:\Users\MATHIE~1\AppData\Local\Temp\build6002060771273296439.tmp\data.h:9:1: error: ‘const_char’ does not name a type
const_char logo PROGMEM = {
^
C:\Users\MATHIE~1\AppData\Local\Temp\build6002060771273296439.tmp\data.h:9:28: error: expected unqualified-id before ‘=’ token
const_char logo PROGMEM = {
^
C:\Users\MATHIE~1\AppData\Local\Temp\build6002060771273296439.tmp\data.h:77:1: error: ‘prog_uchar’ does not name a type
prog_uchar bigNumbers [96] PROGMEM = {
^
C:\Users\MATHIE~1\AppData\Local\Temp\build6002060771273296439.tmp\data.h:77:38: error: expected unqualified-id before ‘=’ token
prog_uchar bigNumbers [96] PROGMEM = {
^
Erreur lors de la compilation.

Je ne vois pas ce qu’il faut mettre à jour dans les librairies

Mathieu

data.h (18.2 KB)

progmem.h (2.29 KB)

pgmspace.h (1.42 KB)

Oulah ! Qu'as-tu boutiqué ?

bricoleau:
Dans le fichier data.h, remplacer tous les "prog_uchar" par "const char"

ne modifie QUE data.h

j'avais dit "const char" et non "const_char"

Bonsoir,

J'ai essayé ce que vous avez dit mais ça me donne encore plus d'erreurs. Voici le message:

In file included from GPS_Toy.ino:20:0:
C:\Program Files\Arduino\libraries\Progmem/progmem.h:20:41: error: declaration does not declare anything [-fpermissive]
#define PROGMEM attribute ((progmem));
^
C:\Users\MATHIE~1\AppData\Local\Temp\build2177345883787232534.tmp\data.h:9:1: note: in expansion of macro 'PROGMEM'
PROGMEM const char logo = {
^
In file included from GPS_Toy.ino:37:0:
C:\Users\MATHIE~1\AppData\Local\Temp\build2177345883787232534.tmp\data.h:78:12: error: uninitialized const 'bigNumbers' [-fpermissive]
const char bigNumbers [96] PROGMEM = {
^
In file included from GPS_Toy.ino:20:0:
C:\Program Files\Arduino\libraries\Progmem/progmem.h:20:41: error: storage size of 'bigNumbers' isn't known
#define PROGMEM attribute ((progmem));
^
C:\Users\MATHIE~1\AppData\Local\Temp\build2177345883787232534.tmp\data.h:78:30: note: in expansion of macro 'PROGMEM'
const char bigNumbers [96] PROGMEM = {
^
In file included from GPS_Toy.ino:37:0:
C:\Users\MATHIE~1\AppData\Local\Temp\build2177345883787232534.tmp\data.h:78:38: error: expected unqualified-id before '=' token
const char bigNumbers [96] PROGMEM = {
^
Erreur lors de la compilation.

Apparemment il faudrait modifier le fichier progmem

non !

progmem.h et pgmspace.h font partie de ton environnement arduino.

Il ne faut absolument pas les modifier, ni d'ailleurs aucune autre de C:\Program Files\Arduino\libraries
Là j'ai l'impression que tu les as altérées sans les remettre dans leur état initial.
Ce n'est pas normal qu'une compil te sorte des erreurs dans ces librairies système.

data.h c'est autre chose : c'est une librairie applicative

C'est celle-là qu'il fallait modifier pour la mettre en conformité avec les précédentes, qui ont évolué dans les dernières version de l'IDE

Ah mince!! Progmem c'est une librairie que j'ai récupéré sur le net mais je ne sais plus où. Il faut que je la retrouve alors.

J'ai installé la dernière version de IDE arduino et là il y a encore d'erreur.

Bonjour,
Quelqu'un pourrai m'envoyer la librairie PROGMEM.h d'origine?

Merci