Usa getc() en lugar de fgetc(), y si te es posible usa el kbhit() para saber que ha llegado un caracter.
elreypic.
Lo intenté, pero no tuvo resultado. Luego vi que en el .h del pic figura lo siguiente:
#define getc getch
#define fgetc getch
#define getchar getch
Por lo que entiendo, estaria ejecutando la misma funcion de cualquer forma que lo escriba.
Opino que deberia recibir el 0x00 igual con fgetc o getc como quiera usarlo, el unico que reconoceria el 0x00 como final de string es el gets o fgets
Tambien probé con fgets y gets y de esta forma el programa directamente se cuelga. No se si puedo estar haciendo algo mal :/
Adjunto parte del codigo.
¿Estas seguro que es por eso? o es algo de la logica de tu programa?
La verdad estoy un poco mareado en este punto, he probado decenas posibilidades entre fgetc, getc, fgets, gets, getchar... tambien cambie de "byte" a "char" variable que almacena los datos recibidos de fgetc. Lo unico que logré encontrar al simular una trama con docklight fue que con fgetc() puedo leer la trama y guardarla siempre y cuando no contenga "0x00"
Interrupcion:
void RDA2_isr(void) {
buffer_aux
[byte_r2
] = fgetc(AUX
);
if (buffer_aux[byte_r2] == '>') {
byte_r2 = 0;
buffer_aux[byte_r2] = '>';
}
if(buffer_aux[byte_r2] == '#'){ //caracter de fin de la trama nueva
sharp_ = 1;
}
if(buffer_aux[byte_r2] == '<'){ //caracter de fin de la trama nueva
prompt = 1;
}
byte_r2++;
if(byte_r2 >= MAX_AUX) {
byte_r2 = 0;
}
}
Envio y espero respuesta:
byte_r2 = 0;
memset(buffer_aux
, NULL
, MAX_AUX
);
fprintf(AUX
, "%c%c%c%c%c%c%c%c",0x01,0x03,0x00,0x0D,0x00,0x02,0x55,0xC8); // Hago la peticion al Powermeter. Envio trama en HEX enable_interrupts(INT_RDA2);
while (++cont_err < 3000) //lectura de datos y espera de datos
{
delay_ms(1);
}
disable_interrupts(INT_RDA2);
fprintf(AUX
, "buffer:%s",buffer_aux
); //trama de respuesta
buffer_aux estaba definido como "byte" y lo cambie a "char" pero no obtuve resultados diferentes.
Si desde docklight envio "3E 01 03 00 0D 00 02 55 C8" solo obtengo "3E 01 03"
Pero si envio "3E 01 03 22 0D FF 02 55 C8" recibo "3E 01 03 22 0D FF 02 55 C8" sin problemas
He simplificado el codigo ya que forma parte de un programa mucho mas grande el cual estoy modificando para esta nueva funcionalidad.
Gracias por comentar!