Cleaned up automatically added comments

This commit is contained in:
Stanislav N Mikhailov
2026-03-27 20:40:28 +03:00
parent cee901faa4
commit 238542c31d
+23 -23
View File
@@ -21,42 +21,42 @@ static bool frame_timer_cb(repeating_timer_t* t) // Callback аппаратно
}
static inline void wait_for_irq(void) // Вспомогательная функция для энергосберегающего ожидания прерываний.
{ // Начало функции ожидания IRQ.
{
__asm volatile ("wfi"); // Инструкция ARM Wait For Interrupt: CPU спит до любого IRQ.
} // Конец функции ожидания IRQ.
}
static uint16_t text_width_px(const wchar_t* str) // Считаем фактическую ширину строки в пикселях через таблицу ширин глифов.
{ // Начало функции расчета ширины строки.
{
uint16_t width = 0; // Накапливаем итоговую ширину строки.
while (*str) // Пока не дошли до нулевого терминатора строки.
{ // Начало цикла по символам.
{
width = (uint16_t)(width + get_char_width(*str)); // Добавляем ширину текущего символа.
str++; // Переходим к следующему символу.
} // Конец цикла по символам.
}
return width; // Возвращаем итоговую ширину строки.
} // Конец функции расчета ширины строки.
}
static void update_axis_reflect(int* pos, int* dir, int min_pos, int max_pos) // Обновляем одну координату с зеркальным отражением от границ.
{ // Начало функции обновления координаты.
{
if (max_pos <= min_pos) // Если объект больше доступного диапазона или диапазон вырожден.
{ // Начало обработки вырожденного диапазона.
{
*pos = min_pos; // Фиксируем позицию в единственной доступной точке.
*dir = 0; // Останавливаем движение по этой оси.
return; // Завершаем обработку оси.
} // Конец обработки вырожденного диапазона.
}
*pos += *dir; // Двигаем объект на 1 пиксель по текущему направлению.
if (*pos < min_pos) // Проверяем удар о минимальную границу (верх/лево).
{ // Начало отражения от минимальной границы.
{
*pos = min_pos + (min_pos - *pos); // Зеркально отражаем координату внутрь диапазона.
*dir = -*dir; // Инвертируем направление движения.
} // Конец отражения от минимальной границы.
}
else if (*pos > max_pos) // Проверяем удар о максимальную границу (низ/право).
{ // Начало отражения от максимальной границы.
{
*pos = max_pos - (*pos - max_pos); // Зеркально отражаем координату внутрь диапазона.
*dir = -*dir; // Инвертируем направление движения.
} // Конец отражения от максимальной границы.
} // Конец функции обновления координаты.
}
}
static void on_frame_done(void) {} // Callback завершения DMA-кадра оставлен пустым (логика в main).
@@ -100,19 +100,19 @@ int main()
render_ctx_t rc; // Контекст рендера, который будет привязываться к текущему буферу кадра.
while (1) // Бесконечный основной цикл приложения.
{ // Начало тела основного цикла.
{
display_poll(); // Обрабатываем внутренние события дисплейного движка (например, frame_done flag).
if (!frame_tick_due) // Если тик таймера еще не пришел.
{ // Начало ветки "тика нет".
{
wait_for_irq(); // Спим до прерывания, чтобы не крутить пустой busy-loop.
continue; // Переходим к следующей итерации цикла.
} // Конец ветки "тика нет".
}
frame_tick_due = false; // Сбрасываем флаг и разрешаем обработать ровно один кадр на этот тик.
if (!display_ready()) // Если прошлый кадр все еще передается DMA на дисплей.
{ // Начало ветки "дисплей занят".
{
continue; // Пропускаем этот кадр, не накапливая задержку.
} // Конец ветки "дисплей занят".
}
uint16_t* buf = display_get_draw_buffer(); // Получаем буфер, в который разрешено рисовать текущий кадр.
render_begin(&rc, buf, WIDTH, HEIGHT); // Привязываем контекст рендера к буферу и размерам экрана.
@@ -133,10 +133,10 @@ int main()
phase += 0.16f; // Продвигаем фазу синусоиды для плавной анимации.
if (phase > 6.2831853f) // Если фаза превысила 2*pi.
{ // Начало нормализации фазы.
{
phase -= 6.2831853f; // Возвращаем фазу в базовый диапазон без скачка формы.
} // Конец нормализации фазы.
}
display_submit(); // Отправляем подготовленный кадр на вывод через DMA.
} // Конец тела основного цикла.
} // Конец функции main.
}
}