From 4c4a500f6d1b292213f9125bde5c793a23aad5cf Mon Sep 17 00:00:00 2001 From: Stanislav N Mikhailov Date: Fri, 3 Jan 2025 11:56:13 +0300 Subject: [PATCH] De decomposition --- DrawBezier.c => BackBuffer.c | 35 +++++++++++++++++++++++++++++++++-- BackBuffer.h | 20 ++++++++++++++++++++ CMakeLists.txt | 2 +- DrawBezier.h | 8 -------- Reverse.c | 5 ----- Reverse.h | 4 ---- SetPixel.c | 8 -------- SetPixel.h | 5 ----- SineWave.c | 20 -------------------- SineWave.h | 4 ---- Thread.c | 2 +- Thread.h | 7 +------ font_data.c | 3 +-- main.c | 4 ++-- main.h | 3 +-- 15 files changed, 60 insertions(+), 70 deletions(-) rename DrawBezier.c => BackBuffer.c (55%) create mode 100644 BackBuffer.h delete mode 100644 DrawBezier.h delete mode 100644 Reverse.c delete mode 100644 Reverse.h delete mode 100644 SetPixel.c delete mode 100644 SetPixel.h delete mode 100644 SineWave.c delete mode 100644 SineWave.h diff --git a/DrawBezier.c b/BackBuffer.c similarity index 55% rename from DrawBezier.c rename to BackBuffer.c index 1eae67d..fa61d97 100644 --- a/DrawBezier.c +++ b/BackBuffer.c @@ -1,5 +1,36 @@ -#include "DrawBezier.h" -#include "SetPixel.h" +#include "BackBuffer.h" +#include + +uint16_t frame_buffer[WIDTH * HEIGHT]; // Буфер для экрана +// Установка пикселя в буфере (с проверкой границ) + +unsigned short reverse(unsigned short x) +{ + x = (x & 0xFF) << 8 | (x & 0xFF00) >> 8; + return x; +} + +void set_pixel(uint16_t x, uint16_t y, uint16_t color) { + if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) { + frame_buffer[y * WIDTH + x] = color; + } +} + +void generate_sine_wave_points(uint16_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift) { + if (num_points == 0) { + return; + } + + float step = (2.0f * M_PI * frequency) / (num_points - 1); + float x_step = (float)WIDTH / (num_points - 1); + + for (size_t i = 0; i < num_points; i++) { + int x = offset_x + (int)(i * x_step); + int y = offset_y + (int)(amplitude * sinf(i * step + phase_shift)); // Добавлен сдвиг фазы + set_pixel(x, y, reverse(0b0000011111100000)); + } +} + // Функция для вычисления базисного полинома Бернштейна float bernstein(int i, int n, float t) { // Вычисление биномиального коэффициента C(n, i) diff --git a/BackBuffer.h b/BackBuffer.h new file mode 100644 index 0000000..db1e691 --- /dev/null +++ b/BackBuffer.h @@ -0,0 +1,20 @@ +#ifndef __BACKBUFFER_H__ +#define __BACKBUFFER_H__ + +#include +#include + +#define WIDTH 320 +#define HEIGHT 240 +#define COLOR_BLACK 0x0000 +#define COLOR_WHITE 0xFFFF + +extern uint16_t frame_buffer[WIDTH * HEIGHT]; + +float bernstein(int i, int n, float t); +void draw_bezier(const int *points_x, const int *points_y, size_t num_points, uint16_t color); +unsigned short reverse(unsigned short x); +void set_pixel(uint16_t x, uint16_t y, uint16_t color); +void generate_sine_wave_points(uint16_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift); + +#endif // __BACKBUFFER_H__ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 3073f9f..b93b512 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 17) pico_sdk_init() -add_executable(${PROJECT_NAME} main.c Thread.c DrawBezier.c font_data.c Reverse.c SineWave.c SetPixel.c) +add_executable(${PROJECT_NAME} main.c Thread.c font_data.c BackBuffer.c) target_link_libraries(${PROJECT_NAME} pico_stdlib diff --git a/DrawBezier.h b/DrawBezier.h deleted file mode 100644 index c9c4a9f..0000000 --- a/DrawBezier.h +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include -#include "Thread.h" - - -float bernstein(int i, int n, float t); -void draw_bezier(const int *points_x, const int *points_y, size_t num_points, uint16_t color); \ No newline at end of file diff --git a/Reverse.c b/Reverse.c deleted file mode 100644 index adae891..0000000 --- a/Reverse.c +++ /dev/null @@ -1,5 +0,0 @@ -unsigned short reverse(unsigned short x) -{ - x = (x & 0xFF) << 8 | (x & 0xFF00) >> 8; - return x; -} \ No newline at end of file diff --git a/Reverse.h b/Reverse.h deleted file mode 100644 index 5588c6a..0000000 --- a/Reverse.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef REVERSE_H -#define REVERSE_H -unsigned short reverse(unsigned short x); -#endif \ No newline at end of file diff --git a/SetPixel.c b/SetPixel.c deleted file mode 100644 index 6706a49..0000000 --- a/SetPixel.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "SetPixel.h" -#include "Thread.h" -// Установка пикселя в буфере (с проверкой границ) -void set_pixel(uint16_t x, uint16_t y, uint16_t color) { - if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) { - frame_buffer[y * WIDTH + x] = color; - } -} diff --git a/SetPixel.h b/SetPixel.h deleted file mode 100644 index 6321885..0000000 --- a/SetPixel.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef SET_PIXEL_H -#define SET_PIXEL_H -#include -void set_pixel(uint16_t x, uint16_t y, uint16_t color); -#endif \ No newline at end of file diff --git a/SineWave.c b/SineWave.c deleted file mode 100644 index d0e4db5..0000000 --- a/SineWave.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "SineWave.h" -#include "font_data.h" -#include "Thread.h" -#include "Reverse.h" -#include "SetPixel.h" -#include -void generate_sine_wave_points(size_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift) { - if (num_points == 0) { - return; - } - - float step = (2.0f * M_PI * frequency) / (num_points - 1); - float x_step = (float)WIDTH / (num_points - 1); - - for (size_t i = 0; i < num_points; i++) { - int x = offset_x + (int)(i * x_step); - int y = offset_y + (int)(amplitude * sinf(i * step + phase_shift)); // Добавлен сдвиг фазы - set_pixel(x, y, reverse(0b0000011111100000)); - } -} diff --git a/SineWave.h b/SineWave.h deleted file mode 100644 index ed7023d..0000000 --- a/SineWave.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef SINE_WAVE_H -#define SINE_WAVE_H -void generate_sine_wave_points(size_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift); -#endif \ No newline at end of file diff --git a/Thread.c b/Thread.c index 29ac6f3..d1265ce 100644 --- a/Thread.c +++ b/Thread.c @@ -2,8 +2,8 @@ #include "pico/stdlib.h" #include "hardware/spi.h" #include "pico/multicore.h" +#include "BackBuffer.h" -uint16_t frame_buffer[WIDTH * HEIGHT]; // Буфер для экрана //uint16_t frame_buffer1[WIDTH * HEIGHT]; // Буфер для экрана1 diff --git a/Thread.h b/Thread.h index 967e451..63f215e 100644 --- a/Thread.h +++ b/Thread.h @@ -11,13 +11,8 @@ #define PIN_RST 13 #define PIN_BL 12 -#define WIDTH 320 -#define HEIGHT 240 -#define COLOR_BLACK 0x0000 -#define COLOR_WHITE 0xFFFF -extern uint16_t frame_buffer[WIDTH * HEIGHT]; -extern uint16_t frame_buffer1[WIDTH * HEIGHT]; + void st7789_send_command(uint8_t cmd); void st7789_send_data(uint8_t data); diff --git a/font_data.c b/font_data.c index 17050f1..2a99013 100644 --- a/font_data.c +++ b/font_data.c @@ -1,9 +1,8 @@ // Шрифт, сгенерированный из /home/smikhai/Repo/rp_pico_test/Font/font_grid_with_cyrillic.bmp #include "font_data.h" #include "Thread.h" -#include "SetPixel.h" #include -#include "Reverse.h" +#include "BackBuffer.h" const uint16_t image_linear_width = 704; const uint8_t char_width = 22; const uint8_t char_height = 22; diff --git a/main.c b/main.c index 0766e0d..ceedd44 100644 --- a/main.c +++ b/main.c @@ -2,9 +2,9 @@ #include "Thread.h" #include "pico/multicore.h" #include "pico/stdlib.h" -#include "DrawBezier.h" #include "font_data.h" -#include "Reverse.h" +#include "BackBuffer.h" + int main() { uint16_t red = 0; uint16_t green = 0; diff --git a/main.h b/main.h index c034a87..2b0f46e 100644 --- a/main.h +++ b/main.h @@ -1,5 +1,4 @@ #include void fillBufer (uint16_t* buffer,uint16_t color); -unsigned short reverse(unsigned short x); -void generate_sine_wave_points(size_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift); \ No newline at end of file +//unsigned short reverse(unsigned short x); \ No newline at end of file