From b641e0757fa2b69157dbcedb9f791da661498c11 Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sat, 2 Mar 2024 05:14:50 -0600 Subject: [PATCH 1/2] Update MRAA timer functions - Found MRAA timer functions not working properly - Copy timing functions from SPIDEV --- utility/MRAA/compatibility.cpp | 29 +++++++++++++---------------- utility/MRAA/compatibility.h | 3 ++- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/utility/MRAA/compatibility.cpp b/utility/MRAA/compatibility.cpp index 8593fbd0b..47723681d 100644 --- a/utility/MRAA/compatibility.cpp +++ b/utility/MRAA/compatibility.cpp @@ -1,7 +1,6 @@ #include "compatibility.h" +#include #include -//static struct timeval start, end; -//static long mtime, seconds, useconds; /**********************************************************************/ /** @@ -10,33 +9,31 @@ */ void __msleep(int milisec) { - struct timespec req = {0}; - req.tv_sec = 0; - req.tv_nsec = milisec * 1000000L; - nanosleep(&req, (struct timespec*)NULL); - //usleep(milisec*1000); + struct timespec req; // = {0}; + req.tv_sec = (time_t)milisec / 1000; + req.tv_nsec = (milisec % 1000) * 1000000L; + clock_nanosleep(CLOCK_REALTIME, 0, &req, NULL); } -void __usleep(int milisec) +void __usleep(int microsec) { - struct timespec req = {0}; - req.tv_sec = 0; - req.tv_nsec = milisec * 1000L; - nanosleep(&req, (struct timespec*)NULL); - //usleep(milisec); + struct timespec req; // = {0}; + req.tv_sec = (time_t)microsec / 1000000; + req.tv_nsec = (microsec / 1000000) * 1000; + clock_nanosleep(CLOCK_REALTIME, 0, &req, NULL); } -auto start = std::chrono::steady_clock::now(); /** * This function is added in order to simulate arduino millis() function */ void __start_timer() { - //gettimeofday(&start, NULL); } -long __millis() +auto start = std::chrono::steady_clock::now(); + +uint32_t __millis() { auto end = std::chrono::steady_clock::now(); diff --git a/utility/MRAA/compatibility.h b/utility/MRAA/compatibility.h index ffc6953fb..8e55ae8b2 100644 --- a/utility/MRAA/compatibility.h +++ b/utility/MRAA/compatibility.h @@ -15,6 +15,7 @@ extern "C" { #include #include #include +#include void __msleep(int milisec); @@ -22,7 +23,7 @@ void __usleep(int milisec); void __start_timer(); -long __millis(); +uint32_t __millis(); #ifdef __cplusplus } From 3458daf2f7c831b68f8dec684283ace157b869d0 Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sat, 2 Mar 2024 05:22:07 -0600 Subject: [PATCH 2/2] Remove unneeded line (formatting) --- utility/MRAA/compatibility.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/utility/MRAA/compatibility.cpp b/utility/MRAA/compatibility.cpp index 47723681d..efed1e7b0 100644 --- a/utility/MRAA/compatibility.cpp +++ b/utility/MRAA/compatibility.cpp @@ -23,7 +23,6 @@ void __usleep(int microsec) clock_nanosleep(CLOCK_REALTIME, 0, &req, NULL); } - /** * This function is added in order to simulate arduino millis() function */