Преглед изворни кода

STM32F1: Fix SD card persistent store API (#11090)

Alexander Amelkin пре 7 година
родитељ
комит
ffdbc1f42c
1 измењених фајлова са 13 додато и 10 уклоњено
  1. 13
    10
      Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp

+ 13
- 10
Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp Прегледај датотеку

42
 namespace HAL {
42
 namespace HAL {
43
 namespace PersistentStore {
43
 namespace PersistentStore {
44
 
44
 
45
-// Store settings in the last two pages
46
-// Flash pages must be erased before writing, so keep track.
47
-bool firstWrite = false;
48
-uint32_t pageBase = EEPROM_START_ADDRESS;
45
+namespace {
46
+  // Store settings in the last two pages
47
+  // Flash pages must be erased before writing, so keep track.
48
+  bool firstWrite = false;
49
+  uint32_t pageBase = EEPROM_START_ADDRESS;
50
+}
49
 
51
 
50
 bool access_start() {
52
 bool access_start() {
51
   firstWrite = true;
53
   firstWrite = true;
64
   if (firstWrite) {
66
   if (firstWrite) {
65
     FLASH_Unlock();
67
     FLASH_Unlock();
66
     status = FLASH_ErasePage(EEPROM_PAGE0_BASE);
68
     status = FLASH_ErasePage(EEPROM_PAGE0_BASE);
67
-    if (status != FLASH_COMPLETE) return false;
69
+    if (status != FLASH_COMPLETE) return true;
68
     status = FLASH_ErasePage(EEPROM_PAGE1_BASE);
70
     status = FLASH_ErasePage(EEPROM_PAGE1_BASE);
69
-    if (status != FLASH_COMPLETE) return false;
71
+    if (status != FLASH_COMPLETE) return true;
70
     firstWrite = false;
72
     firstWrite = false;
71
   }
73
   }
72
 
74
 
76
   uint16_t* wordBuffer = (uint16_t *)value;
78
   uint16_t* wordBuffer = (uint16_t *)value;
77
   while (wordsToWrite) {
79
   while (wordsToWrite) {
78
     status = FLASH_ProgramHalfWord(pageBase + pos + (i * 2), wordBuffer[i]);
80
     status = FLASH_ProgramHalfWord(pageBase + pos + (i * 2), wordBuffer[i]);
79
-    if (status != FLASH_COMPLETE) return false;
81
+    if (status != FLASH_COMPLETE) return true;
80
     wordsToWrite--;
82
     wordsToWrite--;
81
     i++;
83
     i++;
82
   }
84
   }
85
   if (size & 1) {
87
   if (size & 1) {
86
     uint16_t temp = value[size - 1];
88
     uint16_t temp = value[size - 1];
87
     status = FLASH_ProgramHalfWord(pageBase + pos + i, temp);
89
     status = FLASH_ProgramHalfWord(pageBase + pos + i, temp);
88
-    if (status != FLASH_COMPLETE) return false;
90
+    if (status != FLASH_COMPLETE) return true;
89
   }
91
   }
90
 
92
 
91
   crc16(crc, value, size);
93
   crc16(crc, value, size);
92
   pos += ((size + 1) & ~1);
94
   pos += ((size + 1) & ~1);
93
-  return true;
95
+  return false;
94
 }
96
 }
95
 
97
 
96
-void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
98
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
97
   for (uint16_t i = 0; i < size; i++) {
99
   for (uint16_t i = 0; i < size; i++) {
98
     byte* accessPoint = (byte*)(pageBase + pos + i);
100
     byte* accessPoint = (byte*)(pageBase + pos + i);
99
     uint8_t c = *accessPoint;
101
     uint8_t c = *accessPoint;
101
     crc16(crc, &c, 1);
103
     crc16(crc, &c, 1);
102
   }
104
   }
103
   pos += ((size + 1) & ~1);
105
   pos += ((size + 1) & ~1);
106
+  return false;
104
 }
107
 }
105
 
108
 
106
 } // PersistentStore
109
 } // PersistentStore

Loading…
Откажи
Сачувај