fabrice48 wrote on Tuesday, July 15, 2014:


i have a doubt about the interrupt handler on pic24 :
the official document explain this,

Interrupt can be written in C exactly as described in the compiler.
Then it was discussed about TWO interrupt handler, C method and ASM method.

readind the manual several time but i don’t understand if i can use C or if i have to use ASM ?

here an example about the Scondary UART Rx Interrupt.
Can i use this code ? is it correct ?

typedef struct
unsigned char screen_pos;
char* screen_mess;
} lcd_data;

lcd_data info_serie;

void attribute((interrupt, no_auto_psv)) _U2RXInterrupt(void)
IFS1bits.U2RXIF = 0;
while( DataRdyUART2())
message[0] = ReadUART2();
WriteUART2( message[0] +1 );
info_serie.screen_mess = message;
info_serie.screen_pos = 10;
xQueueSendToBackFromISR(xQueue_lcd, &info_serie,0);



thank you for help.


davedoors wrote on Tuesday, July 15, 2014:

There are two interrupt handlers defined in the PIC24 demo for you to copy (in this file http://sourceforge.net/p/freertos/code/HEAD/tree/trunk/FreeRTOS/Demo/PIC24_MPLAB/serial/serial.c) and this is what the documentation page for the PIC24 port says:

“Interrupt service routines that cannot cause a context switch have no special requirements and can be written as per the compiler documentation.
Interrupt service routines that can cause a context switch must execute with priority portKERNEL_INTERRUPT_PRIORITY, and only call taskYIELD() at the very end of the service routine after the interrupt source has been cleared. See the file serial.c included in the demo application for an example.”

no mention of assembly code, I don’t know what it is you are reading.

fabrice48 wrote on Tuesday, July 15, 2014:

Hello Dave,
my document is the one bought on official freertos website, it’s page 89.
as i said, i just have a ‘doubt’
so if the interrupt does not cause a context switch AND if it canoot be itself interrupted i can use the C handler.
i just began with FreeRtos.

the assembly kind is discussed a the very end of this page.
my document is the one for PIC32.

thank you

davedoors wrote on Tuesday, July 15, 2014:

Each chip/compiler port necessarily has a different way of doing it because of the constraints of the architecture and the compiler syntax.