寄存器取值,提取每个周期的计数偏差
uint_32 ulast,unow;
int_32 err;
err = unow - ulast;
ulast = unow;
假如ulast = 0xFFFFFFFF,unow = 0x00000001;那么err =unow - ulast = 0x00000001 - 0xFFFFFFFF;
在64位系统中0x00000001 减去 0xFFFFFFFF 等于 0xFFFFFFFF00000002。
在32位系统中0x00000001 减去 0xFFFFFFFF 等于 0x00000002。err = 2。
假如ulast = 0x00000001,unow = 0xFFFFFFFF;那么err =unow - ulast = 0xFFFFFFFF- 0x00000001 ;
在64位系统中0xFFFFFFFF 减去 0x00000001等于 0x00000000FFFFFFFE。
在32位系统中0xFFFFFFFF 减去 0x00000001等于 0xFFFFFFFE。err = 0xFFFFFFFE。由于err是32位有符号整数,所以err = -2。
结论
所以在32位嵌入式系统中可以广泛使用该方法计数偏差值,不需要考虑数据溢出。