/*
 * 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));
}
