From f9c5fd9fc325961a325a51296e4f6f80b89524cf Mon Sep 17 00:00:00 2001 From: sc <2401809606@qq.com> Date: Tue, 25 Nov 2025 16:34:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config | 33 +- .cproject | 922 +++++++++++++++++------- .project | 2 +- .settings/language.settings.xml | 2 +- applications/{ => disk}/QSPI_elmfatfs.c | 0 applications/{ => disk}/SDIO_elmfatfs.c | 0 applications/{ => disk}/TMPFS_root.c | 0 applications/{ => disk}/fal_cfg.h | 0 applications/{ => sdram}/sdram_port.c | 0 applications/{ => sdram}/sdram_port.h | 0 applications/{ => sql}/DB_SQLite.c | 0 applications/{ => sql}/DB_SQLite.h | 0 exclude_list.json | 2 +- packages/packages.dbsqlite | Bin 147456 -> 274432 bytes packages/pkgs.json | 5 + rtconfig.h | 8 + 16 files changed, 716 insertions(+), 258 deletions(-) rename applications/{ => disk}/QSPI_elmfatfs.c (100%) rename applications/{ => disk}/SDIO_elmfatfs.c (100%) rename applications/{ => disk}/TMPFS_root.c (100%) rename applications/{ => disk}/fal_cfg.h (100%) rename applications/{ => sdram}/sdram_port.c (100%) rename applications/{ => sdram}/sdram_port.h (100%) rename applications/{ => sql}/DB_SQLite.c (100%) rename applications/{ => sql}/DB_SQLite.h (100%) diff --git a/.config b/.config index d26fa54..7c00849 100644 --- a/.config +++ b/.config @@ -75,7 +75,7 @@ CONFIG_RT_USING_HEAP=y # end of Memory Management CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set +CONFIG_RT_USING_DEVICE_OPS=y # CONFIG_RT_USING_INTERRUPT_INFO is not set # CONFIG_RT_USING_THREADSAFE_PRINTF is not set # CONFIG_RT_USING_SCHED_THREAD_CTX is not set @@ -222,7 +222,7 @@ CONFIG_RT_SFUD_SPI_MAX_HZ=50000000 # CONFIG_RT_USING_AUDIO is not set # CONFIG_RT_USING_SENSOR is not set # CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set +CONFIG_RT_USING_LCD=y # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_PULSE_ENCODER is not set # CONFIG_RT_USING_INPUT_CAPTURE is not set @@ -517,7 +517,34 @@ CONFIG_PKG_CJSON_VER="v1.7.17" # # LVGL: powerful and easy-to-use embedded GUI library # -# CONFIG_PKG_USING_LVGL is not set +CONFIG_PKG_USING_LVGL=y +CONFIG_PKG_LVGL_PATH="/packages/multimedia/LVGL/LVGL" +CONFIG_PKG_LVGL_THREAD_PRIO=20 +CONFIG_PKG_LVGL_THREAD_STACK_SIZE=4096 +CONFIG_PKG_LVGL_DISP_REFR_PERIOD=5 +# CONFIG_PKG_USING_LVGL_SQUARELINE is not set +# CONFIG_PKG_LVGL_USING_EXAMPLES is not set +# CONFIG_PKG_LVGL_USING_DEMOS is not set +CONFIG_PKG_LVGL_USING_V080311=y +# CONFIG_PKG_LVGL_USING_V080310 is not set +# CONFIG_PKG_LVGL_USING_V08039 is not set +# CONFIG_PKG_LVGL_USING_V08038 is not set +# CONFIG_PKG_LVGL_USING_V08037 is not set +# CONFIG_PKG_LVGL_USING_V08036 is not set +# CONFIG_PKG_LVGL_USING_V08035 is not set +# CONFIG_PKG_LVGL_USING_V08034 is not set +# CONFIG_PKG_LVGL_USING_V08033 is not set +# CONFIG_PKG_LVGL_USING_V08032 is not set +# CONFIG_PKG_LVGL_USING_V08031 is not set +# CONFIG_PKG_LVGL_USING_V08030 is not set +# CONFIG_PKG_LVGL_USING_V08020 is not set +# CONFIG_PKG_LVGL_USING_V8_3_LATEST is not set +# CONFIG_PKG_LVGL_USING_V8_4_LATEST is not set +# CONFIG_PKG_LVGL_USING_V09000 is not set +# CONFIG_PKG_LVGL_USING_V09010 is not set +# CONFIG_PKG_LVGL_USING_LATEST is not set +CONFIG_PKG_LVGL_VER_NUM=0x080311 +CONFIG_PKG_LVGL_VER="v8.3.11" # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set # end of LVGL: powerful and easy-to-use embedded GUI library diff --git a/.cproject b/.cproject index 4c2a8f9..3d0bb6a 100644 --- a/.cproject +++ b/.cproject @@ -1,255 +1,673 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project index f059ea4..350c330 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - 828F + project diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 2071896..3f6195d 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/applications/QSPI_elmfatfs.c b/applications/disk/QSPI_elmfatfs.c similarity index 100% rename from applications/QSPI_elmfatfs.c rename to applications/disk/QSPI_elmfatfs.c diff --git a/applications/SDIO_elmfatfs.c b/applications/disk/SDIO_elmfatfs.c similarity index 100% rename from applications/SDIO_elmfatfs.c rename to applications/disk/SDIO_elmfatfs.c diff --git a/applications/TMPFS_root.c b/applications/disk/TMPFS_root.c similarity index 100% rename from applications/TMPFS_root.c rename to applications/disk/TMPFS_root.c diff --git a/applications/fal_cfg.h b/applications/disk/fal_cfg.h similarity index 100% rename from applications/fal_cfg.h rename to applications/disk/fal_cfg.h diff --git a/applications/sdram_port.c b/applications/sdram/sdram_port.c similarity index 100% rename from applications/sdram_port.c rename to applications/sdram/sdram_port.c diff --git a/applications/sdram_port.h b/applications/sdram/sdram_port.h similarity index 100% rename from applications/sdram_port.h rename to applications/sdram/sdram_port.h diff --git a/applications/DB_SQLite.c b/applications/sql/DB_SQLite.c similarity index 100% rename from applications/DB_SQLite.c rename to applications/sql/DB_SQLite.c diff --git a/applications/DB_SQLite.h b/applications/sql/DB_SQLite.h similarity index 100% rename from applications/DB_SQLite.h rename to applications/sql/DB_SQLite.h diff --git a/exclude_list.json b/exclude_list.json index 773c782..4320063 100644 --- a/exclude_list.json +++ b/exclude_list.json @@ -1 +1 @@ -[{"config_name":"Debug","exclude_files":["packages/sqlite-v3.19.3/dbhelper.c","packages/sqlite-v3.19.3/rtthread_vfs.c"]}] \ No newline at end of file +[{"config_name":"Debug","exclude_files":["packages/sqlite-v3.19.3/dbhelper.c","packages/sqlite-v3.19.3/rtthread_vfs.c","applications/lvgl","packages/LVGL-v8.3.11"]}] \ No newline at end of file diff --git a/packages/packages.dbsqlite b/packages/packages.dbsqlite index 2c0b57ee18c9af55781b9b4be4173f22cd888227..844513c0cc9e8d68c7a7502b4f0d43b8c5bd26ec 100644 GIT binary patch delta 20552 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