¿Para qué sirve "#pragma CODE_SEG __NEAR_SEG NON_BANKED"?
¿Microcontrolador Freescale S12?
Esta oración coloca el siguiente código (generalmente la función de interrupción) en un área no paginada. Consulte mi respuesta sobre la función de interrupción del microcontrolador S12. /question/224213298.html
#pragma CODE_SEG __NEAR_SEG NON_BANKED //La función de interrupción se coloca en el área sin paginación
interrupt VectorNumber_Vtimch7 void ICU_Ch7Int(void)
{
TFLG1_C7F = 1; //Borrar el bit de indicador de interrupción
}
#pragma CODE_SEG DEFAULT //El código posterior se coloca en el área predeterminada
Normalmente declaro la función de interrupción de la forma anterior.
Dado que el vector de interrupción del microcontrolador de 16 bits de Freescale es de 16 bits, la función de interrupción solo se puede abordar si se coloca en el área sin paginación. Esta es la función de la primera línea.
El "VectorNumber_Vtimch7" en la segunda línea es el número de interrupción, que es una macro definida en el archivo "MC9S12XS128.h". Este número de interrupción se encuentra en su manual técnico, pero te recomiendo que lo uses. esta forma de macro, porque esta macro es menos propensa a errores y más legible. Por ejemplo, "VectorNumber_Vtimch7" es el número de interrupción correspondiente al canal 7 (CH7) del temporizador (TIM). El nombre de la función de interrupción "ICU_Ch7Int" se puede elegir arbitrariamente y no tiene ningún efecto.
Debido al tamaño limitado del área sin paginación dentro del microcontrolador, las funciones sin interrupción generalmente se colocan en el área de paginación y la última línea se usa para este propósito.