Question

L'erreur est à cette ligne:

dataArray[iLedMatrix][iRow] |=  (byte)(bufferPattern[iRow]) & (1<<7);

tableauDonnees est: octet tableauDonnees [NUMBER_LED_MATRIX] [NUMBER_ROW_PER_MATRIX];

bufferPattern est: const patternp * bufferPattern;

patternp est un typedef du type: typedef prog_uchar patternp [NUM_ROWS];

Je peux voir dans la référence que prog_uchar est de 1 octet (0 à 255). Je ne comprends pas l'erreur de perdre la précision? Toute idée?

Était-ce utile?

La solution

Le problème est dans cette sous expression

(byte)(bufferPattern[iRow])

bufferPattern la variable est de type const patternp * donc quand l'indexeur est appliqué le résultat est patternp. Le type "patternp" est typedef à prog_uchar []. Donc, en réalité, cette expression dit

  

Cast un prog_uchar * à un octet

Octet est presque certainement une seule valeur d'octet et prog_uchar * est le type de pointeur spécifique de plate-forme (4 ou 8 octets). Cela ne constitue en effet une perte de précision. Peut-être que vous vouliez dire à dereferenc cette valeur?

(byte)(*(bufferPattern[iRow]))

Autres conseils

Vous essayez de lancer à partir d'un type de pointeur à l'octet. Un type de pointeur est généralement représenté sur 4 octets (32 bits OS) ou 8 octets (64 bits), et vous essayez de convertir sa valeur d'adresse de 1 octet.

bufferPattern[ iRow ] a pour un patternp, qui est un prog_uchar[ NUM_ROWS ].

Donc, vous coulée en réalité un tableau (mis en oeuvre comme un pointeur) à un octet. Ça n'a aucun sens; chanceux le compilateur vous avertit!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top