前言:前面陆续写了4篇【单片机裸机代码框架设计思路】,有些细心的读者发现了存在小bug,
所以特地补充了一篇来说明bug的原因以及解决方案
bug现象:当g_task_ticks在定时器中断函数中自增,当超过65535之后,就一定会溢出变成了0.
此时就会出现一直执行该任务,而不会按照定时周期来。
我举例说明如下:
假如当g_task_ticks =65530, g_task_ticks>timeout时,会执行一次该任务,同时timeout会重新赋值成65530+500=494,那么下一个轮回,g_task_ticks=65531 > 494,任务又会被执行,这个时候就异常了,无法做到定时500个心跳来执行一次任务。
实际我仿真效果如下,可以看到此bug现象,在g_task_ticks快要溢出之前的那一段,任务被一直执行,根本不会按照预期设定的定时时间来。
解决方案:当前获取的g_task_ticks减去上次执行该任务时的backupTicks值,如果大于定时时间timeout,那么就执行该任务。
仿真结果如下:
4000520066 欢迎批评指正
Copyright © 1996-2019 SINA Corporation
All Rights Reserved 新浪公司 版权所有
All Rights Reserved 新浪公司 版权所有