[Макросы конфигурации Application Timer]
Эти макросы конфигурации находятся в sdk_config.h [4].
#define APP_TIMER_ENABLED 1
Разрешает функционал модуля app_timer. Установите в 1, чтобы были доступны Application Timer.
#define APP_TIMER_CONFIG_RTC_FREQUENCY n
Конфигурирует прескалер RTC [5] для работы его счетчика на одной из заданных частот. Здесь N устанавливается в одно из следующих значений:
n |
Частота, Гц |
0 |
32768 |
1 |
16384 |
3 |
8192 |
7 |
4096 |
15 |
2048 |
31 |
1024 |
#define APP_TIMER_CONFIG_IRQ_PRIORITY n
Значение n конфигурирует приоритет прерывания. Имейте в виду, что приоритеты 0, 2 (nRF51) и 0, 1, 4, 5 (nRF52) зарезервированы для SoftDevice. Доступны следующие варианты выбора приоритета (чем значение меньше, тем приоритет выше):
n |
Приоритет |
0 |
0 (самый высокий приоритет) |
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 (только для Software Component) |
5 |
5 (только для Software Component) |
6 |
6 (только для Software Component) |
7 |
7 (только для Software Component) |
#define APP_TIMER_CONFIG_OP_QUEUE_SIZE n
Здесь n задает емкость очереди запросов таймеров (по умолчанию 10). Размер очереди зависит от того, сколько таймеров используется в системе, как часто таймеры запускаются, и от общей латентности системы. Если очередь слишком мала, то будут происходить неудачи с API-вызовами app_timer.
#define APP_TIMER_CONFIG_USE_SCHEDULER 0
Разрешает обработку событий app_timer на основе планировщика (app_scheduler). Установите в 1, чтобы разрешить использовать планировщик для таймеров приложения.
#define APP_TIMER_KEEPS_RTC_ACTIVE 0
Разрешает RTC работать всегда, установите в 1 для активации. Если эта опция разрешена, то RTC работает даже тогда, когда нет активных таймеров, что может использоваться, если app_timer используется для отсчета реального времени (timestamping).
#define APP_TIMER_WITH_PROFILER 0
Разрешает анализ производительности (профилирование) кода app_timer.
#define APP_TIMER_CONFIG_SWI_NUMBER 0
Конфигурирует используемый экземпляр SWI.
[Макросы для работы с Application Timer]
#define APP_TIMER_LOG_NAME app_timer
Задает имя модуля для сообщений лога.
#define APP_TIMER_CLOCK_FREQ 32768
Частота тактов таймера, Гц. Частота тактов RTC, используемого для реализации таймера приложения.
#define APP_TIMER_MIN_TIMEOUT_TICKS 5
Минимальная длительность таймаута в тиках, которую можно указать в качестве параметра для app_timer_start().
#define APP_TIMER_NODE_SIZE 32
Размер app_timer.timer_node_t (используется для выделения памяти).
#define APP_TIMER_SCHED_EVENT_DATA_SIZE sizeof(app_timer_event_t)
Размер данных события, когда используется планировщик.
#define APP_TIMER_MAX_CNT_VAL RTC_COUNTER_COUNTER_Msk
Максимальное значение счетчика, которое может быть возвращено из вызова app_timer_cnt_get.
#define APP_TIMER_TICKS (MS) ((uint32_t)ROUNDED_DIV( \
(MS) * (uint64_t)APP_TIMER_CLOCK_FREQ, \
1000 * (APP_TIMER_CONFIG_RTC_FREQUENCY + 1)))
Преобразовывает миллисекунды в тики таймера. Этот макрос использует целочисленную 64-разрядную арифметику. Поэтому только пока в качестве параметра указана константа (например, определенная через #define), вычисления будут делаться препроцессором. Соответственно если в качестве параметра используется переменная, то для макроса сгенерируется программный код.
#define APP_TIMER_DEF(timer_id) _APP_TIMER_DEF(timer_id)
Создает идентификатор таймера и статически выделит для таймера память. Параметр макроса timer_id это имя для переменной идентификатора таймера, которая будет использоваться для управления этим таймером.