From cb5c29518b84dcc2d6868f8b957006d568f6853e Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Sun, 25 Oct 2026 08:48:53 +0300 Subject: [PATCH] doc: updated wiki --- wiki_ru.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/wiki_ru.md b/wiki_ru.md index 41f2f83..e4d459b 100644 --- a/wiki_ru.md +++ b/wiki_ru.md @@ -47,7 +47,7 @@ ### Управление памятью -Прошивка не использует динамическую память. Глобальная переменная `transmitted_data` заполняется при старте (идентификатор и тип), в рабочем цикле обновляется только поле `battery`. Флаги `send_request`, `nrf_event`, `wdt_event` объявлены как `static volatile uint8_t` для корректного доступа из ISR и главного цикла. +Прошивка не использует динамическую память. Глобальная переменная `transmitted_data` заполняется при старте (идентификатор и тип), в рабочем цикле обновляется только поле `battery`. Флаги `send_request`, `nrf_event` объявлены как `static volatile uint8_t` для корректного доступа из ISR и главного цикла. ### Флаги синхронизации @@ -55,7 +55,6 @@ | ------ | ----------------- | -------------- | | `send_request` | ISR `INT1_vect` (касание) | Главный цикл — запуск передачи | | `nrf_event` | ISR `INT0_vect` (IRQ nRF24) | Конечный автомат сопряжения | -| `wdt_event` | ISR `WDT_vect` (watchdog) | Конечный автомат сопряжения | --- @@ -132,7 +131,7 @@ Прошивка работает на bare-metal AVR без RTOS. Синхронизация между прерываниями и главным циклом реализуется следующим образом: -1. **Флаги `volatile`** — переменные `send_request`, `nrf_event`, `wdt_event` объявлены как `static volatile uint8_t`, что гарантирует чтение актуального значения из памяти при каждой проверке в главном цикле. +1. **Флаги `volatile`** — переменные `send_request`, `nrf_event` объявлены как `static volatile uint8_t`, что гарантирует чтение актуального значения из памяти при каждой проверке в главном цикле. 2. **Атомарная запись из ISR** — обработка прерывания устанавливает флаг в `true`. Запись одного байта на AVR является атомарной операцией. 3. **Отключение прерываний при проверке и сбросе флага** — `cli()` перед проверкой и сбросом `send_request` в главном цикле исключает гонку между ISR и главным циклом. 4. **Отключение прерываний при инициализации** — `cli()` перед настройкой периферии исключает гонки при старте.