中级会员
 
- 积分
- 277
- 金钱
- 277
- 注册时间
- 2013-9-24
- 在线时间
- 50 小时
|
发表于 2019-7-11 16:07:36
|
显示全部楼层
楼主的代码,感觉有bug,虽然bug很难测出来。
/* SysTick中断服务函数 */
void SysTick_Handler(void)
{
nTicks++;
if(!(nTicks%300)) Flag300ms=1;
if (( nTicks % TICKS_INTERVAL) == 0 )
{
Key_Scan_Stick(); //每5ms扫键一次
if ( nTicks % (TICKS_INTERVAL*12) == 0 )
GetAndSaveKey();//每60ms分析一次键值
}
}
nTicks变量到最大末尾的话,就无法是300或者5的倍数,平常300ms的间隔,到末尾可能是300+x的ms间隔。因为nTicks是32位的,大概到4294967296/1000/3600/24 = 49.71026962962962962962962962963天,到第49.71天的时候会出检测间隔不是5ms的情况。因为你任由nTicks自己加了,没做处理。虽不影响,但须严谨。
|
|