EasyFlash API описание
Все поддерживаемые API-интерфейсы объявлены в файле easyflash/inc/easyflash.h
. Рекомендуется использовать CTRL+F для поиска.
Термины:
easyflash/src/easyflash.c
или в документации по переносу (раздел 55 «Резервная область»).Инициализируйте различные компоненты EasyFlash. После инициализации можно использовать следующие API.
Для компонента переменных среды, если flash инициализируется впервые, автоматически вызывается функция ef_env_set_default
, восстанавливающая переменные среды по умолчанию, определённые в файле переноса. Впоследствии при каждом запуске будет автоматически проверяться состояние переменных среды во flash, и они будут восстановлены до значений по умолчанию при серьёзном повреждении flash. Если включена функция инкрементного обновления, также будет выполнена проверка инкрементного обновления и, если версии не совпадают, будет выполнено инкрементное обновление.
EfErrCode easyflash_init(void)
После версии V4.0 переменные среды в EasyFlash хранятся в двоичном формате (формат blob), что позволяет верхнему уровню поддерживать передачу данных любого типа. В версиях до V4.0 нижний уровень использует строковый формат для хранения переменных среды, который также может быть преобразован в формат blob, поэтому V4.0 полностью совместим с предыдущими API, такими как ef_get_env/ef_set_env
, которые могут использоваться только со строковыми ENV.
Кроме того, строковые ENV имеют ограничение по длине: по умолчанию EF_STR_ENV_VALUE_MAX_SIZE
установлено значение 128 байт, и если длина превышает это значение, ef_get_env
может не работать, и необходимо использовать ef_get_env_blob
.
Используйте имя переменной среды для получения соответствующего значения. Поддерживаются два интерфейса:
size_t ef_get_env_blob(const char *key, void *value_buf, size_t buf_len, size_*save_value_len)
Параметр | Описание |
---|---|
key | Имя переменной среды |
value_buf | Буфер для хранения значения переменной среды |
buf_len | Размер буфера |
save_value_len | Возвращает фактический размер переменной среды во flash |
Возвращаемое значение | Успешно сохранённая длина данных в буфере |
Пример:
char value[32];
size_t len;
/* Если длина переменной среды неизвестна, сначала можно получить реальную длину из flash через len */
ef_get_env_blob("key", NULL, 0, &len);
/* Если известна длина, используйте value для сохранения данных переменной среды и верните фактическую длину */
len = ef_get_env_blob("key", value, sizeof(value), NULL);
Примечание: эта функция устарела, её не рекомендуется использовать, вместо неё можно использовать предыдущую функцию. Эта функция не допускает повторного использования, при использовании необходимо использовать strdup для обеспечения независимости каждого возвращаемого буфера памяти. Эта функция не поддерживает реентерабельность, возвращаемое значение находится во внутреннем буфере функции, из соображений безопасности рекомендуется добавить блокировку.
char *ef_get_env(const char *key)
Параметр | Описание |
---|---|
key | Имя переменной среды |
Возвращаемое значение | Значение переменной среды |
Этот метод позволяет добавлять, изменять и удалять переменные среды.
EfErrCode ef_set_env_blob(const char *key, const void *value_buf, size_t buf_len)
Параметр | Описание |
---|---|
key | Имя переменной среды |
value_buf | Значение переменной среды |
buf_len | Длина значения переменной среды, то есть длина |
EfErrCode ef_set_env(const char *key, const char *value)
Параметр | Описание |
---|---|
key | Имя переменной среды |
value | Значение переменной среды |
Эта функция удаляет переменную среды.
EfErrCode ef_del_env(const char *key)
Параметр | Описание |
---|---|
key | Имя переменной среды |
Сбросьте переменные среды в памяти до значений по умолчанию. Метод настройки переменных среды по умолчанию см. в документации по миграции.
EfErrCode ef_env_set_default(void)
Выведите все переменные среды во Flash, используя метод печати, определённый в интерфейсе переноса (\easyflash\port\ef_port.c
).
void ef_print_env(void)
EfErrCode ef_erase_bak_app(size_t app_size)
Обратите внимание: не вызывайте эту функцию в приложении.
EfErrCode ef_erase_user_app(uint32_t user_app_addr, size_t user_app_size)
Параметр | Описание |
---|---|
user_app_addr | Адрес входа пользовательского приложения |
user_app_size | Размер пользовательского приложения |
Если пользовательское приложение и резервная область находятся в разных Flash-областях, необходимо указать дополнительный метод очистки. Функция ef_erase_user_app
использует метод ef_port_erase
, определённый в файле переноса, для очистки, кроме этого, остальные функции одинаковы.
Обратите внимание: не вызывайте эту функцию в приложении.
EfErrCode ef_erase_spec_user_app(uint32_t user_app_addr, size_t app_size,
EfErrCode (*app_erase)(uint32_t addr, | Параметр | Описание |
| :------------------------------------------- | :----------------------------------------------------------------- |
| user_app_addr | Адрес входа в пользовательское приложение |
| user_app_size | Размер пользовательского приложения |
| app_erase | Метод стирания, указанный пользователем для приложения |
#### 1.3.4 Стирание Bootloader
*Примечание: не вызывайте этот метод в Bootloader.*
```C
EfErrCode ef_erase_bl(uint32_t bl_addr, size_t bl_size)
Параметр | Описание |
---|---|
bl_addr | Адрес входа в Bootloader |
bl_size | Размер Bootloader |
Метод непрерывной записи данных во флэш-память для загрузки программы в резервную область.
Примечание: перед записью убедитесь, что флэш-память была стёрта.
EfErrCode ef_write_data_to_bak(uint8_t *data,
size_t size,
size_t *cur_size,
size_t total_size)
Параметр | Описание |
---|---|
data | Адрес хранения данных, которые необходимо записать в резервную область |
size | Размер (в байтах) данных, записываемых на этом этапе |
cur_size | Размер (в байтах) ранее записанных в резервную область данных |
total_size | Общий размер (в байтах) данных для записи в резервную область |
Копирование готового приложения из резервной области по указанному адресу пользовательского приложения.
Примечание:
EfErrCode ef_copy_app_from_bak(uint32_t user_app_addr, size_t app_size)
Параметр | Описание |
---|---|
user_app_addr | Адрес начала пользовательского приложения |
user_app_size | Размер пользовательского приложения |
Если пользовательское приложение и резервная область находятся на разных флэш-устройствах, то необходимо указать дополнительный метод записи. Метод ef_copy_app_from_bak
использует метод ef_port_write
из файла переноса для выполнения операции записи. В остальном эти два метода идентичны.
EfErrCode ef_copy_spec_app_from_bak(uint32_t user_app_addr, size_t app_size,
EfErrCode (*app_write)(uint32_t addr, const uint32_t *buf, size_t size))
Параметр | Описание |
---|---|
user_app_addr | Адрес начала пользовательского приложения |
user_app_size | Размер пользовательского приложения |
app_write | Указанный пользователем метод записи приложения |
Копирует готовый Bootloader из резервной области по заданному адресу.
Примечание:
EfErrCode ef_copy_bl_from_bak(uint32_t bl_addr, size_t bl_size)
Параметр | Описание |
---|---|
bl_addr | Адрес начала Bootloader |
bl_size | Размер Bootloader |
EfErrCode ef_log_read(size_t index, uint32_t *log, size_t size);
Параметр | Описание |
---|---|
index | Порядковый номер журнала для чтения |
log | Буфер для хранения прочитанного журнала |
size | Размер журнала для чтения |
EfErrCode ef_log_write(const uint32_t *log, size_t size);
Параметр | Описание |
---|---|
log | Журнал для сохранения |
size | Размер сохраняемого журнала |
EfErrCode ef_log_clean(void);
size_t ef_log_get_used_size(void);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )