void T0() { 简单提醒一下,当某一时间点任务最繁重时,运行时间可能会超出你的基本时钟,这时直接赋1就不合适了。不过你的100ms似乎一般情况下不成问题。 flag_100ms = 1; } 2,在主程序中做一个函数,用来更新时间 void Updata(void) { if (flag_100ms) { 注意:如果在这里来了T0中断,呵呵,那么这个中断就白来了。 所以不管是字节型还是整型都可能出问题,只是整型的几率更高而已。 flag_100ms = 0; ms_counter++; //其他时间更新 } }
这样细节上楼主说的不错,但从宏观上,从另外一个角度来看,这个方法是非常好的。这也是俺一直提的"时间模糊性"。 就上面问题举个例子,中断丢失(重复触发了flag_100ms),只相当触发时刻被延后了100ms,这个100ms时间绝大多数的情况下是允许的:比如闪烁LED、报警时间、控制IO的延时。从这些情况来说,时间控制具有模糊性,不需要精确的时刻控制。 和WINDOW的TIMER事件触发一模一样,它是可以重复触发或丢失个别的,但总体时间可以大概保证。
|