EEPROM Write Function Call
ADDRESS INDEX
#define SOC_ADD #define SOC_INDEX 0
0x0000
#define SOH_INDEX 1
#define SOH_ADD
0x0001 #define MAX_CELL_VOLT_LIMIT_INDEX 2
#define MAX_CELL_VOLT_LIMIT_ADD #define MIN_CELL_VOLT_LIMIT_INDEX 3
0x0002
#define IMBALANCE_CELL_VOLT_LIMIT_INDEX 4
#define MIN_CELL_VOLT_LIMIT_ADD
0x0003 #define MAX_CELL_NTC_LIMIT _INDEX 5
#define IMBALANCE_CELL_VOLT_LIMIT_ADD 0x0004 #define MIN_CELL_NTC_LIMIT_INDEX 6
#define MAX_CELL_NTC_LIMIT_ADD #define MAX_AFE_BOARD_NTC_LIMIT_INDEX 7
0x0005
#define MIN_AFE_BOARD_NTC_LIMIT_INDEX 8
#define MIN_CELL_NTC_LIMIT_ADD 0x0006
#define MAX_AFE_DIE_NTC_LIMIT_INDEX 9
#define MAX_AFE_BOARD_NTC_LIMIT_ADD 0x0007
#define MIN_AFE_DIE_NTC_LIMIT_INDEX 10
#define MIN_AFE_BOARD_NTC_LIMIT_ADD 0x0008
#define CHRG_MAX_CURRENT_LIMIT_INDEX 11
#define MAX_AFE_DIE_NTC_LIMIT_ADD
0x0009 #define DISCHRG_MAX_CURRENT_LIMIT_INDEX 12
#define MIN_AFE_DIE_NTC_LIMIT_ADD #define PRE_CHRG_CONTACTOR_ERR_INDEX 13
0x000A
#define CHRG_MAX_CURRENT_LIMIT_ADD 0x000B
#define DISCHRG_MAX_CURRENT_LIMIT_ADD
0x000C
#define PRE_CHRG_CONTACTOR_ERR_ADD 0x000D
arr [SOC_INDEX] = “SOC”;
Variables
arr [SOH_INDEX] = SOH;
Total_error_size = 14;
arr [MAX_CELL_VOLT_LIMIT_INDEX] = MAX_CELL_VOLT_LIMIT;
Char arr [Total_error_size] ; arr [MIN_CELL_VOLT_LIMIT_INDEX ] = MIN_CELL_VOLT_LIMIT;
arr [IMBALANCE_CELL_VOLT_LIMIT_INDEX] =
Char current_state[25] = “ZERO”;
IMBALANCE_CELL_VOLT_LIMIT;
arr [MAX_CELL_NTC_LIMIT_INDEX] = MAX_CELL_NTC_LIMIT;
arr [MIN_CELL_NTC_LIMIT_INDEX] = MIN_CELL_NTC_LIMIT;
arr [MAX_AFE_BOARD_NTC_LIMIT_INDEX] =
MAX_AFE_BOARD_NTC_LIMIT;
arr [MIN_AFE_BOARD_NTC_LIMIT_INDEX] =
MIX_AFE_BOARD_NTC_LIMIT;
arr [MAX_AFE_DIE_NTC_LIMIT_INDEX] =
MAX_AFE_DIE_NTC_LIMIT;
arr [MIN_AFE_DIE_NTC_LIMIT_INDEX] =
MIN_AFE_DIE_NTC_LIMIT;
arr [CHRG_MAX_CURRENT_LIMIT_INDEX] =
CHRG_MAX_CURRENT_LIMIT ;
arr [DISCHRG_MAX_CURRENT_LIMIT_INDEX] =
DISCHRG_MAX_CURRENT_LIMIT;
arr [PRE_CHRG_CONTACTOR_ERR_INDEX] =
PRE_CHRG_CONTACTOR_ERR;
for (int i = 0; I < total_error; i++)
If( i[0] == arr [SOC_INDEX])
If (current_state != i[0])
current_state = i[0];
eeprom_mgr_write_u8(data_to_write_aru8, size_aru8, param_type_are);
else
Continue;
else
Continue;
#define MAX_ERRORS 14
uint8_t error_codes[MAX_ERRORS];
uint8_t error_count = 0;
// Function to log an error
void log_error(uint8_t error_code) {
if (error_count < MAX_ERRORS) {
error_codes[error_count++] = error_code;
} else {
// Handle overflow: Could log to a secondary storage or ignore
printf("Max error limit reached.\n");
}
}
// Function to check for errors
void check_for_errors() {
for (uint8_t i = 0; i < error_count; i++) {
switch (error_codes[i]) {
case SOC:
break;
case SOH:
break;
case MAX_CELL_VOLT_LIMIT:
break;
case MIN_CELL_VOLT_LIMIT:
break;
case IMBALANCE_CELL_VOLT_LIMIT:
break;
case MAX_CELL_NTC_LIMIT:
break;
case MIN_CELL_NTC_LIMIT:
break;
case MAX_AFE_BOARD_NTC_LIMIT:
break;
case MIN_AFE_BOARD_NTC_LIMIT:
break;
case MAX_AFE_DIE_NTC_LIMIT:
break;
case MIN_AFE_DIE_NTC_LIMIT:
break;
case CHRG_MAX_CURRENT_LIMIT:
break;
case DISCHRG_MAX_CURRENT_LIMIT:
break;
case PRE_CHRG_CONTACTOR_ERR:
break;
/* default:
printf("Unknown Error Code: %d\n", error_codes[i]);
break; */
}
}
// Reset error count after checking
error_count = 0;
}
void write_config_to_eeprom() {
// Try to write to EEPROM and check for errors
if (!eeprom_write(SOC_ADD, config_data, sizeof(config_data))) {
log_error(SOC);
}
// Additional write operations can go here, with error checks
}
int main() {
write_config_to_eeprom();
check_for_errors(); // Check and display any errors that occurred
return 0;
}