sin and ecg

This commit is contained in:
ZhangJinLong 2025-09-26 14:16:44 +08:00
parent 1f3f204b0e
commit ba9da78176
68 changed files with 11136 additions and 6332 deletions

View File

@ -1 +1 @@
8cfd9bd06a8d256eff6735ec8a0a3067 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin 539a7c49b582902925f4a1ed7feaaf69 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -548,7 +548,7 @@ CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_NM //ADVANCED property for variable: CMAKE_NM
CMAKE_NM-ADVANCED:INTERNAL=1 CMAKE_NM-ADVANCED:INTERNAL=1
//number of local generators //number of local generators
CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=127 CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=128
//ADVANCED property for variable: CMAKE_OBJCOPY //ADVANCED property for variable: CMAKE_OBJCOPY
CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_OBJDUMP //ADVANCED property for variable: CMAKE_OBJDUMP

View File

@ -869,6 +869,13 @@ C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFi
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFiles/install.dir C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFiles/install.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFiles/install/local.dir C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFiles/install/local.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFiles/install/strip.dir C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/CMakeFiles/install/strip.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/__idf_signal_generators.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/edit_cache.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/rebuild_cache.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/list_install_components.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/install.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/install/local.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/CMakeFiles/install/strip.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/CMakeFiles/__idf_espressif__esp_lcd_touch.dir C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/CMakeFiles/__idf_espressif__esp_lcd_touch.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/CMakeFiles/edit_cache.dir C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/CMakeFiles/edit_cache.dir
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/CMakeFiles/rebuild_cache.dir C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/CMakeFiles/rebuild_cache.dir

View File

@ -1 +1 @@
8c750b088c7cd857d079c0eeb495da199b359461 ref: refs/heads/master

View File

@ -18,7 +18,7 @@ set(HEAD_HASH)
file(READ "C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/CMakeFiles/git-data/HEAD" HEAD_CONTENTS LIMIT 1024) file(READ "C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/CMakeFiles/git-data/HEAD" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
set(GIT_DIR "C:/Espressif/frameworks/esp-idf-v5.5/.git") set(GIT_DIR "C:/Users/29096/Desktop/work/SIM/SIM_S3_1/.git")
# handle git-worktree # handle git-worktree
if(EXISTS "${GIT_DIR}/commondir") if(EXISTS "${GIT_DIR}/commondir")
file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024) file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024)

View File

@ -1 +1 @@
8c750b088c7cd857d079c0eeb495da199b359461 1f3f204b0ecebdd860e0b512a4f1512f37b33806

View File

@ -1902,6 +1902,25 @@ rule C_STATIC_LIBRARY_LINKER____idf_wifi_provisioning_
restat = $RESTAT restat = $RESTAT
#############################################
# Rule for compiling C files.
rule C_COMPILER____idf_signal_generators_unscanned_
depfile = $DEP_FILE
deps = gcc
command = ccache ${LAUNCHER}${CODE_CHECK}C:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32s3-elf-gcc.exe $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in
description = Building C object $out
#############################################
# Rule for linking C static library.
rule C_STATIC_LIBRARY_LINKER____idf_signal_generators_
command = C:\Windows\system32\cmd.exe /C "$PRE_LINK && C:\Espressif\tools\cmake\3.30.2\bin\cmake.exe -E rm -f $TARGET_FILE && C:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32s3-elf-ar.exe qc $TARGET_FILE $LINK_FLAGS $in && C:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32s3-elf-ranlib.exe $TARGET_FILE && $POST_BUILD"
description = Linking C static library $TARGET_FILE
restat = $RESTAT
############################################# #############################################
# Rule for compiling C files. # Rule for compiling C files.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -268,3 +268,29 @@
42 294 7805000278051082 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec 42 294 7805000278051082 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
50 176 7805000753646142 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec 50 176 7805000753646142 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
50 176 7805000753646142 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec 50 176 7805000753646142 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
46 236 7805582388533403 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
46 236 7805582388533403 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
34 207 7805582564848866 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
34 207 7805582564848866 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
89 399 7805583314101237 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
89 399 7805583314101237 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
84 437 7805583603501760 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
84 437 7805583603501760 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
34 213 7805584546925054 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
34 213 7805584546925054 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
31 153 7805585245398584 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
31 153 7805585245398584 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
31 200 7805587208615268 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
31 200 7805587208615268 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
31 203 7805588050136944 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
31 203 7805588050136944 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
33 169 7805588579474922 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
33 169 7805588579474922 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
33 313 7805693282341620 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
33 313 7805693282341620 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
32 148 7805693698692156 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
32 148 7805693698692156 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
30 186 7805695434134522 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
30 186 7805695434134522 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
30 144 7805695761097735 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
30 144 7805695761097735 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -562,6 +562,11 @@ if(NOT CMAKE_INSTALL_LOCAL_ONLY)
include("C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/cmake_install.cmake") include("C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/cmake_install.cmake")
endif() endif()
if(NOT CMAKE_INSTALL_LOCAL_ONLY)
# Include the install script for the subdirectory.
include("C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/cmake_install.cmake")
endif()
if(NOT CMAKE_INSTALL_LOCAL_ONLY) if(NOT CMAKE_INSTALL_LOCAL_ONLY)
# Include the install script for the subdirectory. # Include the install script for the subdirectory.
include("C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/cmake_install.cmake") include("C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/cmake_install.cmake")

Binary file not shown.

View File

@ -0,0 +1,39 @@
# Install script for directory: C:/Users/29096/Desktop/work/SIM/SIM_S3_1/components/signal_generators
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/SIM_S3_1")
endif()
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
# Set the install configuration name.
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
if(BUILD_TYPE)
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
else()
set(CMAKE_INSTALL_CONFIG_NAME "")
endif()
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
endif()
# Set the component getting installed.
if(NOT CMAKE_INSTALL_COMPONENT)
if(COMPONENT)
message(STATUS "Install component: \"${COMPONENT}\"")
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
else()
set(CMAKE_INSTALL_COMPONENT)
endif()
endif()
# Is this installation the result of a crosscompile?
if(NOT DEFINED CMAKE_CROSSCOMPILING)
set(CMAKE_CROSSCOMPILING "TRUE")
endif()
# Set path to fallback-tool for dependency-resolution.
if(NOT DEFINED CMAKE_OBJDUMP)
set(CMAKE_OBJDUMP "C:/Espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-objdump.exe")
endif()

Binary file not shown.

View File

@ -163,6 +163,7 @@ C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/touch_element/libtouch_el
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/usb/libusb.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/usb/libusb.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/libwifi_provisioning.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/wifi_provisioning/libwifi_provisioning.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/json/libjson.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/json/libjson.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/libsignal_generators.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/libespressif__esp_lcd_touch.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch/libespressif__esp_lcd_touch.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/esp_lcd/libesp_lcd.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/esp_lcd/libesp_lcd.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a
@ -171,5 +172,8 @@ C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/lvgl__lvgl/liblvgl__lvgl.
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lvgl_port/libespressif__esp_lvgl_port.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lvgl_port/libespressif__esp_lvgl_port.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/lvgl__lvgl/liblvgl__lvgl.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/lvgl__lvgl/liblvgl__lvgl.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/main/libmain.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/main/libmain.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/signal_generators/libsignal_generators.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/spiffs/libspiffs.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/fatfs/libfatfs.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a
C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lvgl_port/libespressif__esp_lvgl_port.a C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/esp-idf/espressif__esp_lvgl_port/libespressif__esp_lvgl_port.a

View File

