Home
  Academia
    Sist.Tiempo Real
      Modulo

  Introducción
  Protocolo
    Escape
    Flujo
  Uso
  16550
  Indicaciones

Resultados
  Mód. óptico
  Mód. térmico
  Mód. motor

Watermark

Módulos didácticos para procesos de Tiempo Real

Diagrama de flujo

Creo que la mejor forma de implementar el algoritmo de comunicación entre el módulo y la PC es utilizar diferentes niveles en el programa reflejando los niveles del protocolo. Aquí sigue, simbólicamente, una representación del protocolo en un psuedo-idioma (únicamente la parte de recepción):
recibir_caracter
	esperar bit 0 en LSR
	retornar con el registro de datos


recibir_paquete_crudo
	borrar bandera escape
	inicializer datos
	setear modo 'ocio'
	repetir
		recibir_caracter
		si estamos en modo 'ocio'
			si el caracter es FEnd (0xC0)
				cambiar a modo 'activo'
			sino
				seguir en modo 'ocio'

		si estamos en modo 'escape'
			si el caracter es TFend (0xDC)
				guardar FEnd (0xC0) en los datos
				cambiar a modo 'activo'
			si el caracter es TFEsc (0xDD)
				guardar FEsc (0xDB) en los datos
				cambiar a modo 'activo'
			si es otro caracter
				inválido: ignorar y cancelar paquete
				cambiar a modo 'ocio'

		si estamos en modo 'activo'
			si el caracter es FEnd (0xC0),
				si el tamaño de lo recibido es 0,
					marcar inicio de paquete
				sino (tamaño > 0)
					retornar con el paquete
			si es FEsc (0xDB)
				cambiar a modo 'escape'
			si es otro caracter
				guardar en datos


recibir_paquete_controlado
	repetir
		recibir_paquete_crudo
		calcular suma de control
		si es valido,
			retornar el paquete y su tamaño

Implementado de esta forma, se promueve la claridad, y además se evita rutinas especializadas para cada tipo de paquete. Las funciones están bien localizadas, y no repetidas, facilitando el mantenimiento del programa.

También será más facil de agregar funcionalidad nueva. Por ejemplo, si se decide agregar control de exceso de tiempo de espera, resulta lógico implementarlo en el nivel mas bajo.


(c) John Coppens ON6JC/LW3HAZ correo