本博文是原创博文,转载请注明出处
我研究的代码是蓝牙4.0,协议栈版本是1.3.2
问题来源是 `
// (MAXCALCTICKS * 5) + (max remainder) must be <= (uint16 max),
// so: (13105 * 5) + 7 <= 65535
#define MAXCALCTICKS ((uint16)(13105))
从上面可以看到对于MAXCALCTICKS的定义是为了限制ticks625us这个微秒级别的变量转化成ms时不溢出;他这里就有个默认 max remainder 变量认为最大是7;也就是确定这个MAXCALCTICKS宏是以认为这个余数最大是7。不会超过7,但是我认为它在下面函数处理中存储余数变量remUsTicks就可以超过7,虽然在us转ms时候虽然用了while循环但是任然有溢出的可能。
这是在osalTimeUpdate函数里对时间从us转到ms的转化代码
while ( ticks625us > MAXCALCTICKS ) //主要为了数据过大转换为ms是溢出了。MAXCALCTICKS >13105就会溢出从零开始,对时间来说是不行的
{
ticks625us -= MAXCALCTICKS;
elapsedMSec += MAXCA