硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1877|回复: 2
收起左侧

[技术讨论] 记一次FreeRTOS中调用xSemaphoreGiveFromISR函数导致程序跑飞卡死的原因

[复制链接]

11

主题

34

回帖

67

积分

初级会员

积分
67
发表于 2024-5-30 13:34:07 | 显示全部楼层 |阅读模式
问题背景介绍:
UART1使用DMA空闲中断来接收不定长数据,接收完成后在串口回调函数中调用xSemaphoreGiveFromISR+portYIELD_FROM_ISR来进行一次任务调度,在指定线程中来处理接收到的数据

问题描述:
串口接收消息后进入回调函数,任务调度(xSemaphoreGiveFromISR+portYIELD_FROM_ISR)时卡死

解决方法:
1,使用的是串口,查看串口中断优先级是不是太高?优先级过高导致RTOS不能抢占优先级,从而卡死,如果太高需要根据自身情况调低
2,小概率和MDK本身的代码优化等级有关系,调成0可能有帮助


回复

使用道具 举报

11

主题

34

回帖

67

积分

初级会员

积分
67
 楼主| 发表于 2024-5-30 13:35:17 | 显示全部楼层
这里是串口,其他如IO外部中断等,也会导致这个问题,同样还是降低对应中断优先级即可
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116242
QQ
发表于 2024-5-30 14:35:09 | 显示全部楼层
这个核心的一点就是要在受FreeRTOS控制的中等里面调用FromISR结尾的API,不受控的不能调用。

https://www.armbbs.cn/forum.php? ... RTOS%2B%D6%D0%B6%CF
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-11 08:54 , Processed in 0.305582 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表