【发布时间】:2017-11-27 05:06:21
【问题描述】:
这是我的问题,我需要计算一个毫秒内有多少个时钟周期,而我们的 pll 在 TM4C123 上等待。然而,我的双精度值显示为零,这使我的其他值不正确。任何帮助将不胜感激。
#include <stdio.h>
int main()
{
float ms_cycled;
float us_cycled;
int ms_cycle;
int us_cycle;
unsigned long MHz = 50;
double TPC = 1/(MHz*10000000); //calculate time per clock cycle
//calculate cycles for ms
ms_cycled = 0.001/TPC;
ms_cycle = ms_cycled;
//calculate cycles for us
us_cycled = 0.000001/TPC;
us_cycle = us_cycled;
printf("TPC = %.16f \n", TPC);
printf("ms_cycled = %f \n", ms_cycled);
printf("us_cycled = %f \n", us_cycled);
printf("ms_cycle = %i \n", ms_cycle);
printf("us_cycle = %i \n", us_cycle);
return 0;
}
我得到的输出是:
TPC = 0.0000000000000000
ms_cycled = inf
us_cycled = inf
ms_cycle = -2147483648
us_cycle = -2147483648
【问题讨论】:
-
这是我见过的计算每毫秒时钟的最低效的方法。如果你有
MHz,你就有每秒时钟。每毫秒的时钟数只是它的 1/1000 倍。每 µs 的时钟也是如此,这又是 1/1000 的因子。ms_cycle = MHZ * 1000; us_cycle = MHz。当您将 MHz 乘以 10^7 而不是 10^6 时,TPC的值会减少 10 倍。
标签: c floating-point integer