Tactile Switch Hardware Interrupt

shashank2388 wrote on Tuesday, March 19, 2013:

Hello all,
I am new to this forum and RTOS too. I am looking for a code to generate a tactile switch interrupt on PIC32MX360F512L. I am using PIC32 starter kit. I tried to call the ISR void __ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void) from a task but it gave me error "/pic32mx/include/sys/appio.h:(.vector_26+0x0): undefined reference to `ChangeNotice_Handler’ ". I tired to search the interrupt in the RTOS files but could not get it. Can somebody help with this?
Thanks in advance…

davedoors wrote on Tuesday, March 19, 2013:

The page linked below has a section “Interrupt service routines” that tells you how to write an interrupt that uses FreeRTOS

http://www.freertos.org/port_PIC32_MIPS_MK4.html

shashank2388 wrote on Tuesday, March 19, 2013:

Thanks a lot for the quick reply!!!

I tried to implement in the similar manner; creating .S file and .c file containing the void __ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void);  but it still gives me the same error "/pic32mx/include/sys/appio.h:(.vector_26+0x0): undefined reference to `ChangeNotice_Handler’ "

Where do you think am going wrong? I checked the appio.h file and it has nothing in it regarding it….

rtel wrote on Tuesday, March 19, 2013:

I don’t think your problem is in any way FreeRTOS related.  It sounds like you have a simple build problem, or linking problem to be more precise.

If you are calling ChangeNotice_Handler in your code then the code you are building must somewhere define a function called ChangeNotice_Handler, but evidently (from the error message) it doesn’t.  That would be the case whether you included FreeRTOS in your build or not because ChangeNotice_Handler is definitely not a FreeRTOS function.

Regards.

shashank2388 wrote on Wednesday, March 20, 2013:

Hey thanks Richard for the reply!!
I did the code according to the procedure mentioned on the page http://www.freertos.org/port_PIC32_MIPS_MK4.html but could not make it run. So I looked through the examples given and found that .set nomips16 and .set noreorder was mentioned in every .S file. I modified my code accordingly and it worked though I do not understand what these line mean. My .S files looks something like this :

.set nomips16
.set noreorder
.extern vSW1InterruptHandler
.global ChangeNotice_Handler
.set noreorder
.set noat
.ent ChangeNotice_Handler

Thanking you.