¿Alguien me puede explicar por qué la función _write_eedata_word del C30 no me funciona como es debido? La estoy intentando usar en un programa para un PIC, y a veces me graba los datos, otras no, otras parcialmente, y no sé por qué es.
El código que uso es el siguiente:
//Inicialización de variables
_prog_addressT direccion=0x7FFC00;
int array_datos[16];
[....] //Se rellena el array con los datos a almacenar
//Grabación de datos en la EEPROM
_erase_eedata_all(); //Borra la EEPROM completa
_wait_eedata(); //Esperamos hasta que la EEPROM ha sido borrada
for (contador=0;contador<16;contador++) {
_write_eedata_word(direccion, array_datos[contador]);
_wait_eedata();
direccion+=2;
}
Eso es lo que intento hacer, y los resultados son, cuando menos, impredecibles. Por no decir que la mayor parte de las veces o no se graba nada, y otras sólo algunos datos (no el array completo). El PIC tiene 1 Kb de memoria (desde 0x7FC00 hasta 0x7FFF0), así que el espacio es más que suficiente. He estado buscando información sobre la función, y ejemplos, pero aparte de una pequeña mención en la ayuda de funciones del C30, no he encontrado nada más. ¿Alguien sabe qué es lo que estoy haciendo mal?
Por cierto, en el código no lo he especificado, pero deshabilito las interrupciones antes de intentar guardar el array, para asegurarme de que el código se ejecuta "sin sobresaltos".