打印

打死不用中断,该如何治疗 =。=

[复制链接]
3030|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cov0xt|  楼主 | 2015-12-20 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cov0xt 于 2015-12-20 09:09 编辑

在51单片机中,中断或定时器的开启相当麻烦,一大堆标志位,而且数量有限,非常有用的定时器,才给2-3个。

最近通过状态机和分时操作系统理论的研究,想出了一种代码结构:

void TimerRun()
{
  timerCounter++;
  if(timerCounter>50000)
  {
    timerFlag=1;
    timerCounter=0;
  }
}
//--------

业务逻辑函数()
{
  if(timerFlag==1)
  {
    //定时器到时间了,做些什么
    //定时器标志变量清零
    timerFlag=0;
  }
}

//--------

void main()
{   
  while(1)
  {
    TimerRun();
    业务逻辑函数();
  }
}

这样的程序结构,代码非常清晰,而且不用定时器中断也完成了定时器的工作,如果对时间有严格要求的话,手动调整50000就可以了。

其实我觉得,定时器中断的本质,也就是在主循环里跳到一个函数里。

本文标题只是为了吸引眼球,我真正想问的是【定时器中断存在的意义何在?】





相关帖子

沙发
dirtwillfly| | 2015-12-20 10:04 | 只看该作者
中断是为了实现程序的并行运行

使用特权

评论回复
板凳
dirtwillfly| | 2015-12-20 10:05 | 只看该作者
定时器中断可以实现在主循环正常运行的情况下,进行计时和定时

使用特权

评论回复
地板
cov0xt|  楼主 | 2015-12-20 10:26 | 只看该作者
dirtwillfly 发表于 2015-12-20 10:05
定时器中断可以实现在主循环正常运行的情况下,进行计时和定时

中断不是触发的时候,主程序暂停,等中断函数完成了,才回到主程序里。

所以从非常细小的某一刻来讲,程序都是一条线执行的。

所以不用中断,也能达成任务。

使用特权

评论回复
5
dirtwillfly| | 2015-12-20 10:29 | 只看该作者
本帖最后由 dirtwillfly 于 2015-12-20 10:30 编辑
cov0xt 发表于 2015-12-20 10:26
中断不是触发的时候,主程序暂停,等中断函数完成了,才回到主程序里。

所以从非常细小的某一刻来讲,程 ...

:lol是这样的,从宏观上就是并行。但是定时器计时和内核的运行在硬件上是并行的,只是触发中断服务程序的时候由内核来处理

使用特权

评论回复
6
玄德| | 2015-12-20 11:21 | 只看该作者

LZ以后就会知道了。

使用特权

评论回复
7
河东猴| | 2015-12-20 11:42 | 只看该作者
吾尝终日而思矣,不如须臾之所学也

使用特权

评论回复
8
justtest111| | 2015-12-20 13:05 | 只看该作者
你的TimerRun()在主函数中运行,一个明显的缺点就是不能精确定时啊。

使用特权

评论回复
9
dong_abc| | 2015-12-20 13:25 | 只看该作者
中断是最高优先级的任务切换,你却不用。

使用特权

评论回复
10
huangqi412| | 2015-12-20 15:24 | 只看该作者
走路去帝都和坐车去帝都都是要一路踏过几千公里,坐车有什么意义么。

使用特权

评论回复
11
huangqi412| | 2015-12-20 15:25 | 只看该作者
汇编和C也都可以写程序,楼主位居然用C,,,

使用特权

评论回复
12
huangqi412| | 2015-12-20 15:31 | 只看该作者
估计楼主才看完流水灯例程,等你上到WPM例程就知道了。

使用特权

评论回复
13
guanyanqin1992| | 2015-12-20 16:52 | 只看该作者
楼主以后必为奇才

使用特权

评论回复
14
ddllxxrr| | 2015-12-20 17:18 | 只看该作者
定时器中断的意义在于,定时器中断不用人为去管,到时自动跳到中断函数,用处还是很大的,楼主的,只不过是查询方式的一种应用

使用特权

评论回复
15
zhixiaoyuhong| | 2015-12-20 17:46 | 只看该作者
51现在只用定时中断。。。

使用特权

评论回复
16
diweo| | 2015-12-20 19:43 | 只看该作者
不用治了,直接放弃

使用特权

评论回复
17
sepmoon| | 2015-12-20 19:50 | 只看该作者
中断的种类和原理不是一句两句能讲清楚的,存在必然有其道理,楼主以后程序写多了自然就明白了中断无可替代的原因

使用特权

评论回复
18
huangqi412| | 2015-12-20 21:18 | 只看该作者
dong_abc 发表于 2015-12-20 13:25
中断是最高优先级的任务切换,你却不用。

abc换头像了

使用特权

评论回复
19
幸福至上| | 2015-12-20 22:00 | 只看该作者
楼主的这种用法是可行的,在一些对时间要求bu严格的场合可以这样用,但应少用。使用定时器中断的第一个优势就是定时较精确;在主循环中计数来定时始终存在每个循环所需时间并不一致而导致每次计数间隔并不相等。因为每个循环程序的所有逻辑并不会都执行,在后续的代码升级中,也要根据代码变化不断调整计数阀值,较为繁琐。第二,计时也是需要时间的,不过一般来说都还好,定时中断就相当于硬件上与程序并行运行,互相有交互但影响少,这是程序设计中应力求实现的。

使用特权

评论回复
20
逍遥派掌门| | 2015-12-20 22:18 | 只看该作者
中断是好东西,可以在任意时刻进行抢占式运行;普通的程序无法做到这点。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

200

帖子

3

粉丝