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` (касание) | Главный цикл — запуск передачи |
|
| `send_request` | ISR `INT1_vect` (касание) | Главный цикл — запуск передачи |
|
||||||
| `nrf_event` | ISR `INT0_vect` (IRQ nRF24) | Конечный автомат сопряжения |
|
| `nrf_event` | ISR `INT0_vect` (IRQ nRF24) | Конечный автомат сопряжения |
|
||||||
| `wdt_event` | ISR `WDT_vect` (watchdog) | Конечный автомат сопряжения |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -132,7 +131,7 @@
|
|||||||
|
|
||||||
Прошивка работает на bare-metal AVR без RTOS. Синхронизация между прерываниями и главным циклом реализуется следующим образом:
|
Прошивка работает на 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 является атомарной операцией.
|
2. **Атомарная запись из ISR** — обработка прерывания устанавливает флаг в `true`. Запись одного байта на AVR является атомарной операцией.
|
||||||
3. **Отключение прерываний при проверке и сбросе флага** — `cli()` перед проверкой и сбросом `send_request` в главном цикле исключает гонку между ISR и главным циклом.
|
3. **Отключение прерываний при проверке и сбросе флага** — `cli()` перед проверкой и сбросом `send_request` в главном цикле исключает гонку между ISR и главным циклом.
|
||||||
4. **Отключение прерываний при инициализации** — `cli()` перед настройкой периферии исключает гонки при старте.
|
4. **Отключение прерываний при инициализации** — `cli()` перед настройкой периферии исключает гонки при старте.
|
||||||
|
|||||||
Reference in new issue
Block a user