STM32中断中调用OLED显示出现OLED花屏

在STM32中断服务程序中调用OLED显示导致花屏问题,原因是中断内调用了可能被阻塞的函数。中断处理应当避免使用printf、malloc等全局资源依赖的函数,因中断可能导致全局资源访问冲突、可重入问题,影响系统实时性和稳定性。理解中断上下文、中断关闭和任务调度原则是避免此类问题的关键。
摘要由CSDN通过智能技术生成

STM32中断中调用OLED显示出现OLED花屏

在TIM5中断处理函数中,我写了OLED显示,经过DEBUG发现程序执行到OLED显示语句的时候,OLED就会花屏。

//中断服务处理函数
void TIM5_IRQHandler()
{
if (TIM_GetITStatus(TIM5,TIM_IT_Update)==1) //判断中断状态,是否发生
{
TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除TIMx的中断待处理位:TIM中断源
LCD_16_HanZi_ASCII(5, 6, “电阻:”); //显示负载类型
sprintf(OLED_BUF,"%.2f",res1);//显示计算阻值
LCD_16_HanZi_ASCII(10,6,OLED_BUF);

}

后来在网上搜了一下,发现很多人遇到这个问题,初学嵌入式开发,在写驱动的时候,有一条非常经典的戒律:中断服务程序里,不能调用printf,malloc 函数。
大致理解就是, printf 放在中断里,相当于中断中嵌入中断,这样的函数可能被阻塞,中断中不能调用有可能被阻塞的函数。

原因可参考:
首先,我们要清楚中断发生时,系统的状态如何。一般系统都有特定的中断运行上下文,但不是任务上下文,所以在这个上下文中不能按照普通任务一样调度(也可以在当前任务中断,不同系统可能有所不同),这是中断运行情况。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值