Autor Tema: Ccs lectura de tablas en rom  (Leído 1168 veces)

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

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 105
Ccs lectura de tablas en rom
« en: 21 de Junio de 2021, 05:42:00 »
Hola a todos, tengo un problema en ccs 5 en lectura de tablas en rom hice la depuracion en proteus y no envia nada

Código: [Seleccionar]

BYTE CONST DETE0 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE1 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE2 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE3 [10]= {1,2,3,4,5,6,7,8,9};

short F_EnviaP(byte *tabl[])
{
for(i=0; i<10; i++)
{
printf(*tabl[i]); //aqui no envia nada lo probe en proteus, me base xc8 q si funciona  :?
}
if(kbhit()==0) return 1;
else return 0
}

void F_De_Bu()
{
if(F_EnviaP(DETEC0))
{
output_high(led);
        }
else output_low(led);
}

la otra solucion seria usar switch en la funcion F_EnviaP y agregar una variable de entrada para q elija q tabla de la rom se envia, pero se hace mas largo el codigo  :?
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ccs lectura de tablas en rom
« Respuesta #1 en: 21 de Junio de 2021, 06:01:58 »
Código: [Seleccionar]
F_EnviaP(DETEC0)
cuando es

Código: [Seleccionar]
F_EnviaP(DETE0)
---------------------

Por que el kbhit??

Código: [Seleccionar]
if(kbhit()==0)
Parece que no tiene nada que ver con lo que tenes..

------------------

BYTE  ????????????

En el manual no especifica ningún tipo Byte... Existe una directiva Byte, sino es cualquiera de C estandar mas las aberraciones de CCS

short __ int1
char ___ unsigned int8
int ___ int8
long ___ int16
long long ____ int32
float ___ float32

-----------------

Por ultimo, no entiendo porque dos funciones.

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 105
Re:Ccs lectura de tablas en rom
« Respuesta #2 en: 21 de Junio de 2021, 06:12:22 »
Gracias x responder, Si me equivoque, aqui esta igual no funciona pero compila sin errores

Código: [Seleccionar]
#define led PIN_B0

BYTE CONST DETE0 [10]= {1,2,3,4,5,6,7,8,9}; // en la ayuda de ccs, constant data table, pone byte
BYTE CONST DETE1 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE2 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE3 [10]= {1,2,3,4,5,6,7,8,9};

short F_EnviaP(byte *tabl[])
{
for(i=0; i<10; i++)
{
printf(*tabl[i]); //aqui no envia nada lo probe en proteus, me base de un ejemplo de xc8 q si funciona  :?
}
while(!kbhit()){}
if(getc()==0)
return 1;
else return 0
}

void F_De_Bu()
{
if(F_EnviaP(&DETE0))
{
output_high(led);
        }
else output_low(led);
}

« Última modificación: 21 de Junio de 2021, 06:24:41 por allennet »
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 941
Re:Ccs lectura de tablas en rom
« Respuesta #3 en: 21 de Junio de 2021, 12:26:31 »
CCS no te permite punteros a una tabla en rom.


 

* romhelpccs.jpg
(59.96 kB, 593x527 - visto 166 veces)



Por otro lado, usas printf para sacar 1 caracter en lugar de un string y mezclas de entre & y * .

Si lo que querés es sacar texto debería ser mas o menos asi:
Código: [Seleccionar]
#define led PIN_B0

#define MAX_CHARS 6
BYTE CONST dETE[][MAX_CHARS] = {"test0",
                      "test1",
                      "test2",
                      "test3"} ;

short F_EnviaP(byte inx)

        printf(DETE[inx]);

while(!kbhit()) ;
if(getc()==0)
    return 1;
else
    return 0 ;
}

void F_De_Bu(void)
{
if(F_EnviaP(0))   // indice del texto.
output_high(led);
    else
    output_low(led);
}

------------------------------------------------------------------------

Aunque ahora que lo miro de nuevo, este ejemplo no sirve porque guarda el texto en ram :(

Corregido,  me faltó especificar el número máximo de caracteres + 1
« Última modificación: 21 de Junio de 2021, 17:47:34 por Eduardo2 »

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 306
Re:Ccs lectura de tablas en rom
« Respuesta #4 en: 21 de Junio de 2021, 22:26:57 »
Si vos tenés un arreglo del tipo:

Código: [Seleccionar]

unsigned int8 DETE0 [10]= {1,2,3,4,5,6,7,8,9};


Se me ocurre que podrías imprimirlo como.

Código: [Seleccionar]



// En el encabezado...

// Declaración para trabajar con punteros a constantes.
#device PASS_STRINGS=IN_RAM

fprintf(RS232,"Arreglo:%s",DETE0);

// Sino....

for(int8 i=0; i<10; i++) {

fprintf(RS232,"Arreglo:%u",DETE0[i]);

}



Código: [Seleccionar]

Para acceder a un dato pre-almacenado en la EEPROM.

#ROM int8 getenv("EEPROM_ADDRESS") = {'1','2','3','4','5','6','7','8','9'} // El dato almacenado empieza en la dir 0 de la EEPROM.

// Necesitás copiar a RAM cada vez que lees.

char CMD[20]="";

// Cuando copias al buffer, necesitás indicarle desde donde empieza el dato y que largo tiene. Es medio engorroso, quizás pueda
// mejorarse.

void EEPROMcpyRAM(int8 start_cmd, int8 cmd_length){
memset(CMD,'\0', sizeof(CMD));
  for(int8 i=0;i<cmd_length;i++) {
     CMD[i]=read_eeprom(i+start_cmd);
   }
}

// Para poder usarlo.

EPROMcpyRAM(0,9); // Empieza en la posición 0 y tiene 9 elementos.

fprintf(RS232,"Arreglo EEPROM:%s",CMD);








 


Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 105
Re:Ccs lectura de tablas en rom
« Respuesta #5 en: 22 de Junio de 2021, 03:18:55 »
Gracias x las soluciones, pero esas usan ram, al final use switch en la funcion y quedo asi.

Código: [Seleccionar]
#define led PIN_B0

BYTE CONST DETE0 [10]= {1,2,3,4,5,6,7,8,9}; // en la ayuda de ccs, constant data table, pone byte
BYTE CONST DETE1 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE2 [10]= {1,2,3,4,5,6,7,8,9};
BYTE CONST DETE3 [10]= {1,2,3,4,5,6,7,8,9};

short F_EnviaP(unsigned int tabl)
{
switch(tabl)
{
case 0:
for(i=0; i<10; i++)
putc(DETE0[i]);
break;

case 1:
for(i=0; i<10; i++)
putc(DETE1[i]);
break;

case 2:
for(i=0; i<10; i++)
putc(DETE2[i]);
break;

case 3:
for(i=0; i<10; i++)
putc(DETE3[i]);
break;
}
while(!kbhit()){}
if(getc()==0)
return 1;
else return 0
}

void F_De_Bu()
{
if(F_EnviaP(0))
{
output_high(led);
        }
else output_low(led);
}

"La curiosidad mato al gato, pero murio sabiendo"


 

anything