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

[复制链接]
4282|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
定时器中断可以实现在主循环正常运行的情况下,进行计时和定时

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

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

所以不用中断,也能达成任务。
dirtwillfly 发表于 2015-12-20 10:29 | 显示全部楼层
本帖最后由 dirtwillfly 于 2015-12-20 10:30 编辑
cov0xt 发表于 2015-12-20 10:26
中断不是触发的时候,主程序暂停,等中断函数完成了,才回到主程序里。

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

:lol是这样的,从宏观上就是并行。但是定时器计时和内核的运行在硬件上是并行的,只是触发中断服务程序的时候由内核来处理
玄德 发表于 2015-12-20 11:21 | 显示全部楼层

LZ以后就会知道了。

河东猴 发表于 2015-12-20 11:42 | 显示全部楼层
吾尝终日而思矣,不如须臾之所学也
justtest111 发表于 2015-12-20 13:05 | 显示全部楼层
你的TimerRun()在主函数中运行,一个明显的缺点就是不能精确定时啊。
dong_abc 发表于 2015-12-20 13:25 来自手机 | 显示全部楼层
中断是最高优先级的任务切换,你却不用。
huangqi412 发表于 2015-12-20 15:24 | 显示全部楼层
走路去帝都和坐车去帝都都是要一路踏过几千公里,坐车有什么意义么。
huangqi412 发表于 2015-12-20 15:25 | 显示全部楼层
汇编和C也都可以写程序,楼主位居然用C,,,
huangqi412 发表于 2015-12-20 15:31 | 显示全部楼层
估计楼主才看完流水灯例程,等你上到WPM例程就知道了。
guanyanqin1992 发表于 2015-12-20 16:52 | 显示全部楼层
楼主以后必为奇才
ddllxxrr 发表于 2015-12-20 17:18 | 显示全部楼层
定时器中断的意义在于,定时器中断不用人为去管,到时自动跳到中断函数,用处还是很大的,楼主的,只不过是查询方式的一种应用
zhixiaoyuhong 发表于 2015-12-20 17:46 | 显示全部楼层
51现在只用定时中断。。。
diweo 发表于 2015-12-20 19:43 | 显示全部楼层
不用治了,直接放弃
sepmoon 发表于 2015-12-20 19:50 | 显示全部楼层
中断的种类和原理不是一句两句能讲清楚的,存在必然有其道理,楼主以后程序写多了自然就明白了中断无可替代的原因
huangqi412 发表于 2015-12-20 21:18 来自手机 | 显示全部楼层
dong_abc 发表于 2015-12-20 13:25
中断是最高优先级的任务切换,你却不用。

abc换头像了
幸福至上 发表于 2015-12-20 22:00 | 显示全部楼层
楼主的这种用法是可行的,在一些对时间要求bu严格的场合可以这样用,但应少用。使用定时器中断的第一个优势就是定时较精确;在主循环中计数来定时始终存在每个循环所需时间并不一致而导致每次计数间隔并不相等。因为每个循环程序的所有逻辑并不会都执行,在后续的代码升级中,也要根据代码变化不断调整计数阀值,较为繁琐。第二,计时也是需要时间的,不过一般来说都还好,定时中断就相当于硬件上与程序并行运行,互相有交互但影响少,这是程序设计中应力求实现的。
逍遥派掌门 发表于 2015-12-20 22:18 | 显示全部楼层
中断是好东西,可以在任意时刻进行抢占式运行;普通的程序无法做到这点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

200

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部