When creating a new FreeRTOS CCES project, the FreeRTOS source files located in “$Your FreeRTOS Path$/FreeRTOSv10.0.0/FreeRTOS/Source/” should also be added into your project, otherwise linker will report below errors:
[Error li1021] The following symbols referenced in processor 'P0' could not be resolved:
'pvPortMalloc [_pvPortMalloc]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'pvPortMalloc [_pvPortMalloc]' referenced from 'system\FreeRTOS\Source\queue.doj'
'pvPortMalloc [_pvPortMalloc]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'pvPortMalloc [_pvPortMalloc]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'pvPortMalloc [_pvPortMalloc]' referenced from 'system\FreeRTOS\Source\timers.doj'
'pxPortInitialiseStack [_pxPortInitialiseStack]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'ulPortSetInterruptMask [_ulPortSetInterruptMask]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'ulPortSetInterruptMask [_ulPortSetInterruptMask]' referenced from 'system\FreeRTOS\Source\queue.doj'
'ulPortSetInterruptMask [_ulPortSetInterruptMask]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'ulPortSetInterruptMask [_ulPortSetInterruptMask]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vApplicationGetIdleTaskMemory [_vApplicationGetIdleTaskMemory]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vApplicationGetTimerTaskMemory [_vApplicationGetTimerTaskMemory]' referenced from 'system\FreeRTOS\Source\timers.doj'
'vApplicationStackOverflowHook [_vApplicationStackOverflowHook]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vAssertCalled [_vAssertCalled]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'vAssertCalled [_vAssertCalled]' referenced from 'system\FreeRTOS\Source\queue.doj'
'vAssertCalled [_vAssertCalled]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'vAssertCalled [_vAssertCalled]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vAssertCalled [_vAssertCalled]' referenced from 'system\FreeRTOS\Source\timers.doj'
'vPortClearInterruptMask [_vPortClearInterruptMask]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'vPortClearInterruptMask [_vPortClearInterruptMask]' referenced from 'system\FreeRTOS\Source\queue.doj'
'vPortClearInterruptMask [_vPortClearInterruptMask]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'vPortClearInterruptMask [_vPortClearInterruptMask]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vPortEndScheduler [_vPortEndScheduler]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vPortEnterCritical [_vPortEnterCritical]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'vPortEnterCritical [_vPortEnterCritical]' referenced from 'system\FreeRTOS\Source\queue.doj'
'vPortEnterCritical [_vPortEnterCritical]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'vPortEnterCritical [_vPortEnterCritical]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vPortEnterCritical [_vPortEnterCritical]' referenced from 'system\FreeRTOS\Source\timers.doj'
'vPortExitCritical [_vPortExitCritical]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'vPortExitCritical [_vPortExitCritical]' referenced from 'system\FreeRTOS\Source\queue.doj'
'vPortExitCritical [_vPortExitCritical]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'vPortExitCritical [_vPortExitCritical]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vPortExitCritical [_vPortExitCritical]' referenced from 'system\FreeRTOS\Source\timers.doj'
'vPortFree [_vPortFree]' referenced from 'system\FreeRTOS\Source\event_groups.doj'
'vPortFree [_vPortFree]' referenced from 'system\FreeRTOS\Source\queue.doj'
'vPortFree [_vPortFree]' referenced from 'system\FreeRTOS\Source\stream_buffer.doj'
'vPortFree [_vPortFree]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'vPortFree [_vPortFree]' referenced from 'system\FreeRTOS\Source\timers.doj'
'vPortValidateInterruptPriority [_vPortValidateInterruptPriority]' referenced from 'system\FreeRTOS\Source\queue.doj'
'vPortValidateInterruptPriority [_vPortValidateInterruptPriority]' referenced from 'system\FreeRTOS\Source\tasks.doj'
'xPortStartScheduler [_xPortStartScheduler]' referenced from 'system\FreeRTOS\Source\tasks.doj'
Linker finished with 1 error
cc3089: fatal error: Link failed (code:1)
make[1]: *** [CHT4089_BF702_Monitor.dxe] Error 1
make: *** [all] Error 2
To fix above errors, please add below FreeRTOS source files in screenshot as following steps:
And for Sharc project, here is example to add below FreeRTOS source files:
- Create FreeRTOS virtual folder:
a. Right-click on system folder -> New -> Folder
b. Fill in folder name “FreeRTOS” in Folder name -> Click Advanced -> choose “Folder is not located in the file system (Virtual Folder)” -> click Finish button
2. Create portable and MemMang virtual folder
3. Add heap_4.c file into MemMang folder:
a. Right-click on MemMang folder -> New -> File
b. Select “Link to file in the file system” -> Browse and fill in the path of heap_4.c file under your FreeRTOS($Your FreeRTOS Path$/FreeRTOSv10.0.0/FreeRTOS/Source/portable/MemMang/heap_4.c)
4. Add the remaining files in FreeRTOS folder as shown in the screenshot
5. Rebuild the project
How to create relative links to the FreeRTOS source files?
- Take port.c as example, right-click on portable folder -> Import -> File Syatem
- Click the Browse... to point to your source folder ($Your FreeRTOS Path$/FreeRTOSv10.0.0/FreeRTOS/Source/portable/CCES/SHARC_215xx)
- Entry this folder and expend it to select the files you want to add
- Click 'Advanced' section and 'Create links in workspace'
- Then click Finish
How to add Include Paths for new projects?
- Right-click on your project and select Properties
- Go to settings to add the paths in Additional include directories shown as below. Now it is in Debug mode as default, please also do it in Release mode.