Autor Tema: ayuda: error tratando de compilar un rutina de i2c  (Leído 1239 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ElVale

  • PIC10
  • *
  • Mensajes: 31
ayuda: error tratando de compilar un rutina de i2c
« en: 11 de Abril de 2008, 02:43:04 »
Hola soy nuevo en el foro, lo habia leido mucho (Vszener se merece mas el sueldo de mi profesor que mi profesor) y al fin me registré.

Estoy tratando de implementar un rutina de escritura desde un pic16f877a a 2 eeproms 24c04 por I2C en CCS pero me sale el error "Parametters must be located in RAM". Aqui esta el código de la función de escritura:

Código: [Seleccionar]
void escribir_a_eeprom(int rom,int dirMem,int dato){
   int dirRom;
   short int status;
   switch(rom){
              case 0: dirRom=0xa0;break; //0b1010 000 0
              case 1: dirRom=0xa2;break; //0b1010 001 0
              case 2: dirRom=0xa4;break; //0b1010 010 0
              case 3: dirRom=0xa6;break; //0b1010 011 0
              default: flashled();break;}
             
   
   i2c_start();              //Condicion de start
   i2c_write(dirRom);        //Dirección del dispositivo y colocar modo write (ultimo bit en cero)         
   i2c_write(dirMem);        //Dirección de memoria a escribir
   i2c_write(dato);          //Dato a escribir
   i2c_stop();               //Condición de parada
   i2c_start();              //Condición de start
   status=i2c_write(dirRom); //Dirección del dispositivo + bit write
   while(status==1){         //Acknowledge polling
      i2c_start();
      status=i2c_write(dirRom);
   }

La variable rom me dice a cual de las 2 memorias eeprom y a cual bloque de memoria voy a escribir. Esta variable parece ser la del problema porque al quitarla deja de salir el error, pero entonces no sabría a cual de las 2 memorias y a cual bloque de memoria escribir.

Tal vez el error tiene que ver con la parte del manual en ingés que habla de "Non-ram data definitions", pero no se que puede ser.

Gracias por la respuesta

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: ayuda: error tratando de compilar un rutina de i2c
« Respuesta #1 en: 11 de Abril de 2008, 02:46:55 »
Sospecho que tu párametro ROM lo tienes declarado con un #define, y en ese caso no puedes utilizarlo dentro de un switch() porque es como si escribieras un valor a pelo.

Es decir, no puedes hacer switch(1) o switch(2), siempre tiene que haber una variable de RAM.

Creo que tu problema se resuelve si antes de hacer el switch haces lo siguiente:

void escribir_a_eeprom(int rom,int dirMem,int dato){
   int dirRom;
   short int status;
   int vrom;
   vrom=rom;

   switch(rom){
              case 0: dirRom=0xa0;break; //0b1010 000 0
              case 1: dirRom=0xa2;break; //0b1010 001 0
              case 2: dirRom=0xa4;break; //0b1010 010 0
              case 3: dirRom=0xa6;break; //0b1010 011 0
              default: flashled();break;}



 

anything