新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2019-11-1
- 在线时间
- 5 小时
|
5金钱
本帖最后由 yhtc11 于 2020-6-30 14:55 编辑
工作过程当中遇到的实际问题,具体是这样的:
设备设置了一个定时器TIM5,溢出时间两秒,当一个特定外部中断进来的时候启动定时器,发生溢出的处理函数中直接关掉,相当于一次性2秒定时。这两秒过程中进行中断脉冲计数,溢出中断服务函数中关闭定时器,另外在外部中断处理函数中关掉中断。然后在主程序中读取标志位,得到脉冲值,置标志位用于主程序打印上传数据。
这个步骤一般都是能正常工作的,起到上传转速的作用。
工作机理就是定时器采完转速后对转速进行一个初步判断,置标志位,在主程序while1循环里读取标志位判断,读取到标志位就上传转速,并重新开启中断(用于下一次计时)
但是我在一个包含了一些数学运算的函数里面调用这段代码,输出的脉冲数目怎么都不对。
因为这段数学运算的代码耗时太长了,系统在里面的过程中跑不到主循环中标志位判断的位置,所以我就自己手动加了一些读取标志位判断的代码,相当于手动轮询
并不是完全的数据错误,就是2秒钟本来应该是222的脉冲数,进了这个函数中间,就一直给我一些50 160这种值,每次还都差不多的,领导一直说是我的原因,我是真的找不出来问题在哪。。
改变定时器时间会有用吗?现在临时的解决办法就是不用定时了,按照实际跑代码试出来的时间去定两秒的间隔,手动上传脉冲数。领导说这样做肯定是不对的,我也没什么其他好办法
想问下各位大佬数学运算对定时器会有影响吗?
|
|