gpt4 book ai didi

c - 海合会 : division by zero

转载 作者:太空狗 更新时间:2023-10-29 14:58:53 26 4
gpt4 key购买 nike

我在这一行收到被零除错误:

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 模 216。因此,如果 sizeof(int) == 2 在您的架构中,那么您将得到 0。

在带有 GCC 的典型现代桌面架构上,sizeof(int) == 4,您不会得到除以 0。

要修复它,请将 1024 替换为 1024UL。这行得通,因为 unsigned long 保证达到 4294967295。(感谢 Pascal Cuoq 的解释。)

关于c - 海合会 : division by zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com