doc: updated wiki
This commit is contained in:
1 parent
6261106b30
commit
cb5c29518b
1 file changed
+2
-3
+2
-3
@@ -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()` перед настройкой периферии исключает гонки при старте.
|
||||
|
||||
Reference in new issue
Block a user