fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

unreachable code co...
 
Avisos
Vaciar todo

unreachable code con SDCC

7 Respuestas
3 Usuarios
0 Reactions
12.2 K Visitas
fmartagong
Respuestas: 36
Topic starter
(@fmartagong)
Ardero
Registrado: hace 16 años

Hola:

Estoy trabajando con SDCC y las librerías del Skybot.
La siguiente función me lanza un error. La funcion es:

/*****************************************/
/* Leer el estado de los bumpers
/*
/* Retorno de la función:
/* 0 - ningún bumper activo
/* o los dos apretados
/* 1 - bumper1 apretado
/* 2 - bumper2 apretado
/*
/*****************************************/
unsigned char LeerEstadoBumpers()
{
unsigned char bump1=0, bump2=0, sumabump;
if ((PORTA & 0x02) != 0) bump1=1; // Si bumper1 apretado devuelve 1
if ((PORTA & 0x04) != 0) bump2=2; // Si bumper2 apretado devuelve 2
if (sumabump = 3) return 0;
else return sumabump;
}

Y el error es:
ControlMotorPaP.c:126: warning 126: unreachable code
ControlMotorPaP.c:123: warning 110: conditional flow changed by optimizer: so said EVELYN the modified DOG
ControlMotorPaP.c:124: warning 110: conditional flow changed by optimizer: so said EVELYN the modified DOG

Responder
6 respuestas
heli
Respuestas: 748
 Heli
(@heli)
Ardero
Registrado: hace 19 años

A simple vista el error es que usas sumabump antes de haberle dado algún valor, solo lo has declarado...

Responder
fmartagong
Respuestas: 36
Topic starter
(@fmartagong)
Ardero
Registrado: hace 16 años

A simple vista el error es que usas sumabump antes de haberle dado algún valor, solo lo has declarado...
Es que había una línea que ponía:
sumabump=bump1+bump2;

y se debió perder en una de las pruebas para resolver otro error.

Gracias.

Responder
gonzao
Respuestas: 218
(@gonzao)
Estimable Member
Registrado: hace 19 años

Hola:

Estoy trabajando con SDCC y las librerías del Skybot.
La siguiente función me lanza un error. La funcion es:

.................
.........
if ((PORTA & 0x02) != 0) bump1=1; // Si bumper1 apretado devuelve 1
if ((PORTA & 0x04) != 0) bump2=2; // Si bumper2 apretado devuelve 2
if (sumabump = 3) return 0;
...
...


Y el error es:
ControlMotorPaP.c:126: warning 126: unreachable code
ControlMotorPaP.c:123: warning 110: conditional flow changed by optimizer: so said EVELYN the modified DOG
ControlMotorPaP.c:124: warning 110: conditional flow changed by optimizer: so said EVELYN the modified DOG
Creo que no se está haciendo bien la lectura del puerto.
PORTA lo mismo es un número que al hacer la and con 0x02 ó 0x04 siempre es cero y por ello no se cumple la condición y dice lo de unreachable code.

Mira a ver si hay alguna función que sea algo así como: READ_PORT(PORTA)

Un saludo.
gONzAO

Responder
fmartagong
Respuestas: 36
Topic starter
(@fmartagong)
Ardero
Registrado: hace 16 años

Creo que no se está haciendo bien la lectura del puerto.
PORTA lo mismo es un número que al hacer la and con 0x02 ó 0x04 siempre es cero y por ello no se cumple la condición y dice lo de unreachable code.

¡Ufff! gONzAO, me acabas de dar en la línea de flotación. Esto de las puertas lógicas lo tengo cogido con alfileres, así que por favor no me dejes con esta duda existencial.

A ver, según entiendo al hacer la AND, con 0x02 te devolverá 000000 si el bumper NO está pulsado, ya que entonces se pone el bit 2 a 0, (0 and 1 = 0), cuando el bumper esté pulsado te devolverá 00000010, ya que el bit 2 estará a 1 (1 and 1 = 1).

Por favor, resuélveme esta duda

Responder
Página 1 / 2
Compartir: