Autor Tema: Control de los pines de entrada y salida  (Leído 2785 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Control de los pines de entrada y salida
« en: 05 de Agosto de 2009, 08:47:24 »
hola, para el control de los pines de entrada y salida he visto que algunos utilizan las siguientes directivas
#USE FAST_IO(puerto);
    Este método rápido de hacer I/O ocasiona que el compilador realice
    I/O sin programar el registro de dirección
#USE FIXED_IO(puerto);
   El método fijo de hacer I/O causará que el compilador genere código
   para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. Esto ahorra
   el byte de RAM usado en I/O normal.
#USE STANDAR_IO(puerto);
   El método standar de hacer I/O causará que el compilador genere
   código para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza.



E leido el manual pero no me esclarece del todo cual es la ventaja de cada uno, o mejor dicho en que situaciones es mejor utilizar uno de ellos, o como selecciono el adecuado para un programa especifico?.

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: Control de los pines de entrada y salida
« Respuesta #1 en: 05 de Agosto de 2009, 11:07:45 »
#USE STANDAR_IO:

Al colocar esta directiva en el programa el compilador cambiara el registro TRIS correspondiente antes de realizar alguna operacion con los puertos GPIO. Este metodo es para principiantes, pues desliga al programador el tener que conocer de la configuración de todos los puertos y lo unico que tiene que hacer es ejecutar la acción que desea. El inconveniente de este metodo es que el compilador ejecuta la instrucción set_tris cada vez que hay que ejecutar una operación de salida o entrada sin importar el estado anterior del puerto, lo que resulta en un código no optimizado en general mas largo de lo necesario.

#USE FAST_IO:

Esta directiva especifica que el compilador no ejecuta ningun cambio de dirección en los puertos y da por entendido que la persona que programa asigna y se asegura el valor que corresponde a los registros TRIS antes de realizar una operación IO. Esta asignacion de las direcciones debe hacerse ejecutando la instrucción set_tris_A(), set_tris_B(), etc antes de realizar alguna acción con el puerto en cuestión.
Este modo de programar requiere un conocimiento completo de la ejecución del programa y de todas las posibilidades que pueden sucederse, lo cual puede llegar a ser un problema para alguien que recién comienza. La clara ventaja de este metodo es que no hay más direccionamiento de puertos que los necesarios (Si el programador ha escrito el código con criterio) y por lo tanto se ahorra mas memoria y se reduce el tiempo de ejecución comparado con el modo STANDAR_IO.

#USE FIXED_IO:

Este metodo permite especificar la direcciones de los puertos mediante una directiva de preprocesador, por lo que estas serán fijas a lo largo de todo el programa. Aunque puede utilizarse la instrucción set_tris para cambiar la función de los pines, el compilador ejecuta automaticamente el redireccionamiento de los puertos justo antes de la operaciones de salida o entrada (basandose en los valores especificados en la directiva) haciendo que cualquier modificación durante el resto del código quede anulada.
Este método permite ahorrar algo de RAM respecto al metodo STANDAR_IO, pero de todas formas el direccionamiento de los puertos no es el mas optimizado pues se sigue haciendo automaticamente antes de cada operación de IO.

Espero haber sido claro. Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: Control de los pines de entrada y salida
« Respuesta #2 en: 20 de Julio de 2010, 12:42:45 »
Sobre el mismo tema en el manual dice :When linking multiple compilation units be aware this directive only applies to the current compilation unit.
Traducido con google: Al vincular múltiples unidades de compilación ser conscientes de esta directiva sólo se aplica a la unidad de compilación actual.
Significa esto que si yo tengo una libreria para manejar por ejemplo un GLCD y no defino un metodo de I/O en la libreria, el compilador utiliza el standar I/O que es el que se utiliza por defecto ?
Aunque yo en mi .h haya definido utilizar fastI/O

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Control de los pines de entrada y salida
« Respuesta #3 en: 20 de Julio de 2010, 15:32:05 »
Sobre el mismo tema en el manual dice :When linking multiple compilation units be aware this directive only applies to the current compilation unit.
Traducido con google: Al vincular múltiples unidades de compilación ser conscientes de esta directiva sólo se aplica a la unidad de compilación actual.
Significa esto que si yo tengo una libreria para manejar por ejemplo un GLCD y no defino un metodo de I/O en la libreria, el compilador utiliza el standar I/O que es el que se utiliza por defecto ?
Aunque yo en mi .h haya definido utilizar fastI/O

No, no sucede eso, sino que toma la configuración del archivo principal, o sea la librería trabaja con fast_io. Es sencillo verificarlo realizando un programita y viendo el asm generado clickeando en C/ASM List


Saludos!
No contesto mensajes privados, las consultas en el foro