MPLAB 8.xx использует компилятор HI-TECH.
Вот в качестве
примера чтение и сохранение настроек.
Некоторые ключевые моменты:
- блок настроек оформлен в виде структуры;
- расположение настроек в EEPROM отдаем на откуп компилятору;
- в данном примере блок настроек инициализируется конкретными значениями (и попадает в EEPROM при прошивке МК);
- в начале программы читаем блок настроек из EEPROM в RAM простым копированием из структуры в структуру;
- манипулируем настройками в RAM путем обращения к полям структуры;
- когда требуется, записываем блок настроек целиком в EEPROM.
P. S.
Не претендую на истину в последней инстанции ))
PHP код:
|
#include ‹htc.h›
// Задать конфигурацию
__CONFIG(0x23E4);
// Здесь будем использовать типы из stdint.h (которого нет в includ-ах)
typedef unsigned long uint32_t;
typedef unsigned int uint16_t;
typedef signed int int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t;
// Блок настроек
typedef struct {
float VarFloat; // float
uint32_t Var32; // 32-bit
uint16_t Var16; // 16-bit
uint8_t Var8; // 8-bit
} Settings_t;
// Рабочая (изменяемая) копия блока настроек в RAM
Settings_t Settings;
// Сохраняемый в EEPROM блок настроек (начальные значения)
Settings_t eeprom EE_Settings = {
3.1415926, // float
0xDEADBEAF, // 32-bit
0xAA55, // 16-bit
0x11 // 8-bit
};
// Прототип рукописной функции побайтной записи блока настроек в EEPROM
void Save_Settings(void);
//================================================== =
void main(void)
{
// читаем блок настроек из EEPROM в память
Settings = EE_Settings;
// меняется что-то в блоке настроек
Settings.Var8 = 0x55;
// сохраняем блок настроек в EEPROM
Save_Settings();
while(1);
}
//================================================== =
void Save_Settings()
{
// переменная цикла
uint8_t i;
// указатель на блок настроек в RAM
uint8_t *src = (uint8_t*)&Settings;
// указатель на блок настроек в EEPROM
uint8_t eeprom *dst = (uint8_t eeprom*)&EE_Settings;
// Пишем побайтно блок настроек из RAM в EEPROM
for (i = 0; i ‹ sizeof(Settings_t); i++) {
// библиотечная функция HI_TECH
eeprom_write((uint8_t)dst, *src);
src++; dst++;
}
}
|