warning 2066 avec MCC18

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From French to

Threaded View
Bonsoir à tous,

En utilisant MCC18, avec les extraits de code suivant:

rom char* text="essai";
ram char var[40];

strncpypgm2ram(var,text,5);

j'obtiens le warning suivant

D:\DvptPic\px01\px01.c:396:Warning [2066] type qualifier mismatch in
assignment

bien que le programme fonctionne, ce n'est qu'un warning, j'aimerai bien
trouver la syntaxe correct pour éviter ce warning.
Si vous avez une idée ...

Bonne année à tous.
A+

Re: warning 2066 avec MCC18
Bruno a écrit :
Quoted text here. Click to load it

les parametres de la fonction sont bien (destination,source,nbre)?

Re: warning 2066 avec MCC18
markus a tapoté du bout de ses petites papattes :
Quoted text here. Click to load it

var ne serait-il pas un mot clé du compilo ?

--
LeLapin



Re: warning 2066 avec MCC18

Quoted text here. Click to load it

A laquelle de ces trois lignes correspond le warning ?

Quoted text here. Click to load it

Et quel est le prototype de la fonction strncpypgm2ram() ?
Peut-etre faut-il explicitement caster un des parametres ?

Re: warning 2066 avec MCC18

4b3fd066$0$24610$ snipped-for-privacy@news.free.fr...
Quoted text here. Click to load it
essaie avec des unsigned char pour voir

par contre, si tu veux recuperer une chaine, la taille est de 6, pas 5, car
il ne faut pas oublier le 0 de fin de chaine



Re: warning 2066 avec MCC18
Bruno a écrit :
Quoted text here. Click to load it
Bonjour et merci pour vos réponses.

La ligne qu déclenche le warning est celle de l'instruction strncpypgm2ram.

Le prototype de cette fonction est décrite dans le fichier
c:\mcc18\h\string.h, c'est à dire:

char *strncpypgm2ram (auto char *s1, auto const MEM_MODEL rom char *s2,
auto sizeram_t n);

/** @name strncpyram2pgm
  * The {\bf strncpyram2pgm} function performs a {\bf strncpy} where
{\bf s1}
  * points to program memory and {\bf s2} point to data memory.
  * @param s1 pointer to destination in program memory
  * @param s2 pointer to source in data memory
  * @param n maximum number of characters to copy
  */

Le code exact qui génere le warning est, (je n'utilise pas de variable var).

void initEcran(void)
{
    int i;
    for(i=0;i<80;i++)
        bufEcran[i]=0x20;
    strncpypgm2ram((ram char *)bufEcran,(rom char*)messVer,(size_t)19);
}

avec ou sans les cast, cela donne ce warning.

je cherche encore, mais ne trouve pas.

En attendant de vous lire, encore bonne journée à tous.

Bruno

Re: warning 2066 avec MCC18
Bruno a écrit :

Quoted text here. Click to load it

??
->     @param s2 pointer to source in data memory
me parait contradictoire avec:
->     auto const MEM_MODEL rom char *s2,
sinon, la data memory serait en rom?

Re: warning 2066 avec MCC18
Quoted text here. Click to load it

Bonjour,

As-tu essayE9% de remplacer :
rom char* text3D%"essai";
par
const rom char* text3D%"essai";

?

J'ignore comment MicroChip a implE9%mentE9%
son compilateur C, mais en C ANSI, il
est prE9%fE9%rable de typer un pointeur sur une
littE9%rale par un "const" ( qui le sera de toute faE7%on).

--
-Stan

--
-Stan




Re: warning 2066 avec MCC18
Stan a écrit :
Quoted text here. Click to load it
oui, j'ai aussi essayé cela, merci pour vos réponses et pour l'attention
que vous avez bien voulu porter à ce problème, comme le warning
n'empêche pas le programme de tourner, je vais continuer sans, lorsque
je serai assez avancé, pour ceux qui le veule, je vous enverrai le
source complet ...

Merci encore et bonne soirée à tous.

Re: warning 2066 avec MCC18
Quoted text here. Click to load it

Teste cela :
const far rom char* text3D%"essai";
car dans le prototype de la fonction, il y a le MEM_MODEL,
et c'est probablement lui qui pose pb.
Ton compilo doit, par dE9%faut gE9%nE9%rer un "const near rom char *".

Essaye et tiens nous au courant...

--
-Stan








Site Timeline