Haciendo pruebas de comunicación por USB mediante la clase CDC (puerto COM virtual), estuve quebrándome la cabeza porque las cosas no me salían, tenía estas declaraciones de variables:
void main() {
char comando[ 8 ];
int8 num_comandos;
char linea_comandos[ 32 ];
int8 param1;
int8 param2;
int8 lista[ 2 ];
char com_led[ 4 ] = "LED";
La idea es recibir varias cadenas de texto separadas por espacios u otro caracter especial, para luego comparar con variables com_XXX para averiguar qué comando se pretende ejecutar. Así, la variable com_led indica la cadena de texto que se tomará como el comando de encendido/apagado de leds, algo simple. El problema es que estuve HORAS probando y nunca me tomaba el comando, enviaba algo como esto:
led 1 0
(led número 1, apagar)
Intenté de muchas formas pero no lo conseguía, hasta que probé moviendo la declaración de com_led, primero la puse fuera de la función main y ¡funcionó! Después, y es lo que me confundió más, logré que funcionara haciendo simplemente esto:
char com_led[ 4 ] = "LED";
char comando[ 8 ];
int8 num_comandos;
char linea_comandos[ 32 ];
int8 param1;
int8 param2;
int8 lista[ 2 ];
¡Si, moviendo la definición de com_led al inicio de todas las variables!

Debo decir que estoy compilando con CCS desde Linux utilizando Wine, y que voy a intentar recortar el código lo más que pueda para reproducir el error, así como probar en Windows, porque esto de plano no me parece

.
--------------------------
Edición:
El que no hubiera problemas al mover la declaración era la clave para notar el problema pero en primera instancia lo pasé por alto :p. Unos minutos después con la cabeza más fría, era evidente que estaba sobrepasando los límites de la variable lista (desbordándola) y sobreescribiendo el contenido de la siguiente (com_led), ahí el problema.
Afortunadamente, no se trata de un error inexplicable de CCS como en un principio pensé

, aunque a estas alturas los compiladores deberían avisar de este tipo de cosas

(si, ya me estoy mal acostumbrando), ¿existe alguna opción del compilador para activar más mensajes de advertencia sobre problemas como este? ¿O es que simplemente no está implementado :p.?