¿Deben definirse todas las trampas siempre?

18

Ahora he visto dos casos con dsPIC 30F4013 donde el controlador se estaba reiniciando debido a una captura indefinida. El por qué estas trampas se levantaron en primer lugar sigue siendo un misterio, pero esa no es mi pregunta inmediata. Estoy empezando a pensar que sería una buena práctica de programación siempre definir todas las trampas, incluso si las trampas nunca deberían ocurrir, así que al menos aparece un mensaje de error claro en lugar de un reinicio aleatorio. ¿Es esta una práctica estándar que no conozco? ¿Hay desventajas para esta práctica que debería considerar?

    
pregunta Stephen Collings

2 respuestas

13

Mi regla informal es:

  1. Si una interrupción está habilitada, entonces debería tener un código que la maneje.
  2. Si no escribe el código para una interrupción, desactívelo.
  3. Si no puede desactivarlo, escriba el código para ello.

Sin embargo, incluso sin esa regla, la hoja de datos responde explícitamente a su pregunta:

  

Si el usuario no tiene intención de tomar el correctivo   Acción en caso de error de captura.   condición, estos vectores deben ser cargados   con la dirección de un controlador predeterminado que   simplemente contiene la instrucción RESET. Si,   Por otro lado, uno de los vectores.   que contiene una dirección no válida, se llama   se genera la trampa de error de dirección.

( Source , sección 8.3, primera nota)

Dado que no puede enmascarar las trampas, entonces debe manejarlas. Si no desea lidiar con la trampa de una manera particular, el método adecuado es ejecutar una instrucción RESET .

    
respondido por el Adam Davis
16

Sí, es una buena idea: el único inconveniente es un poco de tamaño de código adicional, y usted tiene que decidir qué hacer con la trampa (¿emitir un mensaje en el puerto serie? ¿encender una luz "FALLIDA"? En silencio reiniciar? etc)

    
respondido por el pjc50

Lea otras preguntas en las etiquetas