@ -163,6 +163,7 @@ $<TARGET_FILE:idf::touch_element>
$<TARGET_FILE:idf::usb> $<TARGET_FILE:idf::usb>
$<TARGET_FILE:idf::wifi_provisioning> $<TARGET_FILE:idf::wifi_provisioning>
$<TARGET_FILE:__idf_json> $<TARGET_FILE:__idf_json>
$<TARGET_FILE:idf::signal_generators>
$<TARGET_FILE:idf::espressif__esp_lcd_touch> $<TARGET_FILE:idf::espressif__esp_lcd_touch>
$<TARGET_FILE:__idf_esp_lcd> $<TARGET_FILE:__idf_esp_lcd>
$<TARGET_FILE:idf::espressif__esp_lcd_touch_ft5x06> $<TARGET_FILE:idf::espressif__esp_lcd_touch_ft5x06>
@ -171,5 +172,8 @@ $<TARGET_FILE:idf::lvgl__lvgl>
$<TARGET_FILE:idf::espressif__esp_lvgl_port> $<TARGET_FILE:idf::espressif__esp_lvgl_port>
$<TARGET_FILE:__idf_lvgl__lvgl> $<TARGET_FILE:__idf_lvgl__lvgl>
$<TARGET_FILE:idf::main> $<TARGET_FILE:idf::main>
$<TARGET_FILE:__idf_signal_generators>
$<TARGET_FILE:__idf_spiffs>
$<TARGET_FILE:__idf_fatfs>
$<TARGET_FILE:__idf_espressif__esp_lcd_touch_ft5x06> $<TARGET_FILE:__idf_espressif__esp_lcd_touch_ft5x06>
$<TARGET_FILE:__idf_espressif__esp_lvgl_port> $<TARGET_FILE:__idf_espressif__esp_lvgl_port>

View File

@ -0,0 +1 @@
Command: ninja flash

View File

@ -0,0 +1 @@
Command: ninja flash

View File

@ -0,0 +1 @@
Command: ninja flash

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -0,0 +1 @@
Command: ninja all

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -0,0 +1 @@
Command: ninja all

View File

@ -1 +1 @@
Command: ninja all Command: ninja flash

View File

@ -0,0 +1,51 @@
Command: ninja flash
[1/5] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.
[2/5] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[3/5] No install step for 'bootloader'
[4/5] Completed 'bootloader'
[4/5] C:\Windows\system32\cmd.exe /C "cd /D C:\Espressif\frameworks\esp-idf-v5.5\components\esptool_py && C:\Espressif\tools\cmake\3.30.2\bin\cmake.exe -D IDF_PATH=C:/Espressif/frameworks/esp-idf-v5.5 -D SERIAL_TOOL=C:/Espressif/python_env/idf5.5_py3.11_env/Scripts/python.exe;;C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/esptool/esptool.py;--chip;esp32s3 -D SERIAL_TOOL_ARGS=--before=default_reset;--after=hard_reset;write_flash;@flash_args -D WORKING_DIRECTORY=C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build -P C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/run_serial_tool.cmake"
esptool.py --chip esp32s3 -p COM16 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 8MB 0x0 bootloader/bootloader.bin 0x10000 SIM_S3_1.bin 0x8000 partition_table/partition-table.bin
esptool.py v4.9.1
Serial port COM16
Connecting....
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded PSRAM 8MB (AP_3v3)
Crystal is 40MHz
MAC: 64:e8:33:4c:69:b4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00005fff...
Flash will be erased from 0x00010000 to 0x00058fff...
Flash will be erased from 0x00008000 to 0x00008fff...
SHA digest in image updated
Compressed 21088 bytes to 13420...
Writing at 0x00000000... (100 %)
Wrote 21088 bytes (13420 compressed) at 0x00000000 in 0.7 seconds (effective 238.5 kbit/s)...
Hash of data verified.
Compressed 297568 bytes to 155289...
Writing at 0x00010000... (10 %)
Writing at 0x0001cd1c... (20 %)
Writing at 0x00024511... (30 %)
Writing at 0x0002aec2... (40 %)
Writing at 0x000313a5... (50 %)
Writing at 0x0003a51d... (60 %)
Writing at 0x00041c67... (70 %)
Writing at 0x00048ff5... (80 %)
Writing at 0x0004ed7b... (90 %)
Writing at 0x0005571a... (100 %)
Wrote 297568 bytes (155289 compressed) at 0x00010000 in 3.7 seconds (effective 650.9 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 119...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.1 seconds (effective 282.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...

View File

@ -0,0 +1,51 @@
Command: ninja flash
[1/5] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.
[2/5] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[3/5] No install step for 'bootloader'
[4/5] Completed 'bootloader'
[4/5] C:\Windows\system32\cmd.exe /C "cd /D C:\Espressif\frameworks\esp-idf-v5.5\components\esptool_py && C:\Espressif\tools\cmake\3.30.2\bin\cmake.exe -D IDF_PATH=C:/Espressif/frameworks/esp-idf-v5.5 -D SERIAL_TOOL=C:/Espressif/python_env/idf5.5_py3.11_env/Scripts/python.exe;;C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/esptool/esptool.py;--chip;esp32s3 -D SERIAL_TOOL_ARGS=--before=default_reset;--after=hard_reset;write_flash;@flash_args -D WORKING_DIRECTORY=C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build -P C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/run_serial_tool.cmake"
esptool.py --chip esp32s3 -p COM16 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 8MB 0x0 bootloader/bootloader.bin 0x10000 SIM_S3_1.bin 0x8000 partition_table/partition-table.bin
esptool.py v4.9.1
Serial port COM16
Connecting....
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded PSRAM 8MB (AP_3v3)
Crystal is 40MHz
MAC: 64:e8:33:4c:69:b4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00005fff...
Flash will be erased from 0x00010000 to 0x00058fff...
Flash will be erased from 0x00008000 to 0x00008fff...
SHA digest in image updated
Compressed 21088 bytes to 13420...
Writing at 0x00000000... (100 %)
Wrote 21088 bytes (13420 compressed) at 0x00000000 in 0.7 seconds (effective 230.3 kbit/s)...
Hash of data verified.
Compressed 297568 bytes to 155289...
Writing at 0x00010000... (10 %)
Writing at 0x0001cd1c... (20 %)
Writing at 0x00024511... (30 %)
Writing at 0x0002aec2... (40 %)
Writing at 0x000313a5... (50 %)
Writing at 0x0003a51d... (60 %)
Writing at 0x00041c67... (70 %)
Writing at 0x00048ff5... (80 %)
Writing at 0x0004ed7b... (90 %)
Writing at 0x0005571a... (100 %)
Wrote 297568 bytes (155289 compressed) at 0x00010000 in 3.7 seconds (effective 652.0 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 119...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.1 seconds (effective 288.3 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...

View File

@ -0,0 +1,61 @@
Command: ninja flash
[1/10] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/main.c.obj
[2/10] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[3/10] No install step for 'bootloader'
[4/10] Linking C static library esp-idf\main\libmain.a
[5/10] Completed 'bootloader'
[6/10] Generating esp-idf/esp_system/ld/sections.ld
[7/10] Linking CXX executable SIM_S3_1.elf
[8/10] Generating binary image from built executable
esptool.py v4.9.1
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
[9/10] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48830 bytes. Smallest app partition is 0x300000 bytes. 0x2b77d0 bytes (91%) free.
[9/10] C:\Windows\system32\cmd.exe /C "cd /D C:\Espressif\frameworks\esp-idf-v5.5\components\esptool_py && C:\Espressif\tools\cmake\3.30.2\bin\cmake.exe -D IDF_PATH=C:/Espressif/frameworks/esp-idf-v5.5 -D SERIAL_TOOL=C:/Espressif/python_env/idf5.5_py3.11_env/Scripts/python.exe;;C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/esptool/esptool.py;--chip;esp32s3 -D SERIAL_TOOL_ARGS=--before=default_reset;--after=hard_reset;write_flash;@flash_args -D WORKING_DIRECTORY=C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build -P C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/run_serial_tool.cmake"
esptool.py --chip esp32s3 -p COM16 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 8MB 0x0 bootloader/bootloader.bin 0x10000 SIM_S3_1.bin 0x8000 partition_table/partition-table.bin
esptool.py v4.9.1
Serial port COM16
Connecting...
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded PSRAM 8MB (AP_3v3)
Crystal is 40MHz
MAC: 64:e8:33:4c:69:b4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00005fff...
Flash will be erased from 0x00010000 to 0x00058fff...
Flash will be erased from 0x00008000 to 0x00008fff...
SHA digest in image updated
Compressed 21088 bytes to 13420...
Writing at 0x00000000... (100 %)
Wrote 21088 bytes (13420 compressed) at 0x00000000 in 0.7 seconds (effective 238.8 kbit/s)...
Hash of data verified.
Compressed 297008 bytes to 154976...
Writing at 0x00010000... (10 %)
Writing at 0x0001ccd9... (20 %)
Writing at 0x00024545... (30 %)
Writing at 0x0002af0b... (40 %)
Writing at 0x0003137a... (50 %)
Writing at 0x0003a568... (60 %)
Writing at 0x00041d81... (70 %)
Writing at 0x00048f5d... (80 %)
Writing at 0x0004ed1b... (90 %)
Writing at 0x00055699... (100 %)
Wrote 297008 bytes (154976 compressed) at 0x00010000 in 3.7 seconds (effective 647.2 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 119...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.1 seconds (effective 373.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...

View File

@ -0,0 +1,18 @@
Command: ninja all
[1/9] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[2/9] No install step for 'bootloader'
[3/9] Completed 'bootloader'
[4/9] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/main.c.obj
[5/9] Linking C static library esp-idf\main\libmain.a
[6/9] Generating esp-idf/esp_system/ld/sections.ld
[7/9] Linking CXX executable SIM_S3_1.elf
[8/9] Generating binary image from built executable
esptool.py v4.9.1
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
[9/9] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
Command: ninja all
[1/9] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[2/9] No install step for 'bootloader'
[3/9] Completed 'bootloader'
[4/9] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/main.c.obj
[5/9] Linking C static library esp-idf\main\libmain.a
[6/9] Generating esp-idf/esp_system/ld/sections.ld
[7/9] Linking CXX executable SIM_S3_1.elf
[8/9] Generating binary image from built executable
esptool.py v4.9.1
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
[9/9] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
Command: ninja all
[1/4] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.
[2/4] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[3/4] No install step for 'bootloader'
[4/4] Completed 'bootloader'

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
Command: ninja all
[1/9] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[2/9] No install step for 'bootloader'
[3/9] Completed 'bootloader'
[4/9] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/main.c.obj
[5/9] Linking C static library esp-idf\main\libmain.a
[6/9] Generating esp-idf/esp_system/ld/sections.ld
[7/9] Linking CXX executable SIM_S3_1.elf
[8/9] Generating binary image from built executable
esptool.py v4.9.1
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
[9/9] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x48970 bytes. Smallest app partition is 0x300000 bytes. 0x2b7690 bytes (91%) free.

File diff suppressed because one or more lines are too long

View File

@ -1,18 +1,61 @@
Command: ninja all Command: ninja flash
[1/9] Performing build step for 'bootloader' [1/10] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/main.c.obj
[2/10] Performing build step for 'bootloader'
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin" [1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free. Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
[2/9] No install step for 'bootloader' [3/10] No install step for 'bootloader'
[3/9] Completed 'bootloader' [4/10] Linking C static library esp-idf\main\libmain.a
[4/9] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/ecg_generator.c.obj [5/10] Completed 'bootloader'
[5/9] Linking C static library esp-idf\main\libmain.a [6/10] Generating esp-idf/esp_system/ld/sections.ld
[6/9] Generating esp-idf/esp_system/ld/sections.ld [7/10] Linking CXX executable SIM_S3_1.elf
[7/9] Linking CXX executable SIM_S3_1.elf [8/10] Generating binary image from built executable
[8/9] Generating binary image from built executable
esptool.py v4.9.1 esptool.py v4.9.1
Creating esp32s3 image... Creating esp32s3 image...
Merged 2 ELF sections Merged 2 ELF sections
Successfully created esp32s3 image. Successfully created esp32s3 image.
Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
[9/9] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin" [9/10] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
SIM_S3_1.bin binary size 0x47420 bytes. Smallest app partition is 0x300000 bytes. 0x2b8be0 bytes (91%) free. SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.
[9/10] C:\Windows\system32\cmd.exe /C "cd /D C:\Espressif\frameworks\esp-idf-v5.5\components\esptool_py && C:\Espressif\tools\cmake\3.30.2\bin\cmake.exe -D IDF_PATH=C:/Espressif/frameworks/esp-idf-v5.5 -D SERIAL_TOOL=C:/Espressif/python_env/idf5.5_py3.11_env/Scripts/python.exe;;C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/esptool/esptool.py;--chip;esp32s3 -D SERIAL_TOOL_ARGS=--before=default_reset;--after=hard_reset;write_flash;@flash_args -D WORKING_DIRECTORY=C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build -P C:/Espressif/frameworks/esp-idf-v5.5/components/esptool_py/run_serial_tool.cmake"
esptool.py --chip esp32s3 -p COM16 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 8MB 0x0 bootloader/bootloader.bin 0x10000 SIM_S3_1.bin 0x8000 partition_table/partition-table.bin
esptool.py v4.9.1
Serial port COM16
Connecting....
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded PSRAM 8MB (AP_3v3)
Crystal is 40MHz
MAC: 64:e8:33:4c:69:b4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00005fff...
Flash will be erased from 0x00010000 to 0x00058fff...
Flash will be erased from 0x00008000 to 0x00008fff...
SHA digest in image updated
Compressed 21088 bytes to 13420...
Writing at 0x00000000... (100 %)
Wrote 21088 bytes (13420 compressed) at 0x00000000 in 0.7 seconds (effective 237.6 kbit/s)...
Hash of data verified.
Compressed 297568 bytes to 155294...
Writing at 0x00010000... (10 %)
Writing at 0x0001cd14... (20 %)
Writing at 0x00024513... (30 %)
Writing at 0x0002aeb9... (40 %)
Writing at 0x0003138d... (50 %)
Writing at 0x0003a493... (60 %)
Writing at 0x00041c51... (70 %)
Writing at 0x00048fe2... (80 %)
Writing at 0x0004ed6d... (90 %)
Writing at 0x0005570c... (100 %)
Wrote 297568 bytes (155294 compressed) at 0x00010000 in 3.7 seconds (effective 647.8 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 119...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.1 seconds (effective 277.8 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
idf_component_register(
SRCS
"src/ecg_generator.c"
"src/sine_generator.c"
INCLUDE_DIRS
"include"
)

View File

@ -0,0 +1,60 @@
# Signal Generators Library
这是一个ESP32信号生成器库包含ECG心电图生成器和正弦波生成器。
## 功能特性
### ECG生成器 (ecg_generator)
- 生成逼真的心电图信号
- 可调节心率和幅度
- 包含P波、QRS波群、T波
- 支持实时参数调整
### 正弦波生成器 (sine_generator)
- 高频正弦波生成
- 预计算查找表优化
- 支持50kHz采样率
- 内存高效设计
## 使用方法
### ECG生成器
```c
#include "ecg_generator.h"
ecg_generator_t ecg_gen;
ecg_generator_init(&ecg_gen, 250.0f); // 250Hz采样率
ecg_generator_set_heart_rate(&ecg_gen, 75.0f); // 75 BPM
ecg_generator_set_amplitude(&ecg_gen, 5.0f); // 5mV
ecg_generator_start(&ecg_gen);
// 在定时器回调中
float sample = ecg_generator_get_next_sample(&ecg_gen);
```
### 正弦波生成器
```c
#include "sine_generator.h"
sine_generator_t sine_gen;
sine_generator_init(&sine_gen, 50000.0f); // 50kHz采样率
sine_generator_set_frequency(&sine_gen, 200.0f); // 200Hz
sine_generator_set_amplitude(&sine_gen, 5.0f); // 5mV
sine_generator_start(&sine_gen);
// 在定时器回调中
float sample = sine_generator_get_next_sample(&sine_gen);
```
## 性能优化
- ECG生成器实时计算适合低频应用
- 正弦波生成器:预计算查找表,适合高频应用
- 内存管理:自动分配和释放查找表
- 中断友好:最小化中断执行时间
## 依赖项
- ESP-IDF
- math库
- esp_log库

View File

@ -40,6 +40,7 @@ void ecg_generator_start(ecg_generator_t *generator);
void ecg_generator_stop(ecg_generator_t *generator); void ecg_generator_stop(ecg_generator_t *generator);
void ecg_generator_reset(ecg_generator_t *generator); void ecg_generator_reset(ecg_generator_t *generator);
float ecg_generator_get_next_sample(ecg_generator_t *generator); float ecg_generator_get_next_sample(ecg_generator_t *generator);
void ecg_param_set(ecg_generator_t *generator, float amplitude_mv, float heart_rate);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -0,0 +1,46 @@
#ifndef SINE_GENERATOR_H
#define SINE_GENERATOR_H
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
// 正弦波生成器结构体
typedef struct {
// 用户可调参数
float frequency; // 正弦波频率 (Hz)
float amplitude; // 幅值 (V)
// 内部状态
uint32_t sample_count; // 样本计数器
float sample_rate; // 采样率 (Hz)
bool is_running; // 是否正在运行
// 预计算正弦波查找表
float* sine_lookup_table; // 正弦波查找表
uint32_t table_size; // 查找表大小
uint32_t table_index; // 当前索引
} sine_generator_t;
// 函数声明
void sine_generator_init(sine_generator_t *generator, float sample_rate);
void sine_generator_set_frequency(sine_generator_t *generator, float frequency);
void sine_generator_set_amplitude(sine_generator_t *generator, float amplitude_mv);
void sine_generator_start(sine_generator_t *generator);
void sine_generator_stop(sine_generator_t *generator);
void sine_generator_reset(sine_generator_t *generator);
float sine_generator_get_next_sample(sine_generator_t *generator);
void sine_generator_cleanup(sine_generator_t *generator);
// 查找表管理函数
void sine_generator_generate_lookup_table(sine_generator_t *generator);
void sine_generator_free_lookup_table(sine_generator_t *generator);
#ifdef __cplusplus
}
#endif
#endif // SINE_GENERATOR_H

View File

@ -11,7 +11,7 @@ void ecg_generator_init(ecg_generator_t *generator, float sample_rate) {
// 设置默认参数 // 设置默认参数
generator->heart_rate = 75.0f; // 心率75次/分 generator->heart_rate = 75.0f; // 心率75次/分
generator->amplitude = 1.0f; // 幅值1.0V generator->amplitude = 1.0f; // 幅值1.0mV
generator->sample_rate = sample_rate; generator->sample_rate = sample_rate;
generator->is_running = false; generator->is_running = false;
@ -28,6 +28,12 @@ void ecg_generator_init(ecg_generator_t *generator, float sample_rate) {
generator->t_width = 0.05f; // T波宽度 generator->t_width = 0.05f; // T波宽度
} }
void ecg_param_set(ecg_generator_t *generator, float amplitude_mv, float heart_rate) {
if (generator == NULL) return;
ecg_generator_set_heart_rate(generator, heart_rate);
ecg_generator_set_amplitude(generator, amplitude_mv);
}
// 设置心率 // 设置心率
void ecg_generator_set_heart_rate(ecg_generator_t *generator, float heart_rate) { void ecg_generator_set_heart_rate(ecg_generator_t *generator, float heart_rate) {
if (generator == NULL) return; if (generator == NULL) return;

View File

@ -0,0 +1,199 @@
#include "sine_generator.h"
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "esp_log.h"
// 初始化正弦波生成器
void sine_generator_init(sine_generator_t *generator, float sample_rate) {
if (generator == NULL) return;
memset(generator, 0, sizeof(sine_generator_t));
// 设置默认参数
generator->frequency = 200.0f; // 默认200Hz正弦波
generator->amplitude = 1.0f; // 幅值1.0V
generator->sample_rate = sample_rate;
generator->is_running = false;
// 查找表参数
generator->sine_lookup_table = NULL;
generator->table_size = 0;
generator->table_index = 0;
}
// 设置正弦波频率
void sine_generator_set_frequency(sine_generator_t *generator, float frequency) {
if (generator == NULL) return;
// 限制频率范围
if (frequency < 0.1f) frequency = 0.1f;
if (frequency > 10000.0f) frequency = 10000.0f;
generator->frequency = frequency;
// 如果已经运行,重新生成查找表
if (generator->is_running) {
sine_generator_generate_lookup_table(generator);
}
ESP_LOGI("SINE_GEN", "Sine wave frequency set to: %.1f Hz", frequency);
}
// 设置幅值直接输入mV值内部自动转换为DAC输出值
void sine_generator_set_amplitude(sine_generator_t *generator, float amplitude_mv) {
if (generator == NULL) return;
// 硬件衰减系数约38倍 (根据实际测量0.132V → 5mV)
// 对应关系amplitude(V) × 38 ≈ 示波器显示值(mV)
const float attenuation_factor = 38.0f;
// 将mV除以衰减系数得到DAC输出值
float dac_amplitude = amplitude_mv / attenuation_factor;
generator->amplitude = dac_amplitude;
// 如果已经运行,重新生成查找表
if (generator->is_running) {
sine_generator_generate_lookup_table(generator);
}
ESP_LOGI("SINE_GEN", "Sine wave amplitude set to: %.1f mV", amplitude_mv);
}
// 开始生成
void sine_generator_start(sine_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = true;
generator->sample_count = 0;
// 生成查找表
sine_generator_generate_lookup_table(generator);
ESP_LOGI("SINE_GEN", "Sine generator started: %.1f Hz, %.1f mV",
generator->frequency, generator->amplitude * 38.0f);
}
// 停止生成
void sine_generator_stop(sine_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = false;
ESP_LOGI("SINE_GEN", "Sine generator stopped");
}
// 重置生成器
void sine_generator_reset(sine_generator_t *generator) {
if (generator == NULL) return;
generator->sample_count = 0;
generator->table_index = 0;
}
// 获取下一个样本
float sine_generator_get_next_sample(sine_generator_t *generator) {
if (generator == NULL || !generator->is_running) {
return 0.0f;
}
// 使用预计算的查找表,超高速访问
if (generator->sine_lookup_table != NULL && generator->table_size > 0) {
// 从查找表获取预计算的值
float sine_value = generator->sine_lookup_table[generator->table_index];
// 更新索引,循环使用查找表
generator->table_index = (generator->table_index + 1) % generator->table_size;
generator->sample_count++;
return sine_value;
} else {
// 如果查找表未初始化,使用实时计算(备用方案)
float t = (float)generator->sample_count / generator->sample_rate;
float sine_value = generator->amplitude * sinf(2.0f * M_PI * generator->frequency * t);
// 添加偏置电压
float offset = generator->amplitude;
sine_value = sine_value + offset;
// 限制在DAC有效范围内
if (sine_value < 0.0f) sine_value = 0.0f;
if (sine_value > 2.048f) sine_value = 2.048f;
generator->sample_count++;
return sine_value;
}
}
// 生成正弦波查找表
void sine_generator_generate_lookup_table(sine_generator_t *generator) {
if (generator == NULL) return;
// 释放旧的查找表
sine_generator_free_lookup_table(generator);
// 计算查找表大小:一个完整周期的样本数
// 表大小 = 采样率 / 正弦波频率
generator->table_size = (uint32_t)(generator->sample_rate / generator->frequency);
// 确保表大小至少为1
if (generator->table_size < 1) {
generator->table_size = 1;
}
// 分配内存
generator->sine_lookup_table = (float*)malloc(generator->table_size * sizeof(float));
if (generator->sine_lookup_table == NULL) {
ESP_LOGE("SINE_GEN", "Failed to allocate memory for sine lookup table");
generator->table_size = 0;
return;
}
// 预计算正弦波值
for (uint32_t i = 0; i < generator->table_size; i++) {
// 计算时间点
float t = (float)i / generator->sample_rate;
// 计算正弦波值
float sine_value = generator->amplitude * sinf(2.0f * M_PI * generator->frequency * t);
// 添加偏置电压
float offset = generator->amplitude;
sine_value = sine_value + offset;
// 限制在DAC有效范围内
if (sine_value < 0.0f) sine_value = 0.0f;
if (sine_value > 2.048f) sine_value = 2.048f;
generator->sine_lookup_table[i] = sine_value;
}
// 重置索引
generator->table_index = 0;
ESP_LOGI("SINE_GEN", "Generated sine lookup table: %u points, %.1f Hz",
generator->table_size, generator->frequency);
}
// 释放正弦波查找表
void sine_generator_free_lookup_table(sine_generator_t *generator) {
if (generator == NULL) return;
if (generator->sine_lookup_table != NULL) {
free(generator->sine_lookup_table);
generator->sine_lookup_table = NULL;
}
generator->table_size = 0;
generator->table_index = 0;
}
// 清理生成器(释放所有资源)
void sine_generator_cleanup(sine_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = false;
sine_generator_free_lookup_table(generator);
ESP_LOGI("SINE_GEN", "Sine generator cleaned up");
}

View File

@ -1,9 +1,9 @@
idf_component_register(SRCS "esp32_s3_szp.c" "main.c" "app_ui.c" idf_component_register(SRCS "esp32_s3_szp.c" "main.c" "app_ui.c"
SRCS "assets/font_alipuhui20.c" SRCS "assets/font_alipuhui20.c"
SRCS "bt/ble_hidd_demo.c" "bt/esp_hidd_prf_api.c" "bt/hid_dev.c" "bt/hid_device_le_prf.c" SRCS "bt/ble_hidd_demo.c" "bt/esp_hidd_prf_api.c" "bt/hid_dev.c" "bt/hid_device_le_prf.c"
SRCS "ecg_generator.c" EMBED_FILES "sword.pcm"
EMBED_FILES "sword.pcm" INCLUDE_DIRS "."
INCLUDE_DIRS "." INCLUDE_DIRS "bt"
INCLUDE_DIRS "bt") REQUIRES signal_generators bt spiffs esp_wifi nvs_flash fatfs)
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-unused-const-variable) target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-unused-const-variable)

View File

@ -4,92 +4,153 @@
#include <esp_system.h> #include <esp_system.h>
#include <math.h> #include <math.h>
#include "ecg_generator.h" #include "ecg_generator.h"
#include "sine_generator.h"
#include "esp_timer.h" #include "esp_timer.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "freertos/task.h" #include "freertos/task.h"
#include "driver/gpio.h"
EventGroupHandle_t my_event_group; EventGroupHandle_t my_event_group;
// 按键定义
#define BUTTON_PIN GPIO_NUM_0 // 使用GPIO0作为按键输入
#define BUTTON_DEBOUNCE_MS 200 // 防抖时间
static const char *TAG = "MAIN"; static const char *TAG = "MAIN";
// ECG定时器相关 // 信号生成器相关
static ecg_generator_t g_ecg_gen; static ecg_generator_t g_ecg_gen;
static esp_timer_handle_t ecg_timer = NULL; static sine_generator_t g_sine_gen;
static uint32_t ecg_sample_count = 0; static esp_timer_handle_t signal_timer = NULL;
static uint32_t ecg_last_log_time = 0; static uint32_t signal_sample_count = 0;
static uint32_t signal_last_log_time = 0;
static bool use_sine_wave = true; // true=正弦波, false=ECG
// ECG定时器回调函数 // 信号生成器定时器回调函数
static void ecg_timer_callback(void* arg) { static void signal_timer_callback(void* arg) {
// 生成ECG样本 float signal_voltage = 0.0f;
float ecg_voltage = ecg_generator_get_next_sample(&g_ecg_gen);
if (use_sine_wave) {
// 生成正弦波样本
signal_voltage = sine_generator_get_next_sample(&g_sine_gen);
} else {
// 生成ECG样本
signal_voltage = ecg_generator_get_next_sample(&g_ecg_gen);
}
// 输出到DAC通道2 // 输出到DAC通道2
set_channel_voltage(2, ecg_voltage); set_channel_voltage(2, signal_voltage);
ecg_sample_count++; signal_sample_count++;
// 每秒输出一次统计信息 // 减少日志输出频率,避免影响高频中断性能
uint32_t now = esp_timer_get_time() / 1000; // 转换为毫秒 // 每20000个样本输出一次统计信息约1秒
if (now - ecg_last_log_time >= 1000) { if (signal_sample_count >= 20000) {
ESP_LOGI(TAG, "ECG Timer: %u samples in 1s (%.1f Hz)", ESP_LOGI(TAG, "Generated %u samples at 20kHz (%s)",
ecg_sample_count, (float)ecg_sample_count); signal_sample_count, use_sine_wave ? "Sine Wave" : "ECG");
ecg_sample_count = 0; signal_sample_count = 0;
ecg_last_log_time = now; signal_last_log_time = esp_timer_get_time() / 1000;
} }
} }
// 函数声明 // 函数声明
void displayMemoryUsage(void); void displayMemoryUsage(void);
void test_ecg_generation(void); void test_signal_generation(void);
void switch_to_ecg_mode(void);
void switch_to_sine_mode(void);
// ECG测试函数 // 信号生成器测试函数
void test_ecg_generation(void) { void test_signal_generation(void) {
ESP_LOGI(TAG, "=== ECG Generation Test ==="); ESP_LOGI(TAG, "=== Signal Generation Test ===");
// 初始化ECG生成器 // 初始化ECG生成器
ecg_generator_init(&g_ecg_gen, 250.0f); // 250Hz采样率 ecg_generator_init(&g_ecg_gen, 20000.0f); // 20kHz生成率
ecg_param_set(&g_ecg_gen, 5.0f, 75.0f);
// 设置ECG参数 // 初始化正弦波生成器
ecg_generator_set_heart_rate(&g_ecg_gen, 75.0f); // 75次/分 sine_generator_init(&g_sine_gen, 20000.0f); // 20kHz生成率
ecg_generator_set_amplitude(&g_ecg_gen, 5.0f); // 直接设置5mV幅值内部自动转换 sine_generator_set_frequency(&g_sine_gen, 10.0f); // 100Hz正弦波
sine_generator_set_amplitude(&g_sine_gen, 5.0f); // 5mV
// 幅值设置说明:
// ecg_generator_set_amplitude() 现在直接接受mV值
// 内部自动处理硬件衰减系数转换
// 例如set_amplitude(5.0f) → 示波器显示5mV
ESP_LOGI(TAG, "ECG Parameters:");
ESP_LOGI(TAG, " Heart Rate: %.1f BPM", g_ecg_gen.heart_rate);
ESP_LOGI(TAG, " Amplitude: %.1f V", g_ecg_gen.amplitude);
ESP_LOGI(TAG, " Sample Rate: %.1f Hz", g_ecg_gen.sample_rate);
// 创建定时器配置 // 创建定时器配置
const esp_timer_create_args_t timer_args = { const esp_timer_create_args_t timer_args = {
.callback = &ecg_timer_callback, .callback = &signal_timer_callback,
.name = "ecg_timer" .name = "signal_timer"
}; };
// 创建定时器 // 创建定时器
esp_err_t ret = esp_timer_create(&timer_args, &ecg_timer); esp_err_t ret = esp_timer_create(&timer_args, &signal_timer);
if (ret != ESP_OK) { if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to create ECG timer: %s", esp_err_to_name(ret)); ESP_LOGE(TAG, "Failed to create signal timer: %s", esp_err_to_name(ret));
return; return;
} }
// 启动ECG生成器 // 启动信号生成器
ecg_generator_start(&g_ecg_gen); if (use_sine_wave) {
sine_generator_start(&g_sine_gen);
ESP_LOGI(TAG, "Started sine wave generator: 100Hz, 5mV");
} else {
ecg_generator_start(&g_ecg_gen);
ESP_LOGI(TAG, "Started ECG generator: 75 BPM, 5mV");
}
// 启动定时器 (4ms = 250Hz) // 启动定时器 (50us = 20kHz)
ret = esp_timer_start_periodic(ecg_timer, 4000); // 4000微秒 = 4ms ret = esp_timer_start_periodic(signal_timer, 50); // 50微秒 = 20kHz
if (ret != ESP_OK) { if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to start ECG timer: %s", esp_err_to_name(ret)); ESP_LOGE(TAG, "Failed to start signal timer: %s", esp_err_to_name(ret));
esp_timer_delete(ecg_timer); esp_timer_delete(signal_timer);
return; return;
} }
ESP_LOGI(TAG, "ECG timer started at 250Hz (4ms period)"); ESP_LOGI(TAG, "Signal timer started at 20kHz (50us period)");
ESP_LOGI(TAG, "ECG generation is now running..."); }
// 切换到ECG模式
void switch_to_ecg_mode(void) {
if (use_sine_wave) {
sine_generator_stop(&g_sine_gen);
ecg_generator_start(&g_ecg_gen);
use_sine_wave = false;
ESP_LOGI(TAG, "Switched to ECG mode");
}
}
// 切换到正弦波模式
void switch_to_sine_mode(void) {
if (!use_sine_wave) {
ecg_generator_stop(&g_ecg_gen);
sine_generator_start(&g_sine_gen);
use_sine_wave = true;
ESP_LOGI(TAG, "Switched to sine wave mode");
}
}
// 按键初始化
void button_init(void) {
gpio_config_t io_conf = {};
io_conf.intr_type = GPIO_INTR_DISABLE;
io_conf.mode = GPIO_MODE_INPUT;
io_conf.pin_bit_mask = (1ULL << BUTTON_PIN);
io_conf.pull_down_en = 0;
io_conf.pull_up_en = 1; // 启用上拉电阻
gpio_config(&io_conf);
ESP_LOGI(TAG, "Button initialized on GPIO %d", BUTTON_PIN);
}
// 检测按键按下
bool button_pressed(void) {
static uint32_t last_press_time = 0;
uint32_t current_time = esp_timer_get_time() / 1000; // 转换为毫秒
// 检测按键按下(低电平)
if (gpio_get_level(BUTTON_PIN) == 0) {
// 防抖处理
if (current_time - last_press_time > BUTTON_DEBOUNCE_MS) {
last_press_time = current_time;
return true;
}
}
return false;
} }
// 打印内存使用情况 // 打印内存使用情况
@ -123,18 +184,28 @@ void app_main(void)
bsp_i2c_init(); // I2C初始化 bsp_i2c_init(); // I2C初始化
LED_init(); // LED初始化 LED_init(); // LED初始化
init_ad5328(); // DAC初始化 init_ad5328(); // DAC初始化
button_init(); // 按键初始化
my_event_group = xEventGroupCreate(); my_event_group = xEventGroupCreate();
ESP_LOGI(TAG, "Hardware initialization completed."); ESP_LOGI(TAG, "Hardware initialization completed.");
// 启动ECG生成 // 启动信号生成
test_ecg_generation(); test_signal_generation();
// LED状态指示 // LED状态指示
ESP_LOGI(TAG, "Starting LED status indicator..."); ESP_LOGI(TAG, "Starting LED status indicator...");
int led_count = 0; int led_count = 0;
while (true) { while (true) {
// 检测按键按下
if (button_pressed()) {
if (use_sine_wave) {
switch_to_ecg_mode();
} else {
switch_to_sine_mode();
}
}
// LED闪烁指示系统运行 // LED闪烁指示系统运行
gpio_set_level(LED_PIN, 1); // LED亮 gpio_set_level(LED_PIN, 1); // LED亮
vTaskDelay(pdMS_TO_TICKS(1000)); vTaskDelay(pdMS_TO_TICKS(1000));

View File

@ -0,0 +1,10 @@
idf_component_register(
SRCS
"src/ecg_generator.c"
"src/sine_generator.c"
INCLUDE_DIRS
"include"
REQUIRES
esp_log
math
)

View File

@ -0,0 +1,60 @@
# Signal Generators Library
这是一个ESP32信号生成器库包含ECG心电图生成器和正弦波生成器。
## 功能特性
### ECG生成器 (ecg_generator)
- 生成逼真的心电图信号
- 可调节心率和幅度
- 包含P波、QRS波群、T波
- 支持实时参数调整
### 正弦波生成器 (sine_generator)
- 高频正弦波生成
- 预计算查找表优化
- 支持50kHz采样率
- 内存高效设计
## 使用方法
### ECG生成器
```c
#include "ecg_generator.h"
ecg_generator_t ecg_gen;
ecg_generator_init(&ecg_gen, 250.0f); // 250Hz采样率
ecg_generator_set_heart_rate(&ecg_gen, 75.0f); // 75 BPM
ecg_generator_set_amplitude(&ecg_gen, 5.0f); // 5mV
ecg_generator_start(&ecg_gen);
// 在定时器回调中
float sample = ecg_generator_get_next_sample(&ecg_gen);
```
### 正弦波生成器
```c
#include "sine_generator.h"
sine_generator_t sine_gen;
sine_generator_init(&sine_gen, 50000.0f); // 50kHz采样率
sine_generator_set_frequency(&sine_gen, 200.0f); // 200Hz
sine_generator_set_amplitude(&sine_gen, 5.0f); // 5mV
sine_generator_start(&sine_gen);
// 在定时器回调中
float sample = sine_generator_get_next_sample(&sine_gen);
```
## 性能优化
- ECG生成器实时计算适合低频应用
- 正弦波生成器:预计算查找表,适合高频应用
- 内存管理:自动分配和释放查找表
- 中断友好:最小化中断执行时间
## 依赖项
- ESP-IDF
- math库
- esp_log库

View File

@ -0,0 +1,4 @@
## IDF Component Manager Manifest File
dependencies:
esp_log: "*"
math: "*"

View File

@ -0,0 +1,57 @@
#ifndef ECG_GENERATOR_H
#define ECG_GENERATOR_H
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
// ECG生成器结构体
typedef struct {
// 用户可调参数
float heart_rate; // 心率 (次/分)
float amplitude; // 幅值 (V)
// 内部状态
uint32_t sample_count; // 样本计数器
float sample_rate; // 采样率 (Hz)
bool is_running; // 是否正在运行
// 固定波形参数 (保持正常ECG比例)
float p_amp_ratio; // P波幅度比例
float q_amp_ratio; // Q波幅度比例
float r_amp_ratio; // R波幅度比例
float s_amp_ratio; // S波幅度比例
float t_amp_ratio; // T波幅度比例
// 固定时间参数 (保持正常ECG时序)
float p_width; // P波宽度
float qrs_width; // QRS波群宽度
float t_width; // T波宽度
// 预计算ECG查找表
float* ecg_lookup_table; // ECG查找表
uint32_t table_size; // 查找表大小
uint32_t table_index; // 当前索引
} ecg_generator_t;
// 函数声明
void ecg_generator_init(ecg_generator_t *generator, float sample_rate);
void ecg_generator_set_heart_rate(ecg_generator_t *generator, float heart_rate);
void ecg_generator_set_amplitude(ecg_generator_t *generator, float amplitude_mv); // 直接输入mV值内部自动转换
void ecg_generator_start(ecg_generator_t *generator);
void ecg_generator_stop(ecg_generator_t *generator);
void ecg_generator_reset(ecg_generator_t *generator);
float ecg_generator_get_next_sample(ecg_generator_t *generator);
void ecg_generator_generate_lookup_table(ecg_generator_t *generator);
void ecg_generator_free_lookup_table(ecg_generator_t *generator);
void ecg_generator_cleanup(ecg_generator_t *generator);
void ecg_param_set(ecg_generator_t *generator, float amplitude_mv, float heart_rate);
#ifdef __cplusplus
}
#endif
#endif // ECG_GENERATOR_H

View File

@ -0,0 +1,46 @@
#ifndef SINE_GENERATOR_H
#define SINE_GENERATOR_H
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
// 正弦波生成器结构体
typedef struct {
// 用户可调参数
float frequency; // 正弦波频率 (Hz)
float amplitude; // 幅值 (V)
// 内部状态
uint32_t sample_count; // 样本计数器
float sample_rate; // 采样率 (Hz)
bool is_running; // 是否正在运行
// 预计算正弦波查找表
float* sine_lookup_table; // 正弦波查找表
uint32_t table_size; // 查找表大小
uint32_t table_index; // 当前索引
} sine_generator_t;
// 函数声明
void sine_generator_init(sine_generator_t *generator, float sample_rate);
void sine_generator_set_frequency(sine_generator_t *generator, float frequency);
void sine_generator_set_amplitude(sine_generator_t *generator, float amplitude_mv);
void sine_generator_start(sine_generator_t *generator);
void sine_generator_stop(sine_generator_t *generator);
void sine_generator_reset(sine_generator_t *generator);
float sine_generator_get_next_sample(sine_generator_t *generator);
void sine_generator_cleanup(sine_generator_t *generator);
// 查找表管理函数
void sine_generator_generate_lookup_table(sine_generator_t *generator);
void sine_generator_free_lookup_table(sine_generator_t *generator);
#ifdef __cplusplus
}
#endif
#endif // SINE_GENERATOR_H

View File

@ -0,0 +1,274 @@
#include "ecg_generator.h"
#include <math.h>
#include <string.h>
#include "esp_log.h"
// 初始化ECG生成器
void ecg_generator_init(ecg_generator_t *generator, float sample_rate) {
if (generator == NULL) return;
memset(generator, 0, sizeof(ecg_generator_t));
// 设置默认参数
generator->heart_rate = 75.0f; // 心率75次/分
generator->amplitude = 1.0f; // 幅值1.0mV
generator->sample_rate = sample_rate;
generator->is_running = false;
// 固定波形参数 (保持正常ECG比例)
generator->p_amp_ratio = 0.2f; // P波幅度比例
generator->q_amp_ratio = 0.3f; // Q波幅度比例
generator->r_amp_ratio = 1.0f; // R波幅度比例
generator->s_amp_ratio = 0.4f; // S波幅度比例
generator->t_amp_ratio = 0.4f; // T波幅度比例
// 固定时间参数 (保持正常ECG时序)
generator->p_width = 0.03f; // P波宽度
generator->qrs_width = 0.01f; // QRS波群宽度
generator->t_width = 0.05f; // T波宽度
// 初始化查找表
generator->ecg_lookup_table = NULL;
generator->table_size = 0;
generator->table_index = 0;
// 生成初始查找表
ecg_generator_generate_lookup_table(generator);
}
void ecg_param_set(ecg_generator_t *generator, float amplitude_mv, float heart_rate) {
if (generator == NULL) return;
ecg_generator_set_heart_rate(generator, heart_rate);
ecg_generator_set_amplitude(generator, amplitude_mv);
}
// 设置心率
void ecg_generator_set_heart_rate(ecg_generator_t *generator, float heart_rate) {
if (generator == NULL) return;
// 限制心率范围
if (heart_rate < 30.0f) heart_rate = 30.0f;
if (heart_rate > 200.0f) heart_rate = 200.0f;
generator->heart_rate = heart_rate;
// 心率改变时重新生成查找表
ecg_generator_generate_lookup_table(generator);
}
// 设置幅值直接输入mV值内部自动转换为DAC输出值
void ecg_generator_set_amplitude(ecg_generator_t *generator, float amplitude_mv) {
if (generator == NULL) return;
// 硬件衰减系数约38倍 (根据实际测量0.132V → 5mV)
// 对应关系amplitude(V) × 38 ≈ 示波器显示值(mV)
const float attenuation_factor = 38.0f;
// 将mV除以衰减系数得到DAC输出值
float dac_amplitude = amplitude_mv / attenuation_factor;
generator->amplitude = dac_amplitude;
// 幅值改变时重新生成查找表
ecg_generator_generate_lookup_table(generator);
}
// 开始生成
void ecg_generator_start(ecg_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = true;
generator->sample_count = 0;
generator->table_index = 0; // 重置查找表索引
}
// 停止生成
void ecg_generator_stop(ecg_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = false;
}
// 重置生成器
void ecg_generator_reset(ecg_generator_t *generator) {
if (generator == NULL) return;
generator->sample_count = 0;
generator->table_index = 0; // 重置查找表索引
}
// 获取下一个样本 - 使用查找表优化
float ecg_generator_get_next_sample(ecg_generator_t *generator) {
if (generator == NULL || !generator->is_running) {
return 0.0f;
}
if (generator->ecg_lookup_table != NULL && generator->table_size > 0) {
// 使用查找表
float ecg_value = generator->ecg_lookup_table[generator->table_index];
generator->table_index = (generator->table_index + 1) % generator->table_size;
generator->sample_count++;
return ecg_value;
} else {
// 查找表未准备好,使用实时计算(备用方案)
return ecg_generator_calculate_sample_realtime(generator);
}
}
// 实时计算ECG样本备用方案
float ecg_generator_calculate_sample_realtime(ecg_generator_t *generator) {
// 计算RR间期 (秒)
float rr_interval = 60.0f / generator->heart_rate;
// 计算当前时间
float t = (float)generator->sample_count / generator->sample_rate;
// 周期内时间
float t_mod = fmodf(t, rr_interval);
// 归一化时间到0-1范围相对于RR间期的比例
float t_norm = t_mod / rr_interval;
// 计算各波幅度
float p_amp = generator->amplitude * generator->p_amp_ratio;
float q_amp = generator->amplitude * generator->q_amp_ratio;
float r_amp = generator->amplitude * generator->r_amp_ratio;
float s_amp = generator->amplitude * generator->s_amp_ratio;
float t_amp = generator->amplitude * generator->t_amp_ratio;
// 时间参数相对于RR间期的比例 - 根据Python代码修正
float p_time_ratio = 0.125f; // P波位置12.5%
float q_time_ratio = 0.3125f; // Q波位置31.25%
float r_time_ratio = 0.3375f; // R波位置33.75%
float s_time_ratio = 0.3625f; // S波位置36.25%
float t_time_ratio = 0.625f; // T波位置62.5%
// 宽度参数相对于RR间期的比例 - 修正QRS宽度使其充分重叠
float p_width_ratio = 0.0375f; // P波宽度0.03/0.8 = 3.75%
float qrs_width_ratio = 0.0125f; // QRS宽度增加到2.5%确保Q、R、S充分重叠
float t_width_ratio = 0.0625f; // T波宽度0.05/0.8 = 6.25%
// P波 - 修正后的计算
float p = p_amp * expf(-(t_norm - p_time_ratio) * (t_norm - p_time_ratio) / (2.0f * p_width_ratio * p_width_ratio));
// QRS波群 - 修正后的计算
float q = -q_amp * expf(-(t_norm - q_time_ratio) * (t_norm - q_time_ratio) / (2.0f * qrs_width_ratio * qrs_width_ratio));
float r = r_amp * expf(-(t_norm - r_time_ratio) * (t_norm - r_time_ratio) / (2.0f * qrs_width_ratio * qrs_width_ratio));
float s = -s_amp * expf(-(t_norm - s_time_ratio) * (t_norm - s_time_ratio) / (2.0f * qrs_width_ratio * qrs_width_ratio));
float qrs = q + r + s;
// T波 - 修正后的计算
float t_wave = t_amp * expf(-(t_norm - t_time_ratio) * (t_norm - t_time_ratio) / (2.0f * t_width_ratio * t_width_ratio));
// 组合波形
float ecg_value = p + qrs + t_wave;
// 添加偏置电压将ECG波形平移到DAC有效范围
float offset = generator->amplitude; // 偏置电压
ecg_value = ecg_value + offset;
// 限制在DAC有效范围内 (0V 到 2.048V)
if (ecg_value < 0.0f) ecg_value = 0.0f;
if (ecg_value > 2.048f) ecg_value = 2.048f;
generator->sample_count++;
return ecg_value;
}
// 生成ECG查找表
void ecg_generator_generate_lookup_table(ecg_generator_t *generator) {
if (generator == NULL) return;
// 释放旧的查找表
ecg_generator_free_lookup_table(generator);
// 计算查找表大小一个完整RR间期的样本数
// 表大小 = 生成率 / 心率频率
float heart_rate_freq = generator->heart_rate / 60.0f; // 转换为Hz
generator->table_size = (uint32_t)(generator->sample_rate / heart_rate_freq);
// 确保表大小至少为1
if (generator->table_size < 1) {
generator->table_size = 1;
}
// 分配内存
generator->ecg_lookup_table = (float*)malloc(generator->table_size * sizeof(float));
if (generator->ecg_lookup_table == NULL) {
ESP_LOGE("ECG_GEN", "Failed to allocate memory for ECG lookup table");
generator->table_size = 0;
return;
}
// 预计算ECG波形值
for (uint32_t i = 0; i < generator->table_size; i++) {
// 计算归一化时间 (0-1)
float t_norm = (float)i / generator->table_size;
// 计算各波幅度
float p_amp = generator->amplitude * generator->p_amp_ratio;
float q_amp = generator->amplitude * generator->q_amp_ratio;
float r_amp = generator->amplitude * generator->r_amp_ratio;
float s_amp = generator->amplitude * generator->s_amp_ratio;
float t_amp = generator->amplitude * generator->t_amp_ratio;
// 时间参数相对于RR间期的比例
float p_time_ratio = 0.125f; // P波位置12.5%
float q_time_ratio = 0.3125f; // Q波位置31.25%
float r_time_ratio = 0.3375f; // R波位置33.75%
float s_time_ratio = 0.3625f; // S波位置36.25%
float t_time_ratio = 0.625f; // T波位置62.5%
// 宽度参数相对于RR间期的比例
float p_width_ratio = 0.0375f; // P波宽度3.75%
float qrs_width_ratio = 0.0125f; // QRS宽度1.25%
float t_width_ratio = 0.0625f; // T波宽度6.25%
// P波计算
float p = p_amp * expf(-(t_norm - p_time_ratio) * (t_norm - p_time_ratio) / (2.0f * p_width_ratio * p_width_ratio));
// QRS波群计算
float q = -q_amp * expf(-(t_norm - q_time_ratio) * (t_norm - q_time_ratio) / (2.0f * qrs_width_ratio * qrs_width_ratio));
float r = r_amp * expf(-(t_norm - r_time_ratio) * (t_norm - r_time_ratio) / (2.0f * qrs_width_ratio * qrs_width_ratio));
float s = -s_amp * expf(-(t_norm - s_time_ratio) * (t_norm - s_time_ratio) / (2.0f * qrs_width_ratio * qrs_width_ratio));
float qrs = q + r + s;
// T波计算
float t_wave = t_amp * expf(-(t_norm - t_time_ratio) * (t_norm - t_time_ratio) / (2.0f * t_width_ratio * t_width_ratio));
// 组合波形
float ecg_value = p + qrs + t_wave;
// 添加偏置电压
float offset = generator->amplitude;
ecg_value = ecg_value + offset;
// 限制在DAC有效范围内
if (ecg_value < 0.0f) ecg_value = 0.0f;
if (ecg_value > 2.048f) ecg_value = 2.048f;
generator->ecg_lookup_table[i] = ecg_value;
}
generator->table_index = 0; // 重置索引
ESP_LOGI("ECG_GEN", "Generated ECG lookup table: %u points, %.1f BPM", generator->table_size, generator->heart_rate);
}
// 释放ECG查找表
void ecg_generator_free_lookup_table(ecg_generator_t *generator) {
if (generator == NULL) return;
if (generator->ecg_lookup_table != NULL) {
free(generator->ecg_lookup_table);
generator->ecg_lookup_table = NULL;
}
generator->table_size = 0;
generator->table_index = 0;
}
// 清理ECG生成器
void ecg_generator_cleanup(ecg_generator_t *generator) {
if (generator == NULL) return;
ecg_generator_stop(generator);
ecg_generator_free_lookup_table(generator);
ESP_LOGI("ECG_GEN", "ECG generator cleaned up.");
}

View File

@ -0,0 +1,199 @@
#include "sine_generator.h"
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "esp_log.h"
// 初始化正弦波生成器
void sine_generator_init(sine_generator_t *generator, float sample_rate) {
if (generator == NULL) return;
memset(generator, 0, sizeof(sine_generator_t));
// 设置默认参数
generator->frequency = 200.0f; // 默认200Hz正弦波
generator->amplitude = 1.0f; // 幅值1.0V
generator->sample_rate = sample_rate;
generator->is_running = false;
// 查找表参数
generator->sine_lookup_table = NULL;
generator->table_size = 0;
generator->table_index = 0;
}
// 设置正弦波频率
void sine_generator_set_frequency(sine_generator_t *generator, float frequency) {
if (generator == NULL) return;
// 限制频率范围
if (frequency < 0.1f) frequency = 0.1f;
if (frequency > 10000.0f) frequency = 10000.0f;
generator->frequency = frequency;
// 如果已经运行,重新生成查找表
if (generator->is_running) {
sine_generator_generate_lookup_table(generator);
}
ESP_LOGI("SINE_GEN", "Sine wave frequency set to: %.1f Hz", frequency);
}
// 设置幅值直接输入mV值内部自动转换为DAC输出值
void sine_generator_set_amplitude(sine_generator_t *generator, float amplitude_mv) {
if (generator == NULL) return;
// 硬件衰减系数约38倍 (根据实际测量0.132V → 5mV)
// 对应关系amplitude(V) × 38 ≈ 示波器显示值(mV)
const float attenuation_factor = 38.0f;
// 将mV除以衰减系数得到DAC输出值
float dac_amplitude = amplitude_mv / attenuation_factor;
generator->amplitude = dac_amplitude;
// 如果已经运行,重新生成查找表
if (generator->is_running) {
sine_generator_generate_lookup_table(generator);
}
ESP_LOGI("SINE_GEN", "Sine wave amplitude set to: %.1f mV", amplitude_mv);
}
// 开始生成
void sine_generator_start(sine_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = true;
generator->sample_count = 0;
// 生成查找表
sine_generator_generate_lookup_table(generator);
ESP_LOGI("SINE_GEN", "Sine generator started: %.1f Hz, %.1f mV",
generator->frequency, generator->amplitude * 38.0f);
}
// 停止生成
void sine_generator_stop(sine_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = false;
ESP_LOGI("SINE_GEN", "Sine generator stopped");
}
// 重置生成器
void sine_generator_reset(sine_generator_t *generator) {
if (generator == NULL) return;
generator->sample_count = 0;
generator->table_index = 0;
}
// 获取下一个样本
float sine_generator_get_next_sample(sine_generator_t *generator) {
if (generator == NULL || !generator->is_running) {
return 0.0f;
}
// 使用预计算的查找表,超高速访问
if (generator->sine_lookup_table != NULL && generator->table_size > 0) {
// 从查找表获取预计算的值
float sine_value = generator->sine_lookup_table[generator->table_index];
// 更新索引,循环使用查找表
generator->table_index = (generator->table_index + 1) % generator->table_size;
generator->sample_count++;
return sine_value;
} else {
// 如果查找表未初始化,使用实时计算(备用方案)
float t = (float)generator->sample_count / generator->sample_rate;
float sine_value = generator->amplitude * sinf(2.0f * M_PI * generator->frequency * t);
// 添加偏置电压
float offset = generator->amplitude;
sine_value = sine_value + offset;
// 限制在DAC有效范围内
if (sine_value < 0.0f) sine_value = 0.0f;
if (sine_value > 2.048f) sine_value = 2.048f;
generator->sample_count++;
return sine_value;
}
}
// 生成正弦波查找表
void sine_generator_generate_lookup_table(sine_generator_t *generator) {
if (generator == NULL) return;
// 释放旧的查找表
sine_generator_free_lookup_table(generator);
// 计算查找表大小:一个完整周期的样本数
// 表大小 = 采样率 / 正弦波频率
generator->table_size = (uint32_t)(generator->sample_rate / generator->frequency);
// 确保表大小至少为1
if (generator->table_size < 1) {
generator->table_size = 1;
}
// 分配内存
generator->sine_lookup_table = (float*)malloc(generator->table_size * sizeof(float));
if (generator->sine_lookup_table == NULL) {
ESP_LOGE("SINE_GEN", "Failed to allocate memory for sine lookup table");
generator->table_size = 0;
return;
}
// 预计算正弦波值
for (uint32_t i = 0; i < generator->table_size; i++) {
// 计算时间点
float t = (float)i / generator->sample_rate;
// 计算正弦波值
float sine_value = generator->amplitude * sinf(2.0f * M_PI * generator->frequency * t);
// 添加偏置电压
float offset = generator->amplitude;
sine_value = sine_value + offset;
// 限制在DAC有效范围内
if (sine_value < 0.0f) sine_value = 0.0f;
if (sine_value > 2.048f) sine_value = 2.048f;
generator->sine_lookup_table[i] = sine_value;
}
// 重置索引
generator->table_index = 0;
ESP_LOGI("SINE_GEN", "Generated sine lookup table: %u points, %.1f Hz",
generator->table_size, generator->frequency);
}
// 释放正弦波查找表
void sine_generator_free_lookup_table(sine_generator_t *generator) {
if (generator == NULL) return;
if (generator->sine_lookup_table != NULL) {
free(generator->sine_lookup_table);
generator->sine_lookup_table = NULL;
}
generator->table_size = 0;
generator->table_index = 0;
}
// 清理生成器(释放所有资源)
void sine_generator_cleanup(sine_generator_t *generator) {
if (generator == NULL) return;
generator->is_running = false;
sine_generator_free_lookup_table(generator);
ESP_LOGI("SINE_GEN", "Sine generator cleaned up");
}