Freertos vPortEnterCritical卡死调试方法

FreertOS之临界区taskENTER_CRITICAL taskENTER_CRITICAL() ---lib\include\task.h #define taskENTER_CRITICAL() portENTER_CRITICAL() #define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() portENTER_CRITICAL() ... 阅读详情
AI摘要

本文讲述了如何通过添加日志定位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
FreeRTOS-内核控制函数 FreeRTOS-内核控制函数 FreeRTOS中有一些内核函数,一般来说这些内核函数在应用层不会使用,但是内核控制函数是理解FreeRTOS中断的基础。接下来我们逐一分析这些内核函数。 taskYIELD() 该函数的作用是进行任务切换,这是一个宏定义,实际上调用了portYIELD()。portYIELD函数定义如下: #define portYIELD() \ { \ /* Set a PendSV to request a 阅读详情

相关推荐

FreeRTOS中断里用vTaskDelay()就死机?手把手教你STM32F407中断优先级与FromISR函数避坑

本文深入解析FreeRTOS在STM32F407中断中使用vTaskDelay()导致死机的问题,揭示中断优先级配置与FromISR函数的关键作用。通过对比普通API与FromISR API的设计差异,提供中断安全调用的最佳实践和调试技巧,帮助开发者避免常见陷阱,确保RTOS系统的稳定运行。

weixin_42525005的博客 188

CMSIS-FreeRTOS源码审计:从调度到内存管理的工程实践

RTOS(实时操作系统)是嵌入式开发的核心组件,而CMSIS-FreeRTOS作为ARM官方基于FreeRTOS内核封装的CMSIS-RTOS v2标准实现,为Cortex-M系列芯片提供了统一的RTOS接口。理解其底层实现原理,对于排查任务切换异常、堆栈溢出、优先级反转等问题至关重要。本文从源码静态审计的视角出发,深入剖析CMSIS-FreeRTOS的工程架构、上下文切换机制(PendSV/SVC)、临界区保护(BASEPRI掩蔽)、内存管理(heap_1~heap_5)及同步机制(队列/互斥量),并详解

weixin_34409357的博客 248

STM32 HAL_Delay 阻塞排查:uwTick不更新的5种原因与修复方法

本文深入解析STM32开发中HAL_Delay阻塞问题,特别是uwTick不更新的5种常见原因及修复方法。从SysTick中断优先级冲突到CubeMX版本迁移问题,再到FreeRTOS配置冲突、时钟源配置错误以及低功耗模式下的异常,提供了详细的诊断步骤和解决方案,帮助开发者快速定位并修复系统时钟基准失效问题。

www.itmmd.com 333

嵌入式中断:如何正确设置中断优先级 (万字总结) - 基于Cortex-M和FreeRTOS

configMAX_SYSCALL_INTERRUPT_PRIORITY 中断优先级设置问题 从CortexM角度 Cortex-M构架自身最多允许256级可编程优先级(优先级配置寄存器最多8位,所以优先级范围从0x00~0xFF), 是绝大多数微控制器制造商只是使用其中的一部分优先级 NXP 1062 使用了其中的高4bits,所以中断优先级在0-15,共16个 在Cortex-M内核中,一个中断的优先级数值越低,逻辑优先级却越高 从RTOS角度 RTOS中断嵌套方案将有效的中断优先级分成两组: • 可以

HowieXue 薛永浩的博客 1万+

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 454

使用同一个时钟源clki,做两个二分频时钟,得到div2_clk1和div2_clk2,这两个时钟都能跟源时钟clki同步,但是div2_clk1和div2_clk2的相位可能是相同的,也可能是反相

比如,触发器1的初始Q为0,而触发器2的初始Q为1(这可能由于芯片制造工艺的微小差异、上电过程的随机性、或没有全局复位信号导致)。这句话的意思是:虽然div2_clk1和div2_clk2都是由同一个妈妈(clki)生出来的,频率也都是妈妈的一半,但它们“起步”的时刻可能不同。所以,上面那段话是在提醒你注意这种潜在的、由分频产生的时钟相位关系的不确定性,这在异步电路设计或时钟管理中是必须考虑的关键因素。结果:div2_clk1和div2_clk2的波形完全重合,它们的上升沿和下降沿都发生在同一时刻。

m0_49540263的博客 591

智能座舱语音测试避坑指南:从唤醒率到方言识别,这些场景你测全了吗?

本文深入解析智能座舱语音测试的关键场景与避坑指南,涵盖唤醒率测试、方言识别、多音区交互等复杂场景。通过实战案例与自动化测试方案,帮助开发者全面提升语音系统的可靠性与用户体验,特别关注环境噪声干扰与方言覆盖策略。

weixin_42613501的博客 496

使用C#和ASP.NET创建登录页面

在Visual Studio中,右键单击项目,选择"添加",然后选择"新建项"。在对话框中选择"Web",然后选择"Web 窗体"。在Visual Studio中,右键单击项目,选择"添加",然后选择"新建项"。在Visual Studio中,选择"新建项目",然后选择"ASP.NET Web应用程序"。在上面的代码中,我们创建了一个简单的用户界面,包含一个用户名输入框、一个密码输入框和一个登录按钮。在上面的代码中,我们创建了一个简单的用户界面,包含一个用户名输入框、一个密码输入框和一个登录按钮。

TzData的博客 763

C#项目实战——YModem协议文件传输【实例】

1、先由上位机发送*update*的握手信号,下位机返回响应字符‘C’(字符C,ASII码为0x43),之后通信双方开始以YMODEM协议进行数据通信。2、 YMODEM协议格式说明(1)起始帧数据格式帧类型(1byte)帧序号帧序号反码传输的文件名文件大小数据CRCSOH00FFfilenamefileziseNULCRCSOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);00表示数据帧序号,初始是0,依次向下排。

做有价值的事,积累有价值的笔记! 3654

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

YOLOv11改进 - C3k2融合 | C3k2融合细节增强卷积DEConv(Detail-Enhanced Convolution)提升细微特征提取能力

本文介绍了细节增强卷积(DEConv)技术在YOLOv11中的结合应用。DEConv由标准卷积层和多种差异卷积层并行组成,通过计算像素差异和卷积操作增强特征提取能力,还采用重参数化技术简化模型结构。其优势在于能更好捕捉高频信息、保持参数数量不变且降低推理计算成本。我们将DEConv集成进YOLOv11,替换部分模块。

魔改工程师的博客 862

Cesium教程(十七):淹没分析

淹没分析是根据某片区域的地形及洪水流量速度,动态模拟该地形区域水位逐渐上涨的淹没过程。该功能可适用于山区、丘陵等地形起伏较大区域,模拟洪水涨到安全限定高度的淹没过程,为防洪水救灾提供一定的参考。此外,还可以为河谷地带修建水利工程设计与选址提供参考依据。

WwLK123的博客 3008

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Freertos中的几个中断优先级宏的理解
下一篇: ModbusTCP/Modbus RTU by TCP
armwind
博客等级 码龄12年 406粉丝 152原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值