La advertencia es bastante autoexplicativa. Uno de tus subíndices de matriz es un char.
Específicamente:
for (char i=0 ...
PacketData[i] = ...
Observe que i
, su subíndice de matriz (índice), es un tipo char
.
La razón por la que esto es malo es que los caracteres suelen estar firmados inesperadamente, lo que significa que puede terminar con subíndices negativos si no se da cuenta de eso, es decir, si no se dio cuenta de que estaba firmado, en lugar de acceder al índice [128]
, estarías accediendo inadvertidamente al índice [-128]
.
Debería poder corregir la advertencia simplemente reemplazando char i
con unsigned char i
si está trabajando en un procesador de 8 bits. Para un procesador de 32 bits, es mejor utilizar un unsigned int
ya que será mucho más eficiente.
Alternativamente, dado que su código nunca establece i
como negativo, simplemente ignore la advertencia. Sin embargo, asegúrese de comprobar sus condiciones de bucle. Las matrices tienen un índice de 0, lo que significa que una matriz declarada con un tamaño de [50]
tiene elementos numerados del 0 al 49. Su bucle for hace i <= 50
, lo que significa que intentará acceder a un índice de elementos no existente 50. Debe cambiar que a i < 50
.
Como una nota al margen, ¿por qué reinventar la rueda?
memset(PacketData, 'for (char i=0 ...
PacketData[i] = ...
', sizeof(PacketData)/sizeof(PacketData[0]))