¿Se pueden colgar los microcontroladores durante la ejecución de un programa?

Gracias por A2A, Shahbaz Khan.
Primero definamos qué es “Hang”.
1. Colgar no es una palabra puramente técnica. Es lo que nosotros como humanos / usuarios percibimos por nuestros sentidos. Podemos ver que el sistema no responde durante un cierto período de tiempo. Nunca decimos que mi computadora se cuelga durante 2 nanosegundos cada hora. Podemos decir que mi computadora se cuelga durante aproximadamente 2 minutos o hasta que la reinicie.
Por eso lo llamamos ” comportamiento que no responde “.
2. Su programa que se cuelga, el microcontrolador no se puede colgar. Se cuelga cuando está muerto. Entonces hang está basado puramente en software.
3. Comportamiento que no responde debido a la complejidad del programa. El microcontrolador maneja una instrucción a la vez, sin importar cuán complejo sea el código. Puede suceder por varias razones, como puntos muertos, procesos prolongados, bucles infinitos, errores de interfaz de usuario , etc.

Por lo tanto, las razones por las cuales el sistema basado en microcontrolador puede colgar son similares a las computadoras de propósito general.
Pero, ¿qué condiciones especiales pueden ocurrir en la aplicación integrada que pueden dar como resultado un sistema que no responde u otro comportamiento anormal?
: Como los sistemas integrados están diseñados según las necesidades, no hay una respuesta fácil. Puede haber tantos escenarios en los que, por muchas razones, el sistema puede dejar de responder.
A. Problema en dispositivos conectados:
Si el dispositivo conectado se vuelve anormal, puede forzar el software en bucle infinito. El software debería haber incorporado protección para tales errores.
B. fallo de hardware en la placa base: algunos fallos de hardware o cortocircuito pueden provocar un punto muerto o un bucle infinito.
C. Escenario de entrada no esperado.
ETC.

No hay una respuesta directa a esta pregunta porque solo depende del tipo de sistema al que esté asociado el controlador. Más a menudo, el controlador es un sistema de adquisición de datos a través de algunos sensores (analógico / digital) y / o es el autor de la activación o activación de algún otro dispositivo. Al estar sentado en medio de dos secciones (cada sección tiene más de un dispositivo: eléctrico / electrónico / mecánico / químico, etc.) podría haber n! razones que molestan la ejecución normal del controlador.

Es mejor primero evaluar cómo funciona ‘cualquier controlador’ … (los detalles pueden estar disponibles en los libros estándar) pero en términos de operación en el núcleo, la ejecución de cada instrucción ocurre dentro del acumulador y el disparador para que la siguiente instrucción sea automática se realiza mediante un sistema de contabilidad llamado ‘contador de programa’. Si el contador del programa se reinicia (dependiendo del diseño del controlador por parte del fabricante, generalmente en RESET o Power on Reset en términos de activación de hardware) a través del firmware mediante condiciones de restablecimiento como Brown-out Reset, Watchdog Reset, etc., la ejecución es repetición. Ahora para condiciones de bajo voltaje, se activa el restablecimiento de caída de voltaje; si el sistema se cuelga en un bucle while, el reinicio de vigilancia se activa; y así sucesivamente por cualquier otro tipo de razones.

Si todo está bien, el sistema no se reinicia pero continúa su actividad.

La pregunta aquí es ‘¿y si no se reinicia ni continúa su negocio?’ y eso es lo que definimos como “colgar”. La causa podría ser

  1. Mala lógica de programación
  2. Si el controlador está accediendo a los datos a través de un protocolo y el tiempo de respuesta del resultado del sondeo no está bien planificado con respecto a maestro y esclavo, con una declaración ilógica de tipos de datos de variables que se rellenan (por ejemplo, para un valor de voltaje que será flotante / double, si la variable que lo captura se declara como tipo entero (incluso entero de 32 bits), está en serios problemas) y los tipos de datos de variable que se inicializan desde el adquirente, esto da como resultado una construcción errónea repetida del byte conversión y que corrompe la memoria donde el controlador almacena el valor antes de enviarlo o mostrarlo.
  3. Conexiones flojas
  4. Bajo voltaje al nivel de reinicio por caída de tensión, pero lo suficientemente pequeño como para que el controlador intente conectar la corriente y, por lo tanto, se calienta.
  5. Si el acceso a la memoria no está definido en función del mapa de memoria del chip de memoria.
  6. Si el chip de memoria es EEPROM y la protección contra escritura en el chip no se realiza mediante firmware, lo que podría provocar que una señal indebida corrompa el chip.
  7. Si alguno de los circuitos integrados es CMOS y los motivos habituales de CMOS LATCH-UP.
  8. Coordinación asincrónica repetida entre elementos de arquitectura maestro / esclavo
  9. Calibración incorrecta para el DAQ.
  10. Si hay comunicación en serie usando UART, entonces NO se abrirá el canal UART cuando el sistema esté conectado al bucle.
  11. Inicialización de usuario no coincidente o inicialización del sistema que funcionó inicialmente pero después de una prueba acelerada los factores incrementados están más allá del tamaño de bytes del tamaño de matriz de la variable.
  12. Si el controlador está buscando varias interfaces, por ejemplo, Módulo GSM y el módulo no responde o tarda un tiempo debido a su propia corrupción de firmware.
  13. En ocasiones, los cálculos matemáticos como seno / coseno o logaritmos se realizan en entradas en tiempo real (lo que obviamente se realizará mediante la expansión de Taylor o la gestión de una tabla de búsqueda o tabla hash que está codificada).
  14. Las comunicaciones cronometradas pero basadas en un indicador de tiempo empírico, dicen que una respuesta frecuente a un sistema que se envía cada 3 minutos es demasiado lenta pero eficiente, pero enviar el mismo cada 1 minuto es demasiado infantil cuando hay 100 de esos sistemas. Los 100, enviando mensajes (sin solicitud) – transmitiendo a un dispositivo maestro y el dispositivo maestro tiene demasiado para manejar. No calcula la frecuencia de envío versus la capacidad de recepción.
  15. Iniciando la generación de múltiples relojes pero sin sincronizar sus ritmos.
  16. Si el ciclo while es autónomo (generalmente prefiero que no sea autónomo), entonces puede entrar en un código que se ejecuta para siempre con su propio problema de resolverlos a través de WDT Restart, pero si se controla a través del temporizador y si el temporizador interrumpe no se genera cada número decidido de mili / micro-segundo, tiene un tiempo que está siempre en el limbo y, por lo tanto, se ‘cuelga’

y así sucesivamente …

Por lo tanto, aunque es una pregunta válida, pero un ingeniero de firmware inteligente, mitigaría todos los escenarios anteriores y más (el que no he experimentado) y, en consecuencia, creará una solución para encontrar nuevas posibilidades o situaciones que causen situaciones de punto muerto.

Hay 2 posibles razones para colgar mcu

(1) La lógica está escrita de tal manera que no puede manejar alguna situación y, en caso de esa condición, deja de funcionar.

(2) El hardware mcu deja de funcionar debido a algún ruido / perturbación en la línea de alimentación o en algunas líneas de interfaz.

El programa complejo no es motivo para colgar.

Muchas veces el programa se atascó en while (1) como condición para salir del ciclo que no se llena por completo. Por lo tanto, sigue comprobando la misma condición infinitamente. Esto se puede considerar como estado de bloqueo.