TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: george_56 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
-
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
-
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.
-
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;
-
Ya no da errores y al ejecutar el programa aparece asignado 'teclado' al LATB.
Muchas gracias