4.1 对于4.STM32freeRTOS---队列传递DMA搬运的ADC数据 遇到的错误解决笔记

第一个问题:串口打印出 Error:…\FreeRTOS\port\RVDS\ARM_CM3\port.c,204 错误

在这里插入图片描述
首先,先去定位到port.c 的204行。

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 ).
实现任务的函数不得退出或尝试返回到其调用方,因为没有要返回的内容。
如果任务想要退出它,应该改为调用 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( ; ; )
{
}
}

解决方法1:要删除开始任务函数。
vTaskDelete( NULL )或者vTaskDelete( 开始任务函数的句柄)。

但是我的代码问题不是在这里,于是我再继续看博客。
有博主说可能是系统可管理的最高中断优先级的设置,这里设置的是5,所以在串口中断里面的抢占优先级应该大于5 ,小于15 才可以,(优先级值越大,优先级别越低)。抢占优先级级别1~5被系统占用了。
在这里插入图片描述
解决方法2:修改中断抢占优先级。

但是!这个办法还是没有解决我的问题,我在看看博客,再看看代码。
于是,突然想到,是进入退出临界区出问题了,原因是代码写错了以及忘记写了。

解决方法3:正确开启和退出临界区。

taskENTER_CRITICAL();//开启临界区
taskEXIT_CRITICAL(); //关闭临界区

成功解决我的问题!!!!撒法发~~~~

问题2:ADC采集的数据不符合实际情况,多路采集结果一致。

对于这个问题,其实很简单…多多注意一下ADC的多个通道的引脚复用和相关引脚配置。

stm32f103c8t6
在这里插入图片描述

以及ADC去读取多个通道时的代码:【就是这个忘记了,结果多路采集的结果和一路采集的结果是一致的】
在这里插入图片描述
结论:
我知道我现在有些错误是很基础的,但是在解决这样基础的问题时我并没有意识到这本来是一个很简单的问题,但是解决完后就发现这个问题真的态easy态基础了吧。。。没事的,好在解决了。基础慢慢来就是。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值