/* * By oleg110592 * https://radiokot.ru/forum/viewtopic.php?p=2691126&sid=342073b18646c21ba245ff0ada5111b3#p2691126 */ /* eeprom в stm8 можно организовать просто */ typedef struct Par_t { uint16_t temperature; uint16_t time; uint8_t gain; } Par_t; #pragma location=0x4000 __no_init Par_t Par; #pragma required=Par /* чтение очень просто, занимает намного меньше чем в АВР - просто пересылка из области eeprom в память, все находится в едином адресном пространстве: */ uint16_t temperature, time; temperature = Par.temperature; time = Par.time; /* в листинге всего то две команды: Код: LDW X, L:0x4000 LDW L:temperature, X ... LDW X, L:0x4002 LDW L:time, X */ /* запись тоже несложно: */ mcu_eeprom_unlock(); Par.temperature = 560; Par.time = time; FLASH->IAPSR &= ~FLASH_IAPSR_DUL; //EEPROM lock void mcu_eeprom_unlock(void) //Разблокировать EEPROM { FLASH->DUKR = ((unsigned char)0xAE); FLASH->DUKR = ((unsigned char)0x56); while (!(FLASH->IAPSR & FLASH_IAPSR_DUL)); }