From 3acaa773de2e1aa2d788073f255bdec7cb695aec Mon Sep 17 00:00:00 2001 From: Yury Shuvakin Date: Sun, 2 Apr 2023 15:54:33 +0300 Subject: [PATCH] Changed CAN dynamic buffer to static one --- firmware/Core/Inc/generalDefines.h | 4 +- firmware/Core/Src/main.c | 66 ++++++++++++++---------------- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/firmware/Core/Inc/generalDefines.h b/firmware/Core/Inc/generalDefines.h index 5ce1192..3db57eb 100644 --- a/firmware/Core/Inc/generalDefines.h +++ b/firmware/Core/Inc/generalDefines.h @@ -21,8 +21,8 @@ //#define FW_REAL_VERSION "V1.3" #define FW_VERSION_MAJOR 1 -#define FW_VERSION_MINOR 4 -#define FW_REAL_VERSION "V1.4" +#define FW_VERSION_MINOR 5 +#define FW_REAL_VERSION "V1.5" // UUID #define STM32_UUID ((uint32_t*)0x1FFFF7E8) diff --git a/firmware/Core/Src/main.c b/firmware/Core/Src/main.c index 2c2003c..577a967 100644 --- a/firmware/Core/Src/main.c +++ b/firmware/Core/Src/main.c @@ -282,8 +282,8 @@ uint64_t shunt_charging_contractor_clock = 0; uint64_t can1_transmit_clock = 0; uint64_t can2_transmit_clock = 0; -uint8_t* can1_transmit_queue = 0; -uint8_t* can2_transmit_queue = 0; +uint8_t can1_transmit_queue[500]; +uint8_t can2_transmit_queue[100]; uint16_t can1_transmit_queue_size = 0; uint16_t can2_transmit_queue_size = 0; @@ -315,8 +315,8 @@ void Save_data_to_Backup(); void Restore_shutdown_data(); void updateLimitsFromMem(); -void addCanPacketToQueue(uint16_t id, uint8_t* data, uint8_t** queue, uint16_t* queueSize); -void transmitCanPacketFromQueue(uint8_t** queue, uint16_t* queueSize, CAN_HandleTypeDef* hcan); +void addCanPacketToQueue(uint16_t id, uint8_t* data, uint8_t* queue, uint16_t* queueSize); +void transmitCanPacketFromQueue(uint8_t* queue, uint16_t* queueSize, CAN_HandleTypeDef* hcan); void modem_init(); @@ -383,19 +383,17 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) } else if (htim->Instance == TIM3) { - if (!(TIM3_Clock % 10)){ - CAN_TransmitRTR(0x500, 8, &hcan2); + if (TIM3_Clock % 3 == 0) + { + //transmitCanPacketFromQueue(can1_transmit_queue, &can1_transmit_queue_size, &hcan1); } - - - if (TIM3_Clock % 2) + else if (TIM3_Clock % 3 == 1) + { + //transmitCanPacketFromQueue(can2_transmit_queue, &can2_transmit_queue_size, &hcan2); + } + else if (TIM3_Clock % 10 == 0) { -// transmitCanPacketFromQueue(&can1_transmit_queue, &can1_transmit_queue_size, &hcan1); - } - if (!(TIM3_Clock % 3)) - { - CAN_Transmit(0x501, TestData, 8, &hcan2); -// transmitCanPacketFromQueue(&can2_transmit_queue, &can2_transmit_queue_size, &hcan2); + CAN_TransmitRTR(0x500, 8, &hcan2); } TIM3_Clock++; @@ -1187,7 +1185,7 @@ void transmitCan1Packet() int getIndexBySoc() { const float soc = packState.SoC; - if (soc == 0) + if (soc <= 0) { return 0; } @@ -1227,7 +1225,7 @@ int getIndexBySoc() { return 9; } - else if (soc <= 100 && soc > 95) + else if (soc > 95) { return 10; } @@ -1238,7 +1236,7 @@ int getIndexBySoc() int getIndexByTemperature() { const float temp = packState.tempBatteryAverage; - if (temp > 0) + if (temp < 0) { return 0; } @@ -1292,28 +1290,28 @@ void transmitCan2Packet() // sending common current and voltage command memcpy(buffer, &packState.packCurrent, sizeof(packState.packCurrent)); memcpy(buffer + 4, &packState.packVoltage, sizeof(packState.packVoltage)); - addCanPacketToQueue(0x501, buffer, &can2_transmit_queue, &can2_transmit_queue_size); + addCanPacketToQueue(0x501, buffer, can2_transmit_queue, &can2_transmit_queue_size); // sending charge voltages (start, end) command const float startVoltage = generalConfig->cellHardUnderVoltage * generalConfig->noOfCellsSeries; const float endVoltage = generalConfig->cellHardOverVoltage * generalConfig->noOfCellsSeries; memcpy(buffer, &startVoltage, sizeof(startVoltage)); memcpy(buffer + 4, &endVoltage, sizeof(endVoltage)); - addCanPacketToQueue(0x502, buffer, &can2_transmit_queue, &can2_transmit_queue_size); + addCanPacketToQueue(0x502, buffer, can2_transmit_queue, &can2_transmit_queue_size); // sending fault voltages (under, over) command const float startFaultVoltage = generalConfig->cellLCSoftUnderVoltage * generalConfig->noOfCellsSeries; const float endFaultVoltage = generalConfig->cellSoftOverVoltage * generalConfig->noOfCellsSeries; memcpy(buffer, &startFaultVoltage, sizeof(startFaultVoltage)); memcpy(buffer + 4, &endFaultVoltage, sizeof(endFaultVoltage)); - addCanPacketToQueue(0x503, buffer, &can2_transmit_queue, &can2_transmit_queue_size); + addCanPacketToQueue(0x503, buffer, can2_transmit_queue, &can2_transmit_queue_size); // sending charge start current float chargeStartingCurrent = 15; // TODO move to generalConfig - u32_t chargeStartingCurrentInterval = 20; // in seconds TODO move to generalConfig + uint32_t chargeStartingCurrentInterval = 20; // in seconds TODO move to generalConfig memcpy(buffer, &chargeStartingCurrent, sizeof(chargeStartingCurrent)); memcpy(buffer + 4, &chargeStartingCurrentInterval, sizeof(chargeStartingCurrentInterval)); - addCanPacketToQueue(0x504, buffer, &can2_transmit_queue, &can2_transmit_queue_size); + addCanPacketToQueue(0x504, buffer, can2_transmit_queue, &can2_transmit_queue_size); // sending table current and end-of-charge current command const int socIndex = getIndexBySoc(); @@ -1330,7 +1328,7 @@ void transmitCan2Packet() float chargeEndingCurrent = 5; // TODO move to generalConfig memcpy(buffer + 0, &tableCurrent, sizeof(tableCurrent)); memcpy(buffer + 4, &chargeEndingCurrent, sizeof(chargeEndingCurrent)); - addCanPacketToQueue(0x505, buffer, &can2_transmit_queue, &can2_transmit_queue_size); + addCanPacketToQueue(0x505, buffer, can2_transmit_queue, &can2_transmit_queue_size); // sending charge permission, charge ending, charge/discharge state command const uint8_t chargeAllowed = packState.chargeAllowed ? 0xFF : 0x00; @@ -1340,20 +1338,18 @@ void transmitCan2Packet() memcpy(buffer + 0, &chargeAllowed, sizeof(chargeAllowed)); memcpy(buffer + 1, &chargeEnding, sizeof(chargeEnding)); memcpy(buffer + 2, &chargeSwitchState, sizeof(chargeSwitchState)); - addCanPacketToQueue(0x506, buffer, &can2_transmit_queue, &can2_transmit_queue_size); + addCanPacketToQueue(0x506, buffer, can2_transmit_queue, &can2_transmit_queue_size); } -void addCanPacketToQueue(uint16_t id, uint8_t* data, uint8_t** queue, uint16_t* queueSize) +void addCanPacketToQueue(uint16_t id, uint8_t* data, uint8_t* queue, uint16_t* queueSize) { - return; - *queueSize += 10; - *queue = (uint8_t*)realloc(*queue, *queueSize); + memcpy(queue + *queueSize, &id, 2); + memcpy(queue + *queueSize + 2, data, 8); - memcpy(*queue + *queueSize - 10, &id, 2); - memcpy(*queue + *queueSize - 8, data, 8); + *queueSize += 10; } -void transmitCanPacketFromQueue(uint8_t** queue, uint16_t* queueSize, CAN_HandleTypeDef* hcan) +void transmitCanPacketFromQueue(uint8_t* queue, uint16_t* queueSize, CAN_HandleTypeDef* hcan) { if (*queueSize < 10) return; @@ -1361,11 +1357,11 @@ void transmitCanPacketFromQueue(uint8_t** queue, uint16_t* queueSize, CAN_Handle uint16_t id = 0; uint8_t data[8] = {}; - memcpy(&id, *queue + *queueSize - 10, 2); - memcpy(data, *queue + *queueSize - 8, 8); + memcpy(&id, queue, 2); + memcpy(data, queue + 2, 8); *queueSize -= 10; - *queue = (uint8_t*)realloc(*queue, *queueSize); + memmove(queue, queue + 10, *queueSize); CAN_Transmit(id, data, 8, hcan); }