Autor Tema: Cómo asignar una estructura a un registro FSR dado?  (Leído 1406 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado george_56

  • PIC10
  • *
  • Mensajes: 3
Cómo asignar una estructura a un registro FSR dado?
« en: 08 de Enero de 2013, 17:03:23 »
Estoy intentando migrar de CCS a C18 y tengo algunos problemas. He buscado en distintos foros y no encuentro nada. Igual es una tonteria.
Unos de esos problemas es cuando intento asignar una estructura a una posición de memoria determinada, en este caso al LATB (0xf8a)
 
struct estructura_teclado {    // estructura del teclado
   unsigned fila0_3   :4;             // columnas del teclado
   unsigned col0_3    :4;             // filas del teclado
}teclado;

 
en CCS hacía:

#byte  teclado = 0xf8a

pero #byte no existe en C18. He intentado con:

#define teclado 0xf8a

poro me sale "syntax error" justo sobre la linea   }teclado;
 
también he intentado con:

#pragma udata my_port = 0xf8a
 
struct estructura_teclado {    // estructura del teclado
   unsigned fila0_3   :4;             // columnas del teclado
   unsigned col0_3    :4;             // filas del teclado
}teclado;
 
pero en este caso el linker me dice

Error - section 'my_port' can not fit the absolute section. Section 'my_port' start=0x00000f8a, length=0x00000001
Errors    : 1
 
Lo único que quiero es asignar la estrucutra al LATB, ya que es dónde tengo conectado el teclado y poder aprovechar todas las funciones que tenía hechas con el CCS
 
Gracias

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Cómo asignar una estructura a un registro FSR dado?
« Respuesta #1 en: 08 de Enero de 2013, 18:07:37 »
no es mas facil poner:

struct estructura_teclado *teclado=0xF8A;

y ahora manejarlo:

teclado->fila0_3;

aun asi, LATx es para modificar datos, para lectura utiliza PORTx

Desconectado george_56

  • PIC10
  • *
  • Mensajes: 3
Re: Cómo asignar una estructura a un registro FSR dado?
« Respuesta #2 en: 09 de Enero de 2013, 15:04:17 »
Gracias por tu aporte.

pero si declaro la estructura

struct estructura_teclado *teclado=0xf8a {    // estructura del teclado
   unsigned fila0_3   :4;             // columnas del teclado
   unsigned col0_3    :4;             // filas del teclado
}teclado;

me da error de sintaxis.

si declaro antes

struct estructura_teclado *teclado=0xf8a;

me da los siguientes errores:

I:\Datos\MPLab\18F2620\c18_terminal_pot_mot\kbd_4x1repe_18.c:28:Warning [2054] suspicious pointer conversion
I:\Datos\MPLab\18F2620\c18_terminal_pot_mot\kbd_4x1repe_18.c:48:Error [1109] type mismatch in redeclaration of 'teclado'

si pongo:

struct estructura_teclado {    // estructura del teclado
   unsigned fila0_3   :4;             // columnas del teclado
   unsigned col0_3    :4;             // filas del teclado
}*teclado=0xf8a;

aparte de que me sale el aviso

I:\Datos\MPLab\18F2620\c18_terminal_pot_mot\kbd_4x1repe_18.c:48:Warning [2054] suspicious pointer conversion

la variable teclado me aparece en la posición de memoria 0x0b2.

¿Qué hago mal? ¿Dónde debo colocar la línea que me has descrito?

Gracias de antemano por tu colaboración.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Cómo asignar una estructura a un registro FSR dado?
« Respuesta #3 en: 09 de Enero de 2013, 15:12:25 »
la ultima estaria bien, lo que te da es un warning, para que no te lo de puedes poner =(estructura_teclado*)0xf8a;

la 1º te da error porque la declaras 2 veces, para que no te de error tendrias que quitar el }teclado; y poner solamente }; te pongo como lo deberias poner:

esto arriba del todo:

struct estructura_teclado {
  unsigned fila0_3   :4;             // columnas del teclado
   unsigned col0_3    :4;             // filas del teclado
};

y ahora o bien en el main, o bien como variable global pondrias;

far struct estructura_teclado *teclado=(struct estructura_teclado *)0xf8a;

otra solucion: far struct estructura_teclado *teclado=(struct estructura_teclado *)&LATB;

Desconectado george_56

  • PIC10
  • *
  • Mensajes: 3
Re: Cómo asignar una estructura a un registro FSR dado?
« Respuesta #4 en: 10 de Enero de 2013, 04:39:59 »
Ya no da errores y al ejecutar el programa aparece asignado 'teclado' al LATB.

Muchas gracias


 

anything