智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1343|回复: 7
打印 上一主题 下一主题

蓝宙库 中断服务函数

[复制链接]

30

主题

229

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2689
威望
1401
贡献
718
兑换币
877
注册时间
2014-7-1
在线时间
285 小时
跳转到指定楼层
1#
发表于 2016-4-1 16:53:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pit_init_ms(PIT0, 5);    5ms中断

void PIT0_IRQHandler(void)
{
   PIT_Flag_Clear(PIT0);       //清中断标志位

   TimeCount ++ ;

  if(TimeCount%1 == 0 ){
     TIME0flag_5ms = 1;

}
  if(TimeCount%2 == 0 ){
     TIME0flag_10ms = 1;

  }
  if(TimeCount%3 == 0 ){
     TIME0flag_15ms = 1;
  }
  if(TimeCount%4 == 0 ){
     TIME0flag_20ms = 1;
  }
  if(TimeCount%64 == 0 ){
     TIME0flag_80ms = 1;
  }


  if(TimeCount == 192)
  {
    TimeCount = 0 ;
  }

请问下80ms那里TimeCount%64 为什么是对64求余呢?
我的理解是5ms进去一次中断服务函数 然后TimeCount就+1 这样的话80ms不是应该对16求余么(80/5=16) 但是检测了一下,64不像是写错的样子,想问下到底是怎么计算 比如我现在要一份85ms的标志位 应该怎么写?
还有为什么TimeCount == 192 就要清零了呢  是跟总线时间有关么?
实在不解 望回复!

回复

使用道具 举报

19

主题

236

帖子

0

精华

跨届大侠

机械决定最高速度,软件决定能否达到最高速度。

Rank: 10Rank: 10Rank: 10

积分
6558

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
2741
贡献
2075
兑换币
1740
注册时间
2011-9-30
在线时间
871 小时
2#
发表于 2016-4-2 13:09:19 | 只看该作者
本帖最后由 jamesdeep 于 2016-4-2 13:13 编辑

我感觉应该是写错了,应该就是你说的16,或者将80ms改成320ms才对。

至于为什么TimeCount == 192就清0,我认为这跟蓝宙写的这个程序框架有关系,不知道你有没有注意到,192是1、2、3、4、64的公倍数,那么假设这个值不是192而是191会发生什么事情呢?

在TimeCount从190->191(被清0)变化的过程中,以(TimeCount%2 == 0 )这个条件为例,这个条件本应隔10ms满足一次,但是这时隔5ms就满足了一次,因此就会发生问题。
由于192*5ms不是85ms的倍数,因此在这个框架里面你无法实现85ms,最接近85ms的应该是80ms,192*5ms是80ms的12倍。
回复 支持 反对

使用道具 举报

30

主题

229

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2689
威望
1401
贡献
718
兑换币
877
注册时间
2014-7-1
在线时间
285 小时
3#
 楼主| 发表于 2016-4-4 19:56:28 | 只看该作者
jamesdeep 发表于 2016-4-2 13:09
我感觉应该是写错了,应该就是你说的16,或者将80ms改成320ms才对。

至于为什么TimeCount == 192就清0, ...

谢谢你详述 这样说来 是不是我们如果用这个终端服务函数实现 N ms的中断,那是不是就必须满足192*5是N得倍数   又不也可以修改192 成T  是T*5是N的倍数。
回复 支持 反对

使用道具 举报

19

主题

236

帖子

0

精华

跨届大侠

机械决定最高速度,软件决定能否达到最高速度。

Rank: 10Rank: 10Rank: 10

积分
6558

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
2741
贡献
2075
兑换币
1740
注册时间
2011-9-30
在线时间
871 小时
4#
发表于 2016-4-5 12:54:53 | 只看该作者
1013956044 发表于 2016-4-4 19:56
谢谢你详述 这样说来 是不是我们如果用这个终端服务函数实现 N ms的中断,那是不是就必须满足192*5是N得 ...

很对
回复 支持 反对

使用道具 举报

30

主题

229

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2689
威望
1401
贡献
718
兑换币
877
注册时间
2014-7-1
在线时间
285 小时
5#
 楼主| 发表于 2016-4-5 17:56:10 | 只看该作者
回复 支持 反对

使用道具 举报

30

主题

229

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2689
威望
1401
贡献
718
兑换币
877
注册时间
2014-7-1
在线时间
285 小时
6#
 楼主| 发表于 2016-6-5 20:41:28 | 只看该作者

还想问下  如果不清零呢  会有什么问题吗?
回复 支持 反对

使用道具 举报

141

主题

8906

帖子

6

精华

杰出人士

蓝宙电子科技有限公司

Rank: 12Rank: 12Rank: 12

积分
18725
QQ
威望
5859
贡献
5686
兑换币
3557
注册时间
2008-8-1
在线时间
3590 小时
7#
发表于 2016-6-7 15:18:14 | 只看该作者
这个64代表的意思是规范的定时时间的,因为程序运行的时候定时器定时不是那么完全准确的,在定时器运行和溢出的过程中是要有时间延时的,而这个64是在使用示波器条件下,测试时间离这个数值最准确的一个数值,因此取64的。
回复 支持 反对

使用道具 举报

30

主题

229

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2689
威望
1401
贡献
718
兑换币
877
注册时间
2014-7-1
在线时间
285 小时
8#
 楼主| 发表于 2016-6-10 18:45:31 | 只看该作者
bydes 发表于 2016-6-7 15:18
这个64代表的意思是规范的定时时间的,因为程序运行的时候定时器定时不是那么完全准确的,在定时器运行和溢 ...

不是很能理解你所说的  写64的话 那个中断还是80ms?  还有 如果我改成16呢 中断时间是多少? 再有 最下面那个192的清零是什么意思?改成200成么?
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-28 08:23 , Processed in 0.087526 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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