Cómo aprender sobre los diferentes protocolos de red como UART, I2C y cómo implementarlos en tiempo real.

La mejor fuente de información, como han señalado otros, es Internet.

Se recomienda encarecidamente que obtenga los siguientes tipos de información para un protocolo:

  1. La definición del encabezado y el tamaño del paquete. Esto es fácil con cualquier protocolo IETF, y menos con algunos otros. Debe conocer los límites de los datos que puede enviar en un disparo y la complejidad de los cálculos involucrados por disparo.
  2. La descripción formal del funcionamiento del protocolo. La mayoría de las descripciones son semi-formales, por lo que es posible que tenga que comprometerse. Absolutamente desea conocer los cambios de estado y la sincronización si lo va a hacer en tiempo real, porque tiene que ser capaz de descubrir la ruta crítica.
  3. El diagrama de fase del protocolo. Esto muestra cada etapa en una interacción atómica completa. Debe conocer la cantidad de pasos involucrados en el proceso, de lo contrario no podrá determinar los plazos.
  4. Una implementación de referencia de ese protocolo. No tiene que ser en tiempo real, solo tiene que ser algo que pueda usar para demostrar que lo que está generando cumple con las expectativas de comportamiento de manera precisa.
  5. La API del kernel, pero solo puede usar funciones en tiempo real para operaciones en tiempo real. Cualquier cosa que no sea en tiempo real debe hacerse fuera de la fase en tiempo real.

El trabajo en tiempo real es difícil pero factible. Si alguna vez ha realizado un análisis de ruta crítica para cualquier tipo de actividad, en realidad es un juego de niños. Si no lo has hecho, necesitas hacerlo.

Ahora, tiene que decidir si desea tiempo real suave o tiempo real difícil. El suave tiempo real permite que las ventanas estén un poco borrosas en ambos extremos. Duro en tiempo real, los límites son esencialmente rígidos.

Cada uno tiene un enfoque diferente al tiempo real. Mi sugerencia es que dibujes una red de Petri de color, porque entonces puedes usar tus habilidades en habilidades de CPA directamente. Hay una serie de cosas en marcha y una etapa no se completará hasta que se cumplan todos los requisitos previos, exactamente lo que una Red de Petri de Color le mostrará.

Ya que puede modelar eventos, sabe cuántos pasos toma la ruta más larga para completar todos los requisitos previos. Por lo tanto, puede determinar la fracción máxima del tiempo total que se puede permitir que tomen esos eventos dentro del código para proporcionar tiempo real garantizado. Puedes hacer esto para cada fase.

Como sabe la cantidad total de tiempo que puede permitirse la transacción completa, puede dividir por la cantidad de pasos a lo largo de la ruta crítica para determinar el tiempo más largo que puede tomar cada paso.

Recomiendo encarecidamente escribir las pruebas primero y luego implementarlas. Las pruebas deben incluir las características de tiempo. Desea garantizar que la variación no permita que se violen los tiempos máximos absolutos y, con tiempo real difícil, desea que la variación permanezca estrictamente dentro de los límites, tanto en el tiempo máximo como en el mínimo.

Usted llena cada paso individualmente. Un paso no está completo hasta que esté satisfecho que se hayan aprobado todas las pruebas necesarias. Recomendaría usar un generador automático para construir sobre el cambio de un repositorio. Recomiendo git si va a estar codificando en un grupo, aunque Perforce es probablemente más fácil en algunos aspectos cuando se trata de un solo desarrollador. Necesita algo que sea confiable, que no se dañe (CVS y SVN no son muy buenos al respecto) y funciona con una amplia gama de herramientas (PlasticSCM es brillante en todos los aspectos, pero esto, de lo contrario, lo pondría primero) .

Para lograr garantías en tiempo real, no puede usar ninguna función del kernel que no cumpla con esas garantías en cualquier parte del código que sea en tiempo real. Normalmente, esto se logra mediante el uso de un kernel en tiempo real, para que pueda usar todo lo presente. Problema resuelto.

Ahora, partes del código que no son en tiempo real se pueden hacer con cualquier API del kernel. Entonces, por ejemplo, si está utilizando un búfer de anillo para paquetes, puede crear un grupo de búferes de anillo por adelantado. No importa cuánto tiempo se tarda en hacerlo, ya que no se envía ni se recibe nada en ese momento. Incluso puede agregar nuevos buffers de anillo a medida que se realicen las conexiones, si lo desea.

No puede garantizar estar al día con las conexiones que se agregan, a menos que el administrador de memoria se encuentre en tiempo real. No puede garantizar que un dispositivo pueda reenviar paquetes si (el intervalo de tiempo necesario + latencia para cambiar a un búfer dado) multiplicado por el número de conexiones es comparable al tiempo total disponible en cada bloque de tiempo. Obviamente, si el tiempo total necesario excede el tiempo disponible, puede garantizar que algunos paquetes no se entregarán.

(Estas son todas las cosas con las que he estado jugando, ya que estoy en medio de un proyecto de red realmente complicado).

Bueno, hay varias fuentes en Internet para aprender.

para comenzar, debe conocer C incrustado de buena manera, especialmente las operaciones de bits.

Según mi opinión, es bueno elegir una arquitectura, es decir, ARM / AVR. Estas dos arquitecturas son fáciles de entender. Consulte la hoja de datos del microcontrolador elegido y repase los códigos de ejemplo para el mismo. Aprenderás rápido.

Más o menos al navegar por las especificaciones del hardware en cuestión y luego jugar con él hasta que comience a funcionar.

El soporte en tiempo real es mucho más difícil y realmente merece un tutor. En general, en tiempo real difícil no hay una alternativa al procesador dedicado con un ciclo de ejecución programado.