From 8b7b91eaadae85fd7bb819324e62f8a435459c93 Mon Sep 17 00:00:00 2001 From: Stanislav N Mikhailov Date: Mon, 23 Feb 2026 12:23:55 +0300 Subject: [PATCH] refactor: move display.h to include/display and add CMake build for Thermometr example --- .gitignore | 12 +++- Examples/Thermometr/CMakeLists.txt | 29 +++++++++ Examples/Thermometr/CmakeLists.txt | 0 Examples/Thermometr/src/main.c | 61 +++++++++++++++++++ .../include => include/display}/display.h | 0 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 Examples/Thermometr/CMakeLists.txt delete mode 100644 Examples/Thermometr/CmakeLists.txt create mode 100644 Examples/Thermometr/src/main.c rename {src/core/include => include/display}/display.h (100%) diff --git a/.gitignore b/.gitignore index 4c69388..dd9e49b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,13 @@ build/* -.vscode/* +**/build/ +# CMake +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +compile_commands.json +Makefile +CTestTestfile.cmake +Testing/ +.cmake/ +.vscode/* diff --git a/Examples/Thermometr/CMakeLists.txt b/Examples/Thermometr/CMakeLists.txt new file mode 100644 index 0000000..1930d47 --- /dev/null +++ b/Examples/Thermometr/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.18.4) +include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake) + +project(thermometr_example C CXX ASM) +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Export compile_commands.json" FORCE) + +pico_sdk_init() + +add_executable(${PROJECT_NAME} + src/main.c + ../../src/core/display.c +) + +target_include_directories(${PROJECT_NAME} PRIVATE + ../../include + ../../include/display +) + +target_link_libraries(${PROJECT_NAME} + pico_stdlib + hardware_spi + hardware_dma + hardware_timer + pico_multicore +) + +pico_add_extra_outputs(${PROJECT_NAME}) diff --git a/Examples/Thermometr/CmakeLists.txt b/Examples/Thermometr/CmakeLists.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Examples/Thermometr/src/main.c b/Examples/Thermometr/src/main.c new file mode 100644 index 0000000..27c8dd6 --- /dev/null +++ b/Examples/Thermometr/src/main.c @@ -0,0 +1,61 @@ +#include "pico/stdlib.h" +#include "display/display.h" + + +#define WIDTH 240 +#define HEIGHT 240 + + +static void on_frame_done(void) +{ + // В SAFE режиме swap выполняется внутри submit() + display_submit(); +} + + +static void render_test_pattern(uint16_t* buf) +{ + for (uint16_t y = 0; y < HEIGHT; y++) + { + for (uint16_t x = 0; x < WIDTH; x++) + { + uint16_t r = (x & 0x1F) << 11; + uint16_t g = (y & 0x3F) << 5; + uint16_t b = (x & 0x1F); + + buf[y * WIDTH + x] = r | g | b; + } + } +} + + +int main() +{ + stdio_init_all(); + + display_config_t cfg = { + .width = WIDTH, + .height = HEIGHT, + .buffer_count = 1, + .mode = DISPLAY_MODE_SAFE, + .frame_done_cb = on_frame_done + }; + + display_init(&cfg); + + // Рисуем первый кадр + uint16_t* buf = display_get_draw_buffer(); + render_test_pattern(buf); + + display_submit(); + + while (1) + { + display_poll(); + + // Здесь можно обновлять содержимое буфера + // SAFE + 1 buffer будет ждать окончания DMA + buf = display_get_draw_buffer(); + render_test_pattern(buf); + } +} \ No newline at end of file diff --git a/src/core/include/display.h b/include/display/display.h similarity index 100% rename from src/core/include/display.h rename to include/display/display.h