从时钟“freq”确定“ticks”同时避免微控制器上的 C 溢出的正确方法是什么?

问题描述 投票:0回答:1

C 中整数相乘和除法以避免溢出的正确方法是什么?我想确定以

ticks
(以 Hz 为单位)运行的计时器需要多少
freq
才能产生
delay
(以毫秒为单位)。这应该是
ticks = freq * delay / 1000

但是,那条线对我来说看起来很危险。如果我们写

(freq * delay) / 1000
,我们就会面临溢出的风险。如果我们写
freq * (delay / 1000)
,我们就会陷入浮点数——这是不必要的并且容易出错,尤其是。在微控制器上。

正确的做法是什么?

c floating-point embedded real-time integer-overflow
1个回答
0
投票

简单地想一下您可以延迟多长时间。

如果使用 32 位无符号数(延迟的负数不太实用,因为我不知道如何产生负延迟,这会让我们回到过去)。 uint32_t 的最大值为 4,294,967,295,足以满足超过 1 小时的延迟。

如果您需要更多,请在计算中使用更大的无符号整数:

((uint64_t)freq * delay) / 1000

© www.soinside.com 2019 - 2024. All rights reserved.