[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Off topic - Dar prioridad de lectura a un programa hecho en C




El día 17 de julio de 2008 12:44, Octavio Alvarez <alvarezp@alvarezp.com> escribió:
On Thu, 2008-07-17 at 11:52 -0500, >p3dRø< wrote:
> El día 17 de julio de 2008 9:58, nx <hackgo@gmail.com> escribió:
>         >p3dRø< escribió:
>
>
>                 Hola, he compilado y ejecutado un programa escrito en
>                 C que monitorea el puerto serial en un Linux, y me
>                 surge una complicación que es que cuando ejecuto dicho
>                 programa junto a, por ejemplo, el CuteCom (como el
>                 hyperterminal en modo gráfico), el sistema operativo
>                 le da mayor prioridad al CuteCom, y por ende, ya no
>                 puedo leer el caracter que recibo mediante el otro
>                 programa que he compilado.
>
>                 Qué me aconsejan para dar mayor prioridad al programa
>                 que he escrito y así poder leer el caracter que llega
>                 al puerto serial aunque use varios programas a la
>                 misma vez ?
>
>                 Algunas lineas en C que deba agregar? o algún comando?
>
>                 --
>                 >p3dRø<
>         Prioridad de que tipo, de proceso o de lectura/escritura
>         (porque como bien sabes son distintos).
>         Para procesos existen los comandos nice/renice, la diferencia
>         entre estos dos es que en el primero lanzas el comando con esa
>         prioridad desde el principio, y el segundo sirve para
>         ajustarla.
>         Para operaciones de e/s tienes ionice, que es como nice pero
>         para e/s
>
>         Un saludo y espero que te sirva
>
> He probado el comando nice dentro del código de mi programa y me
> retorna un -1. Según el return value de nice en la página
> http://linux.die.net/man/3/nice cuando sale -1 es porque no ha habido
> exito en el cambio de prioridad. Cómo puedo solucionar dicho problema?

Usa "perror" para imprimir el mensaje de error de nice para obtener el
mensaje error.


Bueno les cuento que ya conseguí hacer funcionar mi programa para que pueda leer el puerto serial sin hacer conflictos con otros programas que se ejecutan automáticamente por el sistema operativo (en este caso el programa que generaba el conflicto era getty), por más prioridad que se le de a un programa a veces requiere razonamiento lógico más que otra cosa.

Primero ejecuté un:
#nice -n -20 ./miprograma

Ya que es un programa que maneja el puerto serial, pude comprobar que tenía mayor prioridad fijándome si se ubicaba primero en la lista que aparecía al  hacer un:
#lsof | grep ttyS0

Comprobé que se ubicaba primero pero aun así no podía lograr que el sistema operativo (y el procesador) le de la prioridad absoluta que necesitaba.

Luego de muchas horas jeje, un amigo me aconsejó que comente la lista del inittab al programa getty, que es el encargado de la comunicación serial en Linux. Por lo tanto entré a :
#vim /etc/inittab

Y comenté la línea:
#T0:23:respawn:/sbin/getty -L ttyS0 38400

Lo anterior hace que getty ya no se ejecute automáticamente al inicio de la carga del sistema operativo(hecha por el script init). Así que para que se haga eficiente la modificación hice un reboot al sistema.

Luego de eso ya podía ejecutar mi programa sin que haya conflictos con el getty por apoderarse del control del puerto serial :D

Espero que esta info sea de ayuda para otros.

Saludos,
--
>p3dRø<

Reply to: