[dorkbotmadrid-charla] Recopilación de ayer: Las interrupciones
Jesus Cea
jcea at argo.es
Sun Oct 7 10:30:49 EDT 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Ayer Juan Carlos comentó que tenía problemas porque quería hacer las
operaciones de control del robot por interrupciones, para medir el
tiempo de forma muy precisa, pero en el contexto de una interrupción hay
muchas cosas no se puedes hacer y estás muy limitado.
La solución que propuse es sincronizar la rutina principal, que se
ejecuta sin restricciones de ningún tipo, con las interrupciones.
Una posibilidad es algo asi (pseudo código):
El programa principal sería algo así:
while True :
while (flag==0) {}
flag=0
...
El código de control
...
La rutina que se ejecuta por interrupciones es trivial:
.... Entra una interrupción
flag=1
.... Retorna de la interrupción
Si el programa está en C, la variable "flag" (variable global) debe ser
declarada con el modificador "volatile" de C, para indicarle que no haga
caché de ella en un registro interno de la CPU, etc.
El código propuesto ejecuta la rutina principal una vez por
interrupción. Al final de cada ciclo, la rutina entra en un bucle vacío
esperando a que la interrupción le indique puede empezar otro ciclo.
Lo único que hay que tener en cuenta es que el tiempo de ejecución de la
rutina debe ser menor que el intervalo entre interrupciones.
El único problema que tiene este esquema es que el bucle vacío chupa CPU
y gasta batería. Eso puede ser un problema o no, según el hard que se
use. Muchos microcontroladores tienen instrucciones "wait" o similares
que bloquean la CPU hasta que llega una interrupción y, mientras tanto,
el chip apenas consume energía.
Espero que esta idea te sea útil, Juan Carlos.
- --
Jesus Cea Avion _/_/ _/_/_/ _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/ _/_/ _/_/ _/_/ _/_/
jabber / xmpp:jcea at jabber.org _/_/ _/_/ _/_/_/_/_/
_/_/ _/_/ _/_/ _/_/ _/_/
"Things are not so easy" _/_/ _/_/ _/_/ _/_/ _/_/ _/_/
"My name is Dump, Core Dump" _/_/_/ _/_/_/ _/_/ _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iQCVAwUBRwjtmZlgi5GaxT1NAQJ/RQP/XCZPlcUMhXhAAPMUNspITIcsLfiLzdFK
KDhbjUcOnQUesREEO1nHuQ6TKAV1hBLZJu0ohl1joVdAJFByEDuIGpjO0gwWfDLj
ELtssRroAWGM0OzhNczxaOgnT7sacUht1q+mQA092I9EsjJZGEKprXi7ReinbN4H
Jojvk/SMPQM=
=FCap
-----END PGP SIGNATURE-----
More information about the dorkbotmadrid-charla
mailing list