From 43598fb6dfbafce549e24d7c8c837e899493719e Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Mon, 21 Jul 2014 14:45:14 +0200 Subject: [PATCH 1/2] Optimization: removed usage of gettime() where possible --- radio/src/gui/view_main.cpp | 4 +--- radio/src/lcd.h | 2 +- radio/src/lcd_common.cpp | 9 +++------ radio/src/mixer.cpp | 6 +----- radio/src/rtc.cpp | 3 --- radio/src/rtc.h | 3 +++ 6 files changed, 9 insertions(+), 18 deletions(-) diff --git a/radio/src/gui/view_main.cpp b/radio/src/gui/view_main.cpp index 68d06566e..c91029d45 100644 --- a/radio/src/gui/view_main.cpp +++ b/radio/src/gui/view_main.cpp @@ -316,9 +316,7 @@ void displayTopBar() LCD_ICON(BAR_VOLUME_X, BAR_Y, ICON_SPEAKER3); /* RTC time */ - struct gtm t; - gettime(&t); - putsTime(BAR_TIME_X, BAR_Y+1, t, LEFT|TIMEBLINK); + putsRtcTime(BAR_TIME_X, BAR_Y+1, LEFT|TIMEBLINK); /* The background */ lcd_filled_rect(BAR_X, BAR_Y, BAR_W, BAR_H, SOLID, FILL_WHITE|GREY(12)|ROUND); diff --git a/radio/src/lcd.h b/radio/src/lcd.h index 4ad6ee64b..4c9156c68 100644 --- a/radio/src/lcd.h +++ b/radio/src/lcd.h @@ -215,7 +215,7 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, #define putstime_t int16_t #endif -void putsTime(xcoord_t x, uint8_t y, struct gtm t, LcdFlags att); +void putsRtcTime(xcoord_t x, uint8_t y, LcdFlags att); void putsTimer(xcoord_t x, uint8_t y, putstime_t tme, LcdFlags att, LcdFlags att2); #define SOLID 0xff diff --git a/radio/src/lcd_common.cpp b/radio/src/lcd_common.cpp index c3b4d3443..e30428e67 100644 --- a/radio/src/lcd_common.cpp +++ b/radio/src/lcd_common.cpp @@ -602,9 +602,9 @@ void lcdDrawTelemetryTopBar() #endif #if defined(CPUARM) && defined(RTCLOCK) -void putsTime(xcoord_t x, uint8_t y, struct gtm t, LcdFlags att) +void putsRtcTime(xcoord_t x, uint8_t y, LcdFlags att) { - putsTimer(x, y, t.tm_hour*60+t.tm_min, att, att); + putsTimer(x, y, getValue(MIXSRC_FIRST_TELEM-1+TELEM_TX_TIME), att, att); } #endif @@ -928,10 +928,7 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, #if defined(CPUARM) && defined(RTCLOCK) case TELEM_TX_TIME-1: { - gtm t; - t.tm_hour = val / 60; - t.tm_min = val % 60; - putsTime(x, y, t, att); + putsRtcTime(x, y, att); break; } #endif diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index b805932a2..dd537477e 100755 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -326,11 +326,7 @@ getvalue_t getValue(uint8_t i) else if (i==MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE) return g_vbat100mV; #if defined(CPUARM) && defined(RTCLOCK) - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_TX_TIME) { - struct gtm t; - gettime(&t); - return t.tm_hour*60 + t.tm_min; - } + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_TX_TIME) return (g_rtcTime % SECS_PER_DAY) / 60; // number of minutes from midnight #endif else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_TIMER2) return timersStates[i-MIXSRC_FIRST_TELEM+1-TELEM_TIMER1].val; #if defined(FRSKY) diff --git a/radio/src/rtc.cpp b/radio/src/rtc.cpp index a13d9696e..0cf0e01f2 100644 --- a/radio/src/rtc.cpp +++ b/radio/src/rtc.cpp @@ -107,9 +107,6 @@ verify (twos_complement_arithmetic, TYPE_TWOS_COMPLEMENT (int)); #define TM_YEAR_BASE 1900 verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0); -#define SECS_PER_HOUR 3600ul -#define SECS_PER_DAY 86400ul - /* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */ static inline int leapyear (long int year) diff --git a/radio/src/rtc.h b/radio/src/rtc.h index 7a2a216e6..dfefb4b84 100644 --- a/radio/src/rtc.h +++ b/radio/src/rtc.h @@ -39,6 +39,9 @@ #include +#define SECS_PER_HOUR 3600ul +#define SECS_PER_DAY 86400ul + typedef long int gtime_t; struct gtm From ee2a23c19da18b4fe5537c5c61598febb9472350 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Thu, 31 Jul 2014 21:32:31 +0200 Subject: [PATCH 2/2] Optimization: less gettime() calls --- radio/src/logs.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index 8dbfccbc6..5326f506e 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -190,12 +190,19 @@ void writeLogs() } #if defined(RTCLOCK) - struct gtm utm; - gettime(&utm); - f_printf(&g_oLogFile, "%4d-%02d-%02d,%02d:%02d:%02d.%02d0,", utm.tm_year+1900, utm.tm_mon+1, utm.tm_mday, utm.tm_hour, utm.tm_min, utm.tm_sec, g_ms100); -#else + { + static struct gtm utm; + static gtime_t lastRtcTime = 0; + if ( g_rtcTime != lastRtcTime ) + { + lastRtcTime = g_rtcTime; + gettime(&utm); + } + f_printf(&g_oLogFile, "%4d-%02d-%02d,%02d:%02d:%02d.%02d0,", utm.tm_year+1900, utm.tm_mon+1, utm.tm_mday, utm.tm_hour, utm.tm_min, utm.tm_sec, g_ms100); + } +#else // #if defined(RTCLOCK) f_printf(&g_oLogFile, "%d,", tmr10ms); -#endif +#endif // #if defined(RTCLOCK) #if defined(FRSKY) #if defined(CPUARM)