解决错误提示:Error: L6218E: Undefined symbol xQueueCreateMutex (referred from main.o).的方法

本文讲述了在使用FreeRTOS时遇到关于xQueueCreateMutex未定义的编译错误,原因在于configUSE_MUTEXES宏未设置正确。作者提供了检查和解决此类问题的方法,强调了FreeRTOS配置的重要性。
摘要由CSDN通过智能技术生成

今天继续来分享一个关于FreeRTOS学习实践过程中遇到的一个错误。

其实这个错误也是由于宏定义定义不对造成的,只是这次出现的错误提示多了一些其他说明。话不多说,我们先来看一下吧。

错误:

在这里插入图片描述

.\Objects\Freertos_test_one.axf: Error: L6218E: Undefined symbol xQueueCreateMutex (referred from main.o).

Not enough information to list image symbols.

Not enough information to list load addresses in the image map.

我们可以看到上面第一条的错误其实跟上一篇文章那三个错误一样,就是由于编译器在链接时候找不到该函数。

但是这次仔细看下面还有两条提示,其大致意思就是你提供的信息太少,找不到相应的函数,可能看到这里会不太明白。我们下面讲了你就会明白,编译器为什么这么提示你。

我们可以先从这个函数xQueueCreateMutex着手,从我们的工程中直接搜索有这个函数出现的地方,于是,我们看到这个函数定义这里是这么定义的,代码如下:

#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )

	QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
	{
	Queue_t *pxNewQueue;
	const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;

		pxNewQueue = ( Queue_t * ) xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );
		prvInitialiseMutex( pxNewQueue );

		return pxNewQueue;
	}

#endif /* configUSE_MUTEXES */

从上面的代码我们可以看出,如果定义该函数,需要configUSE_MUTEXES为1以及configSUPPORT_DYNAMIC_ALLOCATION 为1,后面的宏configSUPPORT_DYNAMIC_ALLOCATION是支持动态创建的意思,这个肯定是为1的,要不之前那么多都是动态创建的,早就提示你错误了

因此我们看向宏configUSE_MUTEXES,这个宏的意思是使用互斥量,也就是如果你使用到了互斥量的话,就需要将其置为1。由此判断,这个宏定义可能是为0,造成函数xQueueCreateMutex未定义

于是,我们定位到宏configUSE_MUTEXES的定义处,发现其的确是为0。

#define configUSE_MUTEXES						    1   //使用到互斥量需定义为1

由此看出,正是因为configUSE_MUTEXES为0,造成函数定义前的预编译条件不通过,造成编译器编译到这里时候直接跳过,所以才会提示函数xQueueCreateMutex未定义

所以编译器也提示你的信息不足,也就是缺少相应的条件。同时我们发现,在使用FreeRTOS的时候一定要注重FreeRTOSConfig头文件的配置。

解决方法:

那解决方法自然就跟我们上一篇文章将到的一样:
1、使用到互斥量的话,就将宏configUSE_MUTEXES置为1。
2、如果没有用到互斥量,切记将宏configUSE_MUTEXES置为0,同时不要使用互斥量的API函数。

按照上述解决方法,我们再次编译可以看到,此时编译通过了,如下图所示:
在这里插入图片描述

好了,今天的分享就到这里了~,如果有其他小伙伴也遇到过这种错误,可以参考一下我的这个例子。

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞和收藏,谢谢~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OMGMac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值