今天来分享一个在创建FreeRTOS时候调用官方的FreeRTOSConfig头文件时,因部分宏值的配置与FreeRTOS内核文件中的函数不匹配,导致编译时候出现了相应的错误。
于是,既然遇到了,就准备拿出来讲一下,让其他遇到的小伙伴也可以看一下具体是什么原因导致的。
好了,话不多说,我们直接开始讲~
错误1:
首先我们来看第一个错误:
.\Objects\FM33LG0_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationStackOverflowHook (referred from tasks.o).
首先,介绍一下该宏定义是用于配置堆栈溢出检测函数的。
而这个错误其实是我们configCHECK_FOR_STACK_OVERFLOW的宏值定义为了1或者2,所以会在编译链接时候,发现vApplicationStackOverflowHook却没有定义。因为在这些函数前都有编译条件的。
检测如果configCHECK_FOR_STACK_OVERFLOW为1或者2,才会去对其进行编译链接。但是此时该函数又没有定义,就会出现上述的提示。
其宏值定义,可以参考下图说明:
错误1解决方法:
那解决方法自然就是:
1、要么不使用堆栈溢出检测功能,将宏configCH.ECK_FOR_STACK_OVERFLOW配置为0。
2、要么就是定义vApplicationStackOverflowHook相应钩子函数。
错误2:
然后我们来看第二个错误:
.\Objects\FM33LG0_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).
这个宏定义是用于配置使用滴答时钟钩子的。
这个错误也是因为vApplicationTickHook函数没有定义,造成编译连接时候找不到相应的函数定义。于是就出现了相应的错误提示。
错误2解决方法:
解决方法跟第一个一样,要么配置该滴答钩子函数,要么不使用的话,就将宏定义为0。
错误3:
最后我们看一下最后一个错误:
该错误也是一样,就是configUSE_MALLOC_FAILED_HOOK宏定义为1,该宏其实是用于配置内存创建失败时候进行相应提示的。
具体该函数可以参考FreeRTOS官网的描述:
.\Objects\FM33LG0_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationMallocFailedHook (referred from heap_4.o).
其错误也是一样,就是vApplicationMallocFailedHook函数没有定义。
错误3解决方法:
那解决方法自然跟上述两种一样,使用的话就定义该函数,不使用的话就将该宏定义为0即可~
好了,今天分享就到这里了。有其他小伙伴如果也遇到这种情况,可以拿来参考一下~
本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞和收藏,谢谢~