HI,
I’m not sure if doing this is OK, possible or downright dumb. (or all 3)
I want to build FreeRTOS into a static library such that I can call it from a C++ application in IAR/EWARM. Besides the FreeRTOS files I usually set up in EWARM, what else is required?
I set up an EWARM project and included all the source C files, the heap2.c, portasm.s, and port.c
(from the FreeRTOSV8.2.0\FreeRTOS\Source\portable\IAR\ARM_CM4F directory) so there are 9 files. It builds OK into a lib file (.a) and I can add it into my C++ project. The FreeRTOS headers are enclosed in the C++ file as:
On build, I am getting an error that is telling me applicationTickHook isn’t defined, but the function is in my C++ file.
*Error[Li005]: no definition for “vApplicationTickHook” [referenced from tasks.o(FreeRTOSLIB.a)] *
When I build the static lib, do I need a “main.c” file with applicationTickHook included in there? Or, if not, what am I missing?
All seemed to have gone well, until I uncommented the call to start the scheduler. Now I am getting this error:
Error[Li005]: no definition for “vPortEnableVFP” [referenced from port.o(FreeRTOSLIB.a)]
Error[Li005]: no definition for “vPortStartFirstTask” [referenced from port.o(FreeRTOSLIB.a)]
This one I cannot see, because I do not know where these functions exist. I should mention that I am using Richard Damon’s C++ wrapper, but this shouldn’t make any difference as it seems to create the task OK - from his TaskCPP.h file:
In the IAR port both vPortEnableVFP() and vPortStartFirstTask() are
called from a C file (port.c), but implemented in an asm file
(portasm.s). Their prototypes are in the C file, not in a header file,
so I’m guessing you need to add extern “C” around their prototypes too.
Currently the prototypes appear in the C file as:
/*
* Start first task is a separate function so it can be tested in
isolation.
*/
extern void vPortStartFirstTask( void );
/*
* Turn the VFP on.
*/
extern void vPortEnableVFP( void );