problema en la subrutina rutint_counter

problema en la subrutina rutint_counter

de Miguel Angel Martinez Recalde -
Número de respuestas: 3

Hola; tenemos un problema en el pedido de interrupciones, cuando compilamos para el debugger.  Cuando la subrutina la compilamos para ROM, la misma recibe el pedido de interrupción, incrementa el contador y sale; pero cuando compilamos para el debugger salta un mensaje en la terminal y el programa se para y no incrementa el contador de la subrutina. ¿Que podrá ser?. Adjunto una foto del terminal.

Adjunto foto.png
En respuesta a Miguel Angel Martinez Recalde

Re: problema en la subrutina rutint_counter

de Manuel Urquiola -

Buenas,

Una posibilidad para que obtengan ese error al ejecutarlo con el debugger, pero no en ROM, es que esten incializando el registro I como si siguiesen trabajando en ROM.
Revisen también cómo inicializan la tabla de vectores de interrupción y donde queda en memoria en cada caso.

Podría llegar a ser otra cosa que no esté viendo, así que de no poder solucionar el problema, consulten nuevamente y me dicen si ese error se les presenta al presionar el botón o simplemente al empezar a ejecutar el programa. 

Saludos!

Manuel

En respuesta a Manuel Urquiola

Re: problema en la subrutina rutint_counter

de Julio Perez -

Ese error en general aparece cuando accidentalmente el procesador termina ejecutando código del monitor que está grabado en ROM (el que se encarga de comunicarse con el debugger y de mandar a correr tu programa). Además de lo que dice Manuel, las causas más comunes de esto son no inicializar correctamente el stack pointer o no alinear correctamente el stack antes de retornar de una subrutina. Eso hace que RET retorne a cualquier lado.

Otra cosa que llama la atención es el tamaño exagerado de la sección .text. ¿Para qué necesitan 12494 bytes de código de programa?

Revisen las inicializaciones y el manejo del stack en las subrutinas.

julio

En respuesta a Julio Perez

Re: problema en la subrutina rutint_counter

de Miguel Angel Martinez Recalde -

Hola; al final era eso, estábamos inicializando mal la tabla de interrupciones. Por el tamaño, no nos percatamos del tamaño del código, habíamos definido una parte del código con un .org, que hacia que el código, quedara mas estirado de lo normal. Muchas gracias.