gcc:除以零

用户名

在这一行得到除以零的错误:

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的除法。

要修复它,请替换10241024UL这将起作用,因为unsigned long可以保证达到4294967295。(感谢Pascal Cuoq对其进行了解释。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章