translate comment
This commit is contained in:
parent
7ef7228b31
commit
a2f1c2557a
3 changed files with 146 additions and 212 deletions
|
@ -120,18 +120,18 @@ bool validata_crc(FLASH_RECORD* crc){
|
|||
}
|
||||
|
||||
uint16_t validate_crc16(uint8_t *data, uint32_t length) {
|
||||
uint16_t crc = 0xFFFF; // Начальное значение для MODBUS
|
||||
uint16_t crc = 0xFFFF; // start value for CRC MODBUS
|
||||
while (length--) {
|
||||
crc ^= *data++; // XOR с очередным байтом данных
|
||||
crc ^= *data++; // XOR
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
if (crc & 0x0001) {
|
||||
crc = (crc >> 1) ^ 0xA001; // Полином 0x8005 (reverse)
|
||||
crc = (crc >> 1) ^ 0xA001; // polynome 0x8005 (reverse)
|
||||
} else {
|
||||
crc >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return crc; // Возвращаем вычисленный CRC
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
|
@ -152,11 +152,11 @@ void compact_page(){
|
|||
uint16_t calculated_crc = validate_crc16((uint8_t*)&rec, sizeof(FLASH_RECORD) - 2); //Вычисляем CRC без последних двух байтов.STRUCT - 2BYTE__CRC
|
||||
|
||||
if (calculated_crc == rec.crc && rec.data_id < PARAM_COUNT) {
|
||||
// Если CRC совпадает и ID параметра валидный, сохраняем последнее значение
|
||||
// if the crc does not match, we check further
|
||||
latest[rec.data_id] = rec;
|
||||
}
|
||||
else
|
||||
//Если не совпадает продолжить читать флэш
|
||||
// if
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -164,7 +164,7 @@ void compact_page(){
|
|||
write_ptr = SECTOR_6; // Сброс на начало
|
||||
for (int i = 0; i < PARAM_COUNT; i++) {
|
||||
if (latest[i].data_id != 0xFF) {
|
||||
// Выравнивание перед каждой записью
|
||||
// alignment
|
||||
if (write_ptr % 4 != 0) {
|
||||
write_ptr += (4 - (write_ptr % 4));
|
||||
}
|
||||
|
@ -177,27 +177,27 @@ void compact_page(){
|
|||
|
||||
void write_param(uint8_t param_id, uint8_t val) {
|
||||
FLASH_RECORD param_flash = {param_id, val};
|
||||
// __disable_irq(); // Запрещаем прерывания на время всей операции
|
||||
// __disable_irq(); // Interrupt off
|
||||
|
||||
param_flash.crc = validate_crc16((uint8_t*)¶m_flash,sizeof(param_flash) - 2);//Нахождение CRC для данных, хранящихся во флэш памяти
|
||||
|
||||
// Проверка выравнивания ДО проверки границ сектора кратного 4
|
||||
// check alignment
|
||||
if (write_ptr % 4 != 0) {
|
||||
write_ptr += (4 - (write_ptr % 4));
|
||||
}
|
||||
|
||||
// Проверка переполнения с учётом выравнивания
|
||||
// check buffer overflow
|
||||
if (write_ptr + FLASH_RECORD_SIZE >= SECTOR_6_END) {
|
||||
compact_page(); // После compact_page write_ptr обновляется
|
||||
// Повторно выравниваем после функции. То есть сколько не хватает для кратности
|
||||
compact_page(); // after compact_page update
|
||||
// alignment
|
||||
if (write_ptr % 4 != 0) {
|
||||
write_ptr += (4 - (write_ptr % 4));
|
||||
}
|
||||
}
|
||||
|
||||
flash_write(write_ptr, ¶m_flash); //внутри функции итак автоматические инкрементируется указатель write_ptr на размер структуры
|
||||
flash_write(write_ptr, ¶m_flash); //inside the function, the write_ptr pointer is automatically incremented by the size of the structure
|
||||
|
||||
// __enable_irq(); // Разрешаем прерывания
|
||||
// __enable_irq(); // Interrupt on
|
||||
}
|
||||
|
||||
FLASH_RECORD* load_params(){
|
||||
|
@ -206,7 +206,7 @@ FLASH_RECORD* load_params(){
|
|||
FLASH_RECORD res;
|
||||
for(uint32_t addr = SECTOR_6;addr < SECTOR_6_END;addr +=FLASH_RECORD_SIZE) {
|
||||
flash_read(addr,&res);
|
||||
/* провекра CRC */
|
||||
/* check CRC */
|
||||
uint16_t calculated_crc = validate_crc16((uint8_t*)&res, sizeof(FLASH_RECORD) - 2); //Вычисляем CRC без последних двух байтов.STRUCT - 2BYTE__CRC
|
||||
if (calculated_crc != res.crc || res.data_id >= PARAM_COUNT)
|
||||
continue;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue