Hola!!!
Me registre para poder responder, ya que no recordaba como resolver este problema.
Resulta que los lenguajes de programacion modernos nos han acostumbrado a no adminisrtar la memoria pues ellos se encargan de esto. Ademas la conversion dinamica de tipos o la invocación a objetos para que se elaboren estas, nos han librado tambien del "casting".
Total, el error LVALUE READ ONLY especifica que existe un problema en la asignacion, por lo que lo mas recomendable es utilizar memoria dinamica. En mi caso, el codigo:.
unsigned char HID_InData[USB_CONFIG_hid_rx_size];
unsigned char datos[USB_CONFIG_hid_rx_size];
unsigned char direccion, masDatos;
int cantidadDatos;
usb_get_packet(1, HID_InData, USB_CONFIG_HID_RX_SIZE);
int i=0;
direccion = HID_InData[0];
masDatos = HID_InData[1];
for(i=2; i<USB_CONFIG_HID_RX_SIZE; i++){
if(HID_InData != 0){
datos = HID_InData;
}
else{
break;
}
}
cantidadDatos = i-2;
Marca el señalado error LVALUE READ ONLY.
La solucion es cambiar la definicion de datos como apuntador:
include <stdlibm.h> //Para ccs 5.08
unsigned char *datos;
asignar memoria de forma dinamica con malloc
datos = (unsigned char)malloc(sizeof(char)*USB_CONFIG_HID_RX_SIZE);
y al final liberar la memoria con free
free(datos)
Se que probablemente esta respuesta llego muy tarde, pero espero les sea util a personas que como en mi caso, al no recordar una solución buscamos en foros y regularmente alguien nos auxilia.
Saludos!!!