【程序人生---随笔】

笔者简单聊聊生活中的事情,

之4月5号的时候,笔者的自行车突然有一天骑着骑着,就感觉很难骑,转头一看,发现车胎都瘪了首先想到的是补胎,网上购买了一套工具去补胎,
【程序人生---随笔】_第1张图片
回来拆了,然后发现发现是一条裂纹,当时想着就补补,第一次补了一次,一打气就崩开了,第二次,一补直接爆了,吓我一跳。

然后就买了内胎,没买外胎没买外胎没买外胎,啊啊啊,因为当时就看到外胎破了,没想到可能是外胎导致的内胎破了,因为可能是石子这些导致的,真是熟视无睹,结果为后面埋雷了。

【程序人生---随笔】_第2张图片

【程序人生---随笔】_第3张图片
【程序人生---随笔】_第4张图片

果然不出意外,意外就出现了,7月份的时候,早上骑着还正常,晚上就发现胎瘪了,然后马上想到是肯定是外胎导致的问题,想到没想,立马就买了内胎和外胎都没拆下来看。(后续拆下来,看来还是石头之类磨的,很小的一个洞)

【程序人生---随笔】_第5张图片

这就告诉了我们一个道理,有些存在的问题,看到了一定要思考一下,不然后面肯定出问题,不能熟视无睹,一些小错误,会导致后面很多成为无用功,最终还得重新来过。

工作上面也有很多时候碰到这样的问题,但是也是有时候企图蒙混过关到时候还是这个问题还得自己去解决,比如最近的这个timer问题。

之前软件timer就发现了这个问题,软件timer的实现在这篇文章介绍,软件定时器实现
软件timer思想如下图所示,
【程序人生---随笔】_第6张图片
现象如下:
【程序人生---随笔】_第7张图片
上方的 id =2,ticks = 32766,指的是,定时器设置的多长时间后产生中断,
背景是:定时一段时间,打印 sys timer thread proc,但是设置时间后,明显时间没到,然后继续中断,直到时间到了,然后打印执行用户call back函数。

  • 定时时间在满足条件的情况,正常肯定是设置时间后,然后就执行用户callback,这种明显是异常。

  • 从48秒 到18秒,经过了30秒,然后时间设置的是32766,时间是32.7s,时间都有很大误差,当时觉得脑子肯定是抽了,才忽略了这个问题。

  • 我们设想一下,如果中断timer时钟频率偏大,则定时指定的时间到了,那么时钟timer的时间没到,则会继续定时,直到定时的时间到,每次定时都早到,所以造成了频繁中断,。

  • 再继续深入想一下,假如中断timer 频率快两倍,则肯定每次设置的时间都早到,而且大概是早到两倍的时间,看上图好像符合这个规律

  • 如果只是中断timer的频率不对,则总的定时应该是正常的,但是总的定时时间还差2s,说明时钟timer也有问题

你可能感兴趣的:(程序人生,嵌入式,程序人生,定时器)