Hi,
I cannot find portYIELD_FROM_ISR() in the freeRTOS online documentation. Is there a search facility or index for all functions?
Also I include the task.h but the following line
portYIELD_FROM_ISR(NULL);
gives the error below as if it does not see it. Do I need to include another header for the function definition?
../src/config/default/interrupts.c: In function 'CHANGE_NOTICE_B_Handler':
../src/config/default/interrupts.c:115:5: error: implicit declaration of function 'portYIELD_FROM_ISR' [-Werror=implicit-function-declaration]
portYIELD_FROM_ISR(NULL);
^
Hi Richard,
I did included task.h in my code and following your reply I have now also included FreeRTOS.h
But the same error persists. And if I click on the function it does not bring me to the definition, as if it does not find the file. But it is there, included.
This is the complete output:
make[2]: Entering directory 'D:/Dropbox (TDL)/TDL Design/Rational/Firmware_OP60_RTOS/firmware/OP60_RTOS.X'
../src/config/default/interrupts.c: In function 'CHANGE_NOTICE_B_Handler':
../src/config/default/interrupts.c:116:5: error: implicit declaration of function 'portYIELD_FROM_ISR' [-Werror=implicit-function-declaration]
portYIELD_FROM_ISR(NULL);
^
cc1.exe: all warnings being treated as errors
make[2]: *** [build/default/production/_ext/1171490990/interrupts.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
"C:\Program Files (x86)\Microchip\xc32\v2.30\bin\xc32-gcc.exe" -g -x c -c -mprocessor=32MZ1024EFG100 -ffunction-sections -O1 -I../src/third_party/rtos/FreeRTOS/Source/portable/MPLAB/PIC32MZ -I../src/third_party/rtos/FreeRTOS/Source/include -I../src -I../src/config/default -I../src/packs/PIC32MZ1024EFG100_DFP -Werror -Wall -MMD -MF build/default/production/_ext/1171490990/interrupts.o.d -o build/default/production/_ext/1171490990/interrupts.o ../src/config/default/interrupts.c -DXPRJ_default=default -no-legacy-libc "-mdfp=C:/Program Files (x86)/Microchip/MPLABX/v5.30/packs/Microchip/PIC32MZ-EF_DFP/1.1.45"
nbproject/Makefile-default.mk:428: recipe for target 'build/default/production/_ext/1171490990/interrupts.o' failed
make[2]: Leaving directory 'D:/Dropbox (TDL)/TDL Design/Rational/Firmware_OP60_RTOS/firmware/OP60_RTOS.X'
nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed
make[1]: Leaving directory 'D:/Dropbox (TDL)/TDL Design/Rational/Firmware_OP60_RTOS/firmware/OP60_RTOS.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 1s)
Previously I asked if you had more than one header file called task.h, can you confirm that is not the case as it should not have built at all if you included task.h with previously including FreeRTOS.h - but just output a #error message.
I just double checked and can only find a single task.h file in the entire freeRTOS folder/sub-folders
and also there are no task.h in any of my project folders/subfolders.
I also tried including only task.h and then only freeRTOS.h and then both. The output from the compiler is always the same.
I also looked into both task.h and freeRTOS.h and neither contain the definition of portYIELD_FROM_ISR function
Do I have to perhaps enable the inclusion of that function to be available?
I hope that answers your point? If not, could you please elaborate.
In which case I don’t think you are building code provided by us. You can see here that if you include task.h without first including FreeRTOS.h the compiler will stop with the #error message on that link.
I just opened task.h and it does have the same #error directive. I then saw that they were both included through a previous include of another file that was generated by MPLAB.
Which also confirms the fact that that the same error does appear even if I don’t include either of them - because they are #included in the other file #included a few #include above
I also checked both task.h and freeRTOS.h from the link you sent me and neither of them include the portYIELD_FROM_ISR(). And mine don’t either.
So where is the definition of portYIELD_FROM_ISR ?
Also is there a search for portYIELD_FROM_ISR in the online documentation? Is there a search facility on the freeRTOS.org website? I could not find any. It is tedious to have to manually go through the API index on the left side of the web page.
One thing to note, since the name begins with port, the definition will come from the portability layer. FreeRTOS.h will have in it a statement to include portable.h which will include the portmacro.h file from the appropriate directory (you may need to set the include paths so this happens).
Note that different ports may use slightly different methods to write things like an ISR. It somewhat depends on how old the port is.
The documentation for symbols beginning with port is ultimately in that header, though much is described in the documentation for general rules for ports.
It is not a configurable option - but looking now I see the PIC32 port doesn’t have a macro called portYIELD_FROM_ISR() - it uses the older portEND_SWITCHING_ISR(). I suspect your interrupts.c file is not written for the PIC32. Interrupts on the PIC32 require wrappers, and per the “interrupt service routines” section of this page https://www.freertos.org/port_PIC32_MIPS_MK4.html