| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | #include <stdint.h>#include "sys_hal.h"#include "sys_api.h"#include "common_config.h"#include "common.h"#include <stdio.h>/**  * @brief  */void SYS_ReadFromFlash(uint8_t *data, uint32_t size, uint32_t baseAddress){    for (uint32_t i = 0; i < size; i++)        *data++ = (*(uint32_t*)baseAddress++);}/**   * @brief  */void SYS_WriteToFlash(uint8_t *data, uint32_t size, uint32_t crc){    uint32_t baseAddress = SYS_SECTOR;    uint32_t checkCrc = 0;    bool fAlarm = 0;    flash_status_type status;    uint8_t *pdata = data;    for (uint8_t i = 0; i < 3; i++)    {        fAlarm = 0;        flash_unlock();        SYS_EraseFlashSector();        for (uint32_t i = 0; i < size; i++) {            if ((status = flash_byte_program(baseAddress++, *pdata++)) != FLASH_OPERATE_DONE) {                  DBG printf("FLASH_ProgramByte error: %d\r\n", status);                break;            }        }        if ((status = flash_word_program((uint32_t)SYS_CRC_ADDRESS, crc)) != FLASH_OPERATE_DONE) {            DBG printf("FLASH_ProgramWord error: %d\r\n", status);        }        flash_lock();        checkCrc = SYS_GetCRC((sys_settings_t *)SYS_SECTOR);        // Проверяем  CRC того, что было записано        if (checkCrc == crc) {            DBG printf("SYS write OK\r\n");            break;        }        else            fAlarm = 1; // Авария    }    // Произошел сбой при записи - перезагружаемся    if (fAlarm) {        DBG printf("Flash write error: 1%d", (uint8_t)status);;        NVIC_SystemReset();    }}/**  * @brief  Очистка сектора настроек  * @retval  */void SYS_EraseFlashSector(void){    flash_status_type status;       if ((status = flash_sector_erase(SYS_SECTOR)) != FLASH_OPERATE_DONE) {        printf("SYS_EraseFlashSector error: %d\r\n", status);    }}
 |