Freertos vPortEnterCritical卡死调试方法

本文讲述了如何通过添加日志定位CortexM4平台上的Freertos程序在中断TIM2中错误地调用了一个没有ISR的函数,导致vPortEnterCritical断言。作者分享了解决方法,即检查中断上下文并修复uxQueueMessagesWaiting中的问题。

今天遇到一个问题,Freertos卡在vPortEnterCritical断言中了,从vPortEnterCritical中的代码可以看到,此时在中断中执行了vPortEnterCritical。在检查完代码后,还是没注意到是在哪里调用了这个方法(老眼昏花了)。于是添加了几行log,轻松定位到问题。

1.错误日志:

RTOS_CORE  [I] vPortValidateInterruptPriority:754 ulCurrentInterrupt:0x44
RTOS_CORE  [I] vPortValidateInterruptPriority:785 ucCurrentPriority:0x30,ucMaxSysCallPriority:0x20
RTOS_CORE  [I] vPortValidateInterruptPriority:786 result:1
RTOS_CORE  [D] vPortValidateInterruptPriority:803 reg:300,val:300
RTOS_CORE  [D] uxQueueMessagesWaiting:1585 E
RTOS_CORE  [D] vPortEnterCritical:443 IRQ[44]:TIM2  ----中断TIM2中调用了没有ISR的函数
RTOS_CORE  [E] vPortEnterCritical:445 ASSERT ERROR:0  ----RTOS卡在这里,445行

vPortEnterCritical中添加日志,判断是否有中断发生。CortexM4Int2String()打印对应中断的名字。从上面的日志可以看到,此时在中断TIM2中。

2.vPortEnterCritical添加日志

在这里插入图片描述

3.portmacro.h中宏修改

注意待代码稳定后,请删掉日志或者关闭对应的log。

#define vPortEnterCriticalDbg( ) \
do {
     
       \
    if( portNVIC_INT_CTRL_REG & 0xFF/*portVECTACTIVE_MASK*/) LOGD
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值