Funciones de delay en C para Linux

Estos días he estado trabajando un poco sobre la programación de drivers en Linux y para uno de mis ejemplos quería enviar un paquete de datos a través de un puerto USB con un determinado intervalo de tiempo, es decir, que tras el envío de un paquete de información quería esperar N milisegundos, entonces en ese momento pensé: “obvio, con un delay()”, pero ¿existe un delay en lenguaje C que pueda utilizar en Linux como lo hago con los microcontroladores?. Pues bien, en esta entrada quiero compartir con ustedes las funciones que encontré y comprobé que funcionan para generar delays y así controlar la temporización en nuestros programas en C para Linux.

Esperar N segundos.

Para generar un delay de n segundos en nuestro programa, podemos hacer uso de la función sleep() que se encuentra definida en el archivo de cabecera unistd.h, la forma de usarla es como se muestra en la siguiente figura.

dormir1

Al compilar y ejecutar el código anterior, nuestro programa esperará 10 segundos para pasar a la siguiente instrucción de impresión en pantalla.

Esperar N milisegundos o N microsegundos.

Si nuestras necesidades requieren que los tiempos de espera (delays) sean menores a un segundo, entonces ya no será suficiente la función sleep(), en el mismo archivo unistd.h está definida la función usleep() que hace referencia por la u a microsegundos, por lo tanto, para hacer un delay de 10 microsegundos podemos modificar el código como se ve a continuación.

dormir1.png

Pero pasamos de los segundos a los micro-segundos ¿cómo podemos esperar N milisegundos?, pues bien, no disponemos de una función msleep() por lo que debemos valernos de la función usleep() y lo que hacemos es pasar el número de milisegundos que deseamos esperar, multiplicador por 1000, en otras palabras, si queremos esperar 1 milisegundo, a usleep() debemos pasarle el valor 1000 ya que 1000 microsegundos (que es lo que ella recibe) equivale a 1 milisegundo.

El siguiente código hace que nuestro programa espere 500 milisegundos antes de continuar con la ejecución.

dormir1.png

Esperar N nanosegundos.

También disponemos de la función nanosleep() la cual nos permite hacer retardos en la escala de nanosegundos, está función está declarada en el archivo de cabecera time.h, permite una mayor resolución en el control de tiempos, aunque su sintaxis es ligeramente más compleja.

A continuación se muestra un ejemplo donde el programa se detiene durante 1 segundo más 500 nanosegundos más, hay que tener en cuenta que esta función retorna un valor negativo si por alguna razón no se pudo cumplir con el tiempo establecido en la estructura.

dormir1.png

Esto es todo por ahora, espero que te haya resultado útil el contenido de este artículo, nos leemos en el próximo, cualquier sugerencia que tengas puedes dejarla en los comentarios.


Autor: Julio César Echeverri M.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s