En muchas aplicaciones integradas existe una compensación entre hacer que el código sea muy eficiente o aislar el código de la configuración específica del sistema para que sea inmune a los requisitos cambiantes.¿Cómo hacer que su código C incrustado sea inmune a los cambios de requisitos sin agregar demasiados gastos generales y complejidad?
¿Qué tipos de construcciones C usualmente empleas para lograr lo mejor de ambos mundos (flexibilidad y reconfigurabilidad sin perder eficiencia)?
Si tiene tiempo, continúe leyendo para ver exactamente de lo que estoy hablando.
Cuando estaba desarrollando SW integrado para controladores de airbag, tuvimos el problema de tener que cambiar algunas partes del código cada vez que el cliente cambiaba de opinión con respecto a los requisitos específicos. Por ejemplo, la combinación de condiciones y eventos que desencadenaría el despliegue del airbag cambia cada dos semanas durante el desarrollo. Odiamos cambiar esa pieza de código con tanta frecuencia.
En ese momento, asistí a la Conferencia de sistemas integrados y escuché una brillante presentación de Stephen Mellor titulada "Hacer frente a los requisitos cambiantes". Puede leer el documento here (hacen que se registre, pero es gratis).
La idea principal de esto era implementar el comportamiento del núcleo en su código pero configurar los detalles específicos en forma de datos. Los datos son algo que puede cambiar fácilmente e incluso puede programarse en EEPROM o en una sección diferente de flash.
Esta idea suena genial para resolver nuestro problema. Compartí esto con mi colega e inmediatamente comenzamos a modificar algunos de los módulos SW.
Cuando intentamos utilizar esta idea en nuestra codificación, encontramos cierta dificultad en la implementación real. Nuestras construcciones de código se volvieron terriblemente pesadas y complejas para un sistema embebido limitado.
Para ilustrar esto, detallaré el ejemplo que mencioné anteriormente. En lugar de tener un montón de declaraciones if para decidir si la combinación de entradas estaba en un estado que requería una implementación de airbag, cambiamos a una gran tabla de tablas. Algunas de las condiciones no eran triviales, así que usamos muchos indicadores de función para poder invocar muchas pequeñas funciones auxiliares que de alguna manera resolvieron algunas de las condiciones. Tuvimos varios niveles de indirección y todo se volvió difícil de entender. Para resumir, terminamos usando mucha memoria, tiempo de ejecución y complejidad del código. La depuración de la cosa tampoco fue directa. El jefe nos hizo cambiar algunas cosas porque los módulos se estaban volviendo demasiado pesados (¡y quizás tenía razón!).
PD: Hay una pregunta similar en SO, pero parece que el enfoque es diferente. Adapting to meet changing business requirements?
su introducción es bastante largo y no especifica la pregunta muy bien ... pero aún así es una buena. – jpinto3912
De acuerdo. Es probable que obtenga más (y mejores) respuestas si ajusta un poco la pregunta. Haz que sea fácil de leer. Haga la pregunta primero y luego nos puede dar los antecedentes relevantes y explicar todos los detalles. Nadie quiere leer una novela antes siquiera de averiguar cuál es la pregunta *; *) – jalf
Creo que el título de la pregunta es un poco largo: P –