野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13940|回复: 2

关于定时器函数是否应该有返回类型以及return语句在不同地方造成不同影响的问题

[复制链接]
发表于 2016-12-11 20:52:58 | 显示全部楼层 |阅读模式
/**
  * @brief  This function handles TIM2 interrupt request.
  * @param  None
  * @retval None
  */
int TIM2_IRQHandler(void)
{
        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        {       
                time++;
                LED3_TOGGLE;
                return 0;
                TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);                   
        }       
}
我做了一个测试,把return 语句放在清中断标志位前面,用示波器测LED3的反转频率高达353KHz,这是怎么回事呢?
定时器设置的是1ms中断(1000,72)
return返回后程序的PS指针到哪去了?
我又做了一个对比,把中断标志位清楚的语句去掉,发现实验结果和上述的类似
/**
  * @brief  This function handles TIM2 interrupt request.
  * @param  None
  * @retval None
  */
void TIM2_IRQHandler(void)
{
        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        {       
                time++;
                LED3_TOGGLE;
                //TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);                   
        }       
}

有人可以解释一下吗?

回复

使用道具 举报

发表于 2016-12-11 21:45:05 | 显示全部楼层
return的话,函数结束,中断标志就没清除了,可能会导致一直进中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-12 17:08:21 | 显示全部楼层
flyleaf 发表于 2016-12-11 21:45
return的话,函数结束,中断标志就没清除了,可能会导致一直进中断

好的谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-13 22:28 , Processed in 0.028969 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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