refactor(thermometr): migrate example to paint API

This commit is contained in:
Stanislav N Mikhailov
2026-04-04 20:20:46 +03:00
parent b96f7a8ea4
commit 898898585d
+5 -8
View File
@@ -1,5 +1,5 @@
#include "pico/stdlib.h" // Подключаем базовые функции SDK Pico (время, таймеры, sleep, assert). #include "pico/stdlib.h" // Подключаем базовые функции SDK Pico (время, таймеры, sleep, assert).
#include "display/display.h" // Подключаем API дисплейного движка (init/poll/submit/buffer). #include "display/display.h" // Подключаем API дисплейного движка (init + begin/end paint).
#include "display/render/context.h" // Подключаем контекст рисования для примитивов. #include "display/render/context.h" // Подключаем контекст рисования для примитивов.
#include "display/render/grid.h" // Подключаем функцию рисования сетки. #include "display/render/grid.h" // Подключаем функцию рисования сетки.
#include "display/render/sine_wave.h" // Подключаем функцию рисования синусоиды. #include "display/render/sine_wave.h" // Подключаем функцию рисования синусоиды.
@@ -58,8 +58,6 @@ static void update_axis_reflect(int* pos, int* dir, int min_pos, int max_pos) //
} }
} }
static void on_frame_done(void) {} // Callback завершения DMA-кадра оставлен пустым (логика в main).
int main() int main()
{ {
stdio_init_all(); // Инициализируем стандартный ввод/вывод (UART/USB stdio при необходимости). stdio_init_all(); // Инициализируем стандартный ввод/вывод (UART/USB stdio при необходимости).
@@ -69,7 +67,6 @@ int main()
.height = HEIGHT, // Передаем высоту кадра. .height = HEIGHT, // Передаем высоту кадра.
.buffer_count = 1, // Используем один буфер кадра (SAFE режим блокирует доступ при DMA). .buffer_count = 1, // Используем один буфер кадра (SAFE режим блокирует доступ при DMA).
.mode = DISPLAY_MODE_SAFE, // Выбираем безопасный режим работы буфера. .mode = DISPLAY_MODE_SAFE, // Выбираем безопасный режим работы буфера.
.frame_done_cb = on_frame_done // Регистрируем callback завершения кадра.
}; };
display_init(&cfg); // Инициализируем дисплей и внутренний контекст по заданной конфигурации. display_init(&cfg); // Инициализируем дисплей и внутренний контекст по заданной конфигурации.
@@ -101,7 +98,6 @@ int main()
while (1) // Бесконечный основной цикл приложения. while (1) // Бесконечный основной цикл приложения.
{ {
display_poll(); // Обрабатываем внутренние события дисплейного движка (например, frame_done flag).
if (!frame_tick_due) // Если тик таймера еще не пришел. if (!frame_tick_due) // Если тик таймера еще не пришел.
{ {
wait_for_irq(); // Спим до прерывания, чтобы не крутить пустой busy-loop. wait_for_irq(); // Спим до прерывания, чтобы не крутить пустой busy-loop.
@@ -109,8 +105,8 @@ int main()
} }
frame_tick_due = false; // Сбрасываем флаг и разрешаем обработать ровно один кадр на этот тик. frame_tick_due = false; // Сбрасываем флаг и разрешаем обработать ровно один кадр на этот тик.
uint16_t* buf = display_try_acquire_draw_buffer(); // Пытаемся неблокирующе получить draw-буфер. uint16_t* buf = display_begin_paint_try(); // Пытаемся начать новый кадр и получить буфер рисования.
if (buf == NULL) // Если в SAFE+1 DMA еще занят, просто пропускаем тик кадра. if (buf == NULL) // Если кадр ещё выводится или paint уже начат, пропускаем этот тик.
{ {
continue; continue;
} }
@@ -136,6 +132,7 @@ int main()
phase -= 6.2831853f; // Возвращаем фазу в базовый диапазон без скачка формы. phase -= 6.2831853f; // Возвращаем фазу в базовый диапазон без скачка формы.
} }
display_submit(); // Отправляем подготовленный кадр на вывод через DMA. bool submitted = display_end_paint(); // Завершаем paint-секцию и отправляем кадр.
hard_assert(submitted); // В этом сценарии отправка обязана проходить успешно.
} }
} }