como ya se ha respondido, pragmas y __interrupt, etc. son todos muy específicos del compilador y, básicamente, no necesariamente portan. Por lo tanto, si desea abandonar la zona de pruebas, es posible que deba asumir el control por completo, lo que implica el ensamblaje (que a su vez no necesariamente se transfiere de un ensamblador a otro, pero tiene más control).
En general, debe consultar la documentación del procesador; en su caso, es probable que se trate de una dirección conocida donde el hardware busca la dirección del controlador. Los documentos del chip deben tener el conjunto de instrucciones y cómo regresar de una interrupción, posiblemente una instrucción específica. Una forma sencilla de administrarlo es hacer lo que los pragmas tendrían que hacer, pero con una envoltura, la dirección del manejador podría ser su código de ensamblaje, su código de ensamblaje guarda el estado suficiente para que pueda llamar a una función C de forma segura. una función C normal desde una perspectiva de lenguaje / pragma (es decir, no agregar ninguna), pero no hagas cosas en esa función que no puedes hacer en un controlador de interrupciones. Luego, al regresar de la función C, limpiar el estado y usar la instrucción de retorno de interrupción adecuada.
Más allá de eso, en algún momento, obviamente necesita configurar el periférico para causar una interrupción. En el manejador de interrupciones en general, pero algunos chips pueden atajar esto, debe averiguar quién causó la interrupción, que es la arquitectura o el chip o ambos específicos. Maneje esa interrupción y luego, a veces, tendrá que hacer un bucle en el manejador de interrupciones para asegurarse de que no haya más interrupciones pendientes que se produjeron durante la administración de la interrupción inicial. Y en algún momento debe despejar el estado, a menudo esto ocurre en más de un lugar, pero es específico de chip / archtecture. A menudo, desea comenzar lo más lejos posible en el periférico y abrirse camino hacia el procesador evitando generar una segunda / múltiples interrupciones falsas.
si tiene una interfaz de depuración, lo ideal es que usted pueda imprimir cosas para ver cosas, y si su hardware / lógica admite el sondeo además de causar interrupciones, la mejor manera de comenzar es provocar una interrupción en el extremo periférico del chip pero no habilita la interrupción en el extremo del procesador del chip (un extremo habilita la creación, el otro extremo inhabilita la escucha del remitente contra el receptor) luego sondea el extremo del procesador / receptor de esa interrupción para verlo afirmar, para luego investigar los otros registros de estado para ver si puede determinar mediante programación que era ese periférico, ver qué sucede en el extremo del procesador cuando se le pide al periférico que borre la interrupción, ¿se aclara completamente o hay más? capas (o fue un pulso de borde activado para empezar). Me saco mucho menos pelo de esta manera para obtener una interrupción / chip / sistema resuelto.
y cuando digo que el periférico y el procesador que podrían estar en el mismo chip o que el periférico podría estar en un chip diferente, no importa desde una perspectiva general. Dependiendo de la arquitectura, los chips, etc., puede haber varias o varias capas de interrupción que permiten que parte del árbol de interrupciones pase del periférico al procesador, por lo tanto, el sondeo para la configuración de la interrupción y el borrado. ENTONCES entras en tener un gestor de interrupciones, guardando correctamente el estado (no olvides las banderas) restaurando el estado y devolviendo las instrucciones.