9509|13

60

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

定时中断里面加延迟,为什么程序就挂掉了 [复制链接]

 
        extern void delayMs(unsigned int delayInMs);
      void delayMs(unsigned int delayInMs)
        {
                T2TCR = 0x02;                /* reset timer 计数器复位*/
                T2PR  = 0x00;                /* set prescaler to zero 设置预分频的值为0 */
                T2MR0 = delayInMs * (FPCLK-1);//匹配寄存器0   FPCLK等于24000000
                T2IR  = 1;                /* reset all interrrupts 设置全部中断寄存器*/
                T2MCR = 0x03;                /* stop timer on match */
                T2TCR = 0x01;                /* start timer 开启定时/计数器 */
          
                /* wait until delay time has elapsed */
                while (T2TCR & 0x01);
        }   
void TIMER1_IRQHandler (void)里面加了一个延迟
{
    delayMs(10); //定时时间10秒钟

}
程序只是示意表达我的意思,就是在定时器1中断的情况下,做个延迟

此帖出自NXP MCU论坛

最新回复

进入中断屏蔽一些其他中断,你的延时肯定也是用了中断,死锁了 把延时做成循环计数方式就不会死掉 但是做MCU开发最忌讳的就是在中断里面延时  详情 回复 发表于 2017-9-28 18:01
点赞 关注
 

回复
举报

6040

帖子

195

TA的资源

版主

沙发
 
什么叫做挂掉了?
此帖出自NXP MCU论坛

点评

就是程序失效了,没反应了,无论做什么触发,单片机好像都没反应。 我的程序有问题吗  详情 回复 发表于 2017-4-23 17:06
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
lcofjp 发表于 2017-4-23 17:02
什么叫做挂掉了?

就是程序失效了,没反应了,无论做什么触发,单片机好像都没反应。

我的程序有问题吗
此帖出自NXP MCU论坛
 
 
 

回复

6040

帖子

195

TA的资源

版主

4
 
你最好仿真一下,程序死哪儿了都不知道,怎么找问题。
按你的描述来说,最容易出现的问题就是你的延时函数里面死循环了。
此帖出自NXP MCU论坛

点评

仿真不起来,periodic windows update也没用,watch变量值不变化  详情 回复 发表于 2017-4-23 18:01
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

5
 
lcofjp 发表于 2017-4-23 17:30
你最好仿真一下,程序死哪儿了都不知道,怎么找问题。
按你的描述来说,最容易出现的问题就是你的延时函数 ...

仿真不起来,periodic windows update也没用,watch变量值不变化
此帖出自NXP MCU论坛
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

6
 
中断里面加延时??

延时函数,因为执行的时间长,在必要的时候才使用它。中断,本来是为了节约资源的,还要加上延时做什么呢?

如果,这个延时函数要主程序中执行,进入中断后也要执行,这不是引起冲突了吗?

要解决这个问题,  --------- 定义“再入函数”
此帖出自NXP MCU论坛
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

7
 
“再入函数“
它的编制与一般函数基本一样,但是有讲究的。具体自己查一查吧。
此帖出自NXP MCU论坛
 
 
 

回复

831

帖子

5

TA的资源

一粒金砂(高级)

8
 
你的延时代码也是用的定时器,重复的中断触发,我该响应哪一个呢,我遇到过这种问题,如果是用死循环延时,貌似可以实现,进入中断之后关中断,然后延时判断,执行,开中断,这是最原始最笨的办法吧~
此帖出自NXP MCU论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

9
 
中断里加延时,这是很忌讳的一种做法。进入中断,10秒内,不能执行主循环的内容。极大的降低效率。影响主循环时序。中断里改变一个变量的值。主循环里去判断这个值,再执行对应动作。多看看别人的程序。
此帖出自NXP MCU论坛

点评

中断延迟了,主程序循环不能执行?主程序循环不应该受中断影响把  详情 回复 发表于 2017-4-24 17:53
 
 
 

回复

672

帖子

0

TA的资源

版主

10
 
一般中断里面都是置标志位,然后主循环写函数
此帖出自NXP MCU论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

11
 
ienglgge 发表于 2017-4-24 13:06
中断里加延时,这是很忌讳的一种做法。进入中断,10秒内,不能执行主循环的内容。极大的降低效率。影响主循 ...

中断延迟了,主程序循环不能执行?主程序循环不应该受中断影响把
此帖出自NXP MCU论坛

点评

怎么不受,中断执行完成之前,主循环不能运行。处于暂停状态。好好看看单片机基础。  详情 回复 发表于 2017-4-26 09:06
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

12
 
yunhai14 发表于 2017-4-24 17:53
中断延迟了,主程序循环不能执行?主程序循环不应该受中断影响把

怎么不受,中断执行完成之前,主循环不能运行。处于暂停状态。好好看看单片机基础。
此帖出自NXP MCU论坛
 
 
 

回复

116

帖子

2

TA的资源

一粒金砂(中级)

13
 
本帖最后由 okwh 于 2017-4-28 09:14 编辑

可能是因为延时实质上也是一种中断,你却以为是查询等待。
结果是两个中断互相等待对付触发或退出,就死了。
通常在中断内的等待使用代码循环实现(微秒级的),不要用涉及中断的方式。如果是长时间等待,不应在中断内,可在主程序内。
此帖出自NXP MCU论坛
 
个人签名熙熙攘攘的世界,我们不懈前行......
 
 

回复

48

帖子

0

TA的资源

一粒金砂(中级)

14
 
进入中断屏蔽一些其他中断,你的延时肯定也是用了中断,死锁了

把延时做成循环计数方式就不会死掉

但是做MCU开发最忌讳的就是在中断里面延时
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表