ref: 92084cd0d35baae2154e9d8ea64dd50cf6152dd4
parent: 62bbc39e91d7f624ecf806d8b1b462c28ba206d5
author: Olav Sørensen <[email protected]>
date: Sat Apr 13 10:57:54 EDT 2024
More HPC timer edits
--- a/src/ft2_hpc.c
+++ b/src/ft2_hpc.c
@@ -2,7 +2,7 @@
** Hardware Performance Counter delay routines by 8bitbubsy.
**
** These are by no means well written, and are made for specific
-** usage cases. There may be soome hackish design choices here.
+** usage cases. There may be some hackish design choices here.
**
** NOTE: hpc_SetDurationInHz() has quite a bit of overhead, so it's
** recommended to have one hpcFreq_t counter for each delay value,
@@ -100,15 +100,15 @@
return ((uint64_t)resultHi << 32) | resultLo;
}
-void hpc_SetDurationInHz(hpc_t *hpc, double dHz) // dHz = max 8191.999inf Hz (0.12ms)
+void hpc_SetDurationInHz(hpc_t *hpc, double dHz) // dHz = max 4095.999inf Hz (0.24ms)
{
#define BITS_IN_UINT32 32
- /* 19 = Good compensation between fraction bits and max integer size.
- ** Non-realtime OSes probably can't do a thread delay with such a
- ** high precision (0.12ms) anyway.
+ /* 20 = Good compensation between fraction bits and max integer size.
+ ** Most non-realtime OSes probably can't do a thread delay with such a
+ ** high precision ( 0.24ms, 1000/(2^(32-20)-1) ) anyway.
*/
-#define INPUT_FRAC_BITS 19
+#define INPUT_FRAC_BITS 20
#define INPUT_FRAC_SCALE (1UL << INPUT_FRAC_BITS)
#define INPUT_INT_MAX ((1UL << (BITS_IN_UINT32-INPUT_FRAC_BITS))-1)
@@ -125,7 +125,7 @@
hpc->resetFrame = ((uint64_t)fpHz * (60 * 30)) / INPUT_FRAC_SCALE; // reset counters every half an hour
}
-void hpc_SetDurationInMs(hpc_t *hpc, double dMs) // dMs = minimum 0.12208521548 ms
+void hpc_SetDurationInMs(hpc_t *hpc, double dMs) // dMs = minimum 0.2442002442 ms
{
hpc_SetDurationInHz(hpc, 1000.0 / dMs);
}
--- a/src/ft2_hpc.h
+++ b/src/ft2_hpc.h
@@ -20,8 +20,8 @@
extern hpcFreq_t hpcFreq;
void hpc_Init(void);
-void hpc_SetDurationInHz(hpc_t *hpc, double dHz); // dHz = max 8191.999inf Hz (0.12ms)
-void hpc_SetDurationInMs(hpc_t *hpc, double dMs); // dMs = minimum 0.12208521548 ms
+void hpc_SetDurationInHz(hpc_t *hpc, double dHz); // dHz = max 4095.999inf Hz (0.24ms)
+void hpc_SetDurationInMs(hpc_t *hpc, double dMs); // dMs = minimum 0.2442002442 ms
void hpc_ResetCounters(hpc_t *hpc);
void hpc_Wait(hpc_t *hpc);