mirror of
https://github.com/stasenso/rp_pico_display_engine.git
synced 2026-06-26 21:32:41 +03:00
refactor(thermometr): migrate example to paint API
This commit is contained in:
@@ -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); // В этом сценарии отправка обязана проходить успешно.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user