企业网站需求方案,网站认证是什么,上海传媒公司电话,wordpress 归档 如何使用前言
今天来分享一个不会造成程序编译报错#xff0c;但会使程序一直跑不起来#xff0c;并且通过调试会发现有输出错误提示的错误例子分析#xff0c;话不多说#xff0c;我们就直接开始分析~
首先#xff0c;我们说过这个例子在编译时候没有明示的错误提示#xff0c…前言
今天来分享一个不会造成程序编译报错但会使程序一直跑不起来并且通过调试会发现有输出错误提示的错误例子分析话不多说我们就直接开始分析~
首先我们说过这个例子在编译时候没有明示的错误提示也可以说没有语法和逻辑之类的错误应该是程序哪里写的有不规范的地方造成的。我们先来分析一下当时的情况~
错误发现
当时发现程序跑不起来依然是从LED呼吸灯看出来的然后通过debug来一步一步锁定错误并且配合串口调试信息输出来查看断言。发现程序一开始是进行下去的了然后发现执行到一个函数的时候程序就跑飞了。发现此时调试窗口输出提示:“Error:…\FreeRTOS\port\RVDS\ARM_CM3\port.c,244”。如下图所示
同时通过行数发现是这句断言产生的调试信息configASSERT( uxCriticalNesting ~0UL );可以从以下代码看出程序是执行了任务退出错误的函数那为什么会执行到该函数呢我们就回退到进入该函数前看看程序在干什么代码完整输出如下
static void prvTaskExitError( void )
{/* A function that implements a task must not exit or attempt to return toits caller as there is nothing to return to. If a task wants to exit itshould instead call vTaskDelete( NULL ).Artificially force an assert() to be triggered if configASSERT() isdefined, then stop here so application writers can catch the error. */configASSERT( uxCriticalNesting ~0UL ); //错误提示这句portDISABLE_INTERRUPTS();for( ;; );
}错误原因
我们回退回去发现当时进入函数前程序在执行一个任务执行完之后就进入到那个函数去仔细看了一遍发现原来是那个任务忘记添加了while导致你还没有调度那个任务就退出来了所以才会提示你任务退出有错误。
解决方法
知道了错误原因解决这个错误也就很简单了只需要将相应的while加上去即可~
这个错误可能在大家刚开始使用freertos时候最容易遇到大家学习时候看例子可能都会想到这个while但是有时候自己去写一个任务时候可能就会忘记添加上去就有可能会有这个情况出现。
所以有时候细心还是很重要的这里分享出来也是希望帮助到有同样情况的小伙伴。
好了今天分享就到这里了。
本人水平有限上述信息仅供学习参考如有错误和不妥之处请多多指教。 另外创作不易请勿抄袭如果有帮助到大家的话希望大家可以点个赞和收藏谢谢~