Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Вариант использования упакованного формата времени в STM32

Часы реального времени (Real-Time Clock, RTC) в контроллерах STM32 реализованы в двоично-десятичном коде (BCD-формат). Для хранения даты и времени в таком формате необходимо по крайней мере 5 байт памяти. Существуют случаи, когда место, отводимое для хранения метки времени может стать критичным, например, в случае ведения журнала событий в энергонезависимой памяти микроконтроллера, где объём памяти, выделяемый под всё событие (номер события, его временная метка, параметры и контрольная сумма) может составлять всего 16 байт. При меньшем объёме памяти фиксируемого события достигается максимальное число хранимых событий в журнале и уменьшается время на операцию записи одного события, что критично для резервных источников питания (ионисторы, электролитические конденсаторы) в случае пропадания основного питания микроконтроллера.

Простейшим способом увеличить объём памяти под полезную информацию при фиксированной длине массива является применение алгоритма упакованного времени. Для этого значение времени из BCD-формата необходимо перевести в привычную позиционную систему счисления, минимальная единица времени - секунда, далее необходимо выбрать дату и время отсчёта. В конкретном случае выбрана дата 01 января 2001 года. В этом случае выигрыш в объёме памяти будет составлять 1 байт (6,25% при использовании 16-байтного массива).

​Рисунок 1 - Изменение распределения полей данных при использовании упакованного формата времени на примере 16-байтного события
Рисунок 1 - Изменение распределения полей данных при использовании упакованного формата времени на примере 16-байтного события

При пересчёте времени из BCD-формата, применяемого в микроконтроллерах STM32 необходимо учесть следующее:

  • високосный год (реализация на языке Си представлена на рисунке 2);

  • количество дней в зависимости от месяца (реализация вычисления количества секунд на языке Си представлена на рисунке 3);

Рисунок 2 - Пример реализации определения високосного года
Рисунок 2 - Пример реализации определения високосного года

Переменная типа “Упакованное время” занимает 4 байта и интерпретируются как целое число (unsigned long). Упакованное время является количеством секунд, пошедших с 1 января 2001 года (понедельник), рассчитывается из обычного времени по определенному алгоритму, учитывающему високосные годы.

​Рисунок 3 - Реализация вычисления количества прошедших месяцев в секундах на языке Си
Рисунок 3 - Реализация вычисления количества прошедших месяцев в секундах на языке Си

Видно, что упакованное время имеет дискретность 1 секунда и диапазон до 2137 года. Контроллер учитывает високосные годы. После 2137 года можно выбрать другое смещение (например 2101 год).

Чтобы избежать необходимость каждый раз пересчитывать текущее время из BCD-формата при его фиксации, имеет смысл провести данную операцию разово при включении контроллера и инкрементировать переменную, хранящую данные времени в упакованном формате каждую секунду.

Для случаев, когда необходимо только значение даты объём памяти, выделяемый под хранение времени можно сократить до двух байт.

Такие специфические форматы даты и суточного времени выбраны в связи с тем, что они позволяют уменьшить затраты на хранение временных параметров и ускорить процесс принятия решения о проходе.

Преимущества использования формата упакованного времени:

  • уменьшение объёма выделяемой памяти;

  • увеличение скорости обработки при работе с переменной упакованного времени;

Недостатки использования формата упакованного времени:

  • отсутствие удобочитаемости в отличие от двоично-десятичного кода;

  • использование дополнительного процессорного времени для операций расчёта.

Исходный код прикрепляю. Также он размещён на github

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (1) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Конструктор для сборки: предусилитель на лампе 6N3 Модуль радиореле на 4 канала
вверх