Das ist mein Problem, ich muss berechnen, wie viele Taktzyklen in einer ms sind und uns für meine PLL wartet auf ein TM4C123. Die Werte erscheinen jedoch als Null auf meinem Doppel, was meine anderen Werte falsch macht. Jede Hilfe würde sehr geschätzt werden.Double speichert Nummer nicht in C (ist die Nummer zu klein)
#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;
}
Die Ausgänge I erhalten sind:
TPC = 0.0000000000000000
ms_cycled = inf
us_cycled = inf
ms_cycle = -2147483648
us_cycle = -2147483648
Das ist der ineffizienteste Weg, um Uhren pro ms zu berechnen, die ich je gesehen habe. Wenn Sie "MHz" haben, haben Sie Uhren pro Sekunde. Und Uhren pro ms ist einfach ein Faktor 1/1000 davon. Gleiches gilt für die Uhren pro μs, was wiederum ein Faktor von 1/1000 ist. 'ms_cycle = MHZ * 1000; us_cycle = MHz'. Ihr Wert für "TPC" ist um den Faktor 10 verringert, wenn Sie MHz mit 10^7 anstelle von 10^6 multiplizieren. – Gerhardh