Principalmente haciendo un uso extensivo de máquinas de estado en cada nodo. Además, trato de diseñar el firmware de tal manera que “actúe” como un solo cuerpo de código que se ejecuta en varios procesadores, lo que facilita mantener sincronizadas las máquinas de estado esclavas con la máquina de estado maestra.
En segundo lugar, si es posible, utilizo una arquitectura en la que solo hay un nodo “maestro”, y el resto son esclavos del maestro. Si hay varios “maestros”, se debe determinar que uno de ellos es el “maestro de maestros” (aunque esta autoridad se puede transferir dinámicamente a otro nodo que sea “capaz de maestro” si es necesario). Los esclavos solo pueden “hablar cuando el maestro les habla”, esto es clave para mantener su mecanismo de sincronización de concurrencia simple y robusto.
Seguir un estricto tipo de topología de comunicaciones “maestro / esclavo” puede no ser la más eficiente en todos los casos, pero ciertamente tiene el beneficio de sufrir menos problemas de concurrencia que otras topologías, ya que hay una entidad central encargada de impulsar el tiempo del sistema completo cuyas máquinas de estado individuales fueron diseñadas para “engranar” entre sí.
- ¿Cómo logramos la sincronización de datos entre el contexto del usuario y el contexto de interrupción? ¿Cómo se logra en caso de interrupciones anidadas?
- ¿Cómo se usa SystemC en sistemas embebidos?
- ¿Arduino es un ejemplo de un sistema integrado o no? ¿Cuáles son los campos donde se usa?
- ¿Cuáles son los mejores sitios y libros para aprender programación integrada?
- Cómo construir mi propio sistema integrado para un quad-copter y cuál es el mejor lenguaje de programación para usar