解决FreeRTOS程序跑不起来,打印调试却提示“Error:..\FreeRTOS\port\RVDS\ARM_CM3\port.c,244“的方法

前言

今天来分享一个不会造成程序编译报错,但会使程序一直跑不起来,并且通过调试会发现有输出错误提示的错误例子分析,话不多说,我们就直接开始分析~

首先,我们说过这个例子在编译时候没有明示的错误提示,也可以说没有语法和逻辑之类的错误,应该是程序哪里写的有不规范的地方造成的。我们先来分析一下当时的情况~

错误发现

当时发现程序跑不起来,依然是从LED呼吸灯看出来的,然后通过debug来一步一步锁定错误,并且配合串口调试信息输出来查看断言。发现程序一开始是进行下去的了,然后发现执行到一个函数的时候,程序就跑飞了。发现此时调试窗口输出提示:"Error:...\FreeRTOS\port\RVDS\ARM_CM3\port.c,244" 。如下图所示:

同时通过行数发现是这句断言产生的调试信息,configASSERT( uxCriticalNesting == ~0UL );,可以从以下代码看出,程序是执行了任务退出错误的函数,那为什么会执行到该函数呢?我们就回退到进入该函数前,看看程序在干什么?代码完整输出如下:

c 复制代码
static void prvTaskExitError( void )
{
	/* A function that implements a task must not exit or attempt to return to
	its caller as there is nothing to return to.  If a task wants to exit it
	should instead call vTaskDelete( NULL ).

	Artificially force an assert() to be triggered if configASSERT() is
	defined, then stop here so application writers can catch the error. */
	configASSERT( uxCriticalNesting == ~0UL );   //错误提示这句
	portDISABLE_INTERRUPTS();
	for( ;; );
}

错误原因

我们回退回去发现,当时进入函数前程序在执行一个任务,执行完之后就进入到那个函数去,仔细看了一遍,发现原来是那个任务忘记添加了while,导致你还没有调度,那个任务就退出来了,所以才会提示你任务退出有错误

解决方法

知道了错误原因,解决这个错误也就很简单了,只需要将相应的while加上去即可~

这个错误可能在大家刚开始使用freertos时候最容易遇到,大家学习时候看例子可能都会想到这个while,但是有时候自己去写一个任务时候,可能就会忘记添加上去,就有可能会有这个情况出现。

所以有时候细心还是很重要的,这里分享出来也是希望帮助到有同样情况的小伙伴。

好了,今天分享就到这里了。

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。

另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞和收藏,谢谢~

相关推荐
浅陌pa6 分钟前
01:(寄存器开发)点亮一个LED灯
c语言·stm32·单片机·嵌入式硬件
嵌入式详谈23 分钟前
基于STM32的数字温度传感器设计与实现
stm32·单片机·嵌入式硬件
AAA 建材批发王哥(天道酬勤)25 分钟前
单片机在控制和自动化任务中的应用场景广泛
单片机·嵌入式硬件·自动化
武汉芯景科技有限公司3 小时前
关于武汉芯景科技有限公司的IIC电平转换芯片XJ9509开发指南(兼容PCa9509)
科技·stm32·单片机·嵌入式硬件
马浩同学4 小时前
【ESP32】Arduino开发 | Timer定时器+定时器闹钟例程
c语言·单片机·嵌入式硬件·mcu
千千道4 小时前
STM32 实现 UDP 广播通信
stm32·单片机·物联网·网络协议·udp
EVERSPIN5 小时前
分享国产RISC-V单片机通用
单片机·嵌入式硬件·risc-v
浅陌pa5 小时前
05:(寄存器开发)定时器一
stm32·单片机·嵌入式硬件
TNT_JQR7 小时前
电子信息类专业技术学习及比赛路线总结(大一到大三)
单片机·嵌入式硬件·学习
钟剑锋-JeffChong9 小时前
智能手表(Smart Watch)项目
stm32·单片机·嵌入式开发·智能手表