From e39d562a4d1e915a08d03acce8e48db22c900727 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 15 Feb 2021 12:18:19 +0100 Subject: [PATCH] decrease size of minute buffer --- cube/User/Inc/sinkStruct.h | 9 ++------- cube/User/Src/counter.c | 24 +++++++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/cube/User/Inc/sinkStruct.h b/cube/User/Inc/sinkStruct.h index afe10df..f9a8207 100644 --- a/cube/User/Inc/sinkStruct.h +++ b/cube/User/Inc/sinkStruct.h @@ -5,17 +5,12 @@ #include #include -typedef struct __attribute__((__packed__)) { - uint64_t timestamp; - uint32_t frequency; -} t_event; - #define SECONDS_PER_MINUTE 60 typedef struct __attribute__((__packed__)) { char deviceId[sizeof(((t_configBlock*)0)->deviceId)]; uint8_t hash[SHA256_BLOCK_SIZE]; - uint8_t done; - t_event events[SECONDS_PER_MINUTE]; + uint64_t timestamp; + uint32_t frequency[SECONDS_PER_MINUTE]; } t_minuteStruct; typedef union { diff --git a/cube/User/Src/counter.c b/cube/User/Src/counter.c index 8ef14d5..f42db7a 100644 --- a/cube/User/Src/counter.c +++ b/cube/User/Src/counter.c @@ -30,7 +30,8 @@ static t_seconds *seconds; #define NUM_OF_MINUTE_BUFFERS 2 t_minuteBuffer minuteBuffers[NUM_OF_MINUTE_BUFFERS]; -uint8_t activeMinuteBuffer = 0; +bool minuteBufferReady[NUM_OF_MINUTE_BUFFERS]; +uint8_t activeMinuteBuffer; static t_configBlock *config; @@ -66,7 +67,7 @@ void counterMinuteTick(void *handle) { for (uint8_t minuteBufferIdx = 0; minuteBufferIdx < NUM_OF_MINUTE_BUFFERS; minuteBufferIdx++) { t_minuteBuffer *minuteBuffer = &(minuteBuffers[minuteBufferIdx]); - if (minuteBuffer->s.done == 1) { + if (minuteBufferReady[minuteBufferIdx] == 1) { coloredMsg(LOG_BLUE, "cmt, buffer %d is done, handle it", minuteBufferIdx); memset(minuteBuffer->s.deviceId, 0, sizeof(minuteBuffer->s.deviceId)); strcpy(minuteBuffer->s.deviceId, config->deviceId); @@ -116,7 +117,7 @@ void counterMinuteTick(void *handle) { int8_t res = counterSendMinuteBuffer(minuteBuffer); if (res == 1) { coloredMsg(LOG_BLUE, "cmt, successfully sent"); - minuteBuffer->s.done = 0; + minuteBufferReady[minuteBufferIdx] = false; } else { coloredMsg(LOG_BLUE, "cmt, not successfully sent, try again"); schAdd(counterMinuteTick, NULL, 1000, 0); @@ -145,16 +146,18 @@ void counterSecondTick(void *handle) { if (! seconds->valid) { coloredMsg(LOG_RED, "cst, time is not yet valid"); - } else if (minuteBuffers[activeMinuteBuffer].s.done == 1) { + } else if (minuteBufferReady[activeMinuteBuffer]) { coloredMsg(LOG_RED, "cst, minute buffer overrun"); } else { - minuteBuffers[activeMinuteBuffer].s.events[bufferIdx].timestamp = seconds->seconds; - minuteBuffers[activeMinuteBuffer].s.events[bufferIdx].frequency = freq; + if (bufferIdx == 0) { + minuteBuffers[activeMinuteBuffer].s.timestamp = seconds->seconds; + } + minuteBuffers[activeMinuteBuffer].s.frequency[bufferIdx] = freq; coloredMsg(LOG_GREEN, "cst, added to buffer %d, slot %d", activeMinuteBuffer, bufferIdx); bufferIdx += 1; if (bufferIdx == SECONDS_PER_MINUTE) { coloredMsg(LOG_GREEN, "cst, buffer %d is done", activeMinuteBuffer); - minuteBuffers[activeMinuteBuffer].s.done = 1; + minuteBufferReady[activeMinuteBuffer] = true; activeMinuteBuffer += 1; bufferIdx = 0; if (activeMinuteBuffer >= NUM_OF_MINUTE_BUFFERS) { @@ -188,8 +191,11 @@ void mainsCntsInputCaptureCallback(TIM_HandleTypeDef *htim) { void counterInit() { seconds = wizGetSeconds(); - minuteBuffers[0].s.done = 0; - minuteBuffers[1].s.done = 0; + for (uint8_t i = 0; i < NUM_OF_MINUTE_BUFFERS; i++) { + minuteBufferReady[i] = false; + } + activeMinuteBuffer = 0; + config = getConfig();