EEPROM write fix

This commit is contained in:
2024-10-09 15:10:28 +03:00
parent 08b99d8ec2
commit 4506f53d95
3 changed files with 195 additions and 93 deletions

View File

@ -205,83 +205,177 @@ void IR_Home_Process() {
/////////////////////////////////////////////////////////
case IR_FONT_RIGHT:
break;
// for (int i = 0; i <= 100; ++i) {
// led_progressbar(0, 19, i);
// HAL_Delay(10);
// }
// led_clear();
break;
// break;
{
sound_play_note((Note_t){0, 0, 50},3);
Shot wrShot;
wrShot.isExist = 0xAA;
wrShot.countRepeatShot = 0xBB;
wrShot.rotationAxial = 0xCC;
wrShot.rotationHorizontal = 0xDD;
wrShot.rotationVertical = 0xEE;
wrShot.speedRollerBottom = 0xFF;
wrShot.speedRollerTop = 0x0F;
wrShot.speedScrew = 0xF0;
// Shot wrShot;
// wrShot.isExist = 0xAA;
// wrShot.countRepeatShot = 0xBB;
// wrShot.rotationAxial = 0xCC;
// wrShot.rotationHorizontal = 0xDD;
// wrShot.rotationVertical = 0xEE;
// wrShot.speedRollerBottom = 0xFF;
// wrShot.speedRollerTop = 0x0F;
// wrShot.speedScrew = 0xF0;
//
// for (int i = 0; i < MAX_SHOT_COUNT; ++i) {
// print("SAVE ");
// printNumber(i);
// print(" -> ");
// MemoryStatus saveStat = saveShot(i, &wrShot);
// if(saveStat == EEPROM_OK){
// print("OK");
// } else {
// print("EEPROM_FAIL");
// }
// print(" -> ");
// HAL_Delay(100);
// print(" READ -> ");
// Shot rShoot = {0};
// MemoryStatus status = getShot(i, &rShoot);
// print(" ");
// switch (status) {
// case EEPROM_FAIL:
// print("EEPROM_FAIL");
// break;
// case EEPROM_MISSING_ELEMENT:
// print("EEPROM_MISSING_ELEMENT");
// break;
// case EEPROM_OUT_OF_RANGE:
// print("EEPROM_OUT_OF_RANGE");
// break;
// case EEPROM_WRONG_STARTADDR:
// print("EEPROM_WRONG_STARTADDR");
// break;
// case EEPROM_OK:
// print("EEPROM_OK");
// break;
// default:
// print("???");
// break;
// }
// print(" - > ");
// if(memcmp(&rShoot, &wrShot, sizeof(Shot)) == 0){
// print("OK\n");
// } else {
// print("ERROR !!!!!!!!!!!!!!!!!!!!!\n");
// }
// }
// print("\n");
for (int i = 0; i < MAX_SHOT_COUNT; ++i) {
print("SAVE ");
printNumber(i);
print(" -> ");
MemoryStatus saveStat = saveShot(i, &wrShot);
if(saveStat == EEPROM_OK){
print("OK");
} else {
print("EEPROM_FAIL");
}
print(" -> ");
HAL_Delay(100);
print(" READ -> ");
Shot rShoot = {0};
MemoryStatus status = getShot(i, &rShoot);
print(" ");
switch (status) {
case EEPROM_FAIL:
print("EEPROM_FAIL");
break;
case EEPROM_MISSING_ELEMENT:
print("EEPROM_MISSING_ELEMENT");
break;
case EEPROM_OUT_OF_RANGE:
print("EEPROM_OUT_OF_RANGE");
break;
case EEPROM_WRONG_STARTADDR:
print("EEPROM_WRONG_STARTADDR");
break;
case EEPROM_OK:
print("EEPROM_OK");
break;
default:
print("???");
break;
}
print(" - > ");
if(memcmp(&rShoot, &wrShot, sizeof(Shot)) == 0){
print("OK\n");
} else {
print("ERROR !!!!!!!!!!!!!!!!!!!!!\n");
}
}
print("\n");
////////////////////////////////////////////
Program wrProg = {0};
wrProg.header.countRepeat = 0x11;
wrProg.header.options = 0x22;
wrProg.header.shotCount = 0x33;
memset(&wrProg.shots, 0x44, sizeof(wrProg.shots));
memset(&wrProg.shots, 0xAA, sizeof(wrProg.shots));
for (int i = 0; i < MAX_PROGRAM_COUNT; ++i) {
print("SAVE PROGRAM ");
printNumber(i);
print(" -> ");
MemoryStatus saveProgStat = saveProg(i, &wrProg);
if (saveProgStat == EEPROM_OK) {
print("OK");
} else {
print("EEPROM_FAIL");
}
print(" -> ");
HAL_Delay(100);
for (int i = 0; i < MAX_PROGRAM_COUNT; ++i){
print(" READ PROGRAM -> ");
Program rdProg = {0};
MemoryStatus status = getProg(i, &rdProg);
print(" ");
switch (status) {
case EEPROM_FAIL:
print("EEPROM_FAIL");
break;
case EEPROM_MISSING_ELEMENT:
print("EEPROM_MISSING_ELEMENT");
break;
case EEPROM_OUT_OF_RANGE:
print("EEPROM_OUT_OF_RANGE");
break;
case EEPROM_WRONG_STARTADDR:
print("EEPROM_WRONG_STARTADDR");
break;
case EEPROM_OK:
print("EEPROM_OK");
break;
default:
print("???");
break;
}
print(" -> ");
if (memcmp(&rdProg, &wrProg, sizeof(Program)) == 0) {
print("OK\n");
} else {
print("ERROR !!!!!!!!!!!!!!!!!!!!!\n");
}
}
print("\n");
print("\n");
////////////////////////////////////////////
for (int i = 0; i < MAX_MACRO_COUNT; ++i){
}
// Macro wrMacro = {0};
// wrMacro.header.programmCount = 0x55;
// memset(&wrMacro.programs, 0x66, sizeof(wrMacro.programs));
//
// for (int i = 0; i < MAX_MACRO_COUNT; ++i) {
// print("SAVE MACRO ");
// printNumber(i);
// print(" -> ");
// MemoryStatus saveMacroStat = saveMacro(i, &wrMacro);
// if (saveMacroStat == EEPROM_OK) {
// print("OK");
// } else {
// print("EEPROM_FAIL");
// }
// print(" -> ");
// HAL_Delay(100);
//
// print(" READ MACRO -> ");
// Macro rdMacro = {0};
// MemoryStatus status = getMacro(i, &rdMacro);
// print(" ");
// switch (status) {
// case EEPROM_FAIL:
// print("EEPROM_FAIL");
// break;
// case EEPROM_MISSING_ELEMENT:
// print("EEPROM_MISSING_ELEMENT");
// break;
// case EEPROM_OUT_OF_RANGE:
// print("EEPROM_OUT_OF_RANGE");
// break;
// case EEPROM_WRONG_STARTADDR:
// print("EEPROM_WRONG_STARTADDR");
// break;
// case EEPROM_OK:
// print("EEPROM_OK");
// break;
// default:
// print("???");
// break;
// }
// print(" -> ");
// if (memcmp(&rdMacro, &wrMacro, sizeof(Macro)) == 0) {
// print("OK\n");
// } else {
// print("ERROR !!!!!!!!!!!!!!!!!!!!!\n");
// }
// }
// print("\n");
}
break;
@ -320,7 +414,7 @@ void IR_Home_Process() {
break;
{
uint8_t buf[1024]; // Буфер для чтения данных размером 128 байт
uint16_t blockAddr16 = START_ADR_SHOT; // Начальный адрес EEPROM
uint16_t blockAddr16 = START_ADR_PROGRAM; // Начальный адрес EEPROM
uint8_t blockAddr[2] = { (uint8_t) (blockAddr16 >> 8),
(uint8_t) (blockAddr16 & 0xFF) }; // Адрес в формате 2 байта
int max_attempts = 15; // Максимальное количество попыток для операции