c - C嵌入式将float转换为int
问题描述
您好,我正在尝试通过 arduino 上的中断来工作一个简单的 5hz。我想计算在切换 LED 之前必须发生多少次定时器溢出。但是由于某种我不明白的原因,我无法正确计算该值。这是我的代码:
#define OF_FREQUENCY F_CPU / 256.0
#define SECONDS_PER_OF 1 / OF_FREQUENCY
#define F_LEDS 5
#define LED_CYCLE_TIME (1 / F_LEDS) / 2
#define OVERFLOWS_PER_CYCLE (unsigned int)(LED_CYCLE_TIME / SECONDS_PER_OF)
OVERFLOW_PER_CYCLE 总是计算为 0,但它应该是 6250,因为我的 F_CPU 是 16E6。我想在最后有一个 unsigned int 。
解决方案
LED_CYCLE_TIME
为零,因为您不使用浮点除法((1 / F_LEDS) / 2
is (1 / 5) / 2
, but 1 / 5 == 0
, so it's 0
)。
只需使用双打:#define LED_CYCLE_TIME (0.5 / F_LEDS)
而且您还需要一些额外的括号围绕您的定义,因为当前OVERFLOWS_PER_CYCLE
定义为(unsigned int)((1 / F_LEDS) / 2 / 1 / F_CPU / 256.0)
,它从左到右而不是按照正确的顺序进行除法。
所以你更正的代码:
#define OF_FREQUENCY (F_CPU / 256.0)
#define SECONDS_PER_OF (1 / OF_FREQUENCY)
#define F_LEDS 5
#define LED_CYCLE_TIME (0.5 / F_LEDS)
#define OVERFLOWS_PER_CYCLE (unsigned int)(LED_CYCLE_TIME / SECONDS_PER_OF)
推荐阅读
- javascript - react-dnd 多个元素
- python - 命令“pip install goeey”遇到问题
- python - 如何使用 Python 3 下载和静默安装具有给定 URL 的 .exe 文件
- azure - 递归列出 Azure 资源组中的所有资源标记
- reactjs - 在嵌套的 setTimeout 回调中更新 React 状态
- python - 如何从仅包含某些值的数据框中提取行
- python - PyTorch:将除前k之外的向量的所有元素归零?
- android - 如何在android上的edittext上设置最大长度消息
- java - 如何在不使用 Java 库中的 CyclicBarrier 的情况下制作自己的 CyclicBarrier
- c# - SqlDataReader 只能检查(Null 或非 null 值)之一