Changed CAN dynamic buffer to static one

This commit is contained in:
Yury Shuvakin
2023-04-02 15:54:33 +03:00
parent 389d3d23b8
commit 3acaa773de
2 changed files with 33 additions and 37 deletions

View File

@@ -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)

View File

@@ -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);
}