problema importando in8 out8 a ada
Publicado por Chechu (1 intervención) el 08/08/2007 12:18:18
Buenos dias.
Os detallo mi problema por si alguien sabe como solucionarlo
estoy importando funciones de QNX 6.3 a ADA y me encuentro con un problema cuando llamo a las funciones in8 y out8 para lectura y escritura de un byte.
me he creado unas funciones en c para manejarlas pero me dan errores:
uint8_t read_handle( uint64_t port_handle) {
port_value=in8(port_handle);
return port_value;
}
void write_handle( uint64_t port_handle, uint8_t value ){
port_h=port_handle;
out8(port_h, value);
}
Esto asi no hace nada
Ahora he probado a llamar a port handle como un puntero
uint8_t read_handle( uint64_t *port_handle) {
port_value=in8(*port_handle);
return port_value;
}
void write_handle( uint64_t *port_handle, uint8_t value ){
port_h=*port_handle;
out8(port_h, value);
}
Esto escribe perfectamente pero cuando lee provoca un memory fault (core dumped)
y la solución final para q funcionará es esta:
uint8_t read_handle( uint64_t port_handle) {
port_value=in8(port_handle);
return port_value;
}
void write_handle( uint64_t * port_handle, uint8_t value ){
port_h=*port_handle;
out8(port_h, value);
}
Y claro tener codigo q funciona aleatoriamente no me convence asi que si alguien sabe
porque read funciona sinpuntero y write si, o si es x fallo de tipos o alguna cosa
las llamadas en QNX son estas
uint8_t in8 (uintptr_t port);
void out8 (uintptr_t port, uint8_t val);
dnd uintptr_t no se que tipo usar para importalo si usar un integer unsigned o un puntero
Si os fijais los port siempre se pasan asi y yo en mi solución uno usa unpuntero y otro no
No entiendo xq es asi.
¿Alguna Ayuda?
gracias de antemano
Os detallo mi problema por si alguien sabe como solucionarlo
estoy importando funciones de QNX 6.3 a ADA y me encuentro con un problema cuando llamo a las funciones in8 y out8 para lectura y escritura de un byte.
me he creado unas funciones en c para manejarlas pero me dan errores:
uint8_t read_handle( uint64_t port_handle) {
port_value=in8(port_handle);
return port_value;
}
void write_handle( uint64_t port_handle, uint8_t value ){
port_h=port_handle;
out8(port_h, value);
}
Esto asi no hace nada
Ahora he probado a llamar a port handle como un puntero
uint8_t read_handle( uint64_t *port_handle) {
port_value=in8(*port_handle);
return port_value;
}
void write_handle( uint64_t *port_handle, uint8_t value ){
port_h=*port_handle;
out8(port_h, value);
}
Esto escribe perfectamente pero cuando lee provoca un memory fault (core dumped)
y la solución final para q funcionará es esta:
uint8_t read_handle( uint64_t port_handle) {
port_value=in8(port_handle);
return port_value;
}
void write_handle( uint64_t * port_handle, uint8_t value ){
port_h=*port_handle;
out8(port_h, value);
}
Y claro tener codigo q funciona aleatoriamente no me convence asi que si alguien sabe
porque read funciona sinpuntero y write si, o si es x fallo de tipos o alguna cosa
las llamadas en QNX son estas
uint8_t in8 (uintptr_t port);
void out8 (uintptr_t port, uint8_t val);
dnd uintptr_t no se que tipo usar para importalo si usar un integer unsigned o un puntero
Si os fijais los port siempre se pasan asi y yo en mi solución uno usa unpuntero y otro no
No entiendo xq es asi.
¿Alguna Ayuda?
gracias de antemano
Valora esta pregunta


0