我在这一行得到除以零的错误:
if (tim2_st_ovf < T2_PREK_250)
这些值的定义如下:
volatile uint8_t tim2_st_ovf = 0;
#define T2_PREK_250 ((250 * (F_CPU / 1000)) / ((UINT8_MAX + 1) * 1024))
#define F_CPU 16000000UL
和UINT8_MAX
等于255。
我为什么得到这个?我在计算器上计算了几次,现在大约是15。另外,如果我将1024更改为1023,则不会显示任何错误。
((UINT8_MAX + 1) * 1024)
可能变为0,因为UINT8_MAX + 1
通常为256,并且256 * 1024
取0为模2 16。因此,如果sizeof(int) == 2
按您的架构,则得到0。
在具有GCC的典型现代台式机体系结构上,sizeof(int) == 4
您将无法获得0的除法。
要修复它,请替换1024
为1024UL
。这将起作用,因为unsigned long
可以保证达到4294967295。(感谢Pascal Cuoq对其进行了解释。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句