TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: perikote en 29 de Abril de 2009, 01:48:34

Título: Duda con programa en C
Publicado por: perikote en 29 de Abril de 2009, 01:48:34
Hola estube viendo un programita de un video tutorial de code warrior que tengo y hace esto
for(;;) {
PTAD_PTAD0=0;
while(i++);
PTAD_PTAD0=1;
while(i++);
}

previamente habia puesto unsigned int i=1

mi duda es una vez que el ptda0 se pone en 0 y despues se mete en el while que es lo que hace ? no entiendo cuando saldra del while ,  mientras incremente i???...
Título: Re: Duda con programa en C
Publicado por: scientist en 29 de Abril de 2009, 02:42:59
no tiene mucho sentido el programa, ya que no hay ninguna condicionante de que haga algo, cuando llegue a una cantidad en especifico para i, seguira incrementandose infinitamente, y nunca veras si destella el puerto, por que lo hara tan rapido que no te daras cuenta
saludos
te recomiendo q leas algun libro de C
te recomiendo

Lenguaje de programacion en C
Kernighan

saludos
Título: Re: Duda con programa en C
Publicado por: BrunoF en 29 de Abril de 2009, 02:45:41
Hola!

wile(i++); se cumplirá siempre y cuando i sea distinto de cero. Una vez que i valga cero, se incrementará por última vez, haciendo que i luego del while tenga un valor final de 1. Eso sirve para poder volver a entrar al próximo while(i++); pero es necesario inicializar a i con un valor distinto de cero(como por ejemplo 1) la primera vez. Si se inicializa a i con el valor 0, entonces saldrá inmediatamente del primer while valiendo 1, y recorrerá todos los posibles valores en el segundo while, hasta volver a valer cero, no cumplir con la condición e incrementarse por ultima vez valiendo finalmente, y nuevamente: 1.

Lo explico lógicamente:

el while(i++); hace esto:

Denuevo:
guardar i en registro temporal(W)
incrementar i
Si W!=0 volver a Denuevo

en asm sería:
   
Código: ASM
  1. loop
  2.     movf i,w
  3.     incf i,f
  4.     xorlw 0x00
  5.     btfss STATUS,Z
  6.     goto loop


Es una manera "rebuscada" y "elegante" a la vez de hacer demoras.

Saludos.


Título: Re: Duda con programa en C
Publicado por: migsantiago en 29 de Abril de 2009, 11:20:03
Cierto, el while hace una prueba del contenido de i. Mientras que i valga algo diferente a cero, se ejecutará el contenido del while. En este caso el while(i++); es un simple generador de retardos.

Bruno, creo que la explicación en asm no se usa igual en Freescale  :shock:
Título: Re: Duda con programa en C
Publicado por: BrunoF en 29 de Abril de 2009, 12:23:03
Ahh joer. yo pense q estabamos en lenguaje C para uC...:D :D :D
Título: Re: Duda con programa en C
Publicado por: RICHI777 en 29 de Abril de 2009, 14:12:44
Hola en FreeScale deberia quedar algo asi:
Código: ASM
  1. L6:
  2.   LDHX  i
  3.   AIX   #1
  4.   STHX  i
  5.   CPHX  #0
  6.   BNE   L6


Saludos !
Título: Re: Duda con programa en C
Publicado por: perikote en 29 de Abril de 2009, 19:32:30
Ahora entiendo, muchas gracias muchachos.