Просмотр исходного кода

nv storage: when save all or erase, must stop write timer

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 лет назад
Родитель
Сommit
27aaefd389
1 измененных файлов с 9 добавлено и 0 удалено
  1. 9 0
      Application/app/nv_storage.c

+ 9 - 0
Application/app/nv_storage.c

@@ -108,6 +108,7 @@ static void nv_save_soc_task(shark_timer_t *timer){
 		soc_write_backup_index ++;
 		if (soc_write_backup_index == 2){
 			soc_write_pending = 0;
+			soc_write_backup_index = 0;
 			sys_debug("write soc to nv OK\n");
 			return;
 		}
@@ -130,13 +131,21 @@ static void nv_save_soc_by_backup(int index){
 	AT24CXX_Write(nv_addr + sizeof(soc_t),(uint8_t *)&crc16, sizeof(crc16));
 }
 
+static void stop_writer(void) {
+	shark_timer_cancel(&_save_backup_timer);
+	soc_write_index = 0;
+	soc_write_backup_index = 0;
+}
+
 void nv_save_all_soc(void){
+	stop_writer();
 	nv_save_soc_by_backup(0);
 	nv_save_soc_by_backup(1);
 }
 
 void nv_erase_soc(int index){
 	uint8_t data = 0xFF;
+	stop_writer();
 	for (int i = 0; i < sizeof(soc_t) + sizeof(uint16_t); i++){
 		AT24CXX_Write(SOC_ADDR + SOC_SIZE * index + i, &data, 1);
 	}