FreeRTOS断言“freertos\portable\rvds\arm_cm3\port.c,244“的解决方法

在使用FreeRTOS时遇到port.c,244断言错误,经过排查在正点原子论坛找到解决方案。问题源于任务函数未包含死循环,导致任务执行完毕尝试返回,违反了FreeRTOS任务不能退出的规则。解决方法是在任务中添加死循环或删除任务本身。" 87268278,8287093,Qt字符串操作详解,"['Qt开发', '字符串处理', 'C++编程']
摘要由CSDN通过智能技术生成

FreeRTOS断言"freertos\portable\rvds\arm_cm3\port.c,244"的解决方法

这两天刚上手FreeRTOS,写程序的时候,中途编译烧录调试,代码很简单,我也感觉没啥问题,但是在串口中打印了断言freertos\portable\rvds\arm_cm3\port.c,244,检查代码多次未能解决问题,网上也只有一篇文章提到这个问题,最终我在正点原子的论坛上找到了答案。
代码的内容就是:
两个定时器中断TIM3和TIM5。TIM3优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY,即该中断不能被FreeRTOS的portDISABLE_INTERRUPTS()函数停止;TIM5优先级则低于configMAX_SYSCALL_INTERRUPT_PRIORITY,即它可以被停止。
每隔1s向串口打印信息,然后在任务中调用portDISABLE_INTERRUPTS()关闭中断,那么TIM3应该能继续输出,而TIM5则不能。

在代码中,建立了两个任务,一个是开始任务startTask(),一个是关中断的任务intrruptTask(),在开始任务中创建关中断的任务。


重点来了,我写到一半的时候,直接写了个intrruptTask()的空函数放那了,里面没有写死循环。这时烧录上去,串口就会打印断言freertos\portable\rvds\arm_cm3\port.c,244,在intrruptTask()里写一个while(1)即可解决。


问题解决了,可是为什么会这样?
先放出我的代码:

/*********************任务设置区*********************/
#define startTask_STK_SIZE	120				//开始任务的堆栈大小,实际大小为120*4
#define startTask_PRIO	1							//空闲任务的优先级为0,一般不用0,数字越大,优先级越高	
void startTask(void *pvParameters);		//任务函数
TaskHandle_t startTask_Handler;				//任务句柄,别的任务通过句柄调用该任务

#define intrruptTask_STK_SIZE	120				//开始任务的堆栈大小,实际大小为120*4
#define intrruptTask_PRIO	2							//空闲任务的优先级为0,一般不用0,数字越大,优先级越高	
void intrruptTask(
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值