From 7e4ce4a1cd12d43e519f2e318fdd434aaabba60e Mon Sep 17 00:00:00 2001 From: Johnny Hsu Date: Mon, 31 Mar 2025 17:48:00 +0200 Subject: [PATCH] discard previous trial, tried display with internal frame buffer --- Hardware/Lib/KiCAD_Libraries | 2 +- Software/.cproject | 428 -- Software/.mxproject | 61 +- Software/.project | 33 - Software/.stm32env | 7 + Software/Core/Inc/b_cccv_algo.h | 43 - Software/Core/Inc/can-halal.h | 62 - Software/Core/Inc/can.h | 22 - Software/Core/Inc/charge_ctrl_test_shell.h | 17 - Software/Core/Inc/charger_control.h | 39 - Software/Core/Inc/main.h | 11 +- Software/Core/Inc/nema_hal.c | 26 - Software/Core/Inc/slave_handler.h | 46 - Software/Core/Inc/stm32h7xx_it.h | 14 +- Software/Core/Src/b_cccv_algo.c | 205 - Software/Core/Src/can-halal.c | 273 - Software/Core/Src/can.c | 57 - Software/Core/Src/charge_ctrl_test_shell.c | 69 - Software/Core/Src/charger_control.c | 168 - Software/Core/Src/main.c | 144 +- Software/Core/Src/slave_handler.c | 70 - Software/Core/Src/stm32h7xx_hal_msp.c | 35 +- Software/Core/Src/stm32h7xx_it.c | 29 +- Software/Core/Src/syscalls.c | 110 +- Software/Core/Src/sysmem.c | 15 +- Software/Core/Src/system_stm32h7xx.c | 1007 ++-- Software/FT23_Charger.ioc | 229 +- Software/FT23_Charger.launch | 78 - Software/Makefile | 222 + Software/STM32-for-VSCode.config.yaml | 112 + Software/STM32H7A3ZITX_RAM.ld | 181 - Software/STM32Make.make | 375 ++ Software/TouchGFX/App/app_touchgfx.c | 74 - Software/TouchGFX/App/app_touchgfx.h | 58 - .../ApplicationTemplate.touchgfx.part | 30 - Software/TouchGFX/FT23_Charger.touchgfx | 92 - Software/TouchGFX/application.config | 22 - Software/TouchGFX/assets/fonts/verdana.ttf | Bin 243304 -> 0 bytes ...n_regular_height_50_large_round_action.png | Bin 1898 -> 0 bytes ..._regular_height_50_large_round_pressed.png | Bin 2267 -> 0 bytes Software/TouchGFX/assets/texts/texts.xsd | 160 - .../TouchGFX/target/STM32TouchController.cpp | 52 - .../TouchGFX/target/STM32TouchController.hpp | 72 - Software/TouchGFX/target/TouchGFXGPIO.cpp | 176 - Software/TouchGFX/target/TouchGFXHAL.cpp | 163 - Software/TouchGFX/target/TouchGFXHAL.hpp | 171 - .../TouchGFX/target/generated/OSWrappers.cpp | 162 - .../TouchGFX/target/generated/STM32DMA.cpp | 42 - .../TouchGFX/target/generated/STM32DMA.hpp | 93 - .../generated/TouchGFXConfiguration.cpp | 78 - .../target/generated/TouchGFXGeneratedHAL.cpp | 187 - .../target/generated/TouchGFXGeneratedHAL.hpp | 213 - Software/build/FT23_Charger.map | 5178 +++++++++++++++++ Software/openocd.cfg | 8 + ..._stm32h7a3zitx.s => startup_stm32h7a3xx.s} | 0 ...A3ZITX_FLASH.ld => stm32h7a3zitx_flash.ld} | 369 +- 56 files changed, 6904 insertions(+), 4686 deletions(-) delete mode 100644 Software/.cproject delete mode 100644 Software/.project create mode 100644 Software/.stm32env delete mode 100644 Software/Core/Inc/b_cccv_algo.h delete mode 100644 Software/Core/Inc/can-halal.h delete mode 100644 Software/Core/Inc/can.h delete mode 100644 Software/Core/Inc/charge_ctrl_test_shell.h delete mode 100644 Software/Core/Inc/charger_control.h delete mode 100644 Software/Core/Inc/nema_hal.c delete mode 100644 Software/Core/Inc/slave_handler.h delete mode 100644 Software/Core/Src/b_cccv_algo.c delete mode 100644 Software/Core/Src/can-halal.c delete mode 100644 Software/Core/Src/can.c delete mode 100644 Software/Core/Src/charge_ctrl_test_shell.c delete mode 100644 Software/Core/Src/charger_control.c delete mode 100644 Software/Core/Src/slave_handler.c delete mode 100644 Software/FT23_Charger.launch create mode 100644 Software/Makefile create mode 100644 Software/STM32-for-VSCode.config.yaml delete mode 100644 Software/STM32H7A3ZITX_RAM.ld create mode 100644 Software/STM32Make.make delete mode 100644 Software/TouchGFX/App/app_touchgfx.c delete mode 100644 Software/TouchGFX/App/app_touchgfx.h delete mode 100644 Software/TouchGFX/ApplicationTemplate.touchgfx.part delete mode 100644 Software/TouchGFX/FT23_Charger.touchgfx delete mode 100644 Software/TouchGFX/application.config delete mode 100644 Software/TouchGFX/assets/fonts/verdana.ttf delete mode 100644 Software/TouchGFX/assets/images/__generated/alternate_theme_images_widgets_button_regular_height_50_large_round_action.png delete mode 100644 Software/TouchGFX/assets/images/__generated/alternate_theme_images_widgets_button_regular_height_50_large_round_pressed.png delete mode 100644 Software/TouchGFX/assets/texts/texts.xsd delete mode 100644 Software/TouchGFX/target/STM32TouchController.cpp delete mode 100644 Software/TouchGFX/target/STM32TouchController.hpp delete mode 100644 Software/TouchGFX/target/TouchGFXGPIO.cpp delete mode 100644 Software/TouchGFX/target/TouchGFXHAL.cpp delete mode 100644 Software/TouchGFX/target/TouchGFXHAL.hpp delete mode 100644 Software/TouchGFX/target/generated/OSWrappers.cpp delete mode 100644 Software/TouchGFX/target/generated/STM32DMA.cpp delete mode 100644 Software/TouchGFX/target/generated/STM32DMA.hpp delete mode 100644 Software/TouchGFX/target/generated/TouchGFXConfiguration.cpp delete mode 100644 Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp delete mode 100644 Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp create mode 100644 Software/build/FT23_Charger.map create mode 100644 Software/openocd.cfg rename Software/{Core/Startup/startup_stm32h7a3zitx.s => startup_stm32h7a3xx.s} (100%) rename Software/{STM32H7A3ZITX_FLASH.ld => stm32h7a3zitx_flash.ld} (58%) diff --git a/Hardware/Lib/KiCAD_Libraries b/Hardware/Lib/KiCAD_Libraries index 624533a..b15be55 160000 --- a/Hardware/Lib/KiCAD_Libraries +++ b/Hardware/Lib/KiCAD_Libraries @@ -1 +1 @@ -Subproject commit 624533a150f7256a011a23ce93407e9123ce12fb +Subproject commit b15be55d65b357b8fe436e5c51fd7f6cef9aa4df diff --git a/Software/.cproject b/Software/.cproject deleted file mode 100644 index 6da9789..0000000 --- a/Software/.cproject +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Software/.mxproject b/Software/.mxproject index 288ef8e..d41ad76 100644 --- a/Software/.mxproject +++ b/Software/.mxproject @@ -1,46 +1,25 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=../Core/Inc/stm32h7xx_it.h +HeaderFiles#1=../Core/Inc/stm32h7xx_hal_conf.h +HeaderFiles#2=../Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=../Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=../Core/Src/stm32h7xx_it.c +SourceFiles#1=../Core/Src/stm32h7xx_hal_msp.c +SourceFiles#2=../Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=../Core/Src +SourceFiles=; + [PreviousLibFiles] LibFiles=Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_cortex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_cortex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_crc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_crc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_crc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_bus.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_rcc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_crs.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_system.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_utils.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_flash.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_flash_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_gpio.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_gpio_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_gpio.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_hsem.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_hsem.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_dma.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_dmamux.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mdma.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pwr.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pwr_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_pwr.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_def.h;Drivers/STM32H7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_i2c.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_i2c_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_exti.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_exti.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_fdcan.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_fmc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_nor.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sram.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_nand.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sdram.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_i2c.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ltdc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ltdc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_sdmmc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sd.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_delayblock.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sd_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mmc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mmc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_uart.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_usart.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_lpuart.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_uart_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pcd.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pcd_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_usb.h;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_cortex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_cortex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_crc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_crc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_crc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_bus.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_rcc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_crs.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_system.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_utils.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_flash.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_flash_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_gpio.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_gpio_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_gpio.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_hsem.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_hsem.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_dma.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_dmamux.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mdma.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pwr.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pwr_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_pwr.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_def.h;Drivers/STM32H7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_i2c.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_i2c_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_exti.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_exti.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_fdcan.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_fmc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_nor.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sram.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_nand.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sdram.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_i2c.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ltdc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ltdc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_sdmmc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sd.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_delayblock.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sd_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mmc.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mmc_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_uart.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_usart.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_lpuart.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_uart_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pcd.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pcd_ex.h;Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_usb.h;Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7a3xx.h;Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h;Drivers/CMSIS/Device/ST/STM32H7xx/Include/system_stm32h7xx.h;Drivers/CMSIS/Device/ST/STM32H7xx/Include/system_stm32h7xx.h;Drivers/CMSIS/Device/ST/STM32H7xx/Source/Templates/system_stm32h7xx.c;Drivers/CMSIS/Include/core_armv81mml.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm35p.h;Drivers/CMSIS/Include/cmsis_armclang_ltm.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/cmsis_version.h; -[PreviousUsedCubeIDEFiles] -SourceFiles=Core/Src/main.c;TouchGFX/target/generated/TouchGFXConfiguration.cpp;TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp;TouchGFX/target/TouchGFXHAL.cpp;TouchGFX/target/STM32TouchController.cpp;TouchGFX/target/generated/STM32DMA.cpp;TouchGFX/target/generated/OSWrappers.cpp;TouchGFX/target/TouchGFXGPIO.cpp;TouchGFX/App/app_touchgfx.c;Core/Src/stm32h7xx_it.c;Core/Inc/nema_hal.c;Core/Src/stm32h7xx_hal_msp.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c;Drivers/CMSIS/Device/ST/STM32H7xx/Source/Templates/system_stm32h7xx.c;Core/Src/system_stm32h7xx.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c;Drivers/CMSIS/Device/ST/STM32H7xx/Source/Templates/system_stm32h7xx.c;Core/Src/system_stm32h7xx.c;;; -HeaderPath=Drivers/STM32H7xx_HAL_Driver/Inc;Drivers/STM32H7xx_HAL_Driver/Inc/Legacy;Drivers/CMSIS/Device/ST/STM32H7xx/Include;Drivers/CMSIS/Include;TouchGFX/App;TouchGFX/target/generated;TouchGFX/target;Core/Inc; +[PreviousUsedMakefileFiles] +SourceFiles=Core/Src/main.c;Core/Src/stm32h7xx_it.c;Core/Src/stm32h7xx_hal_msp.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c;Drivers/CMSIS/Device/ST/STM32H7xx/Source/Templates/system_stm32h7xx.c;Core/Src/system_stm32h7xx.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c;Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c;Drivers/CMSIS/Device/ST/STM32H7xx/Source/Templates/system_stm32h7xx.c;Core/Src/system_stm32h7xx.c;;; +HeaderPath=Drivers/STM32H7xx_HAL_Driver/Inc;Drivers/STM32H7xx_HAL_Driver/Inc/Legacy;Drivers/CMSIS/Device/ST/STM32H7xx/Include;Drivers/CMSIS/Include;Core/Inc; CDefines=USE_PWR_LDO_SUPPLY;USE_PWR_LDO_SUPPLY;USE_PWR_LDO_SUPPLY;USE_HAL_DRIVER;STM32H7A3xx;USE_HAL_DRIVER;USE_HAL_DRIVER; -[PreviousGenFiles] -AdvancedFolderStructure=true -HeaderFileListSize=8 -HeaderFiles#0=../TouchGFX/App/app_touchgfx.h -HeaderFiles#1=../TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp -HeaderFiles#2=../TouchGFX/target/TouchGFXHAL.hpp -HeaderFiles#3=../TouchGFX/target/STM32TouchController.hpp -HeaderFiles#4=../TouchGFX/target/generated/STM32DMA.hpp -HeaderFiles#5=../Core/Inc/stm32h7xx_it.h -HeaderFiles#6=../Core/Inc/stm32h7xx_hal_conf.h -HeaderFiles#7=../Core/Inc/main.h -HeaderFolderListSize=4 -HeaderPath#0=../TouchGFX/App -HeaderPath#1=../TouchGFX/target/generated -HeaderPath#2=../TouchGFX/target -HeaderPath#3=../Core/Inc -HeaderFiles=; -SourceFileListSize=12 -SourceFiles#0=../TouchGFX/target/generated/TouchGFXConfiguration.cpp -SourceFiles#1=../TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp -SourceFiles#2=../TouchGFX/target/TouchGFXHAL.cpp -SourceFiles#3=../TouchGFX/target/STM32TouchController.cpp -SourceFiles#4=../TouchGFX/target/generated/STM32DMA.cpp -SourceFiles#5=../TouchGFX/target/generated/OSWrappers.cpp -SourceFiles#6=../TouchGFX/target/TouchGFXGPIO.cpp -SourceFiles#7=../TouchGFX/App/app_touchgfx.c -SourceFiles#8=../Core/Src/stm32h7xx_it.c -SourceFiles#9=../Core/Inc/nema_hal.c -SourceFiles#10=../Core/Src/stm32h7xx_hal_msp.c -SourceFiles#11=../Core/Src/main.c -SourceFolderListSize=5 -SourcePath#0=../TouchGFX/target/generated -SourcePath#1=../TouchGFX/target -SourcePath#2=../TouchGFX/App -SourcePath#3=../Core/Src -SourcePath#4=../Core/Inc -SourceFiles=; - diff --git a/Software/.project b/Software/.project deleted file mode 100644 index 541e8b2..0000000 --- a/Software/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - FT23_Charger - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - com.st.stm32cube.ide.mcu.MCUProjectNature - com.st.stm32cube.ide.mcu.MCUCubeProjectNature - org.eclipse.cdt.core.cnature - com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature - com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature - com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature - com.st.stm32cube.ide.mcu.MCURootProjectNature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - org.eclipse.cdt.core.ccnature - - diff --git a/Software/.stm32env b/Software/.stm32env new file mode 100644 index 0000000..08521ff --- /dev/null +++ b/Software/.stm32env @@ -0,0 +1,7 @@ +# environment variable file used by stm32-for-vscode and the STM32Make.make makefile +# Other environment variables can be added here. If wanting to use the generated makefile in CI/CD context please +# configure the following variables: GCC_PATH, OPENOCD + +ARM_GCC_PATH = /usr/bin +OPENOCD = /home/chiangni/.config/Code/User/globalStorage/bmd.stm32-for-vscode/@xpack-dev-tools/openocd/0.12.0-4.1/.content/bin/openocd + \ No newline at end of file diff --git a/Software/Core/Inc/b_cccv_algo.h b/Software/Core/Inc/b_cccv_algo.h deleted file mode 100644 index 6b47873..0000000 --- a/Software/Core/Inc/b_cccv_algo.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * b_cccv_algo.h - * - * Created on: 16.06.2023 - * Author: max - */ -#include -#include "stm32h7xx_hal.h" - -#ifndef INC_B_CCCV_ALGO_H_ -#define INC_B_CCCV_ALGO_H_ - -#define I_GAIN 4 -#define P_GAIN 10 -#define CHARGE_CURRENT_LIMIT 10.0 -#define SIMULINKTEST -#undef SIMULINKTEST - - -typedef enum{ - NO_CHARGING, - CHARGING_IN_PROGRESS, - CHARGING_COMPLETED -} CCCV_CONTROL_STATE; - -#ifdef SIMULINKTEST -CCCV_CONTROL_STATE cccvloop(float maxcellvoltage, float voltagesetpoint, float maxcurrent, float*ccurrent); -#else - -CCCV_CONTROL_STATE cccvloop(float maxcellvoltage, float voltagesetpoint, float maxcurrent); -void setchargecurrent(float chargecurrent); -void setchargevoltage(uint8_t numberofcells,float maximumcellvoltage); -float getMaximumCellVoltage(); -void chargingloop(float maximumcellvoltage); -void startcharging(float endvoltage); -void initChargerAlgo(uint8_t numberofcells, float maximumcellvoltage); -void setchargevoltage(uint8_t numberofcells,float maximumcellvoltage); -void stopcharging(); -#endif - -float matlabvalidationwrapper(float maxcellvoltage, float voltagesetpoint, float maxcurrent); - -#endif /* INC_B_CCCV_ALGO_H_ */ diff --git a/Software/Core/Inc/can-halal.h b/Software/Core/Inc/can-halal.h deleted file mode 100644 index 45c5c62..0000000 --- a/Software/Core/Inc/can-halal.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef CAN_HALAL_H -#define CAN_HALAL_H - -// Define family macros if none are defined and we recognize a chip macro -#if !defined(STM32F3) && !defined(STM32H7) -#if defined(STM32F302x6) || defined(STM32F302x8) || defined(STM32F302xB) || \ - defined(STM32F302xC) -#define STM32F3 -#endif -#if defined(STM32H7A3xx) -#define STM32H7 -#endif -#endif - -#if defined(STM32F3) -#include "stm32f3xx_hal.h" -#define FTCAN_IS_BXCAN -#define FTCAN_NUM_FILTERS 13 -#elif defined(STM32H7) -#include "stm32h7xx_hal.h" -#define FTCAN_IS_FDCAN -#define FTCAN_NUM_FILTERS 13 -#else -#error "Couldn't detect STM family" -#endif - -#if defined(FTCAN_IS_BXCAN) -HAL_StatusTypeDef ftcan_init(CAN_HandleTypeDef *handle); -#elif defined(FTCAN_IS_FDCAN) -HAL_StatusTypeDef ftcan_init(FDCAN_HandleTypeDef *handle); -#else -#error "Unknown CAN peripheral" -#endif - -HAL_StatusTypeDef ftcan_transmit(uint16_t id, const uint8_t *data, - size_t datalen); - -HAL_StatusTypeDef ftcan_add_filter(uint16_t id, uint16_t mask); - -/** - * Define this function to be notified of incoming CAN messages - */ -void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data); - -/** - * Read num_bytes bytes from a message (unmarshalled network byte order). The - * msg pointer is advanced by the corresponding number of bytes. - * - * Both methods return a 64-bit integer, but you can safely cast it to a smaller - * integer type. - */ -uint64_t ftcan_unmarshal_unsigned(const uint8_t **data, size_t num_bytes); -int64_t ftcan_unmarshal_signed(const uint8_t **data, size_t num_bytes); - -/** - * Write num_bytes to a message (marshalled in network byte order). The pointer - * is advanced by the corresponding number of bytes and returned. - */ -uint8_t *ftcan_marshal_unsigned(uint8_t *data, uint64_t val, size_t num_bytes); -uint8_t *ftcan_marshal_signed(uint8_t *data, int64_t val, size_t num_bytes); - -#endif // CAN_HALAL_H diff --git a/Software/Core/Inc/can.h b/Software/Core/Inc/can.h deleted file mode 100644 index a25a75e..0000000 --- a/Software/Core/Inc/can.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * can.h - * - * Created on: 21.06.2023 - * Author: max - */ - -#ifndef INC_CAN_H_ -#define INC_CAN_H_ - -#include "stm32h7xx_hal.h" - -#define CAN_ID_AMS_STATUS 0x00A -#define CAN_ID_AMS_IN 0x00B -#define CAN_ID_SLAVE_STATUS_BASE 0x080 -#define CAN_ID_CHARGER_ACTIVE 0x200 - - - -void initCan(FDCAN_HandleTypeDef *hcan); - -#endif /* INC_CAN_H_ */ diff --git a/Software/Core/Inc/charge_ctrl_test_shell.h b/Software/Core/Inc/charge_ctrl_test_shell.h deleted file mode 100644 index 006ad8e..0000000 --- a/Software/Core/Inc/charge_ctrl_test_shell.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * charge_ctrl_test_shell.h - * - * Created on: May 21, 2023 - * Author: max - */ - -#ifndef INC_CHARGE_CTRL_TEST_SHELL_H_ -#define INC_CHARGE_CTRL_TEST_SHELL_H_ - -#include "stm32h7xx_hal.h" - -void charge_shell_init(UART_HandleTypeDef *huart); -void charge_shell_loop(); - - -#endif /* INC_CHARGE_CTRL_TEST_SHELL_H_ */ diff --git a/Software/Core/Inc/charger_control.h b/Software/Core/Inc/charger_control.h deleted file mode 100644 index 02bcd8c..0000000 --- a/Software/Core/Inc/charger_control.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * charger_control.h - * - * Created on: May 21, 2023 - * Author: MaxMax - */ - -#ifndef INC_CHARGER_CONTROL_H_ -#define INC_CHARGER_CONTROL_H_ - -#include "stm32h7xx_hal.h" - -#define CURRENT_DAC_ADR 0x58 -#define VOLTAGE_DAC_ADR 0x5E -#define CHARGER_ADC_ADR 0x90 - -typedef struct{ - uint8_t acfail; - uint8_t dcfail; - uint8_t cc_status; - uint8_t ot_status; - uint8_t lim_status; - uint16_t voltage; - uint16_t current; -}ChargerStatusHandleTypeDef; - -void charger_control_init(I2C_HandleTypeDef* hi2c); - -ChargerStatusHandleTypeDef charger_control_get_state(); -void charger_control_set_current(uint32_t current); -void charger_control_set_voltage(uint32_t voltage); -void charger_control_enable_charger_relay(); -void charger_control_disable_charger_relay(); -void charger_control_enable_remote(); -void charger_control_disable_remote(); -void charger_control_setup_DACs(); - - -#endif /* INC_CHARGER_CONTROL_H_ */ diff --git a/Software/Core/Inc/main.h b/Software/Core/Inc/main.h index 419df7a..cde7271 100644 --- a/Software/Core/Inc/main.h +++ b/Software/Core/Inc/main.h @@ -7,13 +7,12 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2022 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ diff --git a/Software/Core/Inc/nema_hal.c b/Software/Core/Inc/nema_hal.c deleted file mode 100644 index 24f16b9..0000000 --- a/Software/Core/Inc/nema_hal.c +++ /dev/null @@ -1,26 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : - * Description : - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Software/Core/Inc/slave_handler.h b/Software/Core/Inc/slave_handler.h deleted file mode 100644 index 8ec783a..0000000 --- a/Software/Core/Inc/slave_handler.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * slave_handler.h - * - * Created on: Jun 21, 2023 - * Author: max - */ - -#ifndef INC_SLAVE_HANDLER_H_ -#define INC_SLAVE_HANDLER_H_ - -#include "stm32h7xx_hal.h" - -#define N_SLAVES 6 - -typedef enum { - SLAVE_ERR_NONE, - SLAVE_ERR_TIMEOUT, - SLAVE_ERR_OT, - SLAVE_ERR_UT, - SLAVE_ERR_OV, - SLAVE_ERR_UV, - SLAVE_ERR_UNKNOWN, -} SlaveErrorKind; - -typedef struct { - SlaveErrorKind kind; - uint32_t data; // Cell/temperature ID etc -} SlaveError; - -typedef struct { - uint8_t id; - SlaveError error; - uint8_t soc; - uint16_t min_voltage; - uint16_t max_voltage; - int16_t max_temp; - uint32_t last_message; -} SlaveHandle; - -extern SlaveHandle slaves[N_SLAVES]; - -float slaves_get_maximum_voltage(); -void slaves_handle_status(const uint8_t *data); -void slave_handler_init(); - -#endif /* INC_SLAVE_HANDLER_H_ */ diff --git a/Software/Core/Inc/stm32h7xx_it.h b/Software/Core/Inc/stm32h7xx_it.h index 7424b89..bbbeb7c 100644 --- a/Software/Core/Inc/stm32h7xx_it.h +++ b/Software/Core/Inc/stm32h7xx_it.h @@ -6,15 +6,14 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2022 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * - ****************************************************************************** + ****************************************************************************** */ /* USER CODE END Header */ @@ -61,7 +60,6 @@ void FDCAN1_IT1_IRQHandler(void); void FMC_IRQHandler(void); void FDCAN_CAL_IRQHandler(void); void LTDC_IRQHandler(void); -void LTDC_ER_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Software/Core/Src/b_cccv_algo.c b/Software/Core/Src/b_cccv_algo.c deleted file mode 100644 index 1aea67d..0000000 --- a/Software/Core/Src/b_cccv_algo.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * b_cccv_algo.c - * - * Created on: 16.06.2023 - * Author: max - */ - -#include "b_cccv_algo.h" -#include "charger_control.h" -#include "main.h" - -static uint32_t dt; -static uint32_t lasttick; -static float errorintegration = 0; -static float finalvoltage = 4.15; -static float chargevoltage = 430; -static float chargecurrentlimit = CHARGE_CURRENT_LIMIT; - -static float resistancelut[1024]; -static float voltageresistancelut[1024]; - -#define CURRENT_R 2.2 -#define VOLTAGE_R 18 - -CCCV_CONTROL_STATE chargerstate = NO_CHARGING; - -#ifdef SIMULINKTEST -CCCV_CONTROL_STATE cccvloop(float maxcellvoltage, float voltagesetpoint, float maxcurrent, float*ccurrent) -#else -CCCV_CONTROL_STATE cccvloop(float maxcellvoltage, float voltagesetpoint, float maxcurrent) -#endif - -{ -#ifdef SIMULINKTEST - dt = 1000; -#else - dt = HAL_GetTick() - lasttick; - lasttick = HAL_GetTick(); -#endif - - - - - - float chargecurrent = 0; - - //Calculate Voltage Error and I and P Factors - float voltageerror = voltagesetpoint-maxcellvoltage; - - float errorproportional = P_GAIN * voltageerror; - errorintegration += I_GAIN*voltageerror * ((float)dt)/1000; - - - //Limit I and P Factors to maximum charge current - - if(errorintegration > maxcurrent) - errorintegration = maxcurrent; - - if(errorproportional > maxcurrent) - errorproportional = maxcurrent; - - if(errorproportional <= -maxcurrent) - errorproportional = -maxcurrent; - - if(errorintegration <= -maxcurrent) - errorintegration = -maxcurrent; - - float errorintegrationout = errorintegration; - chargecurrent = (errorproportional + errorintegrationout); - - if(chargecurrent > maxcurrent) - chargecurrent = maxcurrent; - - if(chargecurrent <= 0) - chargecurrent = 0; - - if(chargecurrent < 0.01) //If Charge Current ist below minimum threshold, stop charging - return CHARGING_COMPLETED; - #ifdef SIMULINKTEST - *ccurrent = chargecurrent; - #else - setchargevoltage(103,finalvoltage+0.05); - setchargecurrent(chargecurrent); - #endif - - - return CHARGING_IN_PROGRESS; -} - -#ifndef SIMULINKTEST - -void initChargerAlgo(uint8_t numberofcells, float maximumcellvoltage) -{ - chargerstate = NO_CHARGING; - chargevoltage = numberofcells * maximumcellvoltage; - - for(uint32_t i = 0; i < 1024; i++) - { - resistancelut[i] = 10*CURRENT_R/(CURRENT_R+(20*((float)i)/1024)); - } - - for(uint32_t i = 0; i < 1024; i++) - { - voltageresistancelut[i] = (600*VOLTAGE_R)/(VOLTAGE_R+(20*((float)i)/1024)); - } -} - -void setchargecurrent(float chargecurrent) -{ - float targetresistance; - if(chargecurrent != 0) - { - for(uint32_t setpoint = 0; setpoint < 1024; setpoint++) - { - if(resistancelut[setpoint] <= chargecurrent) - { - targetresistance = (20000*((float)setpoint)/1024); - break; - } - } - } - else - { - targetresistance = 20000; - } - - float wiperpos = targetresistance/20000 * (1023); - charger_control_set_current((uint32_t) wiperpos); -} - -void setchargevoltage(uint8_t numberofcells,float maximumcellvoltage) -{ - - float chargevoltage = numberofcells * maximumcellvoltage; - float targetresistance; - - if(chargevoltage != 0) - { - for(uint32_t setpoint = 0; setpoint < 1024; setpoint++) - { - if(voltageresistancelut[setpoint] <= chargevoltage) - { - targetresistance = (20000*((float)setpoint)/1024); - break; - } - } - } - else - { - targetresistance = 20000; - } - - float wiperpos = targetresistance/20000 * (1023); - charger_control_set_voltage((uint32_t) wiperpos); - //@TODO Call Function to set Resistance for Voltage -} - -void chargingloop(float maximumcellvoltage) -{ - switch(chargerstate) - { - case NO_CHARGING: //Do Nothing IDLE Loop - chargerstate = NO_CHARGING; - charger_control_disable_remote(); - errorintegration = 0; - break; - case CHARGING_IN_PROGRESS: //Run charging algo periodically - charger_control_enable_remote(); - chargerstate = cccvloop(maximumcellvoltage, finalvoltage, chargecurrentlimit); - break; - case CHARGING_COMPLETED: //Signal Completion of Charging here - chargerstate = NO_CHARGING; - charger_control_disable_remote(); - errorintegration = 0; - break; - } -} - -void startcharging(float endvoltage) -{ - chargerstate = CHARGING_IN_PROGRESS; - finalvoltage = endvoltage; -} - -void stopcharging() -{ - chargerstate = NO_CHARGING; - charger_control_disable_remote(); -} - - -#endif - -#ifdef SIMULINKTEST - -float matlabvalidationwrapper(float maxcellvoltage, float voltagesetpoint, float maxcurrent) -{ - float chargecurrent = 0; - (void*) cccvloop(maxcellvoltage,voltagesetpoint,maxcurrent, &chargecurrent); - return chargecurrent; - -} - -#endif - diff --git a/Software/Core/Src/can-halal.c b/Software/Core/Src/can-halal.c deleted file mode 100644 index a99303a..0000000 --- a/Software/Core/Src/can-halal.c +++ /dev/null @@ -1,273 +0,0 @@ -#include "can-halal.h" - -#include - -#if defined(FTCAN_IS_BXCAN) -static CAN_HandleTypeDef *hcan; - -HAL_StatusTypeDef ftcan_init(CAN_HandleTypeDef *handle) { - hcan = handle; - - HAL_StatusTypeDef status = - HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING); - if (status != HAL_OK) { - return status; - } - - return HAL_CAN_Start(hcan); -} - -HAL_StatusTypeDef ftcan_transmit(uint16_t id, const uint8_t *data, - size_t datalen) { - static CAN_TxHeaderTypeDef header; - header.StdId = id; - header.IDE = CAN_ID_STD; - header.RTR = CAN_RTR_DATA; - header.DLC = datalen; - uint32_t mailbox; - return HAL_CAN_AddTxMessage(hcan, &header, data, &mailbox); -} - -HAL_StatusTypeDef ftcan_add_filter(uint16_t id, uint16_t mask) { - static uint32_t next_filter_no = 0; - static CAN_FilterTypeDef filter; - if (next_filter_no % 2 == 0) { - filter.FilterIdHigh = id << 5; - filter.FilterMaskIdHigh = mask << 5; - filter.FilterIdLow = id << 5; - filter.FilterMaskIdLow = mask << 5; - } else { - // Leave high filter untouched from the last configuration - filter.FilterIdLow = id << 5; - filter.FilterMaskIdLow = mask << 5; - } - filter.FilterFIFOAssignment = CAN_FILTER_FIFO0; - filter.FilterBank = next_filter_no / 2; - if (filter.FilterBank > FTCAN_NUM_FILTERS + 1) { - return HAL_ERROR; - } - filter.FilterMode = CAN_FILTERMODE_IDMASK; - filter.FilterScale = CAN_FILTERSCALE_16BIT; - filter.FilterActivation = CAN_FILTER_ENABLE; - - // Disable slave filters - // TODO: Some STM32 have multiple CAN peripherals, and one uses the slave - // filter bank - filter.SlaveStartFilterBank = FTCAN_NUM_FILTERS; - - HAL_StatusTypeDef status = HAL_CAN_ConfigFilter(hcan, &filter); - if (status == HAL_OK) { - next_filter_no++; - } - return status; -} - -void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *handle) { - if (handle != hcan) { - return; - } - CAN_RxHeaderTypeDef header; - uint8_t data[8]; - if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &header, data) != HAL_OK) { - return; - } - - if (header.IDE != CAN_ID_STD) { - return; - } - - ftcan_msg_received_cb(header.StdId, header.DLC, data); -} -#elif defined(FTCAN_IS_FDCAN) -static FDCAN_HandleTypeDef *hcan; - -HAL_StatusTypeDef ftcan_init(FDCAN_HandleTypeDef *handle) { - hcan = handle; - - HAL_StatusTypeDef status = - HAL_FDCAN_ActivateNotification(hcan, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0); - if (status != HAL_OK) { - return status; - } - // Reject non-matching messages - status = - HAL_FDCAN_ConfigGlobalFilter(hcan, FDCAN_REJECT, FDCAN_REJECT, - FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE); - if (status != HAL_OK) { - return status; - } - - return HAL_FDCAN_Start(hcan); -} - -HAL_StatusTypeDef ftcan_transmit(uint16_t id, const uint8_t *data, - size_t datalen) { - static FDCAN_TxHeaderTypeDef header; - header.Identifier = id; - header.IdType = FDCAN_STANDARD_ID; - header.TxFrameType = FDCAN_DATA_FRAME; - switch (datalen) { - case 0: - header.DataLength = FDCAN_DLC_BYTES_0; - break; - case 1: - header.DataLength = FDCAN_DLC_BYTES_1; - break; - case 2: - header.DataLength = FDCAN_DLC_BYTES_2; - break; - case 3: - header.DataLength = FDCAN_DLC_BYTES_3; - break; - case 4: - header.DataLength = FDCAN_DLC_BYTES_4; - break; - case 5: - header.DataLength = FDCAN_DLC_BYTES_5; - break; - case 6: - header.DataLength = FDCAN_DLC_BYTES_6; - break; - case 7: - header.DataLength = FDCAN_DLC_BYTES_7; - break; - case 8: - default: - header.DataLength = FDCAN_DLC_BYTES_8; - break; - } - header.ErrorStateIndicator = FDCAN_ESI_PASSIVE; - header.BitRateSwitch = FDCAN_BRS_OFF; - header.FDFormat = FDCAN_CLASSIC_CAN; - header.TxEventFifoControl = FDCAN_NO_TX_EVENTS; - - // HAL_FDCAN_AddMessageToTxFifoQ doesn't modify the data, but it's not marked - // as const for some reason. - uint8_t *data_nonconst = (uint8_t *)data; - return HAL_FDCAN_AddMessageToTxFifoQ(hcan, &header, data_nonconst); -} - -HAL_StatusTypeDef ftcan_add_filter(uint16_t id, uint16_t mask) { - static uint32_t next_filter_no = 0; - static FDCAN_FilterTypeDef filter; - filter.IdType = FDCAN_STANDARD_ID; - filter.FilterIndex = next_filter_no; - if (filter.FilterIndex > FTCAN_NUM_FILTERS + 1) { - return HAL_ERROR; - } - filter.FilterType = FDCAN_FILTER_MASK; - filter.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; - filter.FilterID1 = id; - filter.FilterID2 = mask; - - HAL_StatusTypeDef status = HAL_FDCAN_ConfigFilter(hcan, &filter); - if (status == HAL_OK) { - next_filter_no++; - } - return status; -} - -void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *handle, - uint32_t RxFifo0ITs) { - if (handle != hcan || (RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) == RESET) { - return; - } - - static FDCAN_RxHeaderTypeDef header; - static uint8_t data[8]; - if (HAL_FDCAN_GetRxMessage(hcan, FDCAN_RX_FIFO0, &header, data) != HAL_OK) { - return; - } - - if (header.FDFormat != FDCAN_CLASSIC_CAN || - header.RxFrameType != FDCAN_DATA_FRAME || - header.IdType != FDCAN_STANDARD_ID) { - return; - } - - size_t datalen; - switch (header.DataLength) { - case FDCAN_DLC_BYTES_0: - datalen = 0; - break; - case FDCAN_DLC_BYTES_1: - datalen = 1; - break; - case FDCAN_DLC_BYTES_2: - datalen = 2; - break; - case FDCAN_DLC_BYTES_3: - datalen = 3; - break; - case FDCAN_DLC_BYTES_4: - datalen = 4; - break; - case FDCAN_DLC_BYTES_5: - datalen = 5; - break; - case FDCAN_DLC_BYTES_6: - datalen = 6; - break; - case FDCAN_DLC_BYTES_7: - datalen = 7; - break; - case FDCAN_DLC_BYTES_8: - datalen = 8; - break; - default: - return; - } - - ftcan_msg_received_cb(header.Identifier, datalen, data); -} -#endif - -__weak void ftcan_msg_received_cb(uint16_t id, size_t datalen, - const uint8_t *data) {} - -uint64_t ftcan_unmarshal_unsigned(const uint8_t **data_ptr, size_t num_bytes) { - if (num_bytes > 8) { - num_bytes = 8; - } - - const uint8_t *data = *data_ptr; - uint64_t result = 0; - for (size_t i = 0; i < num_bytes; i++) { - result <<= 8; - result |= data[i]; - } - *data_ptr += num_bytes; - return result; -} - -int64_t ftcan_unmarshal_signed(const uint8_t **data_ptr, size_t num_bytes) { - if (num_bytes > 8) { - num_bytes = 8; - } - - uint64_t result_unsigned = ftcan_unmarshal_unsigned(data_ptr, num_bytes); - // Sign extend by shifting left, then copying to a signed int and shifting - // back to the right - size_t diff_to_64 = 64 - num_bytes * 8; - result_unsigned <<= diff_to_64; - int64_t result; - memcpy(&result, &result_unsigned, 8); - return result >> diff_to_64; -} - -uint8_t *ftcan_marshal_unsigned(uint8_t *data, uint64_t val, size_t num_bytes) { - if (num_bytes > 8) { - num_bytes = 8; - } - - for (int i = num_bytes - 1; i >= 0; i--) { - data[i] = val & 0xFF; - val >>= 8; - } - - return data + num_bytes; -} - -uint8_t *ftcan_marshal_signed(uint8_t *data, int64_t val, size_t num_bytes) { - return ftcan_marshal_unsigned(data, val, num_bytes); -} diff --git a/Software/Core/Src/can.c b/Software/Core/Src/can.c deleted file mode 100644 index fc39ac2..0000000 --- a/Software/Core/Src/can.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * can.c - * - * Created on: 21.06.2023 - * Author: max - */ - - -#include "can.h" -#include "can-halal.h" -#include "slave_handler.h" -#include "b_cccv_algo.h" -#include "charger_control.h" - - -void initCan(FDCAN_HandleTypeDef *hcan) -{ - ftcan_init(hcan); - ftcan_add_filter(0, 0); -} - -void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) -{ - if ((id & 0xFF0) == CAN_ID_SLAVE_STATUS_BASE) { -// slaves_handle_status(data); - return; - } - - /*if (id == CAN_ID_CHARGER_ACTIVE) - { - if(data[0] == 1) - { - uint8_t* ptr = &data[1]; - startcharging(((float) ftcan_unmarshal_unsigned(&ptr, 2))/10000); - } - else - { - stopcharging(); - } - return; - }*/ - switch (id) { - case CAN_ID_AMS_STATUS: { - int sdc_closed = data[0] >> 7; - if (sdc_closed == 0) { - charger_control_disable_remote(); - } - break; - } - case CAN_ID_AMS_IN: { - int active = data[0] & 0x01; - if (active) { - charger_control_enable_remote(); - } - } - } -} diff --git a/Software/Core/Src/charge_ctrl_test_shell.c b/Software/Core/Src/charge_ctrl_test_shell.c deleted file mode 100644 index 5ba7f25..0000000 --- a/Software/Core/Src/charge_ctrl_test_shell.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * charge_ctrl_test_shell.c - * - * Created on: May 21, 2023 - * Author: max - */ - - -#include "charge_ctrl_test_shell.h" -#include "charger_control.h" - -UART_HandleTypeDef *suart; - -void charge_shell_init(UART_HandleTypeDef *huart) -{ - suart = huart; -} - -void charge_shell_loop() -{ - uint8_t command[3]; - HAL_StatusTypeDef status = HAL_UART_Receive(suart, command, 3, 100); - if(status == HAL_OK) - { - switch(command[0]) - { - case 'r': - if(command[1] == 'c') //enable remote control - { - charger_control_enable_remote(); - } - else if(command[1] == 'o') //disable remote control - { - charger_control_disable_remote(); - } - break; - - case 'e': - if(command[1] == 'c') - { - charger_control_enable_charger_relay(); - } - else if(command[1] == 'o') - { - charger_control_disable_charger_relay(); - } - break; - - case 'v': - ;uint16_t voltage = (command[1]<<8) | command[2]; - charger_control_set_voltage(voltage); - break; - - case 'c': - ;uint16_t current = (command[1]<<8 | command[2]); - charger_control_set_current(current); - break; - - case 's': - ;ChargerStatusHandleTypeDef charg = charger_control_get_state(); - uint8_t txbuffer[9] = {charg.acfail, charg.dcfail, charg.cc_status, - charg.lim_status, charg.ot_status, (uint8_t)(charg.current>>8), - (uint8_t)charg.current&0xFF,(uint8_t)(charg.voltage>>8), - (uint8_t)charg.voltage&0xFF - }; - HAL_UART_Transmit(suart, txbuffer, 9, 1000); - } - } -} diff --git a/Software/Core/Src/charger_control.c b/Software/Core/Src/charger_control.c deleted file mode 100644 index fe5fed0..0000000 --- a/Software/Core/Src/charger_control.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * charger_control.c - * - * Created on: May 21, 2023 - * Author: MaxMax - */ - -#include "charger_control.h" -#include "main.h" - -I2C_HandleTypeDef* charger_i2c; - - -/*** @brief Start ADC Conversion on Charger Current Channel and returns the result - * @note The ADC has a PGA leading to an input range of +-6.144 in twos complement. With single ended measurements, the range is 15 bit and - * Voltage = 6.144/(2^(15)-1) - * @note The charger maps a voltage range of 0-5V to the output current of 0-10A - * @retval ADC Conversion register value - */ -uint16_t readADCCurrent() -{ - uint8_t writeconfigreg[3] = {0x01, 0xC1, 0xE3}; - uint8_t readconfigreg[1] = {0x01}; - uint8_t readconversionreg[1] = {0x00}; - uint8_t configreg[2]; - uint8_t conversionreg[2]; - - HAL_I2C_Master_Transmit(charger_i2c, CHARGER_ADC_ADR, writeconfigreg, 3, 1000); //Set Config Register and Start conversion - - HAL_I2C_Master_Transmit(charger_i2c, CHARGER_ADC_ADR, readconfigreg, 1, 1000); //Read Back Config Reg to check for conversion completion - HAL_I2C_Master_Receive(charger_i2c, CHARGER_ADC_ADR, configreg, 2, 1000); - HAL_Delay(1);//@TODO Remove if ADC Works - HAL_I2C_Master_Transmit(charger_i2c, CHARGER_ADC_ADR, readconversionreg, 1, 1000); //Read Result from conversion register - HAL_I2C_Master_Receive(charger_i2c, CHARGER_ADC_ADR, conversionreg, 2, 1000); - - return (uint16_t)(conversionreg[0]<<8 | conversionreg[1]); - -} - -/*** @brief Start ADC Conversion on Charger Voltage Channel and returns the result - * @note The ADC has a PGA leading to an input range of +-6.144 in twos complement. With single ended measurements, the range is 15 bit and - * Voltage = 6.144/(2^(15)-1) - * @note The charger maps a voltage range of 0-5V to the output voltage range of 0-600V - * @retval ADC Conversion register value - */ - -uint16_t readADCVoltage() -{ - uint8_t writeconfigreg[3] = {0x01, 0xC1, 0xE3}; - uint8_t readconfigreg[1] = {0x01}; - uint8_t readconversionreg[1] = {0x00}; - uint8_t configreg[2]; - uint8_t conversionreg[2]; - - HAL_I2C_Master_Transmit(charger_i2c, CHARGER_ADC_ADR, writeconfigreg, 3, 1000); //Set Config Register and Start conversion - - HAL_I2C_Master_Transmit(charger_i2c, CHARGER_ADC_ADR, readconfigreg, 1, 1000); //Read Back Config Reg to check for conversion completion - HAL_I2C_Master_Receive(charger_i2c, CHARGER_ADC_ADR, configreg, 2, 1000); - HAL_Delay(1);//@TODO Remove if ADC Works - HAL_I2C_Master_Transmit(charger_i2c, CHARGER_ADC_ADR, readconversionreg, 1, 1000); //Read Result from conversion register - HAL_I2C_Master_Receive(charger_i2c, CHARGER_ADC_ADR, conversionreg, 2, 1000); - - return (uint16_t)(conversionreg[0]<<8 | conversionreg[1]); -} - -/*** @brief Initilization Routine of the charger - * @note initially all outputs are set to 0, remote control and charger relay are deactivated - * @param hi2c Handler to I2C struct for ADC and DAC communication - */ -void charger_control_init(I2C_HandleTypeDef* hi2c) -{ - charger_i2c = hi2c; - - charger_control_disable_remote(); - charger_control_disable_charger_relay(); - charger_control_setup_DACs(); - charger_control_set_current(0); - charger_control_set_voltage(0); -} - -/*** @brief Get State of voltage, current and error flags of the charger - * @retval Struct Containing charger information - */ - -ChargerStatusHandleTypeDef charger_control_get_state() -{ - ChargerStatusHandleTypeDef chargerstate; - chargerstate.voltage = readADCVoltage(); - chargerstate.current = readADCCurrent(); - chargerstate.acfail = HAL_GPIO_ReadPin(Charger_AC_Fail_GPIO_Port, Charger_AC_Fail_Pin); - chargerstate.dcfail = HAL_GPIO_ReadPin(Charger_DC_FAIL_GPIO_Port, Charger_DC_FAIL_Pin); - chargerstate.cc_status = HAL_GPIO_ReadPin(Charger_CC_Status_GPIO_Port, Charger_CC_Status_Pin); - chargerstate.lim_status = HAL_GPIO_ReadPin(Charger_LIM_GPIO_Port, Charger_LIM_Pin); - chargerstate.ot_status = HAL_GPIO_ReadPin(Charger_OT_GPIO_Port, Charger_OT_Pin); - return chargerstate; -} - -void charger_control_setup_DACs() -{ - uint8_t enabledacs[2] = {0x1C, 0x02}; - HAL_I2C_Master_Transmit(charger_i2c, CURRENT_DAC_ADR, enabledacs, 2, 1000); - HAL_I2C_Master_Transmit(charger_i2c, VOLTAGE_DAC_ADR, enabledacs, 2, 1000); -} - -/*** @brief set current channel using the DAC - * @param current value in 10 bit => 0-5V are equal to 0-10A so 1 bit is approx 49mA - * - */ - -void charger_control_set_current(uint32_t current) -{ - uint8_t currentlow = current & 0xFF; - uint8_t currenthigh = ((current>>8) & 0x03) | 0x04; - uint8_t current_dac_data[2] = {currenthigh,currentlow}; - HAL_I2C_Master_Transmit(charger_i2c, CURRENT_DAC_ADR, current_dac_data, 2, 1000); -} - -/** @brief set voltage channel using the DAC - * @param voltage value in 10 bit => 0-5V are equal to 0-600V so 1 bit is approx. 2.93V - * - */ - -void charger_control_set_voltage(uint32_t voltage) -{ - uint8_t voltagelow = voltage & 0xFF; - uint8_t voltagehigh = ((voltage>>8) & 0x03) | 0x04; - uint8_t voltage_dac_data[2] = {voltagehigh,voltagelow}; - HAL_I2C_Master_Transmit(charger_i2c, VOLTAGE_DAC_ADR, voltage_dac_data, 2, 1000); -} - -/** @brief Closes the main charger Relay - * @note The relay is also dependend on the Shutdown Circuit - */ - -void charger_control_enable_charger_relay() -{ - HAL_GPIO_WritePin(Charger_Relay_GPIO_Port, Charger_Relay_Pin, GPIO_PIN_SET); -} - -/** @brief opens the main charger Relay - * @note The relay is also dependend on the Shutdown Circuit - */ - -void charger_control_disable_charger_relay() -{ - HAL_GPIO_WritePin(Charger_Relay_GPIO_Port, Charger_Relay_Pin, GPIO_PIN_RESET); -} - -/** @brief enables remote control of the charger - * @note The relay is also dependend on the Shutdown Circuit - */ - -void charger_control_enable_remote() -{ - HAL_GPIO_WritePin(Charger_Remote_Shutdown_GPIO_Port, Charger_Remote_Shutdown_Pin, GPIO_PIN_SET); -} - - -/** @brief disable remote control of the charger - * @note The relay is also dependend on the Shutdown Circuit - */ - -void charger_control_disable_remote() -{ - HAL_GPIO_WritePin(Charger_Remote_Shutdown_GPIO_Port, Charger_Remote_Shutdown_Pin, GPIO_PIN_RESET); -} - - diff --git a/Software/Core/Src/main.c b/Software/Core/Src/main.c index 32f6ed7..8e18496 100644 --- a/Software/Core/Src/main.c +++ b/Software/Core/Src/main.c @@ -6,27 +6,21 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2022 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" -#include "app_touchgfx.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -#include "charger_control.h" -#include "slave_handler.h" -#include "can.h" -#include "b_cccv_algo.h" /* USER CODE END Includes */ @@ -37,6 +31,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ + /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ @@ -64,7 +59,7 @@ PCD_HandleTypeDef hpcd_USB_OTG_HS; SDRAM_HandleTypeDef hsdram1; /* USER CODE BEGIN PV */ - +uint16_t framebuffer[160*120]; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -81,13 +76,12 @@ static void MX_UART5_Init(void); static void MX_LTDC_Init(void); static void MX_CRC_Init(void); /* USER CODE BEGIN PFP */ -uint32_t MemoryCheck(UART_HandleTypeDef *uart_console, SDRAM_HandleTypeDef *sram); + /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -#define RAM_TEST_BLOCKSIZE 4096 - __attribute__((section(".ahb_sec"))) uint32_t testarray[RAM_TEST_BLOCKSIZE]; + /* USER CODE END 0 */ /** @@ -131,41 +125,24 @@ int main(void) MX_UART5_Init(); MX_LTDC_Init(); MX_CRC_Init(); - MX_TouchGFX_Init(); /* USER CODE BEGIN 2 */ - - //uint32_t sdramcheck = MemoryCheck(&huart5, &hsdram1); - //MX_LTDC_Init(); - slave_handler_init(); - initCan(&hfdcan1); - charger_control_init(&hi2c4); - initChargerAlgo(102, 4.15); - setchargecurrent(0.0); - setchargevoltage(102, 0); - charger_control_disable_remote(); - //HAL_LTDC_Reload(&hltdc, LTDC_RELOAD_IMMEDIATE); + HAL_LTDC_SetAddress(&hltdc, (uint32_t)framebuffer, LTDC_LAYER_1); + uint8_t r = 0xff, g = 0x00, b = 0x00; // Solid red + uint16_t col = ((r>>3)<<11) | ((g>>2)<<5) | (b>>3); // Convert colors to RGB565 + // Put colors into the framebuffer + for(int i = 0; i < 160*120; i++) + { + framebuffer[i] = col; + } /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ - uint32_t lasttick = HAL_GetTick(); while (1) { /* USER CODE END WHILE */ - MX_TouchGFX_Process(); /* USER CODE BEGIN 3 */ - - - if((HAL_GetTick() - lasttick) > 1000) - { -// float maxvoltage = slaves_get_maximum_voltage(); -// lasttick = HAL_GetTick(); -// chargingloop(slaves_get_maximum_voltage()); - HAL_GPIO_TogglePin(STATUS_LED_2_GPIO_Port, STATUS_LED_2_Pin); - } - - // HAL_Delay(500); } /* USER CODE END 3 */ } @@ -415,12 +392,12 @@ static void MX_LTDC_Init(void) hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; hltdc.Init.HorizontalSync = 19; hltdc.Init.VerticalSync = 2; - hltdc.Init.AccumulatedHBP = 159; + hltdc.Init.AccumulatedHBP = 69; hltdc.Init.AccumulatedVBP = 22; - hltdc.Init.AccumulatedActiveW = 1183; - hltdc.Init.AccumulatedActiveH = 622; - hltdc.Init.TotalWidth = 1343; - hltdc.Init.TotalHeigh = 634; + hltdc.Init.AccumulatedActiveW = 549; + hltdc.Init.AccumulatedActiveH = 294; + hltdc.Init.TotalWidth = 599; + hltdc.Init.TotalHeigh = 306; hltdc.Init.Backcolor.Blue = 0; hltdc.Init.Backcolor.Green = 0; hltdc.Init.Backcolor.Red = 0; @@ -429,10 +406,10 @@ static void MX_LTDC_Init(void) Error_Handler(); } pLayerCfg.WindowX0 = 0; - pLayerCfg.WindowX1 = 1024; + pLayerCfg.WindowX1 = 480; pLayerCfg.WindowY0 = 0; - pLayerCfg.WindowY1 = 600; - pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB888; + pLayerCfg.WindowY1 = 272; + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; pLayerCfg.Alpha = 1; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; @@ -448,8 +425,7 @@ static void MX_LTDC_Init(void) Error_Handler(); } /* USER CODE BEGIN LTDC_Init 2 */ - __HAL_LTDC_ENABLE(&hltdc); - __HAL_LTDC_LAYER_ENABLE(&hltdc,1); + /* USER CODE END LTDC_Init 2 */ } @@ -660,32 +636,7 @@ static void MX_FMC_Init(void) } /* USER CODE BEGIN FMC_Init 2 */ - FMC_SDRAM_CommandTypeDef command; - HAL_StatusTypeDef status; - command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; - command.AutoRefreshNumber = 1; - command.ModeRegisterDefinition = 0; - status = HAL_SDRAM_SendCommand(&hsdram1, &command, 1000); - HAL_Delay(1); - - command.CommandMode = FMC_SDRAM_CMD_PALL; - command.AutoRefreshNumber = 8; - command.ModeRegisterDefinition = 0; - status = HAL_SDRAM_SendCommand(&hsdram1, &command, 1000); - - command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; - command.AutoRefreshNumber = 1; - command.ModeRegisterDefinition = 0x130; - status = HAL_SDRAM_SendCommand(&hsdram1, &command, 1000); - - command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; - command.AutoRefreshNumber = 8; - command.ModeRegisterDefinition = 0; - status = HAL_SDRAM_SendCommand(&hsdram1, &command, 1000); - - status = HAL_SDRAM_ProgramRefreshRate(&hsdram1, 0x0595); /* USER CODE END FMC_Init 2 */ } @@ -768,49 +719,6 @@ static void MX_GPIO_Init(void) /* USER CODE BEGIN 4 */ -/** @brief run a Memory Check over the complete SDRAM Area - * - */ -uint32_t MemoryCheck(UART_HandleTypeDef *uart_console, SDRAM_HandleTypeDef *sram) -{ - uint32_t totalerrors = 0; - uint32_t numberofsectors = 400; - - uint32_t testadr = 0xC0000000; - - - //*testpointer = 1; - - for(uint32_t startaddress = 0; startaddress < numberofsectors*RAM_TEST_BLOCKSIZE; startaddress += RAM_TEST_BLOCKSIZE) - { - - for(uint32_t i = 0; i < RAM_TEST_BLOCKSIZE; i++) - { - testarray[i] = 0xFFFF00FF; - } - //*testadr = (uint32_t*) ; - HAL_StatusTypeDef status = HAL_SDRAM_Write_32b(sram, (uint32_t*)(testadr+startaddress), testarray, RAM_TEST_BLOCKSIZE); - //testadr = (uint32_t*) (startaddress + 0xC0000000); - for(uint32_t i = 0; i < RAM_TEST_BLOCKSIZE; i++) - { - testarray[i] = 0; - } - status = HAL_SDRAM_Read_32b(sram,(uint32_t*)(testadr+startaddress), testarray, RAM_TEST_BLOCKSIZE); - - uint32_t errorcounter = 0; - for(uint32_t i = 0; i = N_SLAVES) { - // We've seen more than N_SLAVES slave IDs, this shouldn't happen. - Error_Handler(); - } - slave_id_to_index[slave_id] = next_slave_index; - slaves[next_slave_index].id = slave_id; - next_slave_index++; - } - return slave_id_to_index[slave_id]; -} diff --git a/Software/Core/Src/stm32h7xx_hal_msp.c b/Software/Core/Src/stm32h7xx_hal_msp.c index 7ff9fac..6cc5390 100644 --- a/Software/Core/Src/stm32h7xx_hal_msp.c +++ b/Software/Core/Src/stm32h7xx_hal_msp.c @@ -7,13 +7,12 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2022 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ @@ -332,7 +331,6 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) /**LTDC GPIO Configuration PF10 ------> LTDC_DE PC0 ------> LTDC_R5 - PA1 ------> LTDC_R2 PA3 ------> LTDC_B5 PA4 ------> LTDC_VSYNC PA5 ------> LTDC_R4 @@ -351,7 +349,6 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) PA10 ------> LTDC_B4 PA15 ------> LTDC_B6 PD2 ------> LTDC_B7 - PD6 ------> LTDC_B2 */ GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -367,8 +364,8 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5 - |GPIO_PIN_6|GPIO_PIN_15; + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 + |GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -424,18 +421,9 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - GPIO_InitStruct.Pin = GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /* LTDC interrupt Init */ HAL_NVIC_SetPriority(LTDC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(LTDC_IRQn); - HAL_NVIC_SetPriority(LTDC_ER_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(LTDC_ER_IRQn); /* USER CODE BEGIN LTDC_MspInit 1 */ /* USER CODE END LTDC_MspInit 1 */ @@ -463,7 +451,6 @@ void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) /**LTDC GPIO Configuration PF10 ------> LTDC_DE PC0 ------> LTDC_R5 - PA1 ------> LTDC_R2 PA3 ------> LTDC_B5 PA4 ------> LTDC_VSYNC PA5 ------> LTDC_R4 @@ -482,26 +469,24 @@ void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) PA10 ------> LTDC_B4 PA15 ------> LTDC_B6 PD2 ------> LTDC_B7 - PD6 ------> LTDC_B2 */ HAL_GPIO_DeInit(GPIOF, GPIO_PIN_10); HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7 |GPIO_PIN_9); - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5 - |GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_15); + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6 + |GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_15); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11 |GPIO_PIN_15); HAL_GPIO_DeInit(GPIOG, GPIO_PIN_7); - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2|GPIO_PIN_6); + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); /* LTDC interrupt DeInit */ HAL_NVIC_DisableIRQ(LTDC_IRQn); - HAL_NVIC_DisableIRQ(LTDC_ER_IRQn); /* USER CODE BEGIN LTDC_MspDeInit 1 */ /* USER CODE END LTDC_MspDeInit 1 */ diff --git a/Software/Core/Src/stm32h7xx_it.c b/Software/Core/Src/stm32h7xx_it.c index 7b57a97..8f01f00 100644 --- a/Software/Core/Src/stm32h7xx_it.c +++ b/Software/Core/Src/stm32h7xx_it.c @@ -6,13 +6,12 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2022 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2025 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ @@ -75,7 +74,7 @@ void NMI_Handler(void) /* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - while (1) + while (1) { } /* USER CODE END NonMaskableInt_IRQn 1 */ @@ -267,24 +266,10 @@ void LTDC_IRQHandler(void) /* USER CODE END LTDC_IRQn 0 */ HAL_LTDC_IRQHandler(&hltdc); /* USER CODE BEGIN LTDC_IRQn 1 */ - + HAL_LTDC_ProgramLineEvent(&hltdc,0); /* USER CODE END LTDC_IRQn 1 */ } -/** - * @brief This function handles LTDC Error global Interrupt. - */ -void LTDC_ER_IRQHandler(void) -{ - /* USER CODE BEGIN LTDC_ER_IRQn 0 */ - - /* USER CODE END LTDC_ER_IRQn 0 */ - HAL_LTDC_IRQHandler(&hltdc); - /* USER CODE BEGIN LTDC_ER_IRQn 1 */ - - /* USER CODE END LTDC_ER_IRQn 1 */ -} - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Software/Core/Src/syscalls.c b/Software/Core/Src/syscalls.c index bc0dd6c..e33a849 100644 --- a/Software/Core/Src/syscalls.c +++ b/Software/Core/Src/syscalls.c @@ -1,8 +1,8 @@ /** ****************************************************************************** * @file syscalls.c - * @author Auto-generated by STM32CubeIDE - * @brief STM32CubeIDE Minimal System calls file + * @author Auto-generated by STM32CubeMX + * @brief Minimal System calls file * * For more information about which c-functions * need which of these lowlevel functions @@ -10,13 +10,12 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2020-2024 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ @@ -48,109 +47,130 @@ void initialise_monitor_handles() int _getpid(void) { - return 1; + return 1; } int _kill(int pid, int sig) { - errno = EINVAL; - return -1; + (void)pid; + (void)sig; + errno = EINVAL; + return -1; } void _exit (int status) { - _kill(status, -1); - while (1) {} /* Make sure we hang here */ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ } __attribute__((weak)) int _read(int file, char *ptr, int len) { - int DataIdx; + (void)file; + int DataIdx; - for (DataIdx = 0; DataIdx < len; DataIdx++) - { - *ptr++ = __io_getchar(); - } + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } -return len; + return len; } __attribute__((weak)) int _write(int file, char *ptr, int len) { - int DataIdx; + (void)file; + int DataIdx; - for (DataIdx = 0; DataIdx < len; DataIdx++) - { - __io_putchar(*ptr++); - } - return len; + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; } int _close(int file) { - return -1; + (void)file; + return -1; } int _fstat(int file, struct stat *st) { - st->st_mode = S_IFCHR; - return 0; + (void)file; + st->st_mode = S_IFCHR; + return 0; } int _isatty(int file) { - return 1; + (void)file; + return 1; } int _lseek(int file, int ptr, int dir) { - return 0; + (void)file; + (void)ptr; + (void)dir; + return 0; } int _open(char *path, int flags, ...) { - /* Pretend like we always fail */ - return -1; + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; } int _wait(int *status) { - errno = ECHILD; - return -1; + (void)status; + errno = ECHILD; + return -1; } int _unlink(char *name) { - errno = ENOENT; - return -1; + (void)name; + errno = ENOENT; + return -1; } int _times(struct tms *buf) { - return -1; + (void)buf; + return -1; } int _stat(char *file, struct stat *st) { - st->st_mode = S_IFCHR; - return 0; + (void)file; + st->st_mode = S_IFCHR; + return 0; } int _link(char *old, char *new) { - errno = EMLINK; - return -1; + (void)old; + (void)new; + errno = EMLINK; + return -1; } int _fork(void) { - errno = EAGAIN; - return -1; + errno = EAGAIN; + return -1; } int _execve(char *name, char **argv, char **env) { - errno = ENOMEM; - return -1; + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; } diff --git a/Software/Core/Src/sysmem.c b/Software/Core/Src/sysmem.c index d7cc52c..246470e 100644 --- a/Software/Core/Src/sysmem.c +++ b/Software/Core/Src/sysmem.c @@ -1,8 +1,8 @@ /** ****************************************************************************** * @file sysmem.c - * @author Generated by STM32CubeIDE - * @brief STM32CubeIDE System Memory calls file + * @author Generated by STM32CubeMX + * @brief System Memory calls file * * For more information about which C functions * need which of these lowlevel functions @@ -10,13 +10,12 @@ ****************************************************************************** * @attention * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

+ * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ diff --git a/Software/Core/Src/system_stm32h7xx.c b/Software/Core/Src/system_stm32h7xx.c index d527ef3..197d15c 100644 --- a/Software/Core/Src/system_stm32h7xx.c +++ b/Software/Core/Src/system_stm32h7xx.c @@ -1,451 +1,556 @@ -/** - ****************************************************************************** - * @file system_stm32h7xx.c - * @author MCD Application Team - * @brief CMSIS Cortex-Mx Device Peripheral Access Layer System Source File. - * - * This file provides two functions and one global variable to be called from - * user application: - * - SystemInit(): This function is called at startup just after reset and - * before branch to main program. This call is made inside - * the "startup_stm32h7xx.s" file. - * - * - SystemCoreClock variable: Contains the core clock, it can be used - * by the user application to setup the SysTick - * timer or configure other parameters. - * - * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must - * be called whenever the core clock is changed - * during program execution. - * - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32h7xx_system - * @{ - */ - -/** @addtogroup STM32H7xx_System_Private_Includes - * @{ - */ - -#include "stm32h7xx.h" -#include -#if !defined (HSE_VALUE) -#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (CSI_VALUE) - #define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - - -/** - * @} - */ - -/** @addtogroup STM32H7xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32H7xx_System_Private_Defines - * @{ - */ - -/************************* Miscellaneous Configuration ************************/ -/*!< Uncomment the following line if you need to use initialized data in D2 domain SRAM (AHB SRAM) */ -/* #define DATA_IN_D2_SRAM */ - -/* Note: Following vector table addresses must be defined in line with linker - configuration. */ -/*!< Uncomment the following line if you need to relocate the vector table - anywhere in FLASH BANK1 or AXI SRAM, else the vector table is kept at the automatic - remap of boot address selected */ -/* #define USER_VECT_TAB_ADDRESS */ - -#if defined(USER_VECT_TAB_ADDRESS) -#if defined(DUAL_CORE) && defined(CORE_CM4) -/*!< Uncomment the following line if you need to relocate your vector Table - in D2 AXI SRAM else user remap will be done in FLASH BANK2. */ -/* #define VECT_TAB_SRAM */ -#if defined(VECT_TAB_SRAM) -#define VECT_TAB_BASE_ADDRESS D2_AXISRAM_BASE /*!< Vector Table base address field. - This value must be a multiple of 0x200. */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -#else -#define VECT_TAB_BASE_ADDRESS FLASH_BANK2_BASE /*!< Vector Table base address field. - This value must be a multiple of 0x200. */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -#endif /* VECT_TAB_SRAM */ -#else -/*!< Uncomment the following line if you need to relocate your vector Table - in D1 AXI SRAM else user remap will be done in FLASH BANK1. */ -/* #define VECT_TAB_SRAM */ -#if defined(VECT_TAB_SRAM) -#define VECT_TAB_BASE_ADDRESS D1_AXISRAM_BASE /*!< Vector Table base address field. - This value must be a multiple of 0x200. */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -#else -#define VECT_TAB_BASE_ADDRESS FLASH_BANK1_BASE /*!< Vector Table base address field. - This value must be a multiple of 0x200. */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -#endif /* VECT_TAB_SRAM */ -#endif /* DUAL_CORE && CORE_CM4 */ -#endif /* USER_VECT_TAB_ADDRESS */ -/******************************************************************************/ - -/** - * @} - */ - -/** @addtogroup STM32H7xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32H7xx_System_Private_Variables - * @{ - */ - /* This variable is updated in three ways: - 1) by calling CMSIS function SystemCoreClockUpdate() - 2) by calling HAL API function HAL_RCC_GetHCLKFreq() - 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency - Note: If you use this function to configure the system clock; then there - is no need to call the 2 first functions listed above, since SystemCoreClock - variable is updated automatically. - */ - uint32_t SystemCoreClock = 64000000; - uint32_t SystemD2Clock = 64000000; - const uint8_t D1CorePrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; - -/** - * @} - */ - -/** @addtogroup STM32H7xx_System_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32H7xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * Initialize the FPU setting and vector table location - * configuration. - * @param None - * @retval None - */ -void SystemInit (void) -{ -#if defined (DATA_IN_D2_SRAM) - __IO uint32_t tmpreg; -#endif /* DATA_IN_D2_SRAM */ - - /* FPU settings ------------------------------------------------------------*/ - #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */ - #endif - /* Reset the RCC clock configuration to the default reset state ------------*/ - - /* Increasing the CPU frequency */ - if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) - { - /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ - MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); - } - - /* Set HSION bit */ - RCC->CR |= RCC_CR_HSION; - - /* Reset CFGR register */ - RCC->CFGR = 0x00000000; - - /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */ - RCC->CR &= 0xEAF6ED7FU; - - /* Decreasing the number of wait states because of lower CPU frequency */ - if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) - { - /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ - MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); - } - -#if defined(D3_SRAM_BASE) - /* Reset D1CFGR register */ - RCC->D1CFGR = 0x00000000; - - /* Reset D2CFGR register */ - RCC->D2CFGR = 0x00000000; - - /* Reset D3CFGR register */ - RCC->D3CFGR = 0x00000000; -#else - /* Reset CDCFGR1 register */ - RCC->CDCFGR1 = 0x00000000; - - /* Reset CDCFGR2 register */ - RCC->CDCFGR2 = 0x00000000; - - /* Reset SRDCFGR register */ - RCC->SRDCFGR = 0x00000000; -#endif - /* Reset PLLCKSELR register */ - RCC->PLLCKSELR = 0x02020200; - - /* Reset PLLCFGR register */ - RCC->PLLCFGR = 0x01FF0000; - /* Reset PLL1DIVR register */ - RCC->PLL1DIVR = 0x01010280; - /* Reset PLL1FRACR register */ - RCC->PLL1FRACR = 0x00000000; - - /* Reset PLL2DIVR register */ - RCC->PLL2DIVR = 0x01010280; - - /* Reset PLL2FRACR register */ - - RCC->PLL2FRACR = 0x00000000; - /* Reset PLL3DIVR register */ - RCC->PLL3DIVR = 0x01010280; - - /* Reset PLL3FRACR register */ - RCC->PLL3FRACR = 0x00000000; - - /* Reset HSEBYP bit */ - RCC->CR &= 0xFFFBFFFFU; - - /* Disable all interrupts */ - RCC->CIER = 0x00000000; - -#if (STM32H7_DEV_ID == 0x450UL) - /* dual core CM7 or single core line */ - if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U) - { - /* if stm32h7 revY*/ - /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */ - *((__IO uint32_t*)0x51008108) = 0x000000001U; - } -#endif - -#if defined (DATA_IN_D2_SRAM) - /* in case of initialized data in D2 SRAM (AHB SRAM) , enable the D2 SRAM clock (AHB SRAM clock) */ -#if defined(RCC_AHB2ENR_D2SRAM3EN) - RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); -#elif defined(RCC_AHB2ENR_D2SRAM2EN) - RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN); -#else - RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN); -#endif /* RCC_AHB2ENR_D2SRAM3EN */ - - tmpreg = RCC->AHB2ENR; - (void) tmpreg; -#endif /* DATA_IN_D2_SRAM */ - -#if defined(DUAL_CORE) && defined(CORE_CM4) - /* Configure the Vector Table location add offset address for cortex-M4 ------------------*/ -#if defined(USER_VECT_TAB_ADDRESS) - SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D2 AXI-RAM or in Internal FLASH */ -#endif /* USER_VECT_TAB_ADDRESS */ - -#else - - /* - * Disable the FMC bank1 (enabled after reset). - * This, prevents CPU speculation access on this bank which blocks the use of FMC during - * 24us. During this time the others FMC master (such as LTDC) cannot use it! - */ - FMC_Bank1_R->BTCR[0] = 0x000030D2; - - /* Configure the Vector Table location -------------------------------------*/ -#if defined(USER_VECT_TAB_ADDRESS) - SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */ -#endif /* USER_VECT_TAB_ADDRESS */ - -#endif /*DUAL_CORE && CORE_CM4*/ - -} - -/** - * @brief Update SystemCoreClock variable according to Clock Register Values. - * The SystemCoreClock variable contains the core clock , it can - * be used by the user application to setup the SysTick timer or configure - * other parameters. - * - * @note Each time the core clock changes, this function must be called - * to update SystemCoreClock variable value. Otherwise, any configuration - * based on this variable will be incorrect. - * - * @note - The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * - * - If SYSCLK source is CSI, SystemCoreClock will contain the CSI_VALUE(*) - * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) - * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) - * - If SYSCLK source is PLL, SystemCoreClock will contain the CSI_VALUE(*), - * HSI_VALUE(**) or HSE_VALUE(***) multiplied/divided by the PLL factors. - * - * (*) CSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value - * 4 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * (**) HSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value - * 64 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (***)HSE_VALUE is a constant defined in stm32h7xx_hal.h file (default value - * 25 MHz), user has to ensure that HSE_VALUE is same as the real - * frequency of the crystal used. Otherwise, this function may - * have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * @param None - * @retval None - */ -void SystemCoreClockUpdate (void) -{ - uint32_t pllp, pllsource, pllm, pllfracen, hsivalue, tmp; - uint32_t common_system_clock; - float_t fracn1, pllvco; - - - /* Get SYSCLK source -------------------------------------------------------*/ - - switch (RCC->CFGR & RCC_CFGR_SWS) - { - case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ - common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); - break; - - case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */ - common_system_clock = CSI_VALUE; - break; - - case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ - common_system_clock = HSE_VALUE; - break; - - case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */ - - /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN - SYSCLK = PLL_VCO / PLLR - */ - pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC); - pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ; - pllfracen = ((RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos); - fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3)); - - if (pllm != 0U) - { - switch (pllsource) - { - case RCC_PLLCKSELR_PLLSRC_HSI: /* HSI used as PLL clock source */ - - hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; - pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); - - break; - - case RCC_PLLCKSELR_PLLSRC_CSI: /* CSI used as PLL clock source */ - pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); - break; - - case RCC_PLLCKSELR_PLLSRC_HSE: /* HSE used as PLL clock source */ - pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); - break; - - default: - hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; - pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); - break; - } - pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ; - common_system_clock = (uint32_t)(float_t)(pllvco/(float_t)pllp); - } - else - { - common_system_clock = 0U; - } - break; - - default: - common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); - break; - } - - /* Compute SystemClock frequency --------------------------------------------------*/ -#if defined (RCC_D1CFGR_D1CPRE) - tmp = D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]; - - /* common_system_clock frequency : CM7 CPU frequency */ - common_system_clock >>= tmp; - - /* SystemD2Clock frequency : CM4 CPU, AXI and AHBs Clock frequency */ - SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU)); - -#else - tmp = D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]; - - /* common_system_clock frequency : CM7 CPU frequency */ - common_system_clock >>= tmp; - - /* SystemD2Clock frequency : AXI and AHBs Clock frequency */ - SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_HPRE)>> RCC_CDCFGR1_HPRE_Pos]) & 0x1FU)); - -#endif - -#if defined(DUAL_CORE) && defined(CORE_CM4) - SystemCoreClock = SystemD2Clock; -#else - SystemCoreClock = common_system_clock; -#endif /* DUAL_CORE && CORE_CM4 */ -} - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ +/** + ****************************************************************************** + * @file system_stm32h7xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-Mx Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - ExitRun0Mode(): Specifies the Power Supply source. This function is + * called at startup just after reset and before the call + * of SystemInit(). This call is made inside + * the "startup_stm32h7xx.s" file. + * + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32h7xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock, it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32h7xx_system + * @{ + */ + +/** @addtogroup STM32H7xx_System_Private_Includes + * @{ + */ + +#include "stm32h7xx.h" +#include + +#if !defined (HSE_VALUE) +#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (CSI_VALUE) + #define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use initialized data in D2 domain SRAM (AHB SRAM) */ +/* #define DATA_IN_D2_SRAM */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in FLASH BANK1 or AXI SRAM, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +#if defined(DUAL_CORE) && defined(CORE_CM4) +/*!< Uncomment the following line if you need to relocate your vector Table + in D2 AXI SRAM else user remap will be done in FLASH BANK2. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS D2_AXISRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BANK2_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#endif /* VECT_TAB_SRAM */ +#else +/*!< Uncomment the following line if you need to relocate your vector Table + in D1 AXI SRAM else user remap will be done in FLASH BANK1. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS D1_AXISRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BANK1_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x400. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +#endif /* VECT_TAB_SRAM */ +#endif /* DUAL_CORE && CORE_CM4 */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 64000000; + uint32_t SystemD2Clock = 64000000; + const uint8_t D1CorePrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32H7xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting and vector table location + * configuration. + * @param None + * @retval None + */ +void SystemInit (void) +{ +#if defined (DATA_IN_D2_SRAM) + __IO uint32_t tmpreg; +#endif /* DATA_IN_D2_SRAM */ + + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */ + #endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + + /* Increasing the CPU frequency */ + if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); + } + + /* Set HSION bit */ + RCC->CR |= RCC_CR_HSION; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */ + RCC->CR &= 0xEAF6ED7FU; + + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT)); + } + +#if defined(D3_SRAM_BASE) + /* Reset D1CFGR register */ + RCC->D1CFGR = 0x00000000; + + /* Reset D2CFGR register */ + RCC->D2CFGR = 0x00000000; + + /* Reset D3CFGR register */ + RCC->D3CFGR = 0x00000000; +#else + /* Reset CDCFGR1 register */ + RCC->CDCFGR1 = 0x00000000; + + /* Reset CDCFGR2 register */ + RCC->CDCFGR2 = 0x00000000; + + /* Reset SRDCFGR register */ + RCC->SRDCFGR = 0x00000000; +#endif + /* Reset PLLCKSELR register */ + RCC->PLLCKSELR = 0x02020200; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x01FF0000; + /* Reset PLL1DIVR register */ + RCC->PLL1DIVR = 0x01010280; + /* Reset PLL1FRACR register */ + RCC->PLL1FRACR = 0x00000000; + + /* Reset PLL2DIVR register */ + RCC->PLL2DIVR = 0x01010280; + + /* Reset PLL2FRACR register */ + + RCC->PLL2FRACR = 0x00000000; + /* Reset PLL3DIVR register */ + RCC->PLL3DIVR = 0x01010280; + + /* Reset PLL3FRACR register */ + RCC->PLL3FRACR = 0x00000000; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Disable all interrupts */ + RCC->CIER = 0x00000000; + +#if (STM32H7_DEV_ID == 0x450UL) + /* dual core CM7 or single core line */ + if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U) + { + /* if stm32h7 revY*/ + /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */ + *((__IO uint32_t*)0x51008108) = 0x000000001U; + } +#endif /* STM32H7_DEV_ID */ + +#if defined(DATA_IN_D2_SRAM) + /* in case of initialized data in D2 SRAM (AHB SRAM), enable the D2 SRAM clock (AHB SRAM clock) */ +#if defined(RCC_AHB2ENR_D2SRAM3EN) + RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); +#elif defined(RCC_AHB2ENR_D2SRAM2EN) + RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN); +#else + RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN); +#endif /* RCC_AHB2ENR_D2SRAM3EN */ + + tmpreg = RCC->AHB2ENR; + (void) tmpreg; +#endif /* DATA_IN_D2_SRAM */ + +#if defined(DUAL_CORE) && defined(CORE_CM4) + /* Configure the Vector Table location add offset address for cortex-M4 ------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D2 AXI-RAM or in Internal FLASH */ +#endif /* USER_VECT_TAB_ADDRESS */ + +#else + if(READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN) == 0U) + { + /* Enable the FMC interface clock */ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* + * Disable the FMC bank1 (enabled after reset). + * This, prevents CPU speculation access on this bank which blocks the use of FMC during + * 24us. During this time the others FMC master (such as LTDC) cannot use it! + */ + FMC_Bank1_R->BTCR[0] = 0x000030D2; + + /* Disable the FMC interface clock */ + CLEAR_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + } + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */ +#endif /* USER_VECT_TAB_ADDRESS */ + +#endif /*DUAL_CORE && CORE_CM4*/ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock , it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is CSI, SystemCoreClock will contain the CSI_VALUE(*) + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * - If SYSCLK source is PLL, SystemCoreClock will contain the CSI_VALUE(*), + * HSI_VALUE(**) or HSE_VALUE(***) multiplied/divided by the PLL factors. + * + * (*) CSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 4 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * (**) HSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 64 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***)HSE_VALUE is a constant defined in stm32h7xx_hal.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t pllp, pllsource, pllm, pllfracen, hsivalue, tmp; + uint32_t common_system_clock; + float_t fracn1, pllvco; + + + /* Get SYSCLK source -------------------------------------------------------*/ + + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); + break; + + case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */ + common_system_clock = CSI_VALUE; + break; + + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + common_system_clock = HSE_VALUE; + break; + + case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC); + pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ; + pllfracen = ((RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN)>>RCC_PLLCFGR_PLL1FRACEN_Pos); + fracn1 = (float_t)(uint32_t)(pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3)); + + if (pllm != 0U) + { + switch (pllsource) + { + case RCC_PLLCKSELR_PLLSRC_HSI: /* HSI used as PLL clock source */ + + hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; + pllvco = ( (float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + + break; + + case RCC_PLLCKSELR_PLLSRC_CSI: /* CSI used as PLL clock source */ + pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + case RCC_PLLCKSELR_PLLSRC_HSE: /* HSE used as PLL clock source */ + pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + + default: + hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ; + pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/(float_t)0x2000) +(float_t)1 ); + break; + } + pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1U ) ; + common_system_clock = (uint32_t)(float_t)(pllvco/(float_t)pllp); + } + else + { + common_system_clock = 0U; + } + break; + + default: + common_system_clock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)); + break; + } + + /* Compute SystemClock frequency --------------------------------------------------*/ +#if defined (RCC_D1CFGR_D1CPRE) + tmp = D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]; + + /* common_system_clock frequency : CM7 CPU frequency */ + common_system_clock >>= tmp; + + /* SystemD2Clock frequency : CM4 CPU, AXI and AHBs Clock frequency */ + SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU)); + +#else + tmp = D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]; + + /* common_system_clock frequency : CM7 CPU frequency */ + common_system_clock >>= tmp; + + /* SystemD2Clock frequency : AXI and AHBs Clock frequency */ + SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_HPRE)>> RCC_CDCFGR1_HPRE_Pos]) & 0x1FU)); + +#endif + +#if defined(DUAL_CORE) && defined(CORE_CM4) + SystemCoreClock = SystemD2Clock; +#else + SystemCoreClock = common_system_clock; +#endif /* DUAL_CORE && CORE_CM4 */ +} + +/** + * @brief Exit Run* mode and Configure the system Power Supply + * + * @note This function exits the Run* mode and configures the system power supply + * according to the definition to be used at compilation preprocessing level. + * The application shall set one of the following configuration option: + * - PWR_LDO_SUPPLY + * - PWR_DIRECT_SMPS_SUPPLY + * - PWR_EXTERNAL_SOURCE_SUPPLY + * - PWR_SMPS_1V8_SUPPLIES_LDO + * - PWR_SMPS_2V5_SUPPLIES_LDO + * - PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO + * - PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO + * - PWR_SMPS_1V8_SUPPLIES_EXT + * - PWR_SMPS_2V5_SUPPLIES_EXT + * + * @note The function modifies the PWR->CR3 register to enable or disable specific + * power supply modes and waits until the voltage level flag is set, indicating + * that the power supply configuration is stable. + * + * @param None + * @retval None + */ +void ExitRun0Mode(void) +{ +#if defined(USE_PWR_LDO_SUPPLY) + #if defined(SMPS) + /* Exit Run* mode by disabling SMPS and enabling LDO */ + PWR->CR3 = (PWR->CR3 & ~PWR_CR3_SMPSEN) | PWR_CR3_LDOEN; + #else + /* Enable LDO mode */ + PWR->CR3 |= PWR_CR3_LDOEN; + #endif /* SMPS */ + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_EXTERNAL_SOURCE_SUPPLY) + #if defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_SMPSEN | PWR_CR3_LDOEN)) | PWR_CR3_BYPASS; + #else + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_LDOEN)) | PWR_CR3_BYPASS; + #endif /* SMPS */ + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_DIRECT_SMPS_SUPPLY) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 &= ~(PWR_CR3_LDOEN); + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_1V8_SUPPLIES_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_2V5_SUPPLIES_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 |= PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_LDOEN; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_1V8_SUPPLIES_EXT) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_LDOEN)) | PWR_CR3_SMPSLEVEL_0 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_BYPASS; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#elif defined(USE_PWR_SMPS_2V5_SUPPLIES_EXT) && defined(SMPS) + /* Exit Run* mode */ + PWR->CR3 = (PWR->CR3 & ~(PWR_CR3_LDOEN)) | PWR_CR3_SMPSLEVEL_1 | PWR_CR3_SMPSEXTHP | PWR_CR3_SMPSEN | PWR_CR3_BYPASS; + /* Wait till voltage level flag is set */ + while ((PWR->CSR1 & PWR_CSR1_ACTVOSRDY) == 0U) + {} +#else + /* No system power supply configuration is selected at exit Run* mode */ +#endif /* USE_PWR_LDO_SUPPLY */ +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/Software/FT23_Charger.ioc b/Software/FT23_Charger.ioc index 5e64769..5de4ae5 100644 --- a/Software/FT23_Charger.ioc +++ b/Software/FT23_Charger.ioc @@ -35,26 +35,26 @@ GPIO.groupedBy=Group By Peripherals I2C4.IPParameters=Timing I2C4.Timing=0x10909CEC KeepUserPlacement=false -LTDC.ActiveH=600 -LTDC.ActiveW=1024 +LTDC.ActiveH=272 +LTDC.ActiveW=480 LTDC.Alpha_L0=1 LTDC.Blue_L0=100 LTDC.FBStartAdress_L0=201326592 -LTDC.HBP=140 -LTDC.HFP=160 +LTDC.HBP=50 +LTDC.HFP=50 LTDC.HSync=20 LTDC.IPParameters=ActiveW,ActiveH,HFP,HBP,HSync,VSync,VBP,VFP,Layers,FBStartAdress_L0,ImageWidth_L0,ImageHeight_L0,PixelFormat_L0,Blue_L0,WindowX0_L0,WindowX1_L0,WindowY0_L0,WindowY1_L0,Alpha_L0 LTDC.ImageHeight_L0=600 LTDC.ImageWidth_L0=1024 LTDC.Layers=0 -LTDC.PixelFormat_L0=LTDC_PIXEL_FORMAT_RGB888 +LTDC.PixelFormat_L0=LTDC_PIXEL_FORMAT_RGB565 LTDC.VBP=20 LTDC.VFP=12 LTDC.VSync=3 LTDC.WindowX0_L0=0 -LTDC.WindowX1_L0=1024 +LTDC.WindowX1_L0=480 LTDC.WindowY0_L0=0 -LTDC.WindowY1_L0=600 +LTDC.WindowY1_L0=272 MMTAppRegionsCount=0 MMTConfigApplied=false Mcu.CPN=STM32H7A3ZIT6 @@ -88,95 +88,92 @@ Mcu.Pin15=PC0 Mcu.Pin16=PC1 Mcu.Pin17=PC2_C Mcu.Pin18=PC3_C -Mcu.Pin19=PA1 +Mcu.Pin19=PA3 Mcu.Pin2=PC14-OSC32_IN -Mcu.Pin20=PA3 -Mcu.Pin21=PA4 -Mcu.Pin22=PA5 -Mcu.Pin23=PA6 -Mcu.Pin24=PA7 -Mcu.Pin25=PC4 -Mcu.Pin26=PB0 -Mcu.Pin27=PB1 -Mcu.Pin28=PF11 -Mcu.Pin29=PF12 +Mcu.Pin20=PA4 +Mcu.Pin21=PA5 +Mcu.Pin22=PA6 +Mcu.Pin23=PA7 +Mcu.Pin24=PC4 +Mcu.Pin25=PB0 +Mcu.Pin26=PB1 +Mcu.Pin27=PF11 +Mcu.Pin28=PF12 +Mcu.Pin29=PF13 Mcu.Pin3=PC15-OSC32_OUT -Mcu.Pin30=PF13 -Mcu.Pin31=PF14 -Mcu.Pin32=PF15 -Mcu.Pin33=PG0 -Mcu.Pin34=PG1 -Mcu.Pin35=PE7 -Mcu.Pin36=PE8 -Mcu.Pin37=PE9 -Mcu.Pin38=PE10 -Mcu.Pin39=PE11 +Mcu.Pin30=PF14 +Mcu.Pin31=PF15 +Mcu.Pin32=PG0 +Mcu.Pin33=PG1 +Mcu.Pin34=PE7 +Mcu.Pin35=PE8 +Mcu.Pin36=PE9 +Mcu.Pin37=PE10 +Mcu.Pin38=PE11 +Mcu.Pin39=PE12 Mcu.Pin4=PF0 -Mcu.Pin40=PE12 -Mcu.Pin41=PE13 -Mcu.Pin42=PE14 -Mcu.Pin43=PE15 -Mcu.Pin44=PB10 -Mcu.Pin45=PB11 -Mcu.Pin46=PB12 -Mcu.Pin47=PB13 -Mcu.Pin48=PB14 -Mcu.Pin49=PB15 +Mcu.Pin40=PE13 +Mcu.Pin41=PE14 +Mcu.Pin42=PE15 +Mcu.Pin43=PB10 +Mcu.Pin44=PB11 +Mcu.Pin45=PB12 +Mcu.Pin46=PB13 +Mcu.Pin47=PB14 +Mcu.Pin48=PB15 +Mcu.Pin49=PD8 Mcu.Pin5=PF1 -Mcu.Pin50=PD8 -Mcu.Pin51=PD9 -Mcu.Pin52=PD10 -Mcu.Pin53=PD14 -Mcu.Pin54=PD15 -Mcu.Pin55=PG2 -Mcu.Pin56=PG4 -Mcu.Pin57=PG5 -Mcu.Pin58=PG7 -Mcu.Pin59=PG8 +Mcu.Pin50=PD9 +Mcu.Pin51=PD10 +Mcu.Pin52=PD14 +Mcu.Pin53=PD15 +Mcu.Pin54=PG2 +Mcu.Pin55=PG4 +Mcu.Pin56=PG5 +Mcu.Pin57=PG7 +Mcu.Pin58=PG8 +Mcu.Pin59=PC6 Mcu.Pin6=PF2 -Mcu.Pin60=PC6 -Mcu.Pin61=PC7 -Mcu.Pin62=PC8 -Mcu.Pin63=PC9 -Mcu.Pin64=PA8 -Mcu.Pin65=PA9 -Mcu.Pin66=PA10 -Mcu.Pin67=PA11 -Mcu.Pin68=PA12 -Mcu.Pin69=PA13 +Mcu.Pin60=PC7 +Mcu.Pin61=PC8 +Mcu.Pin62=PC9 +Mcu.Pin63=PA8 +Mcu.Pin64=PA9 +Mcu.Pin65=PA10 +Mcu.Pin66=PA11 +Mcu.Pin67=PA12 +Mcu.Pin68=PA13 +Mcu.Pin69=PA14 Mcu.Pin7=PF3 -Mcu.Pin70=PA14 -Mcu.Pin71=PA15 -Mcu.Pin72=PC10 -Mcu.Pin73=PC11 -Mcu.Pin74=PC12 -Mcu.Pin75=PD0 -Mcu.Pin76=PD1 -Mcu.Pin77=PD2 -Mcu.Pin78=PD6 -Mcu.Pin79=PD7 +Mcu.Pin70=PA15 +Mcu.Pin71=PC10 +Mcu.Pin72=PC11 +Mcu.Pin73=PC12 +Mcu.Pin74=PD0 +Mcu.Pin75=PD1 +Mcu.Pin76=PD2 +Mcu.Pin77=PD7 +Mcu.Pin78=PG9 +Mcu.Pin79=PG11 Mcu.Pin8=PF4 -Mcu.Pin80=PG9 -Mcu.Pin81=PG11 -Mcu.Pin82=PG12 -Mcu.Pin83=PG13 -Mcu.Pin84=PG14 -Mcu.Pin85=PG15 -Mcu.Pin86=PB3 -Mcu.Pin87=PB4 -Mcu.Pin88=PB5 -Mcu.Pin89=PB6 +Mcu.Pin80=PG12 +Mcu.Pin81=PG13 +Mcu.Pin82=PG14 +Mcu.Pin83=PG15 +Mcu.Pin84=PB3 +Mcu.Pin85=PB4 +Mcu.Pin86=PB5 +Mcu.Pin87=PB6 +Mcu.Pin88=PB7 +Mcu.Pin89=PB8 Mcu.Pin9=PF5 -Mcu.Pin90=PB7 -Mcu.Pin91=PB8 -Mcu.Pin92=PB9 -Mcu.Pin93=PE0 -Mcu.Pin94=PE1 -Mcu.Pin95=VP_CRC_VS_CRC -Mcu.Pin96=VP_SYS_VS_Systick -Mcu.Pin97=VP_MEMORYMAP_VS_MEMORYMAP -Mcu.Pin98=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.0 -Mcu.PinsNb=99 +Mcu.Pin90=PB9 +Mcu.Pin91=PE0 +Mcu.Pin92=PE1 +Mcu.Pin93=VP_CRC_VS_CRC +Mcu.Pin94=VP_SYS_VS_Systick +Mcu.Pin95=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.PinsNb=96 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0 Mcu.ThirdPartyNb=1 Mcu.UserConstants= @@ -191,7 +188,6 @@ NVIC.FDCAN_CAL_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.FMC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.LTDC_ER_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.LTDC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -200,9 +196,7 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -PA1.Mode=RGB666 -PA1.Signal=LTDC_R2 -PA10.Mode=RGB666 +PA10.Mode=RGB565 PA10.Signal=LTDC_B4 PA11.Mode=Device_Only_FS PA11.Signal=USB_OTG_HS_DM @@ -212,28 +206,28 @@ PA13.Mode=Trace_Asynchronous_SW PA13.Signal=DEBUG_JTMS-SWDIO PA14.Mode=Trace_Asynchronous_SW PA14.Signal=DEBUG_JTCK-SWCLK -PA15.Mode=RGB666 +PA15.Mode=RGB565 PA15.Signal=LTDC_B6 -PA3.Mode=RGB666 +PA3.Mode=RGB565 PA3.Signal=LTDC_B5 -PA4.Mode=RGB666 +PA4.Mode=RGB565 PA4.Signal=LTDC_VSYNC -PA5.Mode=RGB666 +PA5.Mode=RGB565 PA5.Signal=LTDC_R4 -PA6.Mode=RGB666 +PA6.Mode=RGB565 PA6.Signal=LTDC_G2 PA7.Signal=FMC_SDNWE -PA8.Mode=RGB666 +PA8.Mode=RGB565 PA8.Signal=LTDC_B3 PA9.Mode=Activate_VBUS_FS PA9.Signal=USB_OTG_HS_VBUS -PB0.Mode=RGB666 +PB0.Mode=RGB565 PB0.Signal=LTDC_R3 -PB1.Mode=RGB666 +PB1.Mode=RGB565 PB1.Signal=LTDC_R6 -PB10.Mode=RGB666 +PB10.Mode=RGB565 PB10.Signal=LTDC_G4 -PB11.Mode=RGB666 +PB11.Mode=RGB565 PB11.Signal=LTDC_G5 PB12.Mode=Asynchronous PB12.Signal=UART5_RX @@ -241,7 +235,7 @@ PB13.Mode=Asynchronous PB13.Signal=UART5_TX PB14.Mode=SD_1_bit PB14.Signal=SDMMC2_D0 -PB15.Mode=RGB666 +PB15.Mode=RGB565 PB15.Signal=LTDC_G7 PB3.Mode=Trace_Asynchronous_SW PB3.Signal=DEBUG_JTDO-SWO @@ -267,7 +261,7 @@ PB8.Mode=FDCAN_Activate PB8.Signal=FDCAN1_RX PB9.Mode=FDCAN_Activate PB9.Signal=FDCAN1_TX -PC0.Mode=RGB666 +PC0.Mode=RGB565 PC0.Signal=LTDC_R5 PC1.Mode=SD_1_bit PC1.Signal=SDMMC2_CK @@ -291,27 +285,25 @@ PC2_C.Mode=SdramChipSelect1_1 PC2_C.Signal=FMC_SDNE0 PC3_C.Mode=SdramChipSelect1_1 PC3_C.Signal=FMC_SDCKE0 -PC4.Mode=RGB666 +PC4.Mode=RGB565 PC4.Signal=LTDC_R7 -PC6.Mode=RGB666 +PC6.Mode=RGB565 PC6.Signal=LTDC_HSYNC -PC7.Mode=RGB666 +PC7.Mode=RGB565 PC7.Signal=LTDC_G6 PC8.GPIOParameters=GPIO_Label PC8.GPIO_Label=Display_Reset PC8.Locked=true PC8.Signal=GPIO_Output -PC9.Mode=RGB666 +PC9.Mode=RGB565 PC9.Signal=LTDC_G3 PD0.Signal=FMC_D2_DA2 PD1.Signal=FMC_D3_DA3 PD10.Signal=FMC_D15_DA15 PD14.Signal=FMC_D0_DA0 PD15.Signal=FMC_D1_DA1 -PD2.Mode=RGB666 +PD2.Mode=RGB565 PD2.Signal=LTDC_B7 -PD6.Mode=RGB666 -PD6.Signal=LTDC_B2 PD7.Mode=SD_1_bit PD7.Signal=SDMMC2_CMD PD8.Signal=FMC_D13_DA13 @@ -335,7 +327,7 @@ PE8.Signal=FMC_D5_DA5 PE9.Signal=FMC_D6_DA6 PF0.Signal=FMC_A0 PF1.Signal=FMC_A1 -PF10.Mode=RGB666 +PF10.Mode=RGB565 PF10.Signal=LTDC_DE PF11.Signal=FMC_SDNRAS PF12.Signal=FMC_A6 @@ -376,7 +368,7 @@ PG15.Signal=FMC_SDNCAS PG2.Signal=FMC_A12 PG4.Signal=FMC_A14_BA0 PG5.Signal=FMC_A15_BA1 -PG7.Mode=RGB666 +PG7.Mode=RGB565 PG7.Signal=LTDC_CLK PG8.Signal=FMC_SDCLK PG9.GPIOParameters=GPIO_Label @@ -413,11 +405,11 @@ ProjectManager.ProjectName=FT23_Charger ProjectManager.ProjectStructure= ProjectManager.RegisterCallBack= ProjectManager.StackSize=0x400 -ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= -ProjectManager.UnderRoot=true +ProjectManager.UnderRoot=false ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_FDCAN1_Init-FDCAN1-false-HAL-true,4-MX_FMC_Init-FMC-false-HAL-true,5-MX_I2C4_Init-I2C4-false-HAL-true,6-MX_SDMMC2_SD_Init-SDMMC2-false-HAL-true,7-MX_USART10_UART_Init-USART10-false-HAL-true,8-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,9-MX_UART5_Init-UART5-false-HAL-true,10-MX_LTDC_Init-LTDC-false-HAL-true,11-MX_CRC_Init-CRC-false-HAL-true,13-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,14-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0-false-HAL-false RCC.ADCCLockSelection=RCC_ADCCLKSOURCE_PLL2 RCC.ADCFreq_Value=160000000 @@ -625,9 +617,8 @@ SH.FMC_SDNRAS.0=FMC_SDNRAS,13b-sda1 SH.FMC_SDNRAS.ConfNb=1 SH.FMC_SDNWE.0=FMC_SDNWE,13b-sda1 SH.FMC_SDNWE.ConfNb=1 -STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.ApplicationCcGraphicsJjApplication=TouchGFXOoGenerator -STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.GraphicsJjApplication_Checked=true -STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.IPParameters=ApplicationCcGraphicsJjApplication,tgfx_display_interface,tgfx_vsync +STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.GraphicsJjApplication_Checked=false +STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.IPParameters=tgfx_display_interface,tgfx_vsync STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.tgfx_display_interface=disp_ltdc STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0.tgfx_vsync=vsync_ltdc STMicroelectronics.X-CUBE-TOUCHGFX.4.21.0_IsPackSelfContextualization=true @@ -640,8 +631,6 @@ VP_CRC_VS_CRC.Mode=CRC_Activate VP_CRC_VS_CRC.Signal=CRC_VS_CRC VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP -VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.0.Mode=GraphicsJjApplication -VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.0.Signal=STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.0 VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=custom diff --git a/Software/FT23_Charger.launch b/Software/FT23_Charger.launch deleted file mode 100644 index edb5e91..0000000 --- a/Software/FT23_Charger.launch +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Software/Makefile b/Software/Makefile new file mode 100644 index 0000000..619e4c9 --- /dev/null +++ b/Software/Makefile @@ -0,0 +1,222 @@ +########################################################################################################################## +# File automatically-generated by tool: [projectgenerator] version: [4.5.0-RC5] date: [Mon Mar 31 16:30:20 CEST 2025] +########################################################################################################################## + +# ------------------------------------------------ +# Generic Makefile (based on gcc) +# +# ChangeLog : +# 2017-02-10 - Several enhancements + project update mode +# 2015-07-22 - first version +# ------------------------------------------------ + +###################################### +# target +###################################### +TARGET = FT23_Charger + + +###################################### +# building variables +###################################### +# debug build? +DEBUG = 1 +# optimization +OPT = -Og + + +####################################### +# paths +####################################### +# Build path +BUILD_DIR = build + +###################################### +# source +###################################### +# C sources +C_SOURCES = \ +Core/Src/main.c \ +Core/Src/stm32h7xx_it.c \ +Core/Src/stm32h7xx_hal_msp.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c \ +Core/Src/system_stm32h7xx.c \ +Core/Src/sysmem.c \ +Core/Src/syscalls.c + +# ASM sources +ASM_SOURCES = \ +startup_stm32h7a3xx.s + +# ASM sources +ASMM_SOURCES = + + +####################################### +# binaries +####################################### +PREFIX = arm-none-eabi- +# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) +# either it can be added to the PATH environment variable. +ifdef GCC_PATH +CC = $(GCC_PATH)/$(PREFIX)gcc +AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp +CP = $(GCC_PATH)/$(PREFIX)objcopy +SZ = $(GCC_PATH)/$(PREFIX)size +else +CC = $(PREFIX)gcc +AS = $(PREFIX)gcc -x assembler-with-cpp +CP = $(PREFIX)objcopy +SZ = $(PREFIX)size +endif +HEX = $(CP) -O ihex +BIN = $(CP) -O binary -S + +####################################### +# CFLAGS +####################################### +# cpu +CPU = -mcpu=cortex-m7 + +# fpu +FPU = -mfpu=fpv5-d16 + +# float-abi +FLOAT-ABI = -mfloat-abi=hard + +# mcu +MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) + +# macros for gcc +# AS defines +AS_DEFS = + +# C defines +C_DEFS = \ +-DUSE_PWR_LDO_SUPPLY \ +-DUSE_HAL_DRIVER \ +-DSTM32H7A3xx + + +# AS includes +AS_INCLUDES = + +# C includes +C_INCLUDES = \ +-ICore/Inc \ +-IDrivers/STM32H7xx_HAL_Driver/Inc \ +-IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \ +-IDrivers/CMSIS/Device/ST/STM32H7xx/Include \ +-IDrivers/CMSIS/Include + + +# compile gcc flags +ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +CFLAGS += $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +ifeq ($(DEBUG), 1) +CFLAGS += -g -gdwarf-2 +endif + + +# Generate dependency information +CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" + + +####################################### +# LDFLAGS +####################################### +# link script +LDSCRIPT = stm32h7a3zitx_flash.ld + +# libraries +LIBS = -lc -lm -lnosys +LIBDIR = +LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections + +# default action: build all +all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + + +####################################### +# build the application +####################################### +# list of objects +OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +vpath %.c $(sort $(dir $(C_SOURCES))) +# list of ASM program objects +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) +vpath %.s $(sort $(dir $(ASM_SOURCES))) +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASMM_SOURCES:.S=.o))) +vpath %.S $(sort $(dir $(ASMM_SOURCES))) + +$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) + $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ + +$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) + $(AS) -c $(CFLAGS) $< -o $@ +$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR) + $(AS) -c $(CFLAGS) $< -o $@ + +$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + $(SZ) $@ + +$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(HEX) $< $@ + +$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(BIN) $< $@ + +$(BUILD_DIR): + mkdir $@ + +####################################### +# clean up +####################################### +clean: + -rm -fR $(BUILD_DIR) + +####################################### +# dependencies +####################################### +-include $(wildcard $(BUILD_DIR)/*.d) + +# *** EOF *** \ No newline at end of file diff --git a/Software/STM32-for-VSCode.config.yaml b/Software/STM32-for-VSCode.config.yaml new file mode 100644 index 0000000..a1b9558 --- /dev/null +++ b/Software/STM32-for-VSCode.config.yaml @@ -0,0 +1,112 @@ +# Configuration file for the STM32 for VSCode extension +# Arrays can be inputted in two ways. One is: [entry_1, entry_2, ..., entry_final] +# or by adding an indented list below the variable name e.g.: +# VARIABLE: +# - entry_1 +# - entry_2 + +# The project name +target: FT23_Charger +# Can be C or C++ +language: C + +optimization: Og + +# MCU settings +targetMCU: stm32h7x +cpu: cortex-m7 # type of cpu e.g. cortex-m4 +fpu: fpv5-d16 # Defines how floating points are defined. Can be left empty. +floatAbi: -mfloat-abi=hard +ldscript: stm32h7a3zitx_flash.ld # linker script + +# Compiler definitions. The -D prefix for the compiler will be automatically added. +cDefinitions: [] +cxxDefinitions: [] +asDefinitions: [] + +# Compiler definition files. you can add a single files or an array of files for different definitions. +# The file is expected to have a definition each new line. +# This allows to include for example a .definition file which can be ignored in git and can contain +# This can be convenient for passing along secrets at compile time, or generating a file for per device setup. +cDefinitionsFile: +cxxDefinitionsFile: +asDefinitionsFile: + +# Compiler flags +cFlags: + - -Wall + - -fdata-sections + - -ffunction-sections + +cxxFlags: + - -fno-rtti + - -fno-exceptions + +assemblyFlags: + - -Wall + - -fdata-sections + - -ffunction-sections + +linkerFlags: + - -Wl,--print-memory-usage + + +# libraries to be included. The -l prefix to the library will be automatically added. +libraries: + - c + - m + +# Library directories. Folders can be added here that contain custom libraries. +libraryDirectories: [] + +# Files or folders that will be excluded from compilation. +# Glob patterns (https://www.wikiwand.com/en/Glob_(programming)) can be used. +# Do mind that double stars are reserved in yaml +# these should be escaped with a: \ or the name should be in double quotes e.g. "**.test.**" +excludes: + - "**/Examples/**" + - "**/examples/**" + - "**/Example/**" + - "**/example/**" + - "**_template.*" + + +# Include directories (directories containing .h or .hpp files) +# If a CubeMX makefile is present it will automatically include the include directories from that makefile. +includeDirectories: + - Inc/** + - Core/Inc/** + - Core/Lib/** + - Src/** + - Core/Src/** + - Core/Lib/** + + +# Files that should be included in the compilation. +# If a CubeMX makefile is present it will automatically include the c and cpp/cxx files from that makefile. +# Glob patterns (https://www.wikiwand.com/en/Glob_(programming)) can be used. +# Do mind that double stars are reserved in yaml +# these should be escaped with a: \ or the name should be in double quotes e.g. "HARDWARE_DRIVER*.c" +sourceFiles: + - Src/** + - Core/Src/** + - Core/Lib/** + + +# When no makefile is present it will show a warning pop-up. +# However when compilation without the CubeMX Makefile is desired, this can be turned of. +suppressMakefileWarning: false + +# Custom makefile rules +# Here custom makefile rules can be added to the STM32Make.make file +# an example of how this can be used is commented out below. +customMakefileRules: +# - command: sayhello +# rule: echo "hello" +# dependsOn: $(BUILD_DIR)/$(TARGET).elf # can be left out + +# Additional flags which will be used when invoking the make command +makeFlags: +# - -O # use this option when the output of make is mixed up only works for make version 4.0 and upwards +# - --silent # use this option to silence the output of the build + \ No newline at end of file diff --git a/Software/STM32H7A3ZITX_RAM.ld b/Software/STM32H7A3ZITX_RAM.ld deleted file mode 100644 index 4dbe035..0000000 --- a/Software/STM32H7A3ZITX_RAM.ld +++ /dev/null @@ -1,181 +0,0 @@ -/* -****************************************************************************** -** -** File : LinkerScript.ld -** -** Author : STM32CubeIDE -** -** Abstract : Linker script for STM32H7 series -** 1024Kbytes RAM_EXEC and 128Kbytes RAM -** -** Set heap size, stack size and stack location according -** to application requirements. -** -** Set memory bank area and size if external memory is used. -** -** Target : STMicroelectronics STM32 -** -** Distribution: The file is distributed as is, without any warranty -** of any kind. -** -***************************************************************************** -** @attention -** -** Copyright (c) 2020 STMicroelectronics. -** All rights reserved. -** -** This software component is licensed by ST under BSD 3-Clause license, -** the "License"; You may not use this file except in compliance with the -** License. You may obtain a copy of the License at: -** opensource.org/licenses/BSD-3-Clause -** -**************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20020000; /* end of RAM */ -/* Generate a link error if heap and stack don't fit into RAM */ -_Min_Heap_Size = 0x200 ; /* required amount of heap */ -_Min_Stack_Size = 0x400 ; /* required amount of stack */ - -/* Specify the memory areas */ -MEMORY -{ - RAM_EXEC (xrw) : ORIGIN = 0x24000000, LENGTH = 1024K - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K - AHB_SRAM (xrw) : ORIGIN = 0x30000000, LENGTH = 128K -} - -/* Define output sections */ -SECTIONS -{ - /* The startup code goes first into RAM_EXEC */ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) /* Startup code */ - . = ALIGN(4); - } >RAM_EXEC - - /* The program code and other data goes into RAM_EXEC */ - .text : - { - . = ALIGN(4); - *(.text) /* .text sections (code) */ - *(.text*) /* .text* sections (code) */ - *(.glue_7) /* glue arm to thumb code */ - *(.glue_7t) /* glue thumb to arm code */ - *(.eh_frame) - *(.RamFunc) /* .RamFunc sections */ - *(.RamFunc*) /* .RamFunc* sections */ - - KEEP (*(.init)) - KEEP (*(.fini)) - - . = ALIGN(4); - _etext = .; /* define a global symbols at end of code */ - } >RAM_EXEC - - /* Constant data goes into RAM_EXEC */ - .rodata : - { - . = ALIGN(4); - *(.rodata) /* .rodata sections (constants, strings, etc.) */ - *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ - . = ALIGN(4); - } >RAM_EXEC - - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >RAM_EXEC - .ARM : { - __exidx_start = .; - *(.ARM.exidx*) - __exidx_end = .; - } >RAM_EXEC - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array*)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >RAM_EXEC - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array*)) - PROVIDE_HIDDEN (__init_array_end = .); - } >RAM_EXEC - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT(.fini_array.*))) - KEEP (*(.fini_array*)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >RAM_EXEC - - /* used by the startup to initialize data */ - _sidata = LOADADDR(.data); - - /* Initialized data sections goes into RAM, load LMA copy after code */ - .data : - { - . = ALIGN(4); - _sdata = .; /* create a global symbol at data start */ - *(.data) /* .data sections */ - *(.data*) /* .data* sections */ - - . = ALIGN(4); - _edata = .; /* define a global symbol at data end */ - } >RAM AT> RAM_EXEC - - .customdata: - { - . = ALIGN(4); - _scustomdata = .; /* create a global symbol at data start */ - *(.customdata) /* .data sections */ - *(.customdata*) /* .data* sections */ - - . = ALIGN(4); - _ecustomdata = .; /* define a global symbol at data end */ - } > AHB_SRAM - /* Uninitialized data section */ - . = ALIGN(4); - .bss : - { - /* This is used by the startup in order to initialize the .bss secion */ - _sbss = .; /* define a global symbol at bss start */ - __bss_start__ = _sbss; - *(.bss) - *(.bss*) - *(COMMON) - - . = ALIGN(4); - _ebss = .; /* define a global symbol at bss end */ - __bss_end__ = _ebss; - } >RAM - - /* User_heap_stack section, used to check that there is enough RAM left */ - ._user_heap_stack : - { - . = ALIGN(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} diff --git a/Software/STM32Make.make b/Software/STM32Make.make new file mode 100644 index 0000000..c4a42f1 --- /dev/null +++ b/Software/STM32Make.make @@ -0,0 +1,375 @@ +########################################################################################################################## +# File automatically-generated by STM32forVSCode +########################################################################################################################## + +# ------------------------------------------------ +# Generic Makefile (based on gcc) +# +# ChangeLog : +# 2024-04-27 - Added env file inclusion. +# Added way to overide: build directory, target name and optimisation. +# Added GCC_PATH by env file to not make the makefile machine dependent. +# Currently folder structure in build directory is preserved +# Switching of debug/release build output folder now happens based on debug flag +# 2017-02-10 - Several enhancements + project update mode +# 2015-07-22 - first version +# ------------------------------------------------ + +###################################### +# Environment Variables +###################################### +# Imports the environment file in which the compiler and other tooling is set +# for the build machine. +# This can also be used to overwrite some makefile variables +file_exists = $(or $(and $(wildcard $(1)),1),0) +ifeq ($(call file_exists,.stm32env),1) + include .stm32env +endif + +###################################### +# Target +###################################### +# This is the name of the embedded target which will be build +# The final file name will also have debug or release appended to it. +TARGET ?= FT23_Charger + +####################################### +# Build directories +####################################### +# Build path can be overwritten when calling make or setting the environment variable +# in .stm32env + +BUILD_DIRECTORY ?= build + + +###################################### +# Optimization +###################################### +# Optimization is switched based upon the DEBUG variable. If set to 1 +# it will be build in debug mode with the Og optimization flag (optimized for debugging). +# If set to 0 (false) then by default the variable is used in the configuration yaml +# This can also be overwritten using the environment variable or by overwriting it +# by calling make with the OPTIMIZATION variable e.g.: +# make -f STM32Make.make -j 16 OPTIMIZATION=Os + +# variable which determines if it is a debug build +DEBUG ?= 1 + +# debug flags when debug is defined +OPTIMIZATION ?= -Og + +RELEASE_DIRECTORY = $(BUILD_DIRECTORY)/debug +ifeq ($(DEBUG),1) + # Sets debugging optimization -Og and the debug information output + OPTIMIZATION_FLAGS += -Og -g -gdwarf -ggdb + $(TARGET) := $(TARGET)-debug + RELEASE_DIRECTORY := $(BUILD_DIRECTORY)/debug +else + OPTIMIZATION_FLAGS += $(OPTIMIZATION) + $(TARGET) := $(TARGET)-release + RELEASE_DIRECTORY := $(BUILD_DIRECTORY)/release +endif + +###################################### +# source +###################################### +# C sources +C_SOURCES = \ +Core/Src/main.c \ +Core/Src/stm32h7xx_hal_msp.c \ +Core/Src/stm32h7xx_it.c \ +Core/Src/syscalls.c \ +Core/Src/sysmem.c \ +Core/Src/system_stm32h7xx.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mmc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nand.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_nor.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sd_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sdram.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sram.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_delayblock.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_fmc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c \ +Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c + + +CXX_SOURCES = \ + + +# ASM sources +ASM_SOURCES = \ +startup_stm32h7a3xx.s + + +####################################### +# Tools +####################################### +ARM_PREFIX = arm-none-eabi- +POSTFIX = " +PREFIX = " +# The gcc compiler bin path can be defined in the make command via ARM_GCC_PATH variable (e.g.: make ARM_GCC_PATH=xxx) +# or it can be added to the PATH environment variable. +# By default the variable be used from the environment file: .stm32env. +# if it is not defined + +ifdef ARM_GCC_PATH + CC = $(PREFIX)$(ARM_GCC_PATH)/$(ARM_PREFIX)gcc$(POSTFIX) + CXX = $(PREFIX)$(ARM_GCC_PATH)/$(ARM_PREFIX)g++$(POSTFIX) + AS = $(PREFIX)$(ARM_GCC_PATH)/$(ARM_PREFIX)gcc$(POSTFIX) -x assembler-with-cpp + CP = $(PREFIX)$(ARM_GCC_PATH)/$(ARM_PREFIX)objcopy$(POSTFIX) + SZ = $(PREFIX)$(ARM_GCC_PATH)/$(ARM_PREFIX)size$(POSTFIX) + DP = $(PREFIX)$(ARM_GCC_PATH)/$(ARM_PREFIX)objdump$(POSTFIX) +else + CC ?= $(ARM_PREFIX)gcc + CXX ?= $(ARM_PREFIX)g++$ + AS ?= $(ARM_PREFIX)gcc -x assembler-with-cpp + CP ?= $(ARM_PREFIX)objcopy + SZ ?= $(ARM_PREFIX)size + DP ?= $(ARM_PREFIX)objdump +endif + +HEX = $(CP) -O ihex +BIN = $(CP) -O binary -S +LSS = $(DP) -h -S + + +REMOVE_DIRECTORY_COMMAND = rm -fR +mkdir_function = mkdir -p $(1) +ifeq ($(OS),Windows_NT) + convert_to_windows_path = $(strip $(subst /,\,$(patsubst %/,%,$(1)))) + REMOVE_DIRECTORY_COMMAND = cmd /c rd /s /q + mkdir_function = cmd /e:on /c if not exist $(call convert_to_windows_path,$(1)) md $(call convert_to_windows_path,$(1)) +endif + + +# Flash and debug tools +# Default is openocd however will be gotten from the env file when existing +OPENOCD ?= openocd + + +####################################### +# CFLAGS +####################################### +# cpu +CPU = -mcpu=cortex-m7 + +# fpu +FPU = -mfpu=fpv5-d16 + +# float-abi +FLOAT-ABI = -mfloat-abi=hard + +# mcu +MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) + +# macros for gcc +# AS defines +AS_DEFS = + +# C defines +C_DEFS = \ +-DSTM32H7A3xx \ +-DUSE_HAL_DRIVER \ +-DUSE_PWR_LDO_SUPPLY + + +# CXX defines +CXX_DEFS = \ +-DSTM32H7A3xx \ +-DUSE_HAL_DRIVER \ +-DUSE_PWR_LDO_SUPPLY + + +# AS includes +AS_INCLUDES = \ + +# C includes +C_INCLUDES = \ +-ICore/Inc \ +-IDrivers/CMSIS/Device/ST/STM32H7xx/Include \ +-IDrivers/CMSIS/Include \ +-IDrivers/STM32H7xx_HAL_Driver/Inc \ +-IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy + + + +# compile gcc flags +ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(C_INCLUDES) $(C_DEFS) $(OPTIMIZATION_FLAGS) + +CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPTIMIZATION_FLAGS) + +CXXFLAGS = $(MCU) $(CXX_DEFS) $(C_INCLUDES) $(OPTIMIZATION_FLAGS) + +# Add additional flags +CFLAGS += -Wall -fdata-sections -ffunction-sections +ASFLAGS += -Wall -fdata-sections -ffunction-sections +CXXFLAGS += -fno-exceptions -fno-rtti + +# Generate dependency information +CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" +CXXFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" + +# Output a list file for the compiled source file. +# This is a representative of the source code in assembly +ASSEMBLER_LIST_OUTPUT_FLAG = -Wa,-a,-ad,-alms=$(call add_release_directory,$<,lst) +CFLAGS += $(ASSEMBLER_LIST_OUTPUT_FLAG) +CXXFLAGS += $(ASSEMBLER_LIST_OUTPUT_FLAG) + +####################################### +# LDFLAGS +####################################### +# link script +LDSCRIPT = stm32h7a3zitx_flash.ld + +# libraries +LIBS = -lc -lm -lnosys +LIBDIR = \ + + +# Additional LD Flags from config file +ADDITIONALLDFLAGS = -Wl,--print-memory-usage -specs=nano.specs + +LDFLAGS = $(MCU) $(ADDITIONALLDFLAGS) -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIRECTORY)/$(TARGET).map,--cref -Wl,--gc-sections + +####################################### +# build the application +####################################### +add_release_directory = $(sort $(addprefix $(RELEASE_DIRECTORY)/,$(addsuffix .$(2),$(basename $(notdir $(1)))))) + + + +OBJECTS = $(call add_release_directory,$(C_SOURCES),o) +OBJECTS += $(call add_release_directory,$(CXX_SOURCES),o) +OBJECTS += $(call add_release_directory,$(ASM_SOURCES),o) +vpath %.c $(sort $(dir $(C_SOURCES))) +vpath %.cc $(sort $(dir $(CXX_SOURCES))) +vpath %.cp $(sort $(dir $(CXX_SOURCES))) +vpath %.cxx $(sort $(dir $(CXX_SOURCES))) +vpath %.cpp $(sort $(dir $(CXX_SOURCES))) +vpath %.c++ $(sort $(dir $(CXX_SOURCES))) +vpath %.C $(sort $(dir $(CXX_SOURCES))) +vpath %.CPP $(sort $(dir $(CXX_SOURCES))) +vpath %.s $(sort $(dir $(ASM_SOURCES))) +vpath %.S $(sort $(dir $(ASM_SOURCES))) + +####################################### +# all +####################################### +# note needs to be located as the first rule to be the default build rule +# default action: build all +all: $(RELEASE_DIRECTORY)/$(TARGET).elf $(RELEASE_DIRECTORY)/$(TARGET).hex $(RELEASE_DIRECTORY)/$(TARGET).bin $(RELEASE_DIRECTORY)/$(TARGET).lss + + +# C build +$(RELEASE_DIRECTORY)/%.o: %.c STM32Make.make | $(RELEASE_DIRECTORY) + $(CC) -c $(CFLAGS) $< -o $@ + +# C++ build +$(RELEASE_DIRECTORY)/%.o: %.cc STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.cp STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.cxx STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.cpp STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.c++ STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.C STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.CPP STM32Make.make | $(RELEASE_DIRECTORY) + $(CXX) -c $(CXXFLAGS) $< -o $@ + +#Assembly build +$(RELEASE_DIRECTORY)/%.o: %.s STM32Make.make | $(RELEASE_DIRECTORY) + $(AS) -c $(ASFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.S STM32Make.make | $(RELEASE_DIRECTORY) + $(AS) -c $(ASFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/%.o: %.sx STM32Make.make | $(RELEASE_DIRECTORY) + $(AS) -c $(ASFLAGS) $< -o $@ + +$(RELEASE_DIRECTORY)/$(TARGET).elf: $(OBJECTS) STM32Make.make | $(RELEASE_DIRECTORY) + @echo $(OBJECTS) > $@.in + $(CC) @$@.in $(LDFLAGS) -o $@ + $(SZ) $@ + +$(RELEASE_DIRECTORY)/%.hex: $(RELEASE_DIRECTORY)/%.elf | $(RELEASE_DIRECTORY) + $(HEX) $< $@ + +$(RELEASE_DIRECTORY)/%.bin: $(RELEASE_DIRECTORY)/%.elf | $(RELEASE_DIRECTORY) + $(BIN) $< $@ + +$(RELEASE_DIRECTORY)/%.lss: $(RELEASE_DIRECTORY)/%.elf | $(RELEASE_DIRECTORY) + $(LSS) $< > $@ + +$(RELEASE_DIRECTORY): + $(call mkdir_function, $@) + +$(BUILD_DIRECTORY): | $(RELEASE_DIRECTORY) + $(call mkdir_function, $@) + + +####################################### +# flash +####################################### +flash: all + "$(OPENOCD)" -f ./openocd.cfg -c "program $(RELEASE_DIRECTORY)/$(TARGET).elf verify reset exit" + +####################################### +# erase +####################################### +erase: all + "$(OPENOCD)" -f ./openocd.cfg -c "init; reset halt; stm32h7x mass_erase 0; exit" + +####################################### +# clean up +####################################### +clean: + $(REMOVE_DIRECTORY_COMMAND) $(BUILD_DIRECTORY) + +####################################### +# custom makefile rules +####################################### + + +####################################### +# dependencies +####################################### +-include $(wildcard $(RELEASE_DIRECTORY)/*.d) + +# *** EOF *** \ No newline at end of file diff --git a/Software/TouchGFX/App/app_touchgfx.c b/Software/TouchGFX/App/app_touchgfx.c deleted file mode 100644 index 8a5bc61..0000000 --- a/Software/TouchGFX/App/app_touchgfx.c +++ /dev/null @@ -1,74 +0,0 @@ -/** - ****************************************************************************** - * File Name : app_touchgfx.c - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "app_touchgfx.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Private define ------------------------------------------------------------*/ - -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void touchgfx_init(void); -void touchgfx_components_init(void); -void touchgfx_taskEntry(void); - -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/** - * Initialize TouchGFX application - */ -void MX_TouchGFX_Init(void) -{ - // Calling forward to touchgfx_init in C++ domain - touchgfx_components_init(); - touchgfx_init(); -} - -/** - * TouchGFX application entry function - */ -void MX_TouchGFX_Process(void) -{ - // Calling forward to touchgfx_taskEntry in C++ domain - touchgfx_taskEntry(); -} - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/App/app_touchgfx.h b/Software/TouchGFX/App/app_touchgfx.h deleted file mode 100644 index 4016b2e..0000000 --- a/Software/TouchGFX/App/app_touchgfx.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - ****************************************************************************** - * File Name : app_touchgfx.h - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef APP_TOUCHGFX_H -#define APP_TOUCHGFX_H -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void MX_TouchGFX_Init(void); -void MX_TouchGFX_Process(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif -#endif /* APP_TOUCHGFX_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/ApplicationTemplate.touchgfx.part b/Software/TouchGFX/ApplicationTemplate.touchgfx.part deleted file mode 100644 index 16b99d8..0000000 --- a/Software/TouchGFX/ApplicationTemplate.touchgfx.part +++ /dev/null @@ -1,30 +0,0 @@ - -{ - "Application": { - "Name": "FT23_Charger", - "TouchGfxPath": "../Middlewares/ST/touchgfx", - "AvailableColorDepths": [ 24 ], - "AvailableLCDs": - { - "24": "LCD24bpp" - }, - "AvailableResolutions": [ - { - "Width": 1024, - "Height": 600 - } - ], - "PostGenerateTargetCommand": "touchgfx update_project", - "Family": "STM32H7", - "SubFamily": "STM32H7A3/7B3", - "Platform": "m7", - "Toolchain": "STM32CubeIDE", - "ProjectFile": "../FT23_Charger.ioc", - "OptionalComponentsRoot": "../Middlewares/ST/touchgfx_components", - "OptionalComponents": [ - ], - "AdditionalFeatures": [ - ], - }, - "Version": "4.21.0" -} diff --git a/Software/TouchGFX/FT23_Charger.touchgfx b/Software/TouchGFX/FT23_Charger.touchgfx deleted file mode 100644 index d3caeac..0000000 --- a/Software/TouchGFX/FT23_Charger.touchgfx +++ /dev/null @@ -1,92 +0,0 @@ -{ - "Application": { - "Screens": [ - { - "Name": "screen", - "Components": [ - { - "Type": "Button", - "Name": "button1", - "X": 327, - "Y": 275, - "Width": 370, - "Height": 50, - "Pressed": "__generated\\alternate_theme_images_widgets_button_regular_height_50_large_round_pressed.png", - "Released": "__generated\\alternate_theme_images_widgets_button_regular_height_50_large_round_action.png", - "Preset": "alternate_theme\\presets\\button\\regular\\height_50\\large_round_action.json" - } - ], - "Interactions": [ - { - "InteractionName": "Interaction1", - "Trigger": { - "Type": "TriggerClicked", - "TriggerComponent": "button1" - }, - "Action": { - "Type": "ActionNone" - } - } - ], - "CustomActions": [ - { - "Name": "action1" - } - ] - } - ], - "CustomContainerDefinitions": [], - "Name": "MyApplication", - "Resolution": { - "Width": 1024, - "Height": 600 - }, - "SelectedColorDepth": 24, - "StartupScreenName": "screen", - "SelectedStartupLanguage": "GB", - "TouchGfxPath": "../Middlewares/ST/touchgfx", - "UIPath": ".", - "AvailableColorDepths": [ - 24 - ], - "AvailableLCDs": { - "24": "LCD24bpp" - }, - "AvailableSections": [ - "ExtFlashSection", - "IntFlashSection" - ], - "AvailableResolutions": [ - { - "Width": 1024, - "Height": 600 - } - ], - "PhysicalButtons": [], - "FrameworkFeatures": { - "LCD24bpp": { - "Id": "LCD24bpp", - "IsEnabled": true - } - }, - "GenerateAssetsCommand": "make -f simulator/gcc/Makefile assets -j8", - "PostGenerateCommand": "touchgfx update_project --project-file=simulator/msvs/Application.vcxproj", - "PostGenerateTargetCommand": "touchgfx update_project", - "CompileSimulatorCommand": "make -f simulator/gcc/Makefile -j8", - "RunSimulatorCommand": "build\\bin\\simulator.exe", - "LandscapeSkinX": 0, - "LandscapeSkinY": 0, - "PortraitSkinX": 0, - "PortraitSkinY": 0, - "DisplayOrientation": "Landscape", - "Family": "STM32H7", - "SubFamily": "STM32H7A3/7B3", - "Toolchain": "STM32CubeIDE", - "Platform": "m7", - "ProjectFile": "../FT23_Charger.ioc", - "OptionalComponentsRoot": "../Middlewares/ST/touchgfx_components", - "OptionalComponents": [], - "AdditionalFeatures": [] - }, - "Version": "4.24.2" -} \ No newline at end of file diff --git a/Software/TouchGFX/application.config b/Software/TouchGFX/application.config deleted file mode 100644 index 5252c65..0000000 --- a/Software/TouchGFX/application.config +++ /dev/null @@ -1,22 +0,0 @@ -{ - "image_configuration": { - "dither_algorithm": "2", - "alpha_dither": "yes", - "layout_rotation": "0", - "opaque_image_format": "RGB888", - "nonopaque_image_format": "ARGB8888", - "l8_compression": "no", - "rgb_compression": "no", - "section": "ExtFlashSection", - "extra_section": "ExtFlashSection", - "images": {} - }, - "text_configuration": { - "remap": "yes", - "a4": "yes", - "binary_translations": "no", - "binary_fonts": "no", - "framebuffer_bpp": "24", - "font_format": "0" - } -} \ No newline at end of file diff --git a/Software/TouchGFX/assets/fonts/verdana.ttf b/Software/TouchGFX/assets/fonts/verdana.ttf deleted file mode 100644 index 9a3499751e35ba017fb3046a9920909c329f0df4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243304 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�y`;z7NXY<=wkmb;J@ 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�xlT z&_Vcq4E26M&$#dvqFupX=En)NKAJpzYh!k|=u7muf0E6*_5r(!-SAdgXPYnM+vJS& zjq*qGf241dJJYfBZ$XDv?39gsr>snkma$V#G;hV~w1zP|3vQRD5av^G+hg{WeJ+6O zjk(aKI>B5z4TWm25JPnPER@~Wl+c*DcXi|T5&G}+XWn6t>g|Uigj?U$$Fi17_?CM> zpDb6)wfZUS&h*dN&OA^ZlPPe9r5tyToa6K5hV6O&+&1HenO*C-U)*lryM>(3-Y&me zIOU5HF;DM%rBf7eI$a$bZ65t+yDMwfZuAsS9SA_3g!6?b*$jfz*)nLDnbqhAWRue) zaCOLgQ;Z$rh0HEkn9I)buo)@?W&I9|&t@?-I9x737BU-%$?Y2485i1z1Z(1Mg#F6J zHY(_Y0l!wfw`t^)Z$FL39hO}n9Q);C<7babPlW8=+ySbQ?A!?|p=J)UbUc@()b$Ns z3E3pWcY@cse~gga zUVrJOSM-0pbMZ|#UHr}?A8o$j224fad6U5G!>Q#1kBm%Jj*YNUAvVg(#(J0=X{QCg zKt$*a?zXMa(F5V!HoF=Ij2AP zu=%_1Hec{uK2kW}jmQ_IFS3uFd_5~hj^fd64?J))6c`!*Z~G0Kr*GSObLUcV!p_&+ zxYs;sbgCRqpGC<0R>C2_)er67{p4=8YR8Tp`uyva3m+Rf zc@wJ0JI}vSpPByM_4*NPBMCTvb8ugN|b^Vci?|8=vrV+k z0fcFnh0U|Dl%*Zos!2m17Dnjy^CU+7I@|Gg8)SBt%qGfnWLfS~**uliswuS{HIXJO z0J+fX6L*KD#{C_{mO6kR++C;WV+w;Y^AJWhY8GJ{@*j1je&Diam(#Bm^b1nr7xL1~ z57Bx7WW_e@{UYhU)LG93SW{qh;5PwfXD%C+=v$NF}HpMdEA}>|h zsVeF=QEyfdDT)<@L&&^{78U!#rh-tL9NT1PYwYX{I~!%6W|td?jU5hmUR(aw7>mIg zjJw-xavW${y_|Vm{}!f9r<*HcI7ar8SO$mF!P29GVWv1$;vUG5WCP!kKzbx;;^!v| zsWSXW-Im_;-s)v5&wb~nU*&Awwr$Gj(H%F+>vRWu4J8x*V4urdFa7I>KmEnDTQ9xv z%sX#gxJF@DuGK$Tt6zrISaq~RyV!KCRE|28CN@2Fa6ugl)-i1WTUpH(R5Nowwl2nI z#Td?@po^Vvg8OhGqQ+*JJ54o3iAW-^UsXwQcukm14=)VMv2blT1#3CX)+N}C#G-^; zlV}5ErjnCjVZ8gk;;^qcTr36qSCo|p%6%5A&5ZU{Yy51wf1zKF`D^_tzoPotx^gz7 zd{MbvQ{GlSu^bWka^}Y$+$Z^Qsz{2nIY5Ezq#ssUVO51$sVON#5p0oK(@-Rp7XvFX z9PtNoow<&t{{1YrhJ2jsxe(nr6oImcuRWe-_q$M`+79BEJG}?iC%)-ef1~qd_ksNx zO^Qq)`r5Q-&mQLgubv*7R?AU}VRL z*$-@d`la2hb?8H*+9yo8W_*X<*)-#fQBBXBR5sRht^Tpu{Yh2)yS;lpiVy6sUiWCQ z{2#3IC7dT+uXLO5eaxQswtiuL&Ueq$6scEP0~6jq`xn34O1s491Bx8-U#4c8L(Jr3 zQ-f@#pPk}kXV}NLpT2RMHl0bdGY$L1&p0 z8Ul0Lm%BCqVcV4(FNo&nm*+Ov<#4(1=A-@!EZ<#MN7g>y6{KKg9w1fLeW06kmNYah z!^IC}zJ%xpuRcFz>ogEHj$Pq#bA1cKw~lCyjp8Y8s@Fyl&Ga2lz5LSe*vbDu64596 zmw(-S_4VVH?A~|Rkny(mIXB$PLVt8F1D$ri#LfqSp1xsqkeRtep zf5y96KTm!Z)7*J{{qL$0ZMUF<5Ca7vN=F z>`VyLlc2Q{Mw=|7t(*&Qy|38iD=tPMbj)3g93i)(AQBEcii_=1nAyV~hpDYBR-6d7 z#nb}L1FPB4-Li;EPh}4& z^p=N`1sN|Kzn~IMO-?j#y_pU!b8vT2|E=v4!qx4&zr2V2N>&_`DmyNv^K|=rQy;wl z%*mZ>p?v=1sp(~o{Cm>1ES3IRSve$rafRPFVee;We-y(3r%`VVq+GuS4J8V>TLP-> zN}Vw>!N$i~er{ouFq72MvRE8V>^uvQ&85T@U&6z`eR4<&`{gQ!)f_L^eC{0c83{H8 z;y&*8c}gtsCAC(RM#DL=K(4E(wX87D4j-@G>_)PJVxqtS?QIBDDDLiVxY6+g0h=A| z??$;?CnEm2c_uSajVwW3xU2q@6-6FVw-#FyyC+?++XRdZY6nmNCVaY^^ zlJIEzum3;#clz+1*WioQA7pp!y#D&@_3iqDm+MnE%lg^+q08T6pXxsGa|=^%VZYYr z(9bRU5vJnjcKUtf{de%1egvBA3rGKEWuRoK1mFQ?mZoV)nv-%6>n%k@lOT-HK!#9p z%~#@G)G4qO)UJjXy@8EMZC?~&)2+Q1Nw&} z4H0{FztWP3qr~BBh~Rrn18XQLOT-GJ718pdctL(eesNW0j;+Lok*~z&D=D!-r?6Nh zE8gKlpGs8K;RGL5!755h0-<1}qQO~TS6*h%vAB>!SY4SY(sE0S3k$+|EYMohzh6~6 zrh0Sn&l!nI`4Pnm2S8@^xW~d+!0ggx)-kh`_#fsO;w8Dw=-C)L*qL`Qbbveo2#Rn~ zP0o$XxX-e}uoU*DnTLG+(*0>xSV6^>5C7?;QQYv)?{n|KhJBZ$A6%-~T_9y$4_vRo6c} zcgpr&vf1?BdnJ@)DI&dBm5vl?(m|wJKtzfPQj{W!4G@x0MNmWp6zpIFEcjTli$0Q_ ze7|#NHwmcE`~L`=WH&Q&?>*<-b5B2$*s2L9C$NVntX2=TKC0&A=ZVHC73v?YcLoNj zN7@|Dm{6{~t#$-OY*w?_S$c6w*#|wBzk<&Yp&UFIJoFV?%&7*nviW0pBp*RfnrQhK zXb15^t3c8K<}v5Ayb`@lj4gR8*u6xte;1-r%dUMH{Lj6$1F>{Flfcm=Dz!%msQ4 zmu{H{yp|U*fB_m>Ej9sZYTSxKTAD6;%D79xk9M%>o2r`cP)F=&9@wbfze7y>^0q1L z$S=2z5Y^!Ewv`K{+@Q!R7Pe}8^&R<_5x4z9XAN-&vP3)42dSOj$vif8myO*>;f5Bo z4PF~7Y+I=LW_36PCOTnf7M%FcnBcaVoubEp#4MxP&=S#WGR(>{t%5tvNR;9p$)cBv z9A}G!mlrG94*Cug7ker4y=y<=-kQmfv{-0wql!T>S&Cpet`Ei^U$^eK`0h`^1hGCS zi)({p#I>8nb-~f}+Kg4;A9czWe8TO4Dwoq%fEuj}tShau)hx;SDkP(>Fl<75dL7*7 z93ZibxvNnqjher!}fHnuAp+hukav3VDk*@aE3U^i5- zQ9cp~+WVN^=ktlhIayLhX|rxUq_VPJ^Ez z9=(S4y1kdwD=$Bzth6{UKfhZ}vtp@FTFL-_O6)EE!6V}RZLIB`mF;y@oKtT?#sA`} z_lf`wzPZnHKsX2#RmG=^it|r9PD3p`Q*?UJCv*k=BOMY~7v&e@BF87EAx@xAMlsBt zP1SR-d?M(ibes{%W#w+zt4Y&^<|~pPJsp2S6*_!WR_=nsMb@WlJ|~|JMHNCWb`rlS zbb#KcLllujNN)JVUB)1FKy0Hw>c8yYd+GRooh_-yBT^Q`4IDgwVXywdw-!I89-KU; zb?ckAygaFUk5=)qHxx9#Mg3yAyR!Yx_iy~5sLgGng>6XB?bxX>H^1n{_Ia7XjW_l` z+p=9|`#{T#UR?%!eaDcxIc);DttWSgH?a66-Me&EH&?Vz9WEx#>)xwF7xu2Y`Lg=S zjb)|P`@7wiwtX4vy?WmSM~{~A-V)YzO-!46Qm>Ba(!5RU7F{~FYSXr*xH&lgQCt60 zccAUnx#dZLX3Y1Y`gBfZ?#LTl&^84{9Vq>xi$laqfv`C+v}5G#NHH~E$Z?|LxHrS) zg3ZhxX^D=`$%sxAbe3qL=yo@Adv4EPkS~tRXOa04SylE_XS^`q#VTFhTw=T{AC3{P z`}PRdI$~Iam;~U%JmK`X$y-L%YF{Fy6xprk=?9tKh%M1seHthZ!e|Z7gio9mexyE= zNt=HsG%F++Qnfk4PYK}|@-+i4rLSUXyJ?$m%8&e)cHU(k&J2(hzdzX1WzIC;eE4nTjYxV zT$Y=iksaS6UW}&X@QaD zWySJdsG`Mh%}kAOq?9_*X^9LI(3k1|kU{+C1&D|wDUv_~@#d4FA`%M+4Js=7KT9Tnk^2UxSSc52uo-+ft#)o>vp_lT=)xq-P;g|I3=HMav56*U?zL}D(TgPLRQbE5Z!u^5Xv!dD9Xx7I! z(kJ%wFuj9~5?Ozdc_Z9$RyoI$WYRkd*@D8Ag<@f0ahg}~d+i`-p)9r7V~Fs^C6(r& zcyw%Xsnu+hatlj!2pkZqUOjWUsOk(XRZv~B86xrJ>bo2_a$UUh!TPMw=Q$#n9B^7e^0BqeT9yTK<%7~)?S<#9PNI(1mY(7YXN zr`k*H@O0}ay(9+DoAW!}CuRlD0uzVpZR78r$v!!E>x((Ekb0vB_Y#I}nSWBu`Q`N#)KOR^QpMTzM>(Ji2bu`{IsqQ;CV z0ahYwQBOriVj`G%u;>^f00x0?2aBMA^EXh#k5RA_{vE?!2i}Rg3GpGI@w|0k*fdfe z0wAf_PQWo0mU!^t5Fn*>w{@F6W6MK^Wt)#w77y*VXhvnAPjkbR2V)8^sRIjATCmmG zu^m=2-GW{%9rI=>opz12v*ffcRkzIU(b_R*mTdRLJ=4dfey*5GZeg;)lh|gsx~($a z>s0^rk(GHWB3ofqMx0&|$>xYje-c6g#bKtU+e2}86k$p|R?>uC+BNd$p=+X|b)hI! zZk^`we%f>T32PAVmlQCIJxUl}x0i?|JYm#O@e@M~G`r~q@Q!D;}k`)qyoD8QV4YjY&@nDaMRsSV~XvG z{)7jFS)eUc!WDaz4K0JIqO6RQs+Qxxt1{3CBGNV)Dyd>kM9sRzcq-*h^vE8X9e#ELjW&I{*iTr2ry~Yh?16|Bp?Sr>&Q&jV zk`IPY5`h^Y>({T$r#-T-pW$`i^1% zTQM|BI-;V}ho*}{db;7?M*%f8z@!i`DJ=Nc6%aLrVUnFi&!qThK5PBq2AG_~^Tu&J zROB?^3V3)@M^vOi;#^R}RB>9vQ`ALNtt0#tP)-=*dHL2xj8koi&{K$V!WhrU3_pj* zi*Srnumb7_)L#OIq5~$@!!*={Fn<%5!;{u(S?C4|J z-89KG--Px@bnSIBMqK;%m@&~w4;y1I+1|2=6tyBYMz&u&Tf)j7JRPSSg^&nVOOv@m z=Kc@ubZxG}IsR;(J%I)~LInEdPyjopKJBTLJ)yzi9AH3sAzlR1&_$9kUVTx%ikhs^ z@Q>s$cc4uRrJ1E=Qc+4}MrWmyrCZVsDcv&$8paxKcUiOcpaesIVif$n+_%#=^3w z8Vl7p;MawE&oN#i8TW;nrLqU};`6HV#AIH}COMj!cqb}!M^XcRdYFk9sSfq?;bm=1 z_vD63tQ4VaP?Ksa*?6B#o|4O?WWg>(UMwnyTtPOLmcf?fo#fG(r8;O`O?p!yVu(cA zV%D@Bm7DAmSN9+4x?|$;%e~sQ+dFjNyay-rJ3d;y_>mq@d|Ov5b&-F& zYMI`q7rIY5mw()~OZSxYGbsLjb)7gnDe~+aubjRy_&IfAt}`pK^__IRVfQ?DH4gM3 z3QL7m=-jpz*3W!lbfBDxxtV5zm>e7BaThyK?asBB?%|)(=-sdO0f3 zphH)Bxeo!oXyj4uL$x0&b(P+vl%TwF;`ce7O7i-rd_UnEUt~nox0Ak0>7Sc3AobhH z-$h3HeYcM7+;JSe5QF(`RD|F6{p4>`2WFRa%)UJFJD)$&_w9tsX}t?_2c$gH@%D+G zJ58dhYZKW(LpS7OSfJ&69$1}W9$+40o@JJ28d*Q%D5IEeEH~b0l=_z3S|W~3U^gYO zMJ6`W#N3I|`Buq_V{UlgnhnaiGRh*aO6)xnPDwED-b~ z9?7JcbV%(_C?%szT6)SqcuZwOw`&?iUcGO_f*0REWIFmjGc-%RxzoeyFH`S0`_5L= zb7zLM?pxD&HOehbyS9sD-Iu!ucN_ffgWI~KMS5(B9WJdHI;zjfdGVQjXJ*+FssvX5 zjToW4EWQff;oO57pfc*W<)3Db<634!X`=G-Um3~=V#M>XXwC~hB<1Qm;96@9YO9DS zvkxN&C<NBhJIzk77PFj-to3_>@kE$HA-; zy_lD{8rKzFo%=i=M~skiLigYpkrdo^-8jWkPTh;*!!(Y37w!>K>pzx0R(iuO5`#`h zCZ|6xE+)d{#01Zu$tSbkX&CYV2C~fguz{c?Q>kYdDiE-Rou*mn*niTtmv?WOTQZ`e zS;v7ffk$tdFn{fwZbOycHcv&?x>2LE+YRw2)V(-+anCs;$F9gD{y^UD$KmZxfNx}B zpiAEj);@#vOJ_Hwun5a2i#W!}{0REeC&fACsQ9S(wAk@(Av?`$jxCLkkMir>5k%bc zJj~-s@|V~V{*)LKRif7kl$%t18md2fOP$7dPTXXhg3$tsEGeINfrQ9 zW<#m4RIp5$oS7hB3TB37fN?z*eof`^Sr0CqH$y$Y;~cw{wVA;L=5&o8{=gG^*REy* zgR{PxH*M|QiRD=t;;PmDt)~#aeIwftv-4Sb(RY1v0{W|6lqxo1XK z%Udrscwm}-%snuP$>er%!%$TY0*1o{b}6z}F?8WgPt+^enZY|BJo(5Y?^mjqS~wGq3(jv`qOP zy(E7QJld~tRH2A)u=WZ|YFX4$ENa0LTCjo&mQukgTA=$%QLB<{u)%1*lbhEvqz%$MT`DuU#zd?SPL6qq1>?+h$*oRHQ!F5eypTrOMO~No~SReHN>C=Uphm^ z6Z~_$ME(N&((n<5lkh)*mlhWvyIcf|;Csg?C=h0rK^G7W%oByk5JX+&d z&#Y%1XLfpjftsCEw@La=ykqFS_uji|ue=#m>D1cXn*gkKabghFZB!{iev3Gge0Wv z9$xKwS_@0q?b-gEY1VhUT~~X$cD*d`&__|&27(mkK&HM|9f%Z*?;*=lJp{e9oWZ+> z&nLoue~#Be=%;;7zCnC0r~}Dsh3m^hpMT9iuS6%1pt2F4_s8ctX?X%&{REh2C;c1v zlxKtr52%Y-0Mb4B(~II@la^g7I4+c64;{l3l==t2UyAlfRHhW-=}!SK3XqJ&Uj^on zgax7$K!G5Bykx^i5OsRUV9M;s&Q`F!MdkSiM^07WU?mutB1RS!VsAI0@S2d;rG17Wbq6@nO?to9OD)E~s0^g=?wu9wj0FrZt&0%8vlwhsit zMO}!(L06n#Tv(vc;fR;G;;+w@IC>qPrLLU?5Coscb9(;&eooJ@aXR!IL|v&PjSCQq z=7C;Ofat^cyxd%`SCR@cGmGNA*8H5DqJmr{+Y(jc5>rYH+IC0iA%z=&?hqSTjH89m zmPNQw;gg?>X<})Ki%Xtvu!-a(o9Ok#iN!^gB1Otk;IursTkpObKDu}DN9+6aT=((P z`#wx48@YVoO)Ey0mXBO9VBqqRWlGE7!4og2Q%|u>mZ7ALR4*QQLB06usL{t+!ogY= ze{%fT;INgSukYDo!)L1={A_*q9_v0Ab&b6M0OQ-#k%nG~t3)L$>`<&OH6_J^MCbH` zgv_XD6Atps^b{q@f}ZhmY?bmqSLd-|A$eF>B^D9~-Uki@J_QF)S;L~NZDw!3ZQS-d zTDO_K|_yC0mBq$bnH z{1F4CA8#0g1`8um^kh(=U_{@jeiLq=G;UHqe3^2+t>e6=akt&(pEzmK$X+dPzIjB; zz9WnLB`xh@Mrv{iUl0ibmy6yjf}Bg}It?Q>=nI8$xhmx>hIh+x88U6EO@c(zh&hBV z<>8Ys>dMKLRf*+m_zX9KYruJ)=uXO$0TO+3r33)U$Rkt$Gks|p`E#TnlREYr+j`n7 z%eqy~*fF8o+)6`SMe{&v^WhybDu&$I?#M&NhmN$nb4W!-hvCgr1I;Vq43%@cP1!NM zMYm)2?4(QKwcV6>W01sBicS+UE@#a%5&)X@+mm z5tejpFN=R|tjlxJpB!Q8yylCwn?8TA-LYfs9{haM+Ar30Hbx{zUG%udzNUV*_n3O& z$RJ-vsV?Y=OOEq&Zry(D4ax4f#5nhg!I3< zG*n=-{GYh^JEY^Vg)|CGPbN%-DUld@Q#@6Q<;8K*|HOqns?#mS?zplpdC@tU89sf% zO|3?(7?fKydh?{Bft_2T=6CZB{fZ}T9$i#6Vp;!IHx=l88JRiJd0ool+{J@BmiA~< z5#x-hXwy?{*6;s7$z2_1uIn*&7PnPjHg4nC9_wayOl;9DH@91hL}keT!U_{ED6z6bSAux%=zztK{91iWhr`#> z1OcAYJLnvg&HhH1(x`tUCZtqfPY3**N54XF$ts~MBAs(Pc=et{M4mdm0exX0Dk@N@ zm%F#{X0|O6J)I?sMJU5AfnUTFQ5+ZIDcEfY0w5V2vJR@H=ffQbZ4!oy)S~h{Da=)< zL^5#{3eDuId=qwxWCVVCgYRgYk~jUMUtPX3mz3VTu&`H)#CDTccIooql=gEcb{kyS zDaTZNOIg<^dbC;DZDW1y@FCSqc--Sh8f2txa_zjfH_WRQ`wSUX+^H~f^v%P@EVJg# z*>Ggqx_9qtUO4;AqwlNxCPdhsyG@3;S8cUG4SU)t}4`b)Qd zESYp0vaWv&u3Ij&7CHyAvTc%-Cq%bu7M*8o6_=M6*UBijO^uGIs%l=P9bK5=PAK#`m1uowc0qw)DTy$ZmEdBnz5+1?9Q&Lv)9+YrQ3SZFH!%+E zln8=$eM*{`PSm0i2u>egrNk1o{Vz*ve%(Ik>a)gP_wAqX;2$GxWmD%a>9SG1dU%qd z^W2+@72RRIu}eSutxsK2-<0NBZ=Ae-=+H+ew^zO&`I`FPiTHb8Uvk6Po4<&IuX$h% zGwqf#yG`#NQxRwO6-EWRDQkay_NL&JDK&Fjx1C#qX?swgB_3ENzbw{R%%W1=Zhvl+ zB_}b;?`ADii;MLItuhgKWY-Xj9l+Ok89y}dG}f5dP#l?4JY;D}>?=sUQ92 zz3FL$VZ9Pxce1jqWJSLzUlp2$9G{?m`{+8UEWfN5Q^94^uLtqiSdyU#{PXVuNJ~aniooThu>)&3gFp>boK3MWfO! zFej!->$x;q%@i(;deq-&wfKAk|GY-n&Oe{3&Q$({*F^_w7s;pNk;&1P@_d9o{5|Zs z6bFg-sP%)tL-y5`@$U3D;W-q=`yVA5oTa(YCXiejS>TP1G?^l!rBshs5L%{qQcHcs zk&({0l58>6sU7H{#+8V~qVt^C2z6g@!k>@0H7=td?t~K!j1|_Q3M{ADuFH`m~r1bB0{~LynxedwPrf!4C{+F|1342lWhY znS&Kyy;q)4-@{;rylegIBKrfBLy_Hsusfo#KQaSeuPe*rNkH_NONuUWTEx_n2$U7B zD!L50r3$tsY>6Ul2L)W5q)M>CIMK%gU%^-!-WUUS*V$~lPNm_WBPYa zI)1!x;E)NPnfvCp?t1sG5jTwL(%9EaluBS7L6|kiYUrB^Soq zl)(cZ|NOoO&p+JB8J`m+or%hfaR5)PApQ4|X9*EPa=;-tod&PRXozsz`Y13=AnXN1 z&4qSXg%g51BM~UV#}8)I1xSX(D>aX+?AX6_%4FRJ(ddfx=CsLDzj;xudV}30wdy^y zYs#FtuEa>?~N`Y|mg+5qhsHYnc#PTd0Og5Bwe@<+NnZl68M<@33s?6TKrFvLW7 zBVAt9-i>lv`oJ7VGs!PTb^)eC(s}5(LCRqGf8+GD4MnMpG(-H?-R~;6VNm7xIr`0F zN_Kv!M?Lz9`jL9(BX!2>tb&!CWV!Mi?Zn@H%RZg2_Lkqfnu9JgS@K!fy%|xr zJ_AsSp&6TFm|#M^A6e4Jm_)r^G{wk@$L)^ODZX9~*??e4y=;P2Qk!oT4#$6;G3+fg zN2m^NcL=sLc~G(Z?T$axFLtOO9Xri@8~%LKo!N3=n^Du{HDYS2KRMQCl?K&q1w=PV z!|FDO?OIRmS2SZ$Nq&5@&bb8R=cH2cD_EY4f~{6S8xWX=Asv&=4{?m?0Es?bjNEuq z$6{m_qdO^;vepF#c9%NWP;lMd$ci;I-d*m)e9KW)LySDBQ!mNtCEdx5^2!2(I+xvL zC}6Fz52~f@Y@)6j(j~gK?So-dflU=g%d_Xt02HU`2te>I8JXC`sC#2-pLJ)dW6NjV%9(@_JD(p;lAy zYb?DB^z&2DmUV)?R*>Zd2zDYxl;o#mN)9QOPCdS9)5bGjr~?liAdQ%TgNYqEFN*~) z6NMA(Ht7y&Ctpuo0NquXPU)l5u|9UHH;#N3a4Wt^@W_y6E8P+7CRWo+vhi3cCOjdv zVvFGEk_7u6AqO$^jH3jS5KYUu2U=5;;gaI| zBMetuO%65q@fMfz?mtFJ`flr1*7CLOUAH$gCCWdm-$VL(<&`?%j~(|Y9Q&$&8O`bGMs&PEh2sL%7LV6%`N@XBsQ z5kwCX*)3LPC^bo9sUC<%tRrl3E>@9$CU{2cctnxb6psf)Q4sF~haSdN71vR@NBDv8If>Sr9B$#`(Ga|{h*Ft{QSe}c%%~UulrW* zg#&v3liIBHChSW)b?z~^(NzFZK_0VRGMgp42n>IQAq(VS|hSh z%UI-{;AkP-jzS9&&mVu_(ADGN#VE;toewXFuSa=>=apBW!(x=#5QTxGB)eIXFf>NB zR>?MV>lyY&t%1>+V7~O8Vr(&?h(P9*_>}d*GAhp-=kh?w4osYv3m5cNO6|=lLfW zwNJvfKM{6A;taxMoZqcErKSXoq9j=%NHQaqQfvB5(tib?390AcP9&uQE}Zmf1He(% z`qUw{<)KsZThfub*4k?$@w)?JvhP{B9!WxRAOF#Xj=bxS=IJ9N=~Avb>{T6?8pjJCal_Ad+t%TF!+0Gwj=WD zJC`Pl#dk-tsLJ(A?%%KW4_;=!vmUSQ!%1+U{zvIC={e-=9>aO|hG2%KE9_^Tg(?K~ zfv%DTQF>6?g8ptl^1mB*)1N!x&m@(Mwu`&3`zySJhw!Breh&Xtr#+hP ztr3jUi_!r!6sv3)S<)WOpZ%ZuuchhIHvGNnAMW0Rc|R>ZgL%K&a5r{Xc;3RV0+XKP zcL&0Ei;eSswf-w}1f4t%OuJH4*FWO;WypO2* zY}hrt=rNQUV>MaH1Dc!SaCqHLIRSfQPp1D}yV;H3_NEv-pIM!Jzwn|CS`zwkk}e@_ z@^cT49Zq-2=|p!>V7XhEj$g%5thSZ}rFQ1HKp=Ffli(5+*& z&qOQzt_-%>#x76W*suXpPrT>Z&Of8yK#5q1J_0MDOtV1&UyQ+E%#r0-kD{PrixE!O z{1lcEi8a(DI^WIT&$4R@^pY9x_vOS`J_9qLMUmhPKJXst9^eLiDf!2Va`~^cNJtWN zoM^9qT~Xr-$#bPwXjOk(*lYXy&NQ`dn=<=0@uc&ux1^(Wl_B=hxVpllXFSi^Y~%0G zc;OWdUwRW?WxqfqP~>dD83VQimXrI=btv1%QN}pVLd&DYRdIcVmWCtq+Qt1pqs>>Y zHyxTW{qcKPNA<QEj==g2zT%Sb;GJs;rHqku%#%R z_R?UekFgQ~R{P&g2ga&1>_minQaqnIziM&-(RzR~FugFsiXF#+sOyfSe<49akld#6 znBr(^iW?ufd8aEP=)AUgbx~K|Y+5XusySOP2ktyju4mHe2~_;k)p8 zpdBwtg6MR(5))ibhsY4HhHh(iW+*R-+x!H?791%+U*bA6VE2I)ocx$ zqAo{?oC)d!$^IBL3Bzureczo89`7e+8na*C!;xeYwp#Ea(Qo%4LJ3TTItV+uf zqJzHO$v}R{LeelxonCyEby7c9uYUEi-Dcjhtq;x`Hf7FBgAYBicz+D&xdKpo6w)hoo-7Sm(QX^%Y9+~zY!U@? zL=QiN%Sjgf2NLkYo4pg;VfmD`;R|t3;xOT+lk%e%4hBob)B7)|V}hsI9{1R#6@G9l+IWx9x)l_&{zu zMqttKh1`V(i9nCR!L~zKOHLZ*eBsTf55KzW$@La#Y%nll#*fUSet6|V`3utzKDBIh zwitX$y~%a{&EM7UX+JN-e6}c;A+sdHHfW-<6|u-abzv_zuhkokQJ7G9wfDm)yx(na zKp05}#hiW`1s73jm;{R12#G~Z#AeZKTC&|aWbE62MLzV|8D>#0UaD6wu_>(A?BFW* zz9$y%dv1M=^4`u2^(VD{VesOo>P0pZjg42cQ+02v@2eM%J^3h9epvJcISH`SVc(!} z5fnWMQJ0utvl@g)5q=0Wq`L8aL$(sqiIReMd@OFNyDYu0ME>=)lD&;w{eP$GW~srK|N8n}ChnZJXY{;zL&q%M zI_ceI+t$yWerHQybbS36@-lEZs#a7MFuIU)nHVEj;z9`ZYY6?0HsWr3cr{$y(-2DB znA4X~4v7yzaY8W_CqjY%b0JB<3-OoV%3LN zJj1$eRCc5>(;pMAe13_=s$11v>R`34lq_~Sv{gL>_%Bqq%42kCm?KrHzA2Cp5gVK3 zj> z=Z=4O;y>!Kg{u|?nSMM|pI|rXd+i)!V{epheqhbpj$ePaSMC{QQoCmDc=*we#h=)d z#@YS)-u#~0&U3cgP}*TnsE^3G$}7kyixb)hTn?j8=l4mGkrE2mCBz`X8VlNMG3s@H zIQSwXBiwWd6%}D&h$P|MhVL|OUC1OWP`K}xYF9P}iJ(9TR_X+?MTmSSxdps3e%L;vcDuDWHe$&U|ksn4+s($p+<(hJ{WkKKVi zHWNKwW6>4Y3IDsz9BYo%d1X0X(g`>yThvCQwI77DW;L!4^$=j2?bc~07V&XyvfP+S z!b(WIgaI2Y3igsx@-I7it}LlKsK12ZK&$?o)S*tgW8|(~zrFk9dgsC?)UVh|ag=&u zu6f%Vg?p>nJ*?v0KU$v{j3%I8+yjVC7uL!XN&@$P$U4J`o5X_(P(PRrBk1xksKB8wG7>B9;D6au z>dov)_2xa4{)gAo!Qan7Kv|C}j7NLUUp@c%=kcvl>Pe~Tm_Nx7w_^TIp+~^!v^uS# z!GP>@SX*TTIqhd1YZSX;1LxRlR`4a_)GDvhhj=gNgKz-SL{VfgWX9Gs4NMc%N!Z6s zLoZhS@&gY@(}G>a4#E8hQA|}oW~oc%q^)Y7E$W%2B-4bcF+-Rdh)h7)3YR4*!)VE{ zWa#{|oaHcqC^3f?wdOQ)vV#C>b0#?L&UmM2cAA|!uIh`ENYRFpR}m@o$<%|uykOz{?GbSxxMl=BJWdo3s9w7)FwI{rdX1I zd>@()u;$2zCVQvGSbz_S9LZX$c3C-D+sn$ycO0HFFd^PGEPG#d#UM-j?n7>lx%vFh z)<|Dq*Q(wF93A`L);BtZwGe*`et-F}>oNcO_3ZZr{bx>lZn1llf6Tj(BvzZzijg(n16|+`(gi9SbpevL z8WaK8ok#-LgySDK*>Xp)L1XMcG_#KmXK5yRt@`;bsE9y() zq7AJ0(u6*v`)=#<#PUt*(YG*qf!baA4`7%M9^w()DJhY0?#M`Y9DFWzJ2H?!rRDpe z7$x@i1fo%jbSV7qny4NJQ&$W~k2ZkSba^c=sP(g*-TV5;A{TH2}d4o>yhlDBrqfS6Yikj#IYd_r|tPoG_`BWVn zyckg3?DA96n!17F@nCbp*JQQ394X(@pc7d1dLh=*Xjh5ox9)OwCB}r4{o$bHwJGRHttL2R=@l6V|B~ENiRJ2(DPa1@0-*< zuAe^p5lVq5OanKX4{qcY5)g@paAHeLj57&oDb9Gzh_nJti1d6&0?YMU0moHSgQh?R zO#~bQao4K_(tjQOCmmD&@*jBNw5tB{pWrvBHr8We@KN`^r|;jk?cqJj2isHBzdpHF zz4HAP^%L<~R1iK+99$`$d?f6)n~i^17%ikpH~ z=~-#}U!N#tn@A@ZU4KCy51oM4odfEPHAmRuY?*OJAu&?ImnSnbFWDm`Mmx3r z;*`Bx@0`D7z4grgHTOTi^l2$hH}1j{}HCIMiq~Q3{G9HziR}D zV$f#IbdfzqpR4z*Jb$rXU@0Fn15|>w>T@&1arS2ptaxhYhF$6%JJXo!_eph^&a(t{ zi(0J?Q_G}i7GMd7w>`OwYXxshD!Q}9!GD(ptsurr#ozpC&>{MojcCG#d*`d zf6Tf0lW$?&o_27(^|9w(-*-~|@P~;%obM~DZ?b%){k9=SHZlL+JD4l};ssOLwgGze znWTs2-BT;xiPA)?I(OKoZnSO-bO$cxsHBHZhJ+X^^bEM0Xai6O;$x%;0Sl@1JN%>< zbPSkKQP__!L!=?>ti0wpr=t<9k((k&-2GpQfkSNf;ZMJuo4R~u#E2)K84@w{@Kp8N zwhktI_ztspV9?!ZY`w0nBiPc{=7Dw&^;vd7JeG*6vxkXC&4y$c0j?e+bP0H(1i@;I z@pxj4l1`T6%#gxxO17wtLWg%BsHn#I2dM_w7}u)?$H?@|U4J3n00{x9-o*5#(v^?A zAY_bY7v&w|r*$LQOOHKvjx0TT4r}412uS$l<-&+$ntrPMq4O?-W4pPC%{)I8>xC zKM)6kjhX|qrak=YdDic9?HKd4XK!D6QzM@ zV!{4}3#B%}8Df0!GuG$SsZ%qg*bVA|`>JPPRx>dx0n$_ks?0_s2*Bt{k*rA>)(pQt z!%DRJPbz~KDnpgCyHm8A zs5vCT;6OOwn!_uZlf`p&Ggl|vzk#t0>kn^VyvRO!=`ADtte^U<%x+=>?kdr*-(4_s zSZsW|;gfeBE!-aHHgDGOb_p@VXkS*=Uy|yu;yhtWpfn*mAzF_Rt%BsJ_;?eu3#eqo z;+0sFDau9#enq>&s%+hDVxEn~+8A=QY%XG))j8imqwl!e6=wc?naJw1ckVU}HQHT6qk$>%oC zm2G#dR6lCQ_NJ;sbqaeRUQxF?cP~9K)*`Rjep>yLtu|OI4bfTc;~a7JqnDa*?yg?C zxwKDj{jx{9Z*2J~^oVWs5@2vY^oW$*0%?J@iB6|E_7LlcBhQTQq()E_J=rIks1e-v z&Gm@#GO`PVJVAQWBk}_oFQ05S#8ld>WYmbX7UzGqr=F=DFvQWkb@AwNaVBJeB&o~3 zIqF(#vrjtB`pxP8-Yf34cH5Fo6?4Fe3P6YJu{%(^Mra#wF@tCn^ondUNqU_Q&GVqo zRn?-}y-9w7MdK<7jsf_!$;?BdzNU-5XfU8-YA?he4(EW{jU zRe}YByBS=fm`W(Z71FokKj0aVXecD62qf($uQ(T69H@F%MBajAr<-JNIN1)csXw0B z%?xUm+Lzt)^_<5aeYtw0`svT|poMb}78}bisN2Pdp6$>{Jr?|VDMF`(Re_20`= z<;n2F6z)Ozi(e1LplfZUMRdrASxX^;#Rw+WN^r2KkVK-*2}lGyG*3CVp>ow!vrrbv zQ(ZegIr#nuhrZb4Iryb|S$z>^Wa}rg?a1Aqy?XNeoSkFPokq`OBq9Mz1SyIkF$fMJ zXOCjDq1bP0H2Q-1!-$a?;6XE>BrhH#Kp^46L;cbQl$=O?L%_fR)|d5TL)1m;o12#X z!t|;`9;9AWe^!4~FTq!M_Vg(RMGp}lK+rE3(TqCsM%bx%O^ zl2z`p82o7b_8o`O% zgJ12~A^LahSShtyxw4Kt%x&s_64&DCcEofUtyWnun^6z{Fdk^bqYcDO>OHrrn2#})VMH;_5sP)#caC^`GpJ=4{iojf6oUQF644X@jXH9aFCty1JWs$QPPJ=ZyV1oB+#z^%GMu(SX&Mr=)) z7&g<=WwPNBS4Us6CNPp#*?07B?He_9#nU?VE47+c0a75u!|I*2ufA5Z|CN)rYTweR zN0+(S4ftHg0_qX<>T&fm>A{O{9r@w2HyU6j@8%TghW_LbEf$2NI?;?(@Y=M!RE@@h zbSO)bVto-Zzy3wNb0ea_ z{$%@A?2acMzTAs_t=@X^5bctQIDc*6&?!Pu!0Jv&(CO0rIFI~v{8kF6ypJQe631^$ zh$q8L*cdUuJ(|ql-u%kG z%_G&{UswOQVb{F$yW7-%qp4$8PEbh#~iOFC6j) z6tbp6iNL~zr7*7~Y9cmF$3Q2w_Yt+H9F3+ZEu~}R&)A7mXfU2)7n1e~R;$y961s=* z2s3zNXroYY4KYVNM+>Q_>dOGk|mNI-H0xC>$2{Y z)$)Wol0Ev4dQ3fZf<2**!tvOjJrg_^e1ko&_7n@mT#TB6Q7bX3K}g_HpJ?$Q859~x zLpN{~j)!5yK5&pQxl---irV`OYs=bz4NpVoisRxVWL_l-x))DufhQvBIAB8HK3KlY z^zso-=b{!&}|2Bg1al?$3e=G>GHInFnJ`@`;rAerT?L-(hO$xK3Z~ri_ zw%-aubT!x$ZmPyQ_SbK(ZCpx|nNbyh(Aq!1NLUNMhcBL4L*vjebYc{!LzKsWi3q`u z&Qw01Dbj$zb3eK~nh~X>*V}B-CNuo{Rkc2!*>5=v?ASTuc4HI8amDBw)hJ}vATs9) z5~v*NCHb(Z)CcKFFiDcn3hI*b*pN>5KjWO%pfu$hcNF$DT>TR}TAdyB*vf)-VFjwF zVso;%3`&#~!tY|}1u=+FxGCU=Wh)+qWLT^y#5rtoe7uA@TZx(?7eMV2$!U~r@sf|W zK72vi*7reU{%4I28-^A^ybBZ77$|91*fvcLpGIx($rn$rdg%3!*_M;)ll^DR=-+?F zO!Z_~_mfAQUir$a%P$PAGwIm0f%Nx&Gp}wXZBP!aWFOY#5fY#wj}FAexm?MS7K=X7 zpi5E^ZENy~QgX5p4IonuMuJ_X{w-5ZPBOyro zw)K4zSFD_HUu)L6Q+bPyU7D43uA784Hc&BYvV|z}+!;{hZVGrKB926bwA#ofy9E@9 z7*ieb20NmmM+YJt0+ZZ&NY8GYO+@7>tJTXy;RQPWpaE9yMcI1?B2c+_VFM&|(3eTl zY7lV1K(Kg96?TO6cMhZqjXmOTKs7K;N>liiiernddh#&)RL%`PE4B$97W>uxrfz0K zpJ7W>$d#JPwwf(@fbGUA`J9R8$mHZhRYf*W;OmUg)`=e#wGkfC+Jx_L9h>v1pvI>< z5f@=FEfW`EQ7=bDx^4gC`ilsJ_E)p0@D0)3q8o0Yy$vm19n7_Oiu*Ii>tpSDe5FUg zb=9>xO-|X*;%cIudiN0=xK@Y~34$Mx({mXWar^)b4oI$71A26l08W}CD_s*=!_M6X zRi8pPu-n;0W7l5e?{TR6)VH{f|4O6gKW>@)>V}c(oQ3JD7PC%QNZlV1G63wT@+W1j zeSxUvdf1!|aM&PZfWs!HcTB@lIj`i`a}KM)@}nC#Z2a(nX~66s6&(hq#woddfkR*A z(7)*B+|><32N9-+Y9@M|Owkaa-Gj7jvPpDE;j@W4hyEXTXlE1SCk?2|5#eaK zfkTeZi9=2sVfi^an?&Y>N0ZJbk-4lcyS9wRv+4S~K6;PO%Njalq14$z_waM(A7IsX zAHkdPJF3%|ZGZiJwT<9vvU+}+X>Z-CST)QTWNA8~GubnnQ)h@NNHkTTlCo+o_29Wdf{D_^>m_e;mRk`L0f^NQ_pZn(ol+?>O6*??|}D`3>YtB@d04_iBcRHXPzSzk*~emA#fGj7&x7_zXdWMR=ktgOvm;y_*JK`mEm*ny7S1p? zU^_VAcBAs3&4XIpBEk!;ih>TBL<*4twAFw;LNHjJ2Fd8d7eq%AQ($H!^5nJ;V!qsU z0jrw^>jtkPPh=wn3omkG@P36T;-x@9*34d$CXwN5lKO7&tdv-Hk$t45Nr`tH#lJgt z?b@a7OL-WFvB+V3R?i{Uz%LYsMc0&v!Bi?97-Nt0K{-^HE_KfZP(s`a3U$9 z$sHfodvFK#KIePb`>y@<^|h{so3yZtnQU*$!8)f#QqP$MG-|B5`gMutqn#FrTCR*|10O-2>{Q`5<->Vh4WIx35KKp^(_YH8eVF&jYd& zwB=Ih-`J-{bV=eyUQ}y?X@jgLq%d=HIC8E)723IhngHCaj3R8jwOOKc{?gLB-U=CH z)gpF=TQ@3+4#%88nQWa0UySdP-v^B1@V!ngHo|G)vLe~eX{P42OoTyc@ePFflVC0 zV!Sw1EjY8{jQSXzHrz(caf4(kvKzqc0j!g{O<1?wW#I+tfJn`5aQ*cc9h_@~b!}#a z8m@sy&*7X=JF)o=(c9*MA6FgQXxE-bY%l7$?Lv+@Q_= z`a8}x<0FI)K`}d#! z`{vg_1RM7ro}-&AGz%ELu~A}DQfd?^q-$-8CnnxUVv-%2R6O5|nynvh+K_FV3?g9E z5oFBPx`pzPJ0ENzp+-}Tk;qwEBHws`%>OSgxohh7-3Y-F_AZ$`t?niE+bwtQeGN__ z!!3*Uz9xP9l=>aH0{U(L{Bd+~W$cE2kJNP$AFcZIOK#%plKsYpIM;8Or5VRq)(v?zs3e-xCp`Tfhz;uJtwC zqU{OrbMk6{gU~3%YaZsj2IJJf*f;>_gZmoze5~4hws5|O#467B(tD?;vVJpmO;{7M#C+%ci_*!Y{;KcgqR1HXiX_B^jYy$lI4u^W!clA2~`ScAu4z| z7VI!Vm~ooLa|xJhLLmnSH$*rPs74MVZfnrorKn`91s?w|w}<$HZvU!VZZi&Ue@ao` zdEwtYAYyUG^y*gCHZt{9)xyuKw-I$}0RSWdUgk+Cp_Ej( zTu{bW(+I+@m-FY3oIkI*U({FU2d{{x`K-k{qDDRz$G(kY|KeV(qMDgtB;x2dGqXXb zZ#czhcEBZhenoTYP0(Qv%~r|(+}2<{$HWFX=fmOcIpuBvx^nV0~Vy0qmxE-yw4NkZEXbl z$$Th*2%^C2tqpdJuoI666~`Y^0IoA(q`;ro;MRNXsE&L9WWunh)58wFy`Oor@-!Pp zeo+d$uZgn{Bl2}XZ>7BPbi{Od?2?zuiE)vUsi~QXaTZ-#{1Hqr8J5myOb@WZyDF$1 zRWJaBoQz~8Z?JQQiqaF0xyCSlof}eIvhoaB|KE5pWcguFdx_cP}sWV!^hV~LN%HXxhR$1UWC( zf?R*cS>cR!2exsT^HX^WEpe|ZihBZBkf*05^6V(=d{Z$ zmROE`e|=?baPz$J0khXpO0H1U*VvapTe&aTrj!R6AmRqWO&_mOyL@#4rhBvT?@Ix$#1O1 z#!*c=CO>s`IeYz+bLw980QA8U$zS)CHe0f%Vz#gX<2{ENy_d26&}tAbhWF5nxttEo zCKQVkEg;IsABj*7Z>$|Qx31j$T2&Jj<$^0S9GFA#Fb&adjj?T9TIYc$e~-`M-EaOO zM(4osH+S!U?Nqs%$Sz(NsI%*fGsk|s^ycyJ)a<)y-q8Fh{tWYml_j(evLfiniU6z- z)*c2tc?<(xBf`rM?ONb53>0>ySqQKf<}k(tr%S|WbMHK zMp?nJ(gk4$5(c|A=q9XEk(r2_KNIC!j|AU2f*L)XAT@YWEEJw@;!j_MwH4#(7NG*& z1xq>|Ejc?$0AlM5}xe70hb>Y z-y*r0*d7y;=+(u8)mGISEg)fX{larW)(=TE9fYjR;|HmoE*)CoB;*ESXvjK2lztl0 z=TmrYJ!LjAEvFt8^C(0}syzIo`ZY3t4*!n4v#-?N{~v8{0?_1<{*S*$E+B-2Bm@$U zaNk!#2xkb0BH{&jp`apAK}8VoYSpT>UiGflwbiP7?XT6{p1VD^+jiUS zZnw7Xw%_iyO89@Cc@scu_q+eg=s20Y@60pLJkK-FJoC&m2YMen`24}gdJimFvqtsf zYp-5Z_w*?K+5g)A2tO$wylwAe3dLi4Z+lQl{TYS+HL(6*LdE#q58u8qz_1Bi7ZfZ* z%n><)dKtsie!-ZTT&G}GlZR*lJX~;yc(L;$X|KajdrzJi6u3CW5to1q%5i2M@gH@7 zR%e%w`K#y0GoJ6iJhSD|GxzQ}BOL$3JNoax4|(hN{G*9LHt` zny;kYdHxV|kCDDIp@HhFJXvU_7_lGeeSX;XpQyo^+!1R_z+`tPMumy)?MxXQbWhnpvGcggr&n z@0&aW5^)X1$mbaqF^Kkn#1;G@>_OrA7_V*;6CM*S29N0RRdcOmb&$;fPmtBY4PPgf zDkvyK4)=cA05ZZ?q2x)#dxTpbi5&|^uGS+q*t~XAvN#asVPB1$6qwB+QL;F|zh5jK zSdR^+-(G${?}sFrfSK=@z#iF%nl=nRx+((=jk(b}gAP&^BmnQj1Pp}>FOVu@8~ zDv~}3harh)doa0T19m}_^*?##!@fD62p@HO-tlY?IRi&loJ!owFB7V-UZ}wHnM?gF$OXc)P&BcqJXeDR~kH&zZF{0uu=t zU*sbcAlO={lRmMBbrCuworz`Zck*L}@t#aAzMxdJPErcr@p8}QZ@=!-y>S6Jly8Oa`eOs{z6%W!&e`yx zWRBXPC&^xK#5xP}6oO`4_<`xoL-u+Nr@{4?BP|`oHMh%VV?LVzFH)0g1r|PzJm{nvGpOp+TR{nyqFKZ7~vZXA|aK9h8_d~_W~Slvg6PMBMI5m!ih`}5! z)_JUY0h#1fKyI{TA!5o5J0e45>RaHF)`ab7Dax#dUKM3OJWL~ zu?mZ56kqYYZ_=8vDi?t(GH?S1wo+s16dffwbd99hbxr?SO%Z zi90a_!1Iu9JY<4$I-w==vOLfDw(rZw2IkujI0HN-Z}3z2ED+Ap4}p$9t|gx6|5&p>|u77zw-IJ2U{27f?6pp3`1CmmV|;H^;N>5!0W#I_iTOrI7D zB4(Ra?7Rx#jg>`QIe1n`I@8q$X!69@t`v9{(x~48Oh+?JWImb z%L@<_hph<}Zq}n5)+6jWqDSOMqxM$_WWm3tGu|T;-uPb99v@nR)K|EFUU`qtW@T&*5J_EU zR+a=LYZ>j5K6ve{%&+l0E@*MQ>9?M@^B+C5^O<*H%k<3f9DC^LEzMnRO`h4b0s!a8 ze*+lcVgq|B&I2N5C}f$A4@E==oIe~7(E^+J38fNZk$i8-?O!&6t7)8l0_H02CYPma zVUqvm?AgoFXZZjC^-kWShju*;DM>rPo_f#2j}Tl7<`G=d>AM=h4PtOG zQ(5$INpRsL1c!5IWbhqQS4ILtqd`M(t)_BK(^oeOjUA^R7O`__1?~VW(E|}WDqIQ{o<&EIHjjKKsuH95bYZ3W!-H?Wu6y-! zM2D>OJm>l1gE#a~e(=KI#DR6fU3WdU;jtFD!e2(LyEhj+vib9;87>C@rr3!2G?M={GMK}N2p1R0N=aD_qy&HBtIgdQe^rOCiIRzQ?@E}#Rt zRxBs5H^_~2G!{bcK701T1U~BnocGD|yzcS*kLQAr_~hAFAMbnNCBc8-M~vTucmCyh zW{{l=iW7eOr{BH!-Is5?{0%{`0GW9(l4{Hpqi`BrKrlrmrxNfn2B;~FiTi|JFITBg zgQ|jnSn|IoyC?xHnMN^b;Fu|$I3;MALo{Q-urOy6^C1J^Yh0{?>eE=aauK- zyaEA$KO^xW+QL=>BQN4~@_ET8Zue>+G?Rk=hV)|LN)_+l+57YJ9t8aLbb|xmxqR-n zH|Ne9_)0u?#~pArd+NSteEQ|vOtXg$Otw16Bxv^Ji9yDHRhJ5u7@uYj=xLT(2kNvy zTB!{x$UjvC0v(z)l39rdk($i`(5lF5CmeXB15Q_)m3*gm86t7W+;_%FB2=F{tuk6X zJ+SW2FTeAw?%c-+O7tAIIn{r9J^0-h4}EABZWMw8kAHmgvAKK>uZ4P4IIDN{V|QVW z@}3#O9EFJy->ZiBL|4x4W*`GH3=B($Kc+}G^EHCvu?zxlC|CiIFBwq1yiR^a9B@aqm;$d9k zb2>MV9d^cGD|n`>DM-uirRQZAF!Uq$)Qs?S3-m6qVV!1L0OH!AhXK&;0-!i46i@@M zr#<G0KIP1BEJc}^tU%r=Ih$Tz6d>1T?NhhH)`SBRz z@qH>eN3=TP%s{_SGXv@fUqB?k;;gXX3CX(1+dXtMCZeUw4lqurb_a__!KBa!7)^S; z$rvCD4>QyBP0qbxCqr-*B&Q|G;0K8iinfN&^Mhoho=6v(5e*Ru>7$L(UE>lfNPZ#F z4zj&JBToD3iI={8wSJYZ&{f*K*K;F`Nny{)8t(iy2y37G9ziy@dA9P)02BWkMX79qawo$0Nr<+JcK9ozN z;bg=j4-PLY3sZ8L&QYThoX(mcT#WiOZ+j|#;uo1pW$Eard57CSJTz20>I?IGiLf`? z`r@_kVbzYa+vH#3U9=O&W-=!eQjmk$A&~4WCwY1!N``}-ne;B&Y1Pg~gMLFSJGM## zMwCXZ=-H1(rNa9Hh=kT~O57ZU0dvPpnQSd^^`Fg4iz%NSwQX%%e0J=*9`~!I3pS)= zC(gR{cI(V>*3^imF{rMJbE#uVPVJjtLuTGIK{%T7(s zvm0B>@3FM5zq@m>ux{YyIXB;Z^9|N}M$g|^-yW|?ST_5qwlPO}<&D3&u(D-foN%gj z*@cCTB~TZ**9L!OP^?L@^ZH-Qd+q)(qMtm1j@j-sc(b09Q&n2kS-`n!y?|#k{ z=FY`U-tD|F2p6C4JzrwpWjM#BBMGwKfe~nTHk)708Qf|<_4f&UYEo))Qlw9<;JNm} zLHUocF-+oCy5m9uD&-NQMw!c9w&*maJV4}dZ>;DnFXxh+&gvj8Q&l$RX+G;@L|B-P zs2_(XC+1K3s{AX&kFup%va>tq+v6qB-n!P1kRUxS)G#OELaT)5_|b3_h~u+P34&k3SK-)e&+Lo%3QOtC zC;dL-fJ0&cJL7<1>y3mrFBd>s03}|LFpLo;Py&n)6Fl==!!!A*>8lr4gtK@c={^)cMB9yv*SExHiwv=U(K$I{mv(lo3AOCdMNGJuasCBg z?Y{^5{pmf+R~GWZBz{Hx%$Gp@4DX6tK>hE6`k__7^DjpG$$w7ZlZ%rR6D-5DKXLF! z#Vqu1EO)@2Vh9)|S1BznS7=FEdO@Z&nbCi8X1bVDQo_aOBx@x)e+eG zl=PH(;5nX~;l^pnD3eKR5Y-k-q7WAsPwtNiTs+XGhkp#IlL2P74hu(7AaDp1I4S`a zi6=<6%=emJ$m((xPh2%kj>LwKBhD_Kazj+Sbwc|_sk?iRWM-J1VObZEGD5Kl-t zH0EKp(oAYfN{A2lu?5EKEj+a!v!2L>(4H@JC;mO|3k-nols!rAw=jeLoQc|_@bs(j z3rLXRus7zLQJy#WrCjJKL_NTKqj-Ao`4b8mFG}_69C+g-gv+cEZ*2Gc25-;|rJy%z zhaYzU=XyLnQ^fQ?^#1hNk0Rv9~Xu|KcuJzxabZ* z3N!cb+;Mx~pMT%4*vJQX{)fNmUxNfT*}kl(cdT+Ua^!1}hMUje-T=)Ju@eH-0=!22 z-cwPh-?yEYLhn%UaLLlgV~Uc~`2lKT?3pv3eP_<7`xV4a$Rn z-vk?ZDE>3~`5O$OVR}70^VjM`(ck!seyYWITFFE7@xC}Xu(5A-9h%G!R#qj&!MS#M2R)KsGUBdj=DjDeQZ zYGISp;mnkusCh3?!qS^kZLhFfL%i`aNVm>)Ff^6iwr%TgT!VJ#&P+Kyiqy?AFo&HKo#^=K{V^y%!{0g#4sv5^O2S46VKs{lJCqjE-;@ zdF<)?GuW{lc6dLnMt<(+OgfcA>qu;~@<(z1n2$<7^gIfh3vmZ}$yC6O*bt3^>fRds zyW9kb=oEMks4hSjNH%rRsMqS=(~_?0=+nFhV~zc|@FlVKMHcbGw`qmZ8+jngi(9$L zGws%V~UKO2(e$FIp09N>g2%F_^bBW+6Y=|Q$*`a~& z2FGy56TI?0gb5n7oq)NWXB_2Xt6ne1!bSofL=9fr#`iz5@Bi_4wD$s9xfyaz{p0C!la6#Vk8>_qww$%oQhUP zLpg3e+`_fmK+ODsfx$Yp0;@dcRLpD$;5n@KBx%EJZql$z&W|H#%ITx2FV8Aky)^X` z?AZWO02Vl54Az|_H!|D^WeUlG`!$*HK=2gmpya`f3m%#4@`#p3NRTm-1bO$YTqjA8 zpL$pWz!es#f?fWRSAy8w*ad?doQmX#3O;ZoLZ}tCZ8$=VjBICw9I;DsM0Hjk3OVv~ zybseb0`uFLXN8364?X*VY1lO6ID#di`fB1u&jA@P`S?rkjPg8%ci_Xz-huZZ#PZpz z#4@_Vy)bx5_5`SaXui;`rt^WgdN6=U9v<=tUcqMMUq%pEpy4i51xs zBhLU{(Ve~e@SikhfPoW=*vtb9i5qrAY&>9_3_^=%@m|OV<`edI788J3+`W>kh)J#u zXXVa2f6inz^4w#PEL+j1V8lW5#|CsTVp18DTG~L8!OR=!C34t6MhKW|4><#Ve#X#& zKmA$XQNOerSuLZre*^9cMIw{+MQ#(OER)IL=P!x-A!$#~71zrA zznxVi4$J(XKA`?$&d110lt46!@87ZS^!tfnzU2>jo&aTx_<oGibD@Bd)mD}-XP8WF`6 zf{T5>Q3x0PpARd7X`;Ps7^{s(T_;nTz-{?T zp*R_iTewru_bcRImG?fv3Qi?f!*>IB3J$f5uj9P88FDw`-akL_e*9i?owq9icaiuI z;C^-JZ7i~>awhXPL5ay{Z@YbO!?0Jx5m$E#1K+T#UM~mBzLg<9k4)9uM&@1a4CbnbP;V@^)?JlknPCxHEqtgY&+-S$ zUoEm$%VvvUi8h-J0sj8_VBK_tt2ac)3PN~1uH43i5EdOC7CtUQ(2a{V#75v_F{{+d zaej3FHuiXjTpO7+8}}YF4UlYk1GWZegAbG3-98c;!Rg>ntk8OG5Rfh>oY8B*$IsODDZn2bZmsURv1(&i^*UJGdWa7W2j1# zBNDnxaA`3NX3|ER4N_gtJfC%N!_3Kmp9o!iPn&G9C-`U_u#4wI7#Q=m&q~9&T4%p_ z6JLz&$(KB@SJqPdj`jz;J-_YsOb7Li0R)c%f)Fkdnt;hqr7*;()yd(;U_Z435tjp0 zrW`!RfWT5+!jgU9JZ)UymU^T2JX3T`hTzC?2`1ld_0c+jCTw5&&f$iSKI-?}()G?g zjSYw2U0$_izN>itmht?Wk_B7kms}gp@APZ}DEz}?Zu{-lHLq_Q_fT@(j+Uk!4Qc%9 z=It|*F|tK~aR=K*2FVHWhpNM1$h?TV%}0zCwwW+CjBs3n192cE7*6!l*rd(c zK92$6`5NT&rRPub-+8w8dJYT&fnDX7_&hA0d2R*pkc-(OnRB_L;&7`^l+n*GDOIP} zbB3hk_&DB?sM3c92WxUd8JB{ZOF-Y)QXu}MH3IJa(vioQ5u7KJh)1DJbkKeCk?ihPuZ*)$$wYQ0X_3}JEdtK(Vm3xmh ztUG(NYfc;gb)r2oFmCLkohKG9d$;el3|TLqO?ZP8dIntS$0fSyj%!7LOlja14w($$ ztQ|bYjmXB>m7jl&1z&kV}jOVlz1jgZ@`6s z8iT_$#4;cTNMdFa`E`!D9=}{(ay@n#NPtWgs5gokpu}XZ5FVq^PGeM*JlkjpHpXXX z7t0OGY@;JMK0bxZ2^3Ot%nJ1G6Rdv75pE>wu#vzhFvi8kAKk?hDVRX4kc(bMvfDF6 zJqF3i*c;R%7PmdP)Yaek=y%(D>KD=_Wtqqapkvv{Xp-5x7X#R)orS;-!e0O*~9JjD@H$y zedhbACEEkY(heA38W)iJn~ z`oO1cIpRLhR3fCj1NMA~DfC0wzx>_94UPA_)5Wju|LCKJ!|yDu+Pa{`vwr-R`NgjJ zTcT?Ay|rfRANEb+dobjlg*)HdKIWmUdHb6A1CIIon_BK@$|5Rw9=xCgjAq1LFl)e# zT)0dW!wg(dkU7kdBl`IXW|crJ39<)}5;@Q&Ke2)20%K=%FBnOV!ju5&*FAqu7BOLF zlYPUR+s5{vJeSv0TY_jCo~+QMNbRIMKHk1!#k+57Ln8yPZ1d9gJis8wKAM_>?izTw z(0Yj)#D@vcN6xZ&S8Do&zhV)KMJIz^F$r(RVqZ0iH$-X->PURzqc}sfGA9IAYDR|O zV~rK9B-z;70TV3+Nh8SuuMax&%rpU?V4=xLgZmOQWWY6yn|A(IfzO&SCo{8dOzNv~ zB~zQ*ozBkrvqmL&UORUV*1W3e?ZqJ`S4SO1lbpGwWmK{*IC*sQrWrhcr53OWT=U@H zDUt;8F@Vzn5`vrph$Ni^%)=QX zPz7EAIYFc+YD8JV*yXO(Upzj4&SU?)ecum{&xtRcVfTFX%Clk7=E=XgeP>0+?7E3o zZQ|_K_A6hzmOZj)!Gk?Ta~}Eow!(Q8iSn^}gUq<($$#Fl?W_A|H9Yk99kqvc-RzL@ zw#_`BQ<|U&FobJAjkiSw4n(v(a?|KBEAOAX=FPp+{j+b{brfT`4U+9WMuF+>5QGVY zKa|#>5&d#Ngt)C)D+)tHH^d|tY1$;qvzO6n&|tcP7NnEC_Y2Z<8EE0c|ISBzLiE6& zi2NcnSPKGz$$&t__@u*UCt7PvHXFkA$>GW2F_{WQi~&b{;QV1xDG+Rn%Ly2o5s3bo z3nne{MR;buS>QyY?P1k*M+Fhs{)i_cEiT0n|e(OwR_&p<2>bjzq7e2y*H|8y0dU{ zwvox24{)8rCF~GXfX1>4BSu?Qm?Xr}oY88n9BtGmrKIRnGLw_zb28zC8X+n}a|#2L z?%W&=B)(UN`vf!pMbhFxY!ZpVjfMJ&a*4!f(lZFd>Kri&Q&<>j(E$-sq!e&XljcI6 z#soSm6Ivm1P2AvCXDOYbMnfI>hO$cbDA|cI6B>8FO|kxeh=_u!rI@!n+%Y3 zka|HuoS(yh^L?~RkY*Zb(i^ydQ}_ru#m0|1F|7NX`^Yor7rIYx?{yU)fjb5{TZ48J zAO$A5lQKdR<7LrWjV8*Flw?mdz@aZXBi<1T_al9hBU+{LgAE}^S|pJA!R9_j{?N6( zvoV=M@Rv60Y$0A5%(QGKf+OX)!p4yk?2H8g6PqgpWAB>*ApynvdtdL2Ep$2}^(if* zD>tre&)o3#ktJiJFV{^R4?RIQ;m)rQO`0NW;AibyP#{8ceJdg^u55NeSmP~6o_KoZ zU%xoRFFZORrtSIR>7@o71bdZf6N8^2q|aNxYn(gSXfo*aVJd?H`nN%Z_RU0?eMqGQ z5lPA$@vT=9LA#5Ur^0pZ%OU;0amTDQ{?PA*X`YuouZ>jvN%0o9ventGgI~&Z@^82j zuFjoa;4nsUMne=n=F;TURI|TIWlqgXNr@{g2zQvxL2)@*6f)i~C`V2p5tTF4f{}-$ zDzm>!EKM9ul7@*>y2LdSB2TWJ8&p_*4jxG>pB}^12dN1bYsrVuWzq{mXT4=Im5}HUV404VPVl< zV%=F0>66<_U9IC&dKWKt*5q1D@mZlC8LS~{+uW_w^INL(17-e&^EQF1IcOR+4EvyJ zNKZ|e2;$aiAw>=TplZzDKB~UJs0Ty?quCJhhqURB5aacix^#5!m1Wo0q|vStRGrUF zai@fYhWcq#$qGeWq21xo7~?`Ca1c$AlkAtJRA%XOBK#d(PEMAz3>rc`D3~UA5;s2W zIvEFaG9OwuB#R@FWQ!zj_`NA}=gm&!FB&{Y*Svkll!o?BT^w~+rP z(H5bO8?#{h6Kxy6c(^S<7VQ_JS6d?>h!sPcb1HgmB}RE9K6UBOu4 z>h*y+VThj_7cWal5OO%&G=o5j!xG%LV8Q>AtbjGxB}!uY7j$dV(Hi~t20mr+(;F(M z-FAFt-qNKV*@lu8JxlVodtO*FWyk5({UPZyvw7j|?LpITJH7O#6HD`qSrhX938V$o z9Q@+;ZJ$5Xrk9QN45pWv2!6=D+kvZa&gKpaGz3Aprx2}?Mg+^yglLp1ZJ?JRN@x;g zQg>J_V=H4ec_spf8j-1(EX3xSm^S6dX}8_d>JhWyupII+h70) z4i2}3-BnS|6mnudJ}9|YEr!gs*qDZF;I;WE$?p?6s4lNKBi z8nK5gmm4u_2=Z?LSuTT&FePzxv|H=rXzULTvGmX)cnCowjYiio7>z*9u(1dnO?SM0 zDbJMu9XlY^(9~?%X-0*@X`C=2rgl_msnKLYgrJy+>~Nb*YYGu_N=FrGLq?4X(TV|M zbBg=}auOL$l9rZv7M`{ry-Ox1)+YgVl*w({09OP8M6R2f@blUdMH zpI>v&cZX_@?p&UzNm;Rde`WXm3+);6?v%}IS+SzUR+AqUm0#_th;US<{WaJUj8kv= zoN-O1lc440&fPGnsAW=~R;G3}ZJv6=qiZTmu_^k$M7VOIlP7kMD`=@o^RD(}`Jf-% z$pE>l@FNR|5@sVzZ?r^^=$MvASS@1VM)o3pLw~<;a-fRYJ!s_H1}`b%VjN(EF z%qBKj{ttK<*tvW+oX*tHmmMjVPy_suGjl?8p}Zr~5}}Is3WGn|25cYOz%b`&DMq?6 zGmGF>@nM9LPMiqOJJ^75eH=e52H2Xb=<&(BUR$x^|Lm=;z5V|zPi~r98!8u%T$$Vd zxGbr#aaC#Q>Uo8Qb61y@t)5%RPY~{%|LpeKakoCz-u~?735K|=aL>8N4<8omC#{;6 zo<42$q#3Iw#--NYNPX)DzhRvTsi*!yGe8iHoErvj6pw*Zbh)=K^ zaSd(8V5cP~FgshF=P-+M?1d$&C7T2+&py4A*<2*jVxpP(7D+Y=MlU9vv!KKm~s4}18!~F>K%8Co^$4ohSaK-r8m3#cmMP8xn-UE9(+PwbMN}< z(iIQQANadt){Uc+tH-&sEFroWTlCx3f{X~6&=@yu=c2KTCgns14!oA#as1}lyBCa2 z)jtte**$sYk}|W%uNpNuHIUyVszXy?$sW8Ye!*{4=z$5tQ#5f4JfatuoTtd5nIutQ zJm)vw{{teU=;;C=NX%sMOa2*!fxW?DH)8k=J9~qV)$`AIu57zoVUXS!?3TUChbr>_ z;~Sx#OZ!eJ@;%%59zZpKH{MqKgNpza2L>7ZA`pYkt?`R^LBnO5-^9A!{ILxi6m$U- zk29wl*b|`zVbKnrh1QeEpAN~HSU)jGPz3lbk_D<&_K9^9?SYDa*ph5xa?>*N5)|Q4 zR)3W_HqBzIaHeNC;w@J6O^j$@U7gc12X*c8Yl zJ4m!lypp$F#IyVccqoxQ`ZHxP_HNU;N_Tv0kQsq>BFyH{KzuTJb9!u2k`<03p~jL3 ztG`7R#s|r<-2q<_;(oR@BPn}~FR*f8>jk(FvsF#56W#YMadIg}XRHIxqd)=F!CQ>~uid%t;duOgw#h#uH85cPB2Hlhu@4zo{-2SBq?zaMQHRNyVn( zNa2lv4HLooRYhXi<$G6E*36wcCoRN~-+rhWy?MsdjB^I7FyrUAEoya`8RzZwngFxb zUs2!C(=D z^aP84sLQMhk%vc@7;v#ea)}`K=hYD2z^CNG=+#BY)-_-wE{)ZBapkk`;`VVUC!%i1 ztbk>KY}D!Lk2W_S?JAzU>B;8wiIt<{)V-%qpH3<(DT%9IJtcL^?KSs$ngw%J<>YOttNnw z7>om)I7G%Q1t0{1nve(@V|yjA7LZS*504{o*bI2QSoC7>Fz_Y|m5_Mld0B%OgXGQl znXD6XD2m2Wr;9R22tssFuvr}$?9$3{d1h#dp!8?69w82+=>-Ab*z5;7Q%V#j&4a#` z9*7WQnKd(Q+JYHd=h{vSmj~op+w2MPHB)NhPOnPHHzegQyt`Gl%~N^U6HAa8qCynm<2qSa|vuqY3L?CUEITmI-O&#LO#QP#buaOWHUgH+nXL(0_-w zO~exe{-;TKfD@7d__*?!L>saNpbZn3-^K5O)pnR73fkChPKnNf*J2lN;e0jrf?Rg&KZDD ziPd6`$m3ioI-SiDQeusl;o?=btwg~TY6i^E{)uGzhO`2QG4r=i{bRx!J0_A5pJ>-> zG)BC2pP|MN9(pWD-HeB{bU zsb!Pnv!=P@FJ{#g#R!hBc~5MZklu8p%YD=Ag7I^6^x7DE%;gyLF}@(tXlp&P`0#tq z8O70w6PHik9GM5htN@MeGudT~AMK)~yG?SLU=E3iNj6!u;Ux%U663z?l6QwAPPo3yyBtYdPz=e6>M zTCv*y5u`@)cX(-SXFsQdHBSjNbc)F2&n1nE=v!lzb zn-pE@_v=p1vbT4%+j#x6TH>WlycEeu-av>a~n1E35WDFtb`7$Sa== z&2?9$9-i{Mbv+mEnl|ek1P(f*LgmC`<;3F=jZ;ef8B4VGQGspB%6tTS%{)= zC{qw3G-kCKvOmmFMzY^GX~LcGC2T}j~2Je@JMt}&kp{9$45X%fO> z^OHj)d4Ku5PuPoPw3eWF7jqN_tR<@0I;nZ^PqJ}879q9c@Mf4h)x z68$6aDM_{j=X0hQL5Sh)8D;)~Fu!{Fk~~84hg2nauwoC6EhE@Ax&oMnWsE6D61_NK z*n^w8(`lzjnjt39*Bv4x>{y90qY7FNEyz7R^^MMH`#Rj23y$5i#26p0^$$pV(dn-a zxSTY0UVdU-{j8*<>Qz(5EUHY9Ju#}-z5C%;yFItuR8?)Cw`11K$6x$p>$t$^gtRby zlBv2GJN_osm8`19e5`2fG2`2M_pZsEwCA?XBXj~2{1)I9V8*_IPHonx{YdNw$pclK zOJtMYNG>N%ln?D5NUY-1sG3iEHeam`3>?0WE{Fxt(kG`n=g*lEzy6O$W}cq<)`FTni``mlM&zPCYw28f zN<+i+xT+0(^CQxta2@fS`&N$j4>)Vor%qf@Vp{p+=j%MvFb^i+#ePz9RjqJ zoM$U#u;H5!8*;Cx7&fF}2l>YAy46*|1+D_Ue_&!pR!CuGvgWjXGa7c45Cln1K) z5+*FGmc@Yc2L~Y0z?#;}N!fN#h$9 z0Q`z!5irza@#5jD1OV)|o@Q|!B4^p4ftu6OqAa+kI7e?ZCRw;NSBBbX*6TGTW*O8x z$xeXo`;1Sdftqq$it8DfiJ9%tez5i#GGAXvbiNuK~Wh|uLnhi1*J6~=^1z1hMT(D z=1h%GO*m-HuNsnFvQ>~>)sS8AdqQ96wzXu$UP90Uoi02)Hq|fCf-~5mU>}`URE4`D z)i@$ejz`RxhQ7epfwWc#E=X2M8re-!TtSmYKHLvlmJ8OJU5iRwV}2Iq&bjohkkGYy zb+aqU&VM@aHi2I-t8?Kj{+Y;{*45*x))dKdH;ipOHqqa?{HB#lniEq~2=Fw=@*7ty znkC8p=KpF5 zDk{dY#Sum~*iRHnm&kXyJXkK}Ic#170T;(@r&D^|8+12C5&saF7dSjy_yZJzC?H!v}b>1+0T9OfA ziw{OQCuYW1jh~R1G)f3|HIzg_bG12Y%8N=W(!(5vf}R^U(hPzbbq}=nc&@~4jpkxw z!!0-giTII;h9I*J1ukv8e~^Ef0RbF|61}S@-{KN|m-G{Kf5ZmP&?24fKuCUP!fUy+ z$0Ws%X>rF^PpyrEhV?>2&HnDu_DOTod4ngnv;4O0yDCR59G|R@u|-}%K-Qb8Cgrx@ z*FNR&j+Lph!^A_!A%&(>JS%Pn0H zPI&h;DT6UDrD7*C{#WoG&6~W4_w|FQ*ryWxI_7;Qo{^aMtttL{%wLWc!mdTV>?c|^ z(QwdOG7`AI8@RW^+CSPIXEtjr(b0~ya9OB1isREVOG5R0m@7O=6`@W|D3STWEy&A> zC9p<)0)@(J_#ZNvF=LdpNcOD~61~Q=AO>#=Wt;Y~h5I!{YO6qYBc@rR_T=G#+Tn^EX83JwL%< z#2*y?iPdy$Sdzoy@uVgtj-HEgrghK~HqJE|XOZSS`A&>hB9{Y=z0RGHBab#4i&aL> zl4-=pToM!*m}fB?b4rS%qmvviD<6o!V1}d;+)t0Ip4piFr!4?lCD96y^c@JH4AHw4 z;N4rY>mucF{$b9si6Wi3rmg&)t$p8ZK3%+L*Ud@(S?g}w;_U8SUOa94iP?8gyMND( zb=d5!TtOqMq%IYyf zN)CICN~M^NSR=f08eFfZ37|I2d*s_kvYxHzU^IpXS$PqE#1cN@@_l>+apO$>Q(=ej z7sOPvxC3x~lp;{+U#38{u(M%cSa?gkFPWPiM1Q$XVaM3r<3?{9J!(VwxV=?Ec4A6m z%E_d-q&U=veR|m!*ei}l{I8UN0CkqnQvO|A;)9|l#mu;5}&(2ESua33X#5df#eB7;RNAKXgnPyh!o1KC)MeTH|Q^Z2- z3Iw`R`MfB((`HMFFAD`->qGsuu3(=9n*0HNmA1+J`{q@vMz%qAJ#Fop;T_W2(BJFo zaKA#~KkYdDYnt7)H126ulg)ktx5Vx8SDK^aV4zIPG?!PF7Xb&+@^YuMTplf(giQ!o zE8`Mn3ReuD7a}hzDG74sQuf)rp{j@hyTg~`k!dzzcGzMQb6UAA%X%I$=&CkzA%WN>d#L@bn8fL%!MKZ zJdEZX1)-OlL|F&|{>p_wBX%^bI6xI&npk2L5_R1^TO|QJd+Yu;a z_-l3+*U-?w8|6m2#E@JE?65q_5L^UT8#<)x4aIVtrk~<@^v2VhsxGvj^<3Hi#u@xM zEnji;h1*^@`oh5T#hX98`>f}0PtOq6E}=Kv2601u&<-Jl8Stx+OA z0f}K&4GeezGArWWSpxz>E5bBkN?8Su$c*^N<0^tg=|B`yTqScQQ3|tlT*MJV$r+3- zC$h46cI1c7E3z3*7j0!HfnpPfw!35bUjAXv^cQyH4}UN3$NSH?V(fnt!kg?j(ftCTrg&G>JurG#uTQQo`@@*)qYdi z6S6b@xpQ}(^IU$w^93*8`Pm~YYcc{Z|526z%jU{Qzu4os%!fbBt6twZ$L7bYJU^0N z9fX(-oct4?)nKd~Y=Qk8MX*zA!G~PAMHO;atPt=aJ_>od~ zp3zW)_Pi+{eRvb3bDj|t5H9Ixu@rR8H;YO>t~lie6Q+Z_2@zvQGK@1GRDa2bsa}%sClhRO~6X}{;8a1J+R39<6YD^eynkQEk zCdib@1!EIU(-yl-F(vf{V`k@t@&~7EYOuw)rsrmkGI=@+YvmO(joE07v*?6MYpT|2 z)+U!v%kZr8+@p;z$rLq~u#7ArJ|Wtgs14UBTQ=3kD*XfGyVP1g(bjfPXNnS$3l_>$ zfqwk@!s$)P`AuV!)5c6oeJF8!=h(`g>a>WIapv+=nISD6w_0U{$nwiIG5KjZrSXA$ zT6BI&=rT(|R#X}3zvNfCSg{i8xKy`M$R1~pf(_b%EH9%V>0 zY?ymjXSv^5-Ks?!49Ug_%ZAO{(4TJPU33c`*D!rPC&d&~2m zXW_2K?*&ox1n}<^dEWbT>xtd17MuhC{9NFAI3&5$xabyMK{9Bu2a%paiU>3;-Gwv= zgH$^>7wPfA%}D!LO7Q3yJP|1Aq3Bb1D-MwSh}4N^ z;;N3*r4)G(> zB9<>^=`sA8%msPgMXF8`;&C^^E) zkFt_ute#%v(*WV;NRP9$4{180C4N z)NUrmcN)@s_Iv^Ql?jZ|^L4DGo~6y~NoqF}_^0$Zd!~=2Cs=w4sSW-89I1|_G!`~C z3N|(hHqh-iC^?2-?Q9h6Y!vK_3+%wY0p;a*%g%6a2OcQD3;nVK=aeU$+d0Cyogih%pG>#5drvnuG4f6GauOp?J9js;t>ZG@hvl{wX zdIGIGz#Y%Rub5~xmyKpFV5WTT;MYj&(4$<&gSn`a^1IltG|Eo&^b@37aI_QsrF_I- z9@0pb64g0T+h(K*fYXUFqSOYcoT&c?q)xQ%L@yv0aC!hdiM~)e4xH;mk0?Kt)i!N# zJn}PGzK*3cSz6E128^{6yN^`=E=U6>x0|(cgw=eM)pLwN_yjBOWhKWMcLgJa;6I3b4NGUR^7_HED50^= zXZ)3q5us-Yo_vf8<%#R_8P^xEwhCBV1%L-qiM3V0+A3faRlwRRU~Lt!whDlySMVgY zSb&i_i*y&u6Gs=Y77Nf9s*PGKU@aD~77NigaWMz_TZFcHkP;4y7_}5JYAHg$=o#YN zBJ_@)sQ~2^q4hOL$FX!WATQ#oSz5zNYFT~?%THzbY2fQ3;DORQR~?EW%8HANMok8`SLRtlAzd=gSRsptexQVFwAkwicU&GR)EbV0}$()I( z=O8zky*rt`JDI&(%}T0SNi{2}VSTS*eXqf<|KMu4S*WK5zfzv?P|KdFWzW>2{4z?Y zd@7@{sSHa~8I4WFNPUd*BN&~jjN_&3Hi8NC^+q@eJkrSb74| zdpe#maCK;RJW_hH4y{w3Byb)2{w>lPmQq`F7;!2&#-8Z~q|X1g_U=(XQ*HGtY7u4U-h8mf1reL zRnPi`8)49H1M2({Db0;d z{2i?34wQU@8`+5FcQYE;jlO)2Jk7|v*^IoK&5XO*jJz9ge$E|bPaegS-ylyEb(B%m zQASZm@ys_k@k+YlF{UdXXEOFU(_N1<-Ss%rU5}%c1>A9_yB=q{;&HUtixSdZk2A?| zoQ>mgwDJd(knVaMZCyZ0y6bVo%cOJ{E1|LOV{P@Zw)$9GeXOlM)>a>DtB)`K^Mi1^r8Z+30GQ&|1QhZ zJ)_OS7v4P2X~ePKJmQ6l)4X|+vx&{#ylliXaxPT7!&|NxQLf~ciI02BRePrB@sS0Q1>JjA{%B#{?xfXeiDv#xHRV5d!qUfSL zZo(bL2}L~6s%EhAkP+o!$ZJ%stQ^N`@XRunj~MYx)QEf>dwwH(CY|N?QeHIzX4Q!L z5$kFQ2DKOdhpn(HM3QgKs9duQX~wwCUU35`8?X1R4#V^>ehaBJ4?rJbFN+FF{e zH*_rS$*|USEVZ^buCy-gZb6-Bhl;H|9oD9TzS=4zoMnN}=S9%|(0l{zpKdo)^+JNDV)}Efug3Qe2 z%a>=g`=~Ah1D@Hlva@4;S7T@E%1j!)?o8;29b6aJ&NXt2kekP?8}P0b z_vBJ-oh)rcNgHyDVT-VGrD%H*{;xsVe6AJ0b+d0R_`e13EJNCiC#SJ*1i@nbtHHPV z+)}(r5dE^nf@_|q`bWMY)zay&VT^{NNIUaxOfyhAm1qW4ro zGv2s?;j@Qfw2rlCWpJ*BH zsDfzJig}(!dl>hGp+&6sNq9aPzYzV*LrSA|z1k%hu7&Ks#qDtIG=_`8BUWI8sEp{B z`tRet>-9kD)AisgL_Izlpq@y5p^+n6rcon4Z1eWD870eE&pS~5Ydw`{k9cdCs)!PN zRM5fj<11N;Z=Jv`Q66#OGS(Z3eu##N2N&Uqk+oer!jimM%*JD6?LH2XMp~jD8uxkl zC(&>Q>L+^cgl3(I&vN$3V03=9tjl0j)sAO+&<^2-WI!Wwt@xff#HroL56fSYz->d{ zKf|}--xi@~BPB4C!B_o`9?2qQ*|I8Gg{&B9{?M;f(_*|o5fCh6V?lDg6cBX*m&CV? z&}i5nteX+}@H&5Z>^!JosgUjVKAfCvt5# z7BKXggn^)`gb+c);i6Ag^oYu2h8O+z&RNhLss8%RKMx1Le*WuSYj4UtvOcsnYrX8H zto7m}M??WP)#>ek^5w#(weKHWdT;}S_~op?A!resn#)?wz!ay-6nbH5ZMHs3r@$AL z-hX;ycPn&&o{q)Y+AIwfD)q{mmge@3#m(7~S>aUTuQv{9Y$H{@?C7j0`d!qA4*x!- zt-U3^wx_YZ(>i%nX;!2uFgrIZKg*fzbmTd*XX0z#h_6}e`u=}`Or7OVkOk<)(n+JT z6SLx_Z;^{fwRMt0QeHdSI=XgZLAlMIn{IcOm!{`CbF;JKvtp$Vg79r%PuVsI$HC{uA&8V9thq0=AIASmlGGAc=D|$j;uRU zx@P0z-O3{49WSr`?UAVu98|R|T()=gn6J;wm{ouBu`>~$&f@<0sBY}`H02xI%Wo@Z zXTJXF{u}p9$$Yu(*&`>v{2}9CgOk7P`Tm2sO}7UIt*Qt%H-3}3=k@asKXb$BnG?^w z^!UmTviEPk$UWR+8hF0!zB#q4cL>&d=FSL<5qB!r7F8erOWL*vzrB6IsVz_E-WxN& zWXz{w&vXa@8!Bfkx&6&!-~UhKnJWVexS&5x6WZSo+4r__|Gk0;M!I)B?+1*?vm$`f z2o2mV4Bg93E1IPp;;ko4Y4`@{-9<|r~gIw!`2ms@=#$}E5ea{j$7X7Na$r@gpoo*Vn;|BJo%fRCbj+y3Y5o+J=jq)8_Uy>F-ir1#JR0#XwKK{_louu=lS1?kcR z48>qn5LRGCsTvV6D#1{)qF};CgSeDHAcREne$Q-Z%FiF~^FGi2`8?0x?B|-h_bZrlFalG{CkGZG3VPCIz*>n-D2EttHs z`sp7nZLBLUCQaID&-kog?+t#-S}z*bFuU!d_+J`S-hVlB&eR9uLZ!A-F4erbYsDer#%OMRwsWS&HM)K->`ex*_ioTznu1E z?HiG;YaW>2XU6R?;eGg2lZD3C?fOS{J$0?($A8Ql|8?A|As%1-)bAB7rQq-VFa44J z$;xWSrUm6p+iM>1@t2)9HDDIgwQF`9YwG{uvZCEP4!=;p^r;X02lwmz(Zmj4kD5Mw zh{^g+z3N|9>{auJML(8#q00QYj60+1rbU#$bGh8Kj2_>9m6LX?z`Ra1audEA{ZYXJ zA-|9Mbz#{}-TxThso7UQd>$HlYi-eOg}io$`8hJ)DwjL+<@wilL|pNW9Oiw&-lue5 z(ZA5^tCq!C()%u&moogv$SEzW4!zmBXkycIRgHzBtO3Kk3%v2r8_lJpX1m=@73FRo zHO$@e@i2O~GcX#Ta96R#hE()h{PGp!_2?HHU%l1W+Nks%Q*XuY7bFfNrlYBSz|##) zLsNZaN*={()o)-j1=Oz<7HDcXywS+eIt`l+Z&;^c{RV+`0vj~0UuOhuVR&f$`i&Zf zhdt#1J5Lz#OD~TzksrL+q=~)Oo&`*Flm2cvoX>j zwC?MBHk^|_>CMf~b7i`2eqqkos>gR!&iJ|g*~$m^jmfw8t&QIVq)pnCTfDr@tLfZS zQ}bf}mkOU;JL=GcIrl7UV^&5sdGp-`XSx_Z-}T`uH&z{p4c7{9?^fmPPiaHE4Dr<) zj%?m^!G~*WE|1@OC11004_eM{-DOSp<$bGo|MJmS-q$BLIk9PI<2$i!+h-qs-B#$c zMn6=2eOT_O8`Y;~E-}d$mW=wgYom}ceraDU^I9-;)6TaiSFBMr{|jgDM4m}(>{Vm; zmDS@{&egttZ_xGAa%A?l!u|Vvduzku+gnP!dD8QESa7JJXaCOS?qp9Z8gI|ah#NiZ z(6+Y=jb2dg_XRD>j}7?Zdg1ir3){VZJzz647g-MYF8MTHrK|mHrOxg>Qo_~b+K4k_ zOBgDhSkmD2X5Vl6__KAd)ZQxkEEL0T&Hj9r&2`ohe0SKi`R!jR8Cb2)pAyr&NVzkh^u$Ap$Ira%JD^H#YUh2w?n&R< zTE5t^*V%&ORuzBkdi>?PRWFroE=TpQTO{Vi%(l6$RxJ*=7khZ$FU^8~s@Y&}(1=wd z9V1`(_{T8^_KyqBIrhfnlE-VGnzC{0Z$t8Z-l4;e8jD;aVEoXjC;H(oBR#!n18%t6 z0PoO}uQHt6+C$|LUrX-@H|OgeYCoNctzBwCP39CpYFF|1dj*rPp%1 z^~#Ukdho=FBr7r9(cz=RNb&i$nKt#+iRRH$Bb0A9H8C|bH3+ERsDY^|zMYXC>SF_w z`uN|cp#PoN+_G)lM?e4Ad38<8*t(@tj$C$r`Bv{ry*@m3u~d)BMXrAz`+c_$r<#0U z_}%MV-?b&WtSQ@e_3jOWO;s;wW3S9U;#%xgB(t#GaC7mu6~Adv`SrJNWsE9UJ7;#9 zwfxnz9`9`Xyi%X|W%oNI=G#^vPYX>e>>UijQoxWT4RG8T&V8*wb zer~?t&26Cud-*~i~eNK-F$W))=@Qzui0t?jn9S=8$J zW$`1Hm?1JC9WK@5?d4;=&1*l|)^zizI$!oKe0BKXRwXyQ z;oIu6SDE@*-v$It4`@-#T;Sx@NiA}tyo>!D=N-EIX3{4w{@&w_xnDM_HT0chzaM_B zK-<}8`eNfiidyt-?|xU_p0sA%uBP42 z-iXw9Lt9f4|f1eyjD{p^VPo z);{Z~Kd)QWnw={T8+f(fjdw4-^>%!-iAUyFo9g+(_33`cHbs73t?$PljcKuX+w{== z6Sft5_t*!WZWf*R$CCQv_CENz_sOM|z79X~cKO$fjxe;Sv*(o+pQQTzVz_j!?U=c9-_~{0%KWhU^(zfR--NA$mR32o^~S<@zw^IW==t@=>s^vF z#mI?^3%qu6^vPc*T#a3SDxgMg;V%abc62Yh&2hh8bgQ~AmmK?bv3LG3MS9ILMS2W> z*c23AnW#4f#wVKs6$Q+<{+Gz?`X&>MBAHR+dD@G|0Rhk1H3il;HEQZ^G#cw41ITgE zX#95vERlx4CMpanQDGoa0q1t!yl?g?SNB85gbyNpx;H#{>*E1_TiTYbIrg`Ky*~KF zGq8;8a&Yb!1uI-^GWJAKM}eDxac_CrPBuL!iU+hkv$#;ih}Y+=38_48Pjr{fzr8v% z@#jr__IlU;V$Ton*V;WR|DL3Euf&Ix@%Sx#`jz^@Rg2b3+nKLd!oKzghB%JbHBQ_4 z>g{jF-)=T|Tgi-$2a^Lw?3ys5(ad+Zh83xEruCcmoR_=`of{mnqf3pnLPxh2n{jka ziyPU_S_6G5cJEhx`z&*E(Pjs_40T+))^62;A7<~Jy{PODEk9a111%raKeNx+;-kHLRtL^We0yH)J3acX@@rJ(i>4Ds%*Xp#&iHk08GPK{zg1=9&F^Oos&}rEbJCC^y*tj>cTY<>yvq^oBS z?8{x#nr;L0|Wv=dBOtCwc|LhvH zWlzpUTlnSA*Uz7Q?fkW_X7OVbl>}#Xu{kmlM%wc=$ElldadGN6r)vKpp8~;W1 z6}4BiZqoDfl&JQLkLU09<=GwW>P=mnIpN++-vPCY4GCGhv1QK&3oqELFJ6l7k+IHp zxZ~Dw8xoVxTbDj+JFn4p{`QRK?{VtpnQ=+!N9|>CgDhCVn~d%>(wgnGHm0ZA)xR{# zDsA{M=VPwZ%n-1$-KWJpdZb*9{VL%5N{bts2D%$Jl|b#ewfokti@H32;|6_cfM|aZ zcaP$pVWtMd>ettsxuFl6HJZ6#Q!i7Gho5QY+CE=1_czC%YMQ@AoxHD{zuq)|jcGo4 z<2+GO*Jzr*z|`vD&lyC?27mW+D$E)&F>DIitkHCRM}$q9LOB)I_XH*2AR2PZrhErV{?k=smzUBYqQ1w7;)U8E3HYE3rC{y>0W9lgX zO$FAykP^1~t+wl4ON=PE^7E0y>eg;~?+f$y;}<+Q+UkmTeDhj5SR!|2E?5 z_AO@4s&u>9Ywxa{x?owxH&qQCYsM|{ITZ80N5M_kUcLWn-L+e5wyHUHK$ozJ`A1I} zxM5xDf{f2r-0oQGQcm;JM;hIjP-XWod#YVKeerhTJ#STCzoC2K76oqQTYSFa7xhbB zzWHUHQ-h-ScWLTz|I)hV$alUN5UTmE5+mTFQ4j)}OvUB&>~dkk{tdTYAp${ND4UX%&kf4Gp#5{OLqldGzNt zUlp!?{nE&KuJw1f4PNKa&Ts2@rK-KdC%)S_K%1ypC1`Ne$3awQ;HRu)$6-}NNJ;6VHZ6brul3CyBn^& zK8-(R10VOZY@L7Hg!9SkkI8QgDEKIuL%$2X7LR*j3Ir4;4e|JM2~zxz{!s>ymF~Eu zUCV`cO>ZZj%NIXcyg4VTVsb&#h$sG~U_d`p->o(0RewgGysy^xuRUVhs?MwYFPYu< z(H#rEPZE(%1Q{u`y1i||-!uyCFlBE)ZDsVyjip~|cw|eNicRe0YM-&5H`IJBeES~P ztct(fzT})(YWjj!XS#hpVR?%N`^(nVCf8_jY+|S8=juL)YM<+y)N|zS@xi4p`Ckwx z&b9rx_uzqdBD-$7fAn^@8AIp3Rchgd*4yGXwmY70ckus*K%}7rn_kdO zbNPQ;ApY!rwkK?Ih^f@$vo;14c=W+bV3Ch(&Lf}*onTD@OaV;;nl@-apV(h4vPkFI zfi0(veRIx+!!-*!b1rtMHn`Z6wn9Qg*~;`~ca~SUIHhoOtp>XNTzZ_it%0w~kzJcX7Y8VP9>YvbS2{*KYU~tCv~kNQa7F`>)*6 z$zJJfofm&!*WGxp{nz8h4vhTiquB*NnQA$-#>f6$`}kdzLs!d{T1MMuhq_l@UbA?e z4@$gQ{qu$|wZHetZs+C|TGseq`_E3^HKyx^4-Z#b(`o(OPF=3oafOxsB6@414vyV> zzx^U)L%Yyam!;alnKO2dJ|wNDUp`thbmY4~1ztVTyVcHh@tG0+zudgpBW}RRv}zSf z?rhz+#b>DjWwQu$g*xd2TiUahQ@+SZT z%9trr&2_>j59XVuZ`b{ed+ALt^<~W%7GWNz6(40DIac!@7dmwU_x7m$)XYCTSb~1w z$Dh&qa0*-Kyc z8#~fGK^v?uhwIB%_2mS8IaNPfbtOVS6XvPb-#@uzgMO`lUGlhHp2Ay(d-2t?poQkE z?oq3dYU~KdcK?gxc40IT?OtI zDp;s-k&{I(`}q0<@o1I$FAgZPsI0AG)ryviODb-zxVz&1iuZl*URC|87Aojp+qbHJu>XKc-fAzuyOl;%8c}&* zwUr9Bs@5{qt?xge?%=wE)wlIZx?g^G)r+I?s(0M9+_c8Dv6iV;RnvR^zV%9))~J0= z5BTN*-|=k#`)VcWks!tE$-deAu z-`!d!|JwR*Y^+zZnOW`G+!7#bnOaUY(3s%5Lf4cnU5s55Uey;Wge zotv3kjq%&nux*=s&CG3Tas>VVTa9Vr+u~B2d~Ncnz0?)9+0eFe+n3tDq>jYZ=|@ys zYE^C6wr%5f95q0;yV>5*K41I7?Mt<<&}Ku2r5$H=YTYTg^We^_JMZdZ2>Q0`)oy3I zUhRIOhofiPUNd_g>>U%lq|bo98{1d->x=(v-C^m&SI1fUvDo(HtK%$=?S8H1Hy*xr z<-OB?^W~Re*JkIJ>{RddIk5eFnH+eK)F?y3zrL z_7ys{?z^$;)y}KC=tMlrvSNjYYc)5LrK?~J? z4%)4*Xs~I>^}#0fUmce6>j%|;4ca|u_t1Pp^Qki*ns0!i!_poO{mOQ!twW;+n|d7_ zU>H_ey@r3FUL#&rukfPb`#bLnKN$YmUte%gjcQe6T3;|`=h|cmP!hZdN`ca#3@8iA z0mgqxMt{lKU=D}^Yr$slUT!K+zE*eDbHDt5%F#;d;}aNJD+}j_NXBbP#_`Bvti$*` z0*nNc*ftrM!4xo+@27$3UNL~ zCk%I9fdI+y`wa-0Y-3(V&8959dfQLLA-|8mxh@#3l+)PRF4 zb5IKo`3~Rh0gOJA2|StTd$yg)jgv{aad=%dCQ6MTRpW)#Xkj(}npeJ7&cw=DSoQK19R1RwrjXG9ij@5``Rl+Y(!fLFs z8fmP?8LLsoYK*ZO`=UnfsL{o0Y_S?y%(!CeKAXDF=G-!=?`+N|oAb%$e6l&8OwK2h z^U36VGAWr%xq|Jha&K`?nVeIm+@I@|2N=)eMG2_!*xvfM7&W3yje}96lGT`GsgJ`^ zqi`OcM?UsH#lDQ)1Zo_z8ilOJAgi&jYW(q6jJ`U{sH?M#>pRYoPYFyuD#)4G9 zdNwl_=oDjsPGK>tv6#(_B|4>#c(vu8GM>#%!GhKqb8_R1e}D%dm)g>R00v+LGIxvg zVC@OKKt7Nkc!L6w z$aPrcIxKP>7P(IPv9CX<1S*3npem>iYJi%c7N`yCfV!X_Fo6Kj05k-RKw}UHnu2Da zId}=Q04+f)&>FM>Z9zM(u|4Y!pd;u6I)fn46?6mLK@ZRq^a8y>Fz5sNg8twYFc1s^ zgTWBWVkj5}LO>`8r(8yXSHWm728;#cz<4kLOaznIcQP;op5212C1Pud*jggCmIzDZ zU}+pIjf17@q=ofsU=Hu+vYrR#gGjIdECf+}w}|!YU@=$%-T=!v-b&VQf;GHf%YN&4 zzaDG=Z-I?$-^}*6c^?h7fNfwq*a6-JvEY610oVmT1iQgrun*Y5$KVt2DL4dbnOJTn zR-5?*tFy7ZOe`-G%ge;_GO@f&tSJ*~%EX#7v8GIFK9icyq~WBzt2mk( z=dVWj@8P`~;jhN`GrFI$IYZgpVn(<8l+P{7=N9cs6pYTMoHAi_rtbax*v}tS0+m4( z(13j#f<~Y*XvZ;nun|egieTff^yLW;Rgs8mRGbFY&#a(Ll{-pvE1ml2s+D<}pyS7^pc6 zn8AQjO`%j%DA5#3RQbmgN^>2hc~o!b{P^q-DuK$N3TOZtf<~Y*=mB~Ho)t|=rcjb8 zlw=Ae$^5Gz9E<|50`(*WHP7Q%Fb<3d6Tn0;iQk+I%wP)mb2}QzK8wL}+B?;jzQudh zp6;epys^g1SmR~A9eTPAx-7TSx+#lHpyi5r)E+5?qvl{xqqZNnK?kwGQ%|))*}2PT ze^Mx`?`VHgXn#^@e^j}BNBfgP+w(PTPYP{M3T;mcZI3F??`V5enSMvx<1W|Yx#_es z%V=ko(atQRomoaZvy66T8STt6+L>jtJg5Nt_&paJ_g1dTvr5XiQ6oM(I19Y9CW33LWQpeyJGx`Q6<-xKr#y+JVO1Nwsg;1%{6 z2nK<{;CbtJCf6SUW`WsUqlN!{4b0*FT-Nj0KA&|Yzp;>Y6x$cEejO}k+Y;7qfVFI2 z$9g?@i|w2F{5J2S!4|L$YzI5QyC4?44?Y09z=vQr|Mw9Vv5)t5@G2 zk8GE5$xqp85xgck36H20l^U7-&`#BS9%?p^hqkKbRZt`9)p&X}gNK^GLviAvhi2{$ zX6{h)b|{^$=ImI>T6yeuID>S3guI%uL(RaTX6sOMb+~n!6+h#^&p7Zgr#K4pb8u`m zH;0;;L(R*fX5~uyFbEz7!9xo?w7^3PJhZ?=3p}*ILkm2#z(Wf>w7^4)tPdLSKMg@6 z&=>@=ttscw3^WHX0d7P<^F^WgqR@O%Xuc>kUlg3Rz*!5NwZK^moVCDN3!JsUSqq%C zz*!5N4T7^la5f0e2Eo}NI2#0KgWzlsoVCDN3!JsUSqqwPG@5TTnr}3kZ#0^3G(3*N zPevckupQ5DVVpf8S^Q0oVmT1iRU0@63x2~Q z5AgmI)}Mldyg$VHFu#42^;h5|{~OQx8}L1?_!&N*%MByq49AaH@FN59BNqIK1wUfJ zk67>{7W{|>KVrd;Snwkj{D=iVV!@AC@FN!dhy_1l!H-z*BNnoSkNK_?nVa7a6&Y$w z`#O*3L~J_GZSb5~t?(W0IBYXK-VA?_!`ovVLA8Y{9^0&Q)y6t6?t`PTaMS@u6X2)= zjym9|1CA!ZQ3o7NgQLgbr~{5V;HU$RI^bvm9Cg6a1UTw|qfR*LfTJ!rs`R4^j=JDz z8XS#Gy#q#z|jOangB-=;HU$RI^d`Sjym9| z1CBc2r~{5V;HU$RI^d`SekQ=r1o)W%KNH}m1AeB#&oua%20zo_XBzxWgP&>eGYx*G z!Ot}Kc?^C!;HLwAI^d@RemdZ%1AaQ-rvrXE;AaB-On{#W@G}8^Ccw`G_?ZAd6X2%< zemdZ%1AaQ-rxSiU;inURI^m}iemdZ%1AaQ-rvrXE;HLwAI^d@RemdZ%1Ae;Trwe|% z;HL|Iy5Oe^e!AeN3x1}-&oua%20vrrrvrYf3`#8gR9TcX`00S33Gg!wemdZ1Ec|r9 zPY2vgfSV4u>429mIO&3mX>id67h~a~11>t?Vj5gbfQv487z+;_@X!Gd9dOVA2OV(F z0rwnm&jIfo@Xi769PrKo?-Jmf3%)tvnggym;F$xSIpCNBemUTm18zCsmIE$1;E@9! zIpC249y#EV10Ffxkpmt%;E@9!IpC249y#EV10Ffxkpmt%;E_Z7<}piXnbeFM;{+KEJ&(ln?!4xME%Nf|>ge^|k zqM~EP78h*EhAlSO;)E?u*y4gMXJAVCv0)T7AI_R!WJiNal#fSY;nRCCv0)T z7AI_R!j?06Y;nRCCv0)T7AI_R!WJiNal#fSY;nRCCv0)T7AI_R!WJiNal#fSY;nRC zCv0)T7AI_R!WJiNal#fSY;nRCCv0)T7N-`3Mzx_4@1ha!q7j*`3QebG2UBx{shPo4 zWUpogQ*(m3_3CkS-(6UuG^-8WXM-Jz5x1~IAUKAA-&;$A2Eje;&tw9;c>Nt*Y8Q zjwW%UM~+dO$EiIhwRfDFaOOqsXV3{Y^ucvBK#F!T&#z2P;W@<(=HJ_Q9%}mW@re-oz^O&hw%*bz3sw!tPl~#IAo}yNHlR1>^R7!R# zirPVI-3cFLrIZKZgRJ-El?ZO0d+w=U;+W4K4`#sHw2A9V-U!;rl1*U4qgH+KugdH zv<7WJThNYkZO^&`=m;ote2^6%WW@(r@j+I6kQE;^2x}UIH4Va=24PKuu%i~>`wR~D?Z4I59)*uvf_gx zXtAwW<{*5K6(3~92X(>+S@A(u6!j`Bb`XBZiXXC~s8?aVtFYew_@h;N4r+Do0{oK7 ztgON>b;2)M@k>_xlFGCU!m?MPs2AXyI^mnF_$Dj9$%=2X;+w4aCM&+lif^*wo2>XI zE56B!Z&DeWLHMRswB%NNlNH}&#Wz{;O;&u972jl)akTbdv5p7d00+1Leg`ga4O|B| zz)g@2Zh_k%1Ka_3K_<8dvcP@#R098W9RK9bl_{pFx%!^;QRpsR?>@|vJ@!$GNyLdKEZr_Ha;~M zpPGqJ&BN#JaZ-IKRwC{R`s{nH`A*F^7s7fc+w;zVnYQZdv+b#0XBIg9*Io44s4Rh+ zXD=A2IrePeVKzYZ=(x{K&2gsY%u_SwsmT8fYmZ0Y=AF5|mE11zfw}?}C#bpd)GTi* zUVnHsYKA=K$1|SgUJ354&`a52UtHdQ>c`8^e;suHx}IrJ{!PU)Di^GmrM_1|_Bf@_eWzxWQ}f=bS?|=GcN5u5 z&3ET6g}l1sJd1JMws~jMRzDjx%bokbujl>ub$uQ>HM5<%;(u|5L~kzg->Q7noObRb zWaJ$oBku@z`R|N}XRH;)Xa48(&>5e~5E&n3+*N#M)X(W*9SOZI1$iq6`R>AGt-`xk4Xam}U zFpfC_j08{j+~{@In>rQlW%Dj%mbnich6Lp|6~4>r_;74@Jj#fEyYp&o3g2OH|ahI+7} z9%4}sHq=8b>cNJ3*o;LvP!Kk(HYLxpo;MF?MKxGa4OUcx71dxxHP}!MHdKQR)nJpg zKy6S5)CKi`2?T%!?B5VH0*yf++nR!AfV&y6RvXr8!&+@vs|{b6 zp%`o^hRrC3%_xS=D2B}_hRra;0W%yh!-0CRp&o3g2OH|ahI+7}9&D%w8|uM^da$7$ z{>&hiZ?mBe6q7Ye zas}nIl6qRj`_;7GZ}Ocx*JeW*C^p(q2C=AuRj^X!*=(o+8>+yDk7|Q5u%QfWK{eRW(FrIA8_GfH zX_W`Cp&o4H+f=^ZM!rp{2%G$j^ZA_h7kvJT^-1=PXZ;QM9-V%M^;tCfIlfQgy#xHf z?_6O0J8*$(;5xVgZh~}h3)}`7;10M8GQmBN1@7a8exZF~W_jSgyJ3Pp&!w6(Q_YyE zX1G+dWx^`jvbr$q7Jk+TW<|rS=`brAW<|rSXqYt}W<|rSXqXiZv!Y>EG|Y;ISvtnUZH0{hzw0SHHQywq@mPMn@ebDAUXmcO5xewah2W{?yHupiB z`=HHz(B?kUkK_4+N}w{R0;=-=)j%fW?F6O%>ynh2Mbb118^g*Xb!^UXX7!4bzqtg>$WFU<6fsxTLG8#rk!$>a}84V+& zVdPvG84V+&VPrInjE0d_VPrInjE0f@VPrInjE0fZVPq_fJPadyz(^a6jE0eGU}Q9m zjE0fXFftlOM#IQh7#R&C+r!9c7}+02T6IRA;22-A?Ii1X*582dIo=tr>n!`6d4E=&6OqCRua4jN`ca#3@8iAf%2dNc=~SCKWEqG;z#G=N9W>4=gQgaKLOU6naIOTuQ9xdV!B7rtU0-;0#;dzmOnMlA)BoIm@5J*cIP9)GKFA^{l37Cll z%tQjEi3H3<0%p8*D3L&4A^|gzfSE|ZOe7FUBw!{IFcS#`5($`z1k6MNfwa2ew7TI$ z0;Tc7^N0k@L;?ed1k6MNW?JF_L;_|a0W*=n5F!CHkw63@;9UW&3X6J zeU19JpwInL{zFjyW|Y4_%HNFgH>3Q`D1S4`-;DA%qx{V%e>2M8jPf_5{LLtTGs@qL z@;9UW%_x5}%HOQ1cE^E5KHpfA+3Yt5L;*EkWHZ=GE5`kCl!&_f&q1t`sd-}W&%Vd` z6MpZXzW#su`v3R#^|z&+_~$Ns6=iII>;K#p{?A?E|8;kTH-&5e`|pV<3XitYMsFh~ z+(t~ejhJv7G2u31!fmoFCAKTH#cJ#3weQZY?+tJ2$w6Ps+Y)2Q{(ZqIitQ{R|N5|UHv37K<9UW^&$J)`c zc66*A9cxF&+R?Fg^r;}Wqb%4Q?l&xZE1 zqy6k?KRZe%1np->``OWbc66VeQba~i;a79`)f|2`hhNR%S9AE)9DX&2U(MlHbL8;cEPgqOUryqe zljwIyrQacyeuq^09a4!ll8H8wi8hjnHj+8B9L_9>$ zGfbkkvgASa{4PBg-Ujb-fqtgrjHmM^s=Gi$cY%JS4Em6gIq#dC_f5|GrmP6Fe1RX| z`-4iLGN=Ond@pD_j@5(hJwY$f8w7(spfBhThVUCh!7va4LP0pcISRZAMuRb6EEosI zg9%_Fn8f)^24*k?Oa;@xbT9)%a{R?$Iqz5G-XKcK;{FCN%Ht*x(FMxmCigmc5y@Pj zEWF7TstDnK%II{dc`#zsJ2y_$&rLU!Q8_RzA9n`{4eMp5f){c}Yde83x^h3|36J#0 zvo}xC=KhbR>_>mA_V5lJ`cyUUP1NX9)#y{zj^x@5f!rzh2loXDAT?jC!i811WFbxJ zW#qPui&(~0EaNnm;e};*VHqwg!-ZwIunZTLq3#lP$%dd2VD4@eE-b@^Ww@{m z7nb3|GF(`O3(IiHA^grzFbsr%P%u3AJ=pMg7J%osl&e_ERV?KymU0zKIgO>9#!^mW zDW|a%7nb6JF>0oO(^yL~*0M9tT25mvF0AFWZY^86#u)G(EZEI4yK7ddk; za^_y-%)Q8&dp#=Mb{uO6pNE2BAOwVh;UEl*03!iUV3*UtbT9+VWLpH71!jXeU>=A9 z%fNE>SpoM}@_r5P*RtNodNXVH6&Kd8cn_cVg8kqi=W>`Q{{?9KxZB09&+g#DHZI{Y z9**C*fNfkL7nFp@bK&t^csv&#&xOZx;qhE}JQp6%g~xN@@m#VZW$6os^FLu6YXlex zCh^^5UCYVLlxkpVX{;6(uu%GT=)Fe93?>8So|JnS2T3d`5tgU?%4k0cL^O{Pr9$kN1)MZxrtr zvtGu2YkB_`?>DpF&3X^dh%AH+d+9d(0{_vD_s_DyNqjdMn8B3X9PR{U3rlgW7sboqjnUYGTq>?GA=Q$t> ztOc9FR*q`Mw^_Ld?-uv{-Qo_5Z2kVriM)>hv%qX%0k45=fICw)8*B6ocPcW!2iE*C z_>})W!sj@Ap_BJl!F`a!z7KM5i3+*dB7k)#Fab;gQ`r^?7||_Ovp&W8G)T(5WhemeNYa;E5)}w0M{n z57XjdT0BgPhiUOJEgq)D!?bwpyAo`Rhi&n&EgrVT!?t+X77yFvVOu=jX&~NdAl_*p z-f1A3B_7QZk7kKSv&5rW;?XSeXqI?1OFWt-9?cSu7mI--F>oXXj;MKTCgQ~=;>9N7 z#U{eWc$gTE#~O&onuxcW2pi+^Ruf@kJl<*`&+}po6eXbUHxm6)R80%2ToORIEG|D^H~~ldfxr+{;Cd`|FZ}l#V0pLw>YJbRonj&pZ5Z{I(Vc3s1v1;W3b8?>L!W0 zNy0j_sGB6}CW*RPjb&zGnK4*q43-&#WyWBcF<52{mKlR(#$cH-SY`~Cxg5(}PTeI@ zcS+P;5_OkE-6c_XNz`2ub(cilC1Jf;)LjyFmqgtqQFlqyT@rPdMBOD(cS+RUYU*w^ zb+?+jTa5*0(f()A{%6sG#$drQSa23~p)^tq^^rt!a3M=0Cph)wv7e;1o5 zwf(f7x=49m%+pgY%JU-Ssm8xvqzu(~*Nc>!i#tGzpei0;snVP3N|oMJS9FMXZQrEw|(xN3uJWpWl?~vKiY@iAeAH(ER~f)n25^-Da7Nubt~AaCeA(04234nzil$GonOGRPgCdQRP=c9Gduf6E()lW0~iw^E{S$9?LwBWuC_}&tsYAvCQ*W=6UY9c;0yt zE>Q;J4IV{9t%8AJ)YwJ2&K5r=jn#?wCLY) z&x4w4;5-(1o_ihAXx-0aedpc!A@@728CU)u^?Ql>y_DBNyE&;^XqAsC21*cxmjo|@ zQlK;_1ImJOpggDm{5Xa`s01p5Dxd*q2pWOLz}-6kJr|#BnWysm)4+5v1I*@k<^Ywy zjAE_$rdsCZe76RyWt*F8UR>#W*uf>$BJ)IW53M43%!+w!Xv;j$)RGcdND1I?vHyqJ z-4eMAx#ERf@j|Y6Ay>SRD_+PIFXW0Ba>Wa|;)T!jKI(3~9vtuQGP|?+-#Ng26$|yN zSV4|#H9TC)c69}tc)ywVTXQ#{$gJD@KF5bhfh?6uQ&NvZHs$Wdx7Zc%DBHT)Z zTZwQh5pE^Itweq)kzYxK<#BloPvjTUh$fff!Bx!kG#@U)hr5)CiYVfVCKL}og9q_g z!}IBiru=_1zzk#Db97fSmXv#r?sCu3UG6!$%RNVTx##F^UbGR97K=xV#iNHm!`?r` z-ao_MKf~VRvG;iFJ)YWss3qdD_q$lYMIwx&SU@}~_A}k)RXp`3->u=Z(ij_fzmfM! zXKbbH-eKPuxbPmHcn|MwtoL$#2l)Ol<$RLQN#F;vCN;G$D4FBBhuBG3=TO!vwo1*5 zt9D`~JF$|TSjkSTWG7a#6D!$?mF&byc48$vshb??CWpGop>A@hn;hyUhq}q3ZgRN7 zC*!A`SjJ8mokpFhzKWgHTMqS>!_}oycd1;}PAnvc`b*`ic5?Qqv?J7`o>5gfM%9a= zM}9Ekc`~R^<`VzhYx30DaXdXc%Gs&xs5`n-5roPKb9QJBy+?)bRFBFgKC3J#c|^G9 z&ZH-3?o4`uZdqZ}z{8qXwMdOHkN3kE{tvG5VW}79_wzxTNXpM zEKd9XE?X9pmn}=iud9A5FG?{P+fDwPKC5I(Hkp!5reu>T*<^h8)AN_8+-489_XNE_ zZx9UnfWDwVc>Z38f7d^iOid+YS*m|39_xCte<~U4de}de41+VMy)->%aFUV4o>*2I zZR+C;hRQ&wxp=E+9@MM1idc!NxE~%{RJk%Mt$^x>Tn@LNzyC3e{YQY2;OV}_<#5&A zuc-PI-I<)_d7dVjb5+@#m3f}VrTK9-ft-!X+y!zrDr5Jg-QV~R+WigA?gnRf;|aUJ zp?ebLJ=}JGgR@dTFH1|&m`fGA{{Xwcs8yx3YSJ>)XWbB>-x=fJVvGZsC(w$A5Oic) zC%`ODS`Y{ZeL;V+!2@#7XpG|21~RUn5uD6wlBSIU%*doo1e3sIz|0}q6c7Ps0q!j% z3+*5a?a=0MjJaSQm=BmqNn<7@JY9;mQY)&VR<$kkMKD7WnV}eMH=k84Ga`}*>jN?q zACRrKX$LvqBYYp1yG2uXF`Nd>PN*fa-xi)pS7OcFsiJmnny8cesbIz|!R(TP*(F5)@9WbC*^%!kC(#vj2fcD_ zqBraDY-c7aF_AUpA(&fM%wRo}<53=B7Hi5wSXfgYg7Oe^b6sLy?r|}nbtK1Gq!krb z{(mvwzrnVpe7B4>Gp>jgtXHyL#dIHctlM|jWdP~sTp8^`gF zv)`AzXEsOiE$>h9-D&VW-<<*HK@y)GtS@q`yC4hXaP7JDwR&jz4f%6Z425zXWcD3~ z(tt4wWcO`k_OBb5A=OZwZM8r{Jxla~ajBl!|L1Nwb+?>qdE)X~9v93?hgIn?#sy>2 zVN5!VNry4%FeV+wq{EnW7?TcT(sgERW3AZWo+}~_7R2RQe;n5A!jfHBa5@&8j)kUU znJz3d9m`C|8q=}FbgU_znopDG0B{V%}_c4z3k35IyCNs)5^oV%6NF@2i6ABdJO@?`OF*x8u!GJ*>Y&i zwWoauP5{QrYro*FnZHp;P@VVfSr5l+E@Zt3?;6XRK3>5XeUZrbDSUT@_b&Q2dG>&z zJpG#0xDV=I-6Jm~v(R!6(tVyPD6~V2G&E=n>52E?c{tv@3|bN9$T4c=d3o}bo@!iG z4PFJb+FCv4%&E_lDSYTN>8O>{I%{2se7o}U(|YjoCo9)StE9cms~ThN)oA-yv?2WW zaOTme%Omw(B_lbJR|B5$^_tdDTcW)|hISRN=Crw6=zZFzZRZz0&~~E*J|f50Ui(x# z#2jZwd3D#m(2nyvCwTSJPV(x_T!Ckq+dP@)5e?Q-c@5Kk(_GBkb5G0CMhJs2XyHN% zsf`j|!b^Kq6cUBB(ZWagXk$bfQAQgp%8ByYIN>M!vXp=>t z2-K#E_M*KuO$-zRwdrE87_7|@L&Z>SrU(%sT7(!bhHJCLcri(vEvASm+FUV1%+ThE z2oa&p7qi7|EmFKDUegwcxgt_qD0pdBVHJzD#o`UIT6;rm5nHr3#dfhnTO(pcthPbC zFW%SQ55?9n!fePW*$E$qUsZ4n2=5pAnDE{?cNkdZP<43<{8 zScJ$o(hLt>FUB2S9NGG4}uwK74T z7VBi9JS#TH^U@(U$qVv=h?c*|U&I!9RbCZaiouIViZwPg=1#QDG9I5{fQ261^Yc&Xx~o4gK^g&&FDbPVz(he1pdN4&74&-II)>y3DJ- zu6`P5X}lVufqtWJ;&)z+wY$8U=z1s+|B+4K{~x@X>)PlgT^qF!p2AaWDe{T@S}RdN z6wun}I;pKFB8q73#0%mDt-UBFifJ802~k4pC|(pVYP8OxwANXa6=k(9qC6@pNK_Q) zL0wCA)3sE0QAJeIdgzL(r>G%nXuWhr)mv9o!J?z+sPz$@X=VG0AQ7a!EV_wqT0hZ4 z^w9c?UZR&aKm?0m?G@2i^wkE6exjc?NDL4Iw86R>8=|W*v>0k^n6Ab`bTt+#Mu-vG za4|}Z(!#`OF&Zs6R*cm~qSD5r2q%h(D8k8NGKx?sw$Wmmn1&)$x^1kk+s5g-ZM?4A zCZOBqq6_DX`RGEW-X@Dhu28I6ciJJ}eCvFbZk6Hwc&zzIY4_TIscqJ5i zeXPU4Gi+X>CGMo}SB%U@WAT)e250Th!sj|rHB>$ z$%59z@|tpH^~mD2CpHKQt3M@79MzY{^<})iJgqO!j~F+4l=w+sUe=daMogGEUR>9g z8T#_RS{gKc=^1Vg4KozfmnHS3ufD9QFB^`VFm1e{rM_&hFN5@DFMZi>+{CbPhQa!B zI6ImRujC63-)c%L{Wt_e| zsV`6I%d=BL$4xa{(3i>j@>hN7(wDcUjGho~xTh~4sHIWrOK*MYGi7|(Bx6Z^Sx#U2 z>&xo;vhI{ArT}9@ec4Q3w$_&&^<_7f^^L((rcIh+9H1|U>dO)Oa*V#5q%PYyU0+)C zWu(5e>dWO=+tW`^RTd|7yL-4Sr*C<3$rD`J=h;gmcIS!3XxP#7y%X5BI^Mrp3jJFa z>{H-xm)`of&t4j^<3fD@=e2-W>d60U`GWqfkG?GOmt|3X%fDKd(7!FNFN^(USw`Pd zT3?p>%d)J#<;A~Us;Bn~{TaT0URF>UcG{JG+E6W=S@EW8bF@X;a&4U!t-VXs{V{R& z3GI}2Uc03Is$Hk;ctGn=SdgmI$|YjCSS{9xjUt*H$GhSKv0LmFAB%(HsE89ML_FDxL~&kR zAX{-+{3@=Jqqs$Gf{cX0VDKalQJDNgNkbV!1%tn#DtU&whWbR3%?vFKZ4Dg_L53cN zU_(E{K*LbOa6`CZjA4SoY?yACWtd}#G%PYKF)TN%HmoyjG(;P=8{Rd1VAyTgYxvl3 z&~VfcXENgfD=-U@xwBtnvKaD6aa99(Hw%ioP;a_e83B!C@2PsgHoUzs06Bm?w~hd zM47AzUIwKB_AL8@0bn|K5!3=DKy6SLGzHDUOQ0oyJF*uD2I1gUFa~r1LqPSsKpB{Z4dhCAg^k8%(EydrN*1+YCKR^ z<4tun-b`2H&2=^YlCH*E=xV&BuEtyIYP^lE#@p&@yq&Jb+v{q)gRaIq>1w>QuEx9Q zYCK3+<6U(%-c48I-E}qILs#QHbv52g*WtZ&9UiRf@IJZ@@2l(ZmvtT9PuJo7bsauH z*Ws_|I((q6!w2a)e6X&=hv+(dsIJ3@={h__*WsbM4j-=T@GxD6j}RebMMvs7JY3h| zsBm=ntGW&!t?TeHx(*+!>+o^94j-@U@CmvOpQ!8bNxBZ7tm|;IuEVG3I((|G!>8#w ze7df~XXrY7rmn*ybR9lR*Wt5;(%}|ehrg!l@Hxiq#_gKQdBacg%F1&WrPWePfrf?E zpgi9j`1TMFvG?$Rv3wF}Y^8JzC~a?FMF+knZ|p@JI~zbmcG{= z_EY<0aZCg8fS0by)b$Da0;14T>v$DH54=nJcbHcZ?G7&=u~w|*IouYbMJvj=r%@)) zQy%WpRV6MBP5F;#-U(tA_1gyRZT+)>h#{Cys#Jb{X1SKpLX?cYnc|9rar=hyAun~b(mD?k>zE&9@ceR;}XWtzMq@5)Shk1d|Gh1)T> z55WRCWW_yvt{U0kO{S2=!Z@Io(m=vjPEJ&W&UsAj09Bc*>YyJk2+c7$Nd$^NrcY z9OECx2gY1U5>pzudMQ1mr}UEf$m)B`0C+i<9d&%CizYLdS&S+(v1}v*WfR#}wwBFg8`(~_mz`ucX_9?qPdQkI$l-FL94AM~@p7`9Cd*4-*-uW9 zlcZVBkfCxUZKcZAw5PXA(?)CaDYvckWi`-jyc*Gm^(m40IbKb;BPNAd+R3Y__6x6O z+7({SwX3{dqVJ05V`!PYTB0=X6Yb~lYOOuca>>dVg^_#=E{A-K>d)$cHuEMQQxFZ_ z36)lue2nVb>VjS?NNHdOQxeaOeWEMC?^M1Rp=3l*=3SIEZ<5`)Oc3=u=f#|#t0XeB~LDEXK$ z5k@{{q!>vn!Hay%7%_%?%s4TQe9QzffgZX^^skLaSDNXkn<}P~kC`r}laHAxW|EJY zC1#P2u?P$Km^oq&`IvcP9{HF^dfcXqC=o@U-Rt6Y`s^0d?-n7Jily2tbm?;X>{g1E zngxZrT6+zpzeJm3T#DMC>*3?!qs^mUgEW8iv{KVbH$PU|JXKNG*O7lx*h*hNp|0~3 z`4WyKQO*ru=~3}H{QpAypn0QWo2mT19zFcOMhJfwedy7HA)kRflA(#A3Ar4-HNl4$ zC(~1sTu&)-O=ZXnF$!L_19Um98) z+89sptB*X#|0q99B&hpgJTBK@aQj=`TPn3s0nhnt53Rg&LESHFx?dK$UpDA|*{J(v zsrzLQ-7kCUe%VX+%lUM_oL~3L-nvI7lE5#h42vf%b4h-+GFdm1G4cNl*oN_B@L|3T zru~^O0`2r<*bgLqfU~Zk_Ui#432YYwp(l_9j2i;&6JR0*mSiBH0mMuxIeF<&wpcNQ hZ3pCwITq#S=_oi?7Uk$DxEG~n>nQjnmgHd<1pxfQjlTc@ diff --git a/Software/TouchGFX/assets/images/__generated/alternate_theme_images_widgets_button_regular_height_50_large_round_action.png b/Software/TouchGFX/assets/images/__generated/alternate_theme_images_widgets_button_regular_height_50_large_round_action.png deleted file mode 100644 index c6788a233de3d94d1f45f0509cf6800a2d88af51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1898 zcmV-w2bK7VP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA2LDM!K~#8N?cK|6 z6IU1q@b8?l69|`>o2u@-?xL~Pvgj`CTGUE;gMvhmSV5j3@C1Zy)r#;2QM+h&F)J2O z#XLY;S5>(vAvhQ3GBf9V{l1wY!~`4X;^LA1Kj|>z@nD=p`sdG?iwzwSel$_0AsUy} zF*ZDIm`Y4sB3Y(;bfa&B)73q?J@-Dn?*Hz7`~7$F;(cG&LBB`+miM2*Vc!3{e|J!S zM*Yz3YuNACchK)!|G$sM*ajJH5ObZ_)+wTg=Bv3z_Vl6XyFV~qm?(Kqw=D7Z%)U(Q zWUCDJGO{HA07%+e8G)?Gc(X3yZiwe7wD%4Z>IVvPempTw0Z+4c$)t;{|D@>jm({c1p2;$TpDMlCPo!bJDFu8>hAdeF zTwC~?CE7RuK$|4YCAgCy*HG6GKQ1L*hLKR0U}sa;rx+%0ehPlm_dn6(5S``Xk zNfUo9qa_=)i6g`T0QyHVRY@0n(EByQAD;#g!Pk$503+P!XXyE_=ABpsB zJ4940$v8`Fk4*&^f1SymOtb|#FMM6*Fq)STFDJhN(8K`%27rXQ&Y2g_=x7>us=E6; z^Y*Egh^NV|m(v5A+Qbp!001AKWU9on&OW-L4-G#WFSB1yr&aVuSO5Sp;EdGpVWMH3UO8Qs zM()Ow0LKAN0Dzp(%lP%cr(XHFJ#LA^vGkteIAShF#lW1UUdePOWW7 zkZ(s^3*)vA3IYIt90;Ri)U79a`g$D)I{^UlW_3gUUeWV5R%_2*IdZsv768D&3L~bMueEgZZ1u*AhHguO zTrty~$XVF|Ne%!os5GM^XNV(vC)@Nk$g7htYD8vkX~ol`3;+NaEQ?J~+3DgtZCvdH zx#GZ1kulBZuRLvTW4;^!U{Gi#KVO!TZES<1V5g0%wji%webLY<7Cn#U&*u(d4gfF! zG>iX`OxA2RM7MXhan%;&syeweV=T?+K~ID^0KmufCd7SG#?8#wwZ#Y7Q#(4|WTpP& zg#}_?(e+QyS-LQ~C-VUSppSG;Jef{O*m`Ahv6?+-(=nYnh%S*abzRpv^M4i{g)!PW z06@Pv&-Cxo?hrS1E=VSK(Dk;53-?PU;|lY{oHX-df#{Pnmd>6+I|l&hhn1G6XHuS{ zINOkfczmgPwb}8O<2~KK_UTXO@3QAx*+T?60KgH``(5cd;;pT>GarV`%-H18RQ9l= zo`PI0{BZ7yu{=#|%GstQ(9e%r8a-iXsL=CE0RVu|>FVWGrlnP%9L(IMY1rN#yS|uQ zg8w1=O5cV1rLu8>ggITwHto<*KY85Hu^~gpWegPw;SK;Gbk1AP1awZCw>0jpkfnhW zMejTA$YzdRJXO8XY&*rUn*$|nw?GE~fCH&nHn%^&zVtAA+_OVfW({;3+na1?V)v8_ z008vBP{T0K`hvgL?O^7I9NFB5hB`&TxHUY+WGeE?WohgPcK`sQretE1n41#1H9fVv kNUrwTwdUX1^M^q6A6^$L#b+{tL;wH)07*qoM6N<$f^Q9mCIA2c diff --git a/Software/TouchGFX/assets/images/__generated/alternate_theme_images_widgets_button_regular_height_50_large_round_pressed.png b/Software/TouchGFX/assets/images/__generated/alternate_theme_images_widgets_button_regular_height_50_large_round_pressed.png deleted file mode 100644 index 420f38de33a274e60c05e3f220d1ef2079b96f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2267 zcmV<12qgE3P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA2yjV6K~#8N?cGmo z99JC&@ZY?7vuisE*@F0UqKj0Oh>FHsz`&tv35iNvmJ8~QT##}>aSj!c5OQ-uoZ{TL z;Tz@V140dz$OZ@vDuwL<2qiRIA#QEF|95BRy*Iqyn;Cm|?R9LN#JlACNmlE5@9pz! z;(YVd+xg?sBl61HdYQ;nl7!A1Z7N!u5_wdjBq?P>005p!o@b*rp@t_!!J z@7C)ZR~y-oV>wokSJ&1{1*6uqO1>MbxE#ldVx=gI6e+Fjjwg21=(phQ{fzHMVt;wA zZFGD-W^zu;4b9spzehTDcg}Pxm5-lnXOn%SYKhxIewp5`#) z#^+D>kK0Da=VSKSA2&2_pZp%_*xfnPtyDgKvYk!#jk4`W{`YU6?Q5hIR15+N_#u7! z2pTf*w>(c=KTfEp`*1|Bto^WJ^Ljms;>vIsQhzw4$cDH!npA8bT9euLA09lF_-BEC z@E?WAxgO=*M|GU9@^?VBBg9_8{@(|$$t<40AOFd)WV@IY?w=5 zQn8Q*`l-c5`*mS6Fu~Q=j}Yj7_WV%a`TmdAhQq)Y+lLc7zW zK^EW$ZvcSf<1FPR=`_$?u$MeR)fd0MTKfCjzrT?Uo9e)&75*^O3x_w`o&IvG+p`t; z&@H1Nz5xIp4-RE1B`q!#>FnuKbmq)bJt>B(TN@kAbi`g$gPcR027{Z;cGrb?7)EXh z1pojZKmIVZSSZlhGpB5zpRRjL(bO;(+4CNW4e{-EXSvzw(hwmI0PsXcuM;I{m?qxe`Z+0|1;XPGDmaSD{Pkubf}0wC=uh`%c=M8VmC3#UGRh!|-R@ z?M{i0OhJeP0GvE`sA6I$v4JiFx$?!8mws{gPq%m0%g5Hp<5;bCdVLOacYGrN0L%ui z$T^$4y?#l@>RQ(9>{R4jjraP4%~q%DPPYdDfZ3AR0-IM#Y*l{lg)gt(dhgG--PxZz z75Oj<*Sq~bLL2~KM)6`dU!1Vl>)Q%FT2EWEE z!ziXW))#o&<7JhPwp;ffwA$`EDgXd5`}le+A3uAB&YV6~7Qn}HF20V0|3C>&@l;*>cSMLW}+~?FgXAK%mufs5)Fw0y5;iw3om`^z7`8* z@}(O9006Vi#6t>_xbe5&{_1n?dgRjcHdWYnod5tZ`*b)UU&t-~+6B2Fd0mhpjkR(B zfSIRkh)dy-PvSanyCAREwweWB*3_U!365X^0GL@uYg>)?N%;Pz&F=BL=m)-c)wf%5 zznirH0KlwKgD&~D8Ykae&6;+Dyk7fdtq=rTCK^yYztW~16z&Xt-ax@ zakdlWEb-0dpdg#^phHHftQ7zNPMT4%4e~C@KsG3#oobx<*|YOu<6iUA&wf5MN%C?u z?2{i9$>URo007{`aEK4v+a#q=g`!-$d+Uu`S(h^wRMUPedQb1Vr|y6=G($02y_5|M@+|&t-!lvROBv*#g(}4%Z>N{`0LBr zkg4{3*twqv|9St$r#}1K2R8PXZN*>W8-DWX{CuuI<6y@Jq5uF#lNjyJ+X*|{?zDT} z_B=t-_nSfBU-{RaH^&Y$oaRs!dG6fG%jL-Eb#3$oUTPUVou9*81O*blBq0Mnebk2g zq5hu$0QkS=veFj7iAh`$%r{Kt3Y>#G$5puRs&KKTJ$botXZM7khdEM^=gzHE%0un1 z+nw7J=l}q4czJ+(zNq=ad+pv^Z;l-!ei;8#kmoqiqeNaZNm8}{)08>X8G;=EV1FFk zjMu=0@ERU@n`TK}Kj_2EhdEY|k8+_-LB(i&-iA7_rI+pgma}dEfTvi}OcJl@32NFP pulc^L8=-3V|L~g+vH{0H^j~62M_55ITfG1P002ovPDHLkV1lC5Vjlni diff --git a/Software/TouchGFX/assets/texts/texts.xsd b/Software/TouchGFX/assets/texts/texts.xsd deleted file mode 100644 index bc0e717..0000000 --- a/Software/TouchGFX/assets/texts/texts.xsd +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Software/TouchGFX/target/STM32TouchController.cpp b/Software/TouchGFX/target/STM32TouchController.cpp deleted file mode 100644 index 6c20cd6..0000000 --- a/Software/TouchGFX/target/STM32TouchController.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : STM32TouchController.cpp - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* USER CODE BEGIN STM32TouchController */ - -#include - -void STM32TouchController::init() -{ - /** - * Initialize touch controller and driver - * - */ -} - -bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y) -{ - /** - * By default sampleTouch returns false, - * return true if a touch has been detected, otherwise false. - * - * Coordinates are passed to the caller by reference by x and y. - * - * This function is called by the TouchGFX framework. - * By default sampleTouch is called every tick, this can be adjusted by HAL::setTouchSampleRate(int8_t); - * - */ - return false; -} - -/* USER CODE END STM32TouchController */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/STM32TouchController.hpp b/Software/TouchGFX/target/STM32TouchController.hpp deleted file mode 100644 index c4f6378..0000000 --- a/Software/TouchGFX/target/STM32TouchController.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : STM32TouchController.hpp - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* USER CODE BEGIN STM32TouchController */ - -#ifndef STM32TOUCHCONTROLLER_HPP -#define STM32TOUCHCONTROLLER_HPP - -#include - -/** - * @class STM32TouchController - * - * @brief This class specializes TouchController Interface. - * - * @sa touchgfx::TouchController - */ - -class STM32TouchController : public touchgfx::TouchController -{ -public: - - STM32TouchController() {} - - /** - * @fn virtual void STM32TouchController::init() = 0; - * - * @brief Initializes touch controller. - * - * Initializes touch controller. - */ - virtual void init(); - - /** - * @fn virtual bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y) = 0; - * - * @brief Checks whether the touch screen is being touched, and if so, what coordinates. - * - * Checks whether the touch screen is being touched, and if so, what coordinates. - * - * @param [out] x The x position of the touch - * @param [out] y The y position of the touch - * - * @return True if a touch has been detected, otherwise false. - */ - virtual bool sampleTouch(int32_t& x, int32_t& y); -}; - -#endif // STM32TOUCHCONTROLLER_HPP - -/* USER CODE END STM32TouchController */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/TouchGFXGPIO.cpp b/Software/TouchGFX/target/TouchGFXGPIO.cpp deleted file mode 100644 index 8dc3101..0000000 --- a/Software/TouchGFX/target/TouchGFXGPIO.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : TouchGFXGPIO.cpp - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -#include - -/** - * GPIO_ID Enum - * The signals represented by this enum are used by TouchGFX framework to signal internal events. - * - * VSYNC_FREQ, /// Pin is toggled at each VSYNC - * RENDER_TIME, /// Pin is high when frame rendering begins, low when finished - * FRAME_RATE, /// Pin is toggled when the frame buffers are swapped. - * MCU_ACTIVE /// Pin is high when framework is utilizing the MCU. - * - * Configure GPIO's with the same name as the GPIO_IDs above, as output, in CubeMX to export - * the signals for performance measuring. See support.touchgfx.com for further details. - * - */ - -/* USER CODE BEGIN TouchGFXGPIO.cpp */ -#include "main.h" - -using namespace touchgfx; - -/* - * Perform configuration of IO pins. - */ -void GPIO::init() -{ - -} - -/* - * Sets a pin high. - */ -void GPIO::set(GPIO_ID id) -{ - switch (id) - { - case GPIO::VSYNC_FREQ: -#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) - HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_SET); -#endif - break; - case GPIO::RENDER_TIME: -#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin) - HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, GPIO_PIN_SET); -#endif - break; - case GPIO::FRAME_RATE: -#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin) - HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, GPIO_PIN_SET); -#endif - break; - case GPIO::MCU_ACTIVE: -#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) - HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, GPIO_PIN_SET); -#endif - break; - } -} - -/* - * Sets a pin low. - */ -void GPIO::clear(GPIO_ID id) -{ - switch (id) - { - case GPIO::VSYNC_FREQ: -#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) - HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_RESET); -#endif - break; - case GPIO::RENDER_TIME: -#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin) - HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, GPIO_PIN_RESET); -#endif - break; - case GPIO::FRAME_RATE: -#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin) - HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, GPIO_PIN_RESET); -#endif - break; - case GPIO::MCU_ACTIVE: -#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) - HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, GPIO_PIN_RESET); -#endif - break; - } -} - -/* - * Toggles a pin. - */ -void GPIO::toggle(GPIO_ID id) -{ - switch (id) - { - case GPIO::VSYNC_FREQ: -#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) - HAL_GPIO_TogglePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin); -#endif - break; - case GPIO::RENDER_TIME: -#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin) - HAL_GPIO_TogglePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin); -#endif - break; - case GPIO::FRAME_RATE: -#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin) - HAL_GPIO_TogglePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin); -#endif - break; - case GPIO::MCU_ACTIVE: -#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) - HAL_GPIO_TogglePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin); -#endif - break; - } -} - -/* - * Gets the state of a pin. - */ -bool GPIO::get(GPIO_ID id) -{ - GPIO_PinState bitstatus = GPIO_PIN_RESET; - switch (id) - { - case GPIO::VSYNC_FREQ: -#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) - bitstatus = HAL_GPIO_ReadPin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin); -#endif - break; - case GPIO::RENDER_TIME: -#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin) - bitstatus = HAL_GPIO_ReadPin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin); -#endif - break; - case GPIO::FRAME_RATE: -#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin) - bitstatus = HAL_GPIO_ReadPin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin); -#endif - break; - case GPIO::MCU_ACTIVE: -#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) - bitstatus = HAL_GPIO_ReadPin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin); -#endif - break; - } - return (bitstatus == GPIO_PIN_SET); -} - -/* USER CODE END TouchGFXGPIO.cpp */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/TouchGFXHAL.cpp b/Software/TouchGFX/target/TouchGFXHAL.cpp deleted file mode 100644 index ccb0a83..0000000 --- a/Software/TouchGFX/target/TouchGFXHAL.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : TouchGFXHAL.cpp - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -#include - -/* USER CODE BEGIN TouchGFXHAL.cpp */ - -using namespace touchgfx; - -void TouchGFXHAL::initialize() -{ - // Calling parent implementation of initialize(). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - // Please note, HAL::initialize() must be called to initialize the framework. - - TouchGFXGeneratedHAL::initialize(); -} - -/** - * Gets the frame buffer address used by the TFT controller. - * - * @return The address of the frame buffer currently being displayed on the TFT. - */ -uint16_t* TouchGFXHAL::getTFTFrameBuffer() const -{ - // Calling parent implementation of getTFTFrameBuffer(). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - - return TouchGFXGeneratedHAL::getTFTFrameBuffer(); -} - -/** - * Sets the frame buffer address used by the TFT controller. - * - * @param [in] address New frame buffer address. - */ -void TouchGFXHAL::setTFTFrameBuffer(uint16_t* address) -{ - // Calling parent implementation of setTFTFrameBuffer(uint16_t* address). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - - TouchGFXGeneratedHAL::setTFTFrameBuffer(address); -} - -/** - * This function is called whenever the framework has performed a partial draw. - * - * @param rect The area of the screen that has been drawn, expressed in absolute coordinates. - * - * @see flushFrameBuffer(). - */ -void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect) -{ - // Calling parent implementation of flushFrameBuffer(const touchgfx::Rect& rect). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - // Please note, HAL::flushFrameBuffer(const touchgfx::Rect& rect) must - // be called to notify the touchgfx framework that flush has been performed. - // To calculate he start adress of rect, - // use advanceFrameBufferToRect(uint8_t* fbPtr, const touchgfx::Rect& rect) - // defined in TouchGFXGeneratedHAL.cpp - - TouchGFXGeneratedHAL::flushFrameBuffer(rect); -} - -bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes) -{ - return TouchGFXGeneratedHAL::blockCopy(dest, src, numBytes); -} - -/** - * Configures the interrupts relevant for TouchGFX. This primarily entails setting - * the interrupt priorities for the DMA and LCD interrupts. - */ -void TouchGFXHAL::configureInterrupts() -{ - // Calling parent implementation of configureInterrupts(). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - - TouchGFXGeneratedHAL::configureInterrupts(); -} - -/** - * Used for enabling interrupts set in configureInterrupts() - */ -void TouchGFXHAL::enableInterrupts() -{ - // Calling parent implementation of enableInterrupts(). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - - TouchGFXGeneratedHAL::enableInterrupts(); -} - -/** - * Used for disabling interrupts set in configureInterrupts() - */ -void TouchGFXHAL::disableInterrupts() -{ - // Calling parent implementation of disableInterrupts(). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - - TouchGFXGeneratedHAL::disableInterrupts(); -} - -/** - * Configure the LCD controller to fire interrupts at VSYNC. Called automatically - * once TouchGFX initialization has completed. - */ -void TouchGFXHAL::enableLCDControllerInterrupt() -{ - // Calling parent implementation of enableLCDControllerInterrupt(). - // - // To overwrite the generated implementation, omit call to parent function - // and implemented needed functionality here. - - TouchGFXGeneratedHAL::enableLCDControllerInterrupt(); -} - -bool TouchGFXHAL::beginFrame() -{ - return TouchGFXGeneratedHAL::beginFrame(); -} - -void TouchGFXHAL::endFrame() -{ - TouchGFXGeneratedHAL::endFrame(); -} - -/* USER CODE END TouchGFXHAL.cpp */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/TouchGFXHAL.hpp b/Software/TouchGFX/target/TouchGFXHAL.hpp deleted file mode 100644 index 2dbee97..0000000 --- a/Software/TouchGFX/target/TouchGFXHAL.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : TouchGFXHAL.hpp - ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.0. This file is only - * generated once! Delete this file from your project and re-generate code - * using STM32CubeMX or change this file manually to update it. - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -#ifndef TouchGFXHAL_HPP -#define TouchGFXHAL_HPP - -/* USER CODE BEGIN TouchGFXHAL.hpp */ - -#include - -/** - * @class TouchGFXHAL - * - * @brief HAL implementation for TouchGFX. - * - * @sa HAL - */ -class TouchGFXHAL : public TouchGFXGeneratedHAL -{ -public: - /** - * @fn TouchGFXHAL::TouchGFXHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : TouchGFXGeneratedHAL(dma, display, tc, width, height) - * - * @brief Constructor. - * - * Constructor. Initializes members. - * - * @param [in,out] dma Reference to DMA interface. - * @param [in,out] display Reference to LCD interface. - * @param [in,out] tc Reference to Touch Controller driver. - * @param width Width of the display. - * @param height Height of the display. - */ - TouchGFXHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : TouchGFXGeneratedHAL(dma, display, tc, width, height) - { - } - - virtual void initialize(); - - /** - * @fn virtual void TouchGFXHAL::disableInterrupts(); - * - * @brief Disables the DMA and LCD interrupts. - * - * Disables the DMA and LCD interrupts. - */ - virtual void disableInterrupts(); - - /** - * @fn virtual void TouchGFXHAL::enableInterrupts(); - * - * @brief Enables the DMA and LCD interrupts. - * - * Enables the DMA and LCD interrupts. - */ - virtual void enableInterrupts(); - - /** - * @fn virtual void TouchGFXHAL::configureInterrupts(); - * - * @brief Sets the DMA and LCD interrupt priorities. - * - * Sets the DMA and LCD interrupt priorities. - */ - virtual void configureInterrupts(); - - /** - * @fn virtual void TouchGFXHAL::enableLCDControllerInterrupt(); - * - * @brief Configure the LCD controller to fire interrupts at VSYNC. - * - * Configure the LCD controller to fire interrupts at VSYNC. Called automatically - * once TouchGFX initialization has completed. - */ - virtual void enableLCDControllerInterrupt(); - - virtual bool beginFrame(); - - virtual void endFrame(); - - /** - * @fn virtual void TouchGFXHAL::flushFrameBuffer(); - * - * @brief This function is called whenever the framework has performed a complete draw. - * - * This specialization is only in place to keep compilers happy. Base impl. will call the - * Rect version. - * @see HAL::flushFrameBuffer - */ - virtual void flushFrameBuffer() - { - TouchGFXGeneratedHAL::flushFrameBuffer(); - } - - /** - * @fn virtual void TouchGFXHAL::flushFrameBuffer(const Rect& rect); - * - * @brief This function is called whenever the framework has performed a partial draw. - * - * This function is called whenever the framework has performed a partial draw. - * On the STM32F7, make sure to clean and invalidate the data cache. This is to - * ensure that LTDC sees correct data when transferring to the display. - * - * @param rect The area of the screen that has been drawn, expressed in absolute coordinates. - * - * @see flushFrameBuffer(). - */ - virtual void flushFrameBuffer(const touchgfx::Rect& rect); - - /** - * @fn virtual bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes); - * - * @brief This function performs a platform-specific memcpy. - * - * This function performs a platform-specific memcpy, if supported by the hardware. - * - * @param [out] dest Pointer to destination memory. - * @param [in] src Pointer to source memory. - * @param numBytes Number of bytes to copy. - * - * @return true if the copy succeeded, false if copy was not performed. - */ - virtual bool blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes); - -protected: - /** - * @fn virtual uint16_t* TouchGFXHAL::getTFTFrameBuffer() const; - * - * @brief Gets the frame buffer address used by the TFT controller. - * - * Gets the frame buffer address used by the TFT controller. - * - * @return The address of the frame buffer currently being displayed on the TFT. - */ - virtual uint16_t* getTFTFrameBuffer() const; - - /** - * @fn virtual void TouchGFXHAL::setTFTFrameBuffer(uint16_t* adr); - * - * @brief Sets the frame buffer address used by the TFT controller. - * - * Sets the frame buffer address used by the TFT controller. - * - * @param [in,out] adr New frame buffer address. - */ - virtual void setTFTFrameBuffer(uint16_t* adr); -}; - -/* USER CODE END TouchGFXHAL.hpp */ - -#endif // TouchGFXHAL_HPP - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/generated/OSWrappers.cpp b/Software/TouchGFX/target/generated/OSWrappers.cpp deleted file mode 100644 index e42a32b..0000000 --- a/Software/TouchGFX/target/generated/OSWrappers.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/** - ****************************************************************************** - * File Name : OSWrappers.cpp - ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.0. Please, do not edit! - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -#include -#include -#include - -#include -#include - -static volatile uint32_t fb_sem; -static volatile uint32_t vsync_sem; - -using namespace touchgfx; - -/* - * Initialize frame buffer semaphore and queue/mutex for VSYNC signal. - */ -void OSWrappers::initialize() -{ - fb_sem = 0; - vsync_sem = 0; -} - -/* - * Take the frame buffer semaphore. Blocks until semaphore is available. - */ -void OSWrappers::takeFrameBufferSemaphore() -{ - while(fb_sem); - fb_sem = 1; -} - -/* - * Release the frame buffer semaphore. - */ -void OSWrappers::giveFrameBufferSemaphore() -{ - fb_sem = 0; -} - -/* - * Attempt to obtain the frame buffer semaphore. If semaphore is not available, do - * nothing. - * - * Note must return immediately! This function does not care who has the taken the semaphore, - * it only serves to make sure that the semaphore is taken by someone. - */ -void OSWrappers::tryTakeFrameBufferSemaphore() -{ - fb_sem = 1; -} - -/* - * Release the frame buffer semaphore in a way that is safe in interrupt context. Called - * from ISR. - * - * Release the frame buffer semaphore in a way that is safe in interrupt context. - * Called from ISR. - */ -void OSWrappers::giveFrameBufferSemaphoreFromISR() -{ - fb_sem = 0; -} - -/* - * Signal that a VSYNC has occurred. Should make the vsync queue/mutex available. - * - * Note This function is called from an ISR, and should (depending on OS) trigger a - * scheduling. - */ -void OSWrappers::signalVSync() -{ - vsync_sem = 1; -} - -/* - * Signal that the rendering of the frame has completed. Used by - * some systems to avoid using any previous vsync. - */ -void OSWrappers::signalRenderingDone() -{ - vsync_sem = 0; -} - -/* - * This function checks if a VSync occurred after last rendering. - * The function is used in systems that cannot wait in waitForVSync - * (because they are also checking other event sources. - * - * @note signalRenderingDone is typically used together with this function. - * - * @return True if VSync occurred. - */ -bool OSWrappers::isVSyncAvailable() -{ - return vsync_sem; -} - -/* - * This function check if a VSYNC has occured. - * If VSYNC has occured, signal TouchGFX to start a rendering - */ -void OSWrappers::waitForVSync() -{ - if(vsync_sem) - { - vsync_sem = 0; - HAL::getInstance()->backPorchExited(); - } -} - -/* - * A function that causes executing task to sleep for a number of milliseconds. - * - * A function that causes executing task to sleep for a number of milliseconds. - * This function is OPTIONAL. It is only used by the TouchGFX in the case of - * a specific frame refresh strategy (REFRESH_STRATEGY_OPTIM_SINGLE_BUFFER_TFT_CTRL). - * Due to backwards compatibility, in order for this function to be useable by the HAL - * the function must be explicitly registered: - * hal.registerTaskDelayFunction(&OSWrappers::taskDelay) - * - * see HAL::setFrameRefreshStrategy(FrameRefreshStrategy s) - * see HAL::registerTaskDelayFunction(void (*delayF)(uint16_t)) - */ -void OSWrappers::taskDelay(uint16_t ms) -{ - HAL_Delay(ms); -} - -/** - * A function that causes the executing task to yield control to - * another thread. This function is used by the framework when it - * is necessary to wait a little before continuing (e.g. drawing). - * - * The implementation should typically request the operating - * system to change to another task of similar priority. When - * running without an operating system, the implementation can run - * a very short task and return. - */ -void OSWrappers::taskYield() -{ - -} - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/Software/TouchGFX/target/generated/STM32DMA.cpp b/Software/TouchGFX/target/generated/STM32DMA.cpp deleted file mode 100644 index a7c49b5..0000000 --- a/Software/TouchGFX/target/generated/STM32DMA.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/** - ****************************************************************************** - * File Name : STM32DMA.cpp - ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.0. Please, do not edit! - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -#include -#include - -STM32DMA::STM32DMA() - : DMA_Interface(q), q(&b, 1) -{ -} - -touchgfx::BlitOperations STM32DMA::getBlitCaps() -{ - return static_cast(0); -} - -void STM32DMA::setupDataCopy(const touchgfx::BlitOp& blitOp) -{ - assert(0 && "DMA operation not supported"); -} - -void STM32DMA::setupDataFill(const touchgfx::BlitOp& blitOp) -{ - assert(0 && "DMA operation not supported"); -} - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/generated/STM32DMA.hpp b/Software/TouchGFX/target/generated/STM32DMA.hpp deleted file mode 100644 index 7f36446..0000000 --- a/Software/TouchGFX/target/generated/STM32DMA.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/** - ****************************************************************************** - * File Name : STM32DMA.hpp - ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.0. Please, do not edit! - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -#ifndef STM32DMA_HPP -#define STM32DMA_HPP - -#include -#include - -/** - * @class STM32DMA - * - * @brief This class specializes DMA_Interface for the STM32 processors. - * - * @see touchgfx::DMA_Interface - */ -class STM32DMA : public touchgfx::DMA_Interface -{ -public: - /** - * @fn STM32DMA::STM32DMA(); - * - * @brief Default constructor. - */ - STM32DMA(); - - /** - * @fn touchgfx::BlitOperations STM32DMA::getBlitCaps(); - * - * @brief No blit operations supported by this DMA implementation. - * - * @return Zero (no blit ops supported). - */ - virtual touchgfx::BlitOperations getBlitCaps(); - - /** - * @fn virtual void STM32DMA::setupDataCopy(const touchgfx::BlitOp& blitOp); - * - * @brief Asserts if used. - * - * @param blitOp The blit operation to be performed by this DMA instance. - */ - virtual void setupDataCopy(const touchgfx::BlitOp& blitOp); - - /** - * @fn virtual void STM32DMA::setupDataFill(const touchgfx::BlitOp& blitOp); - * - * @brief Asserts if used. - * - * @param blitOp The blit operation to be performed by this DMA instance. - */ - virtual void setupDataFill(const touchgfx::BlitOp& blitOp); - - /** - * @fn virtual void STM32DMA::signalDMAInterrupt(); - * - * @brief Does nothing. - */ - virtual void signalDMAInterrupt() - { - } - - /** - * @fn virtual void STM32DMA::flush(); - * - * @brief Block until all DMA transfers are complete. Since this particular DMA does not do - * anything, return immediately. - */ - virtual void flush() - { - } - -private: - touchgfx::LockFreeDMA_Queue q; - touchgfx::BlitOp b; -}; -#endif // TOUCHGFX_NODMA_HPP - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/generated/TouchGFXConfiguration.cpp b/Software/TouchGFX/target/generated/TouchGFXConfiguration.cpp deleted file mode 100644 index 12543d8..0000000 --- a/Software/TouchGFX/target/generated/TouchGFXConfiguration.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/** - ****************************************************************************** - * File Name : TouchGFXConfiguration.cpp - ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.0. Please, do not edit! - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern "C" void touchgfx_init(); -extern "C" void touchgfx_taskEntry(); -extern "C" void touchgfx_components_init(); - -static STM32TouchController tc; -static STM32DMA dma; -static LCD24bpp display; -static ApplicationFontProvider fontProvider; -static Texts texts; -static TouchGFXHAL hal(dma, display, tc, 1024, 600); - -void touchgfx_init() -{ - Bitmap::registerBitmapDatabase(BitmapDatabase::getInstance(), BitmapDatabase::getInstanceSize()); - TypedText::registerTexts(&texts); - Texts::setLanguage(0); - - FontManager::setFontProvider(&fontProvider); - - FrontendHeap& heap = FrontendHeap::getInstance(); - /* - * we need to obtain the reference above to initialize the frontend heap. - */ - (void)heap; - - /* - * Initialize TouchGFX - */ - hal.initialize(); -} - -void touchgfx_components_init() -{ -} - -void touchgfx_taskEntry() -{ - /* - * Main event loop will check for VSYNC signal, and then process next frame. - * - * Note This function returns immediately if there is no VSYNC signal. - */ - if (OSWrappers::isVSyncAvailable()) - { - hal.backPorchExited(); - } -} - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp b/Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp deleted file mode 100644 index f75e16b..0000000 --- a/Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp +++ /dev/null @@ -1,187 +0,0 @@ -/** - ****************************************************************************** - * File Name : TouchGFXGeneratedHAL.cpp - ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.0. Please, do not edit! - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -#include -#include -#include -#include -#include -#include - -#include "stm32h7xx.h" -#include "stm32h7xx_hal_ltdc.h" - -using namespace touchgfx; - -namespace -{ - // Use the section "TouchGFX_Framebuffer" in the linker script to specify the placement of the buffer - LOCATION_PRAGMA_NOLOAD("TouchGFX_Framebuffer") - uint32_t frameBuf[(1024 * 600 * 3 + 3) / 4] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Framebuffer"); - static volatile bool refreshRequested = false; - static uint16_t lcd_int_active_line; - static uint16_t lcd_int_porch_line; -} - -void TouchGFXGeneratedHAL::initialize() -{ - HAL::initialize(); - registerEventListener(*(Application::getInstance())); - registerTaskDelayFunction(&OSWrappers::taskDelay); - setFrameRefreshStrategy(HAL::REFRESH_STRATEGY_OPTIM_SINGLE_BUFFER_TFT_CTRL); - enableLCDControllerInterrupt(); - enableInterrupts(); - setFrameBufferStartAddresses((void*)frameBuf, (void*)0, (void*)0); -} - -void TouchGFXGeneratedHAL::configureInterrupts() -{ - NVIC_SetPriority(LTDC_IRQn, 9); -} - -void TouchGFXGeneratedHAL::enableInterrupts() -{ - NVIC_EnableIRQ(LTDC_IRQn); -} - -void TouchGFXGeneratedHAL::disableInterrupts() -{ - NVIC_DisableIRQ(LTDC_IRQn); -} - -void TouchGFXGeneratedHAL::enableLCDControllerInterrupt() -{ - lcd_int_active_line = (LTDC->BPCR & 0x7FF) - 1; - lcd_int_porch_line = (LTDC->AWCR & 0x7FF) - 1; - - /* Sets the Line Interrupt position */ - LTDC->LIPCR = lcd_int_active_line; - /* Line Interrupt Enable */ - LTDC->IER |= LTDC_IER_LIE; -} - -bool TouchGFXGeneratedHAL::beginFrame() -{ - return HAL::beginFrame(); -} - -void TouchGFXGeneratedHAL::endFrame() -{ - if (frameBufferUpdatedThisFrame) - { - refreshRequested = true; - } - HAL::endFrame(); - touchgfx::OSWrappers::signalRenderingDone(); -} - -uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const -{ - return (uint16_t*)LTDC_Layer1->CFBAR; -} - -void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr) -{ - LTDC_Layer1->CFBAR = (uint32_t)adr; - - /* Reload immediate */ - LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR; -} - -void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect) -{ - HAL::flushFrameBuffer(rect); -} - -bool TouchGFXGeneratedHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes) -{ - return HAL::blockCopy(dest, src, numBytes); -} - -uint16_t TouchGFXGeneratedHAL::getTFTCurrentLine() -{ - // This function only requires an implementation if single buffering - // on LTDC display is being used (REFRESH_STRATEGY_OPTIM_SINGLE_BUFFER_TFT_CTRL). - - // The CPSR register (bits 15:0) specify current line of TFT controller. - uint16_t curr = (uint16_t)(LTDC->CPSR & 0xffff); - uint16_t backPorchY = (uint16_t)(LTDC->BPCR & 0x7FF) + 1; - - // The semantics of the getTFTCurrentLine() function is to return a value - // in the range of 0-totalheight. If we are still in back porch area, return 0. - return (curr < backPorchY) ? 0 : (curr - backPorchY); -} - -void TouchGFXGeneratedHAL::InvalidateCache() -{ - // If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then - // the DCache must be flushed prior to DMA2D accessing it. That's done - // using the function SCB_CleanInvalidateDCache(). Remember to enable "CPU Cache" in the - // "System Core" settings for "Cortex M7" in CubeMX in order for this function call to work. - if (SCB->CCR & SCB_CCR_DC_Msk) - { - SCB_CleanInvalidateDCache(); - } -} - -void TouchGFXGeneratedHAL::FlushCache() -{ - // If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then - // the DCache must be flushed prior to DMA2D accessing it. That's done - // using the function SCB_CleanInvalidateDCache(). Remember to enable "CPU Cache" in the - // "System Core" settings for "Cortex M7" in CubeMX in order for this function call to work. - if (SCB->CCR & SCB_CCR_DC_Msk) - { - SCB_CleanInvalidateDCache(); - } -} - -extern "C" -{ - void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef* hltdc) - { - if (!HAL::getInstance()) - { - return; - } - - if (LTDC->LIPCR == lcd_int_active_line) - { - //entering active area - HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_porch_line); - HAL::getInstance()->vSync(); - OSWrappers::signalVSync(); - - // Swap frame buffers immediately instead of waiting for the task to be scheduled in. - // Note: task will also swap when it wakes up, but that operation is guarded and will not have - // any effect if already swapped. - HAL::getInstance()->swapFrameBuffers(); - GPIO::set(GPIO::VSYNC_FREQ); - } - else - { - //exiting active area - HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_active_line); - - // Signal to the framework that display update has finished. - HAL::getInstance()->frontPorchEntered(); - GPIO::clear(GPIO::VSYNC_FREQ); - } - } -} -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp b/Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp deleted file mode 100644 index aa19c5a..0000000 --- a/Software/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp +++ /dev/null @@ -1,213 +0,0 @@ -/** - ****************************************************************************** - * File Name : TouchGFXGeneratedHAL.hpp - ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.0. Please, do not edit! - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -#ifndef TouchGFXGeneratedHAL_HPP -#define TouchGFXGeneratedHAL_HPP - -#include - -/** - * @class TouchGFXGeneratedHAL - * - * @brief HAL implementation for TouchGFXGenerated. - * - * @sa HAL - */ -class TouchGFXGeneratedHAL : public touchgfx::HAL -{ -public: - /** - * @fn TouchGFXGeneratedHAL::TouchGFXGeneratedHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : touchgfx::HAL(dma, display, tc, width, height) - * - * @brief Constructor. - * - * Constructor. Initializes members. - * - * @param [in,out] dma Reference to DMA interface. - * @param [in,out] display Reference to LCD interface. - * @param [in,out] tc Reference to Touch Controller driver. - * @param width Width of the display. - * @param height Height of the display. - */ - TouchGFXGeneratedHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : - touchgfx::HAL(dma, display, tc, width, height) - { - } - - /** - * @fn void TouchGFXGeneratedHAL::initialize(); - * - * @brief This function is responsible for initializing the entire framework. - * - * This function is responsible for initializing the entire framework. - */ - virtual void initialize(); - - /** - * @fn virtual void TouchGFXGeneratedHAL::configureInterrupts(); - * - * @brief Sets the DMA and LCD interrupt priorities. - * - * Sets the DMA and LCD interrupt priorities. - */ - virtual void configureInterrupts(); - - /** - * @fn virtual void TouchGFXGeneratedHAL::enableInterrupts(); - * - * @brief Enables the DMA and LCD interrupts. - * - * Enables the DMA and LCD interrupts. - */ - virtual void enableInterrupts(); - - /** - * @fn virtual void TouchGFXGeneratedHAL::disableInterrupts(); - * - * @brief Disables the DMA and LCD interrupts. - * - * Disables the DMA and LCD interrupts. - */ - virtual void disableInterrupts(); - - /** - * @fn virtual void TouchGFXGeneratedHAL::enableLCDControllerInterrupt(); - * - * @brief Configure the LCD controller to fire interrupts at VSYNC. - * - * Configure the LCD controller to fire interrupts at VSYNC. Called automatically - * once TouchGFX initialization has completed. - */ - virtual void enableLCDControllerInterrupt(); - - /** - * @fn virtual void TouchGFXGeneratedHAL::flushFrameBuffer(); - * - * @brief This function is called whenever the framework has performed a complete draw. - * - * This specialization is only in place to keep compilers happy. Base impl. will call the - * Rect version. - * @see HAL::flushFrameBuffer - */ - virtual void flushFrameBuffer() - { - HAL::flushFrameBuffer(); - } - - /** - * @fn virtual void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect); - * - * @brief This function is called whenever the framework has performed a partial draw. - * - * This function is called whenever the framework has performed a partial draw. - * On the STM32F7, make sure to clean and invalidate the data cache. This is to - * ensure that LTDC sees correct data when transferring to the display. - * - * @param rect The area of the screen that has been drawn, expressed in absolute coordinates. - * - * @see flushFrameBuffer(). - */ - virtual void flushFrameBuffer(const touchgfx::Rect& rect); - - /** - * - * @fn virtual void TouchGFXGeneratedHAL::blockCopy(); - * - * This function performs a platform-specific memcpy, if supported by the hardware. - * - * @param [out] dest Pointer to destination memory. - * @param [in] src Pointer to source memory. - * @param numBytes Number of bytes to copy. - * - * @return true if the copy succeeded, false if copy was not performed. - */ - virtual bool blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes); - - /** - * @fn virtual void TouchGFXGeneratedHAL::beginFrame(); - * - * @brief Called when beginning to rendering a frame. - * - * Called when beginning to rendering a frame. - * - * @return true if rendering can begin, false otherwise. - */ - virtual bool beginFrame(); - - /** - * @fn virtual void TouchGFXGeneratedHAL::endFrame(); - * - * @brief Called when a rendering pass is completed. - * - * Called when a rendering pass is completed. - */ - virtual void endFrame(); - -protected: - /** - * @fn virtual uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const; - * - * @brief Gets the frame buffer address used by the TFT controller. - * - * Gets the frame buffer address used by the TFT controller. - * - * @return The address of the frame buffer currently being displayed on the TFT. - */ - virtual uint16_t* getTFTFrameBuffer() const; - - /** - * @fn virtual void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr); - * - * @brief Sets the frame buffer address used by the TFT controller. - * - * Sets the frame buffer address used by the TFT controller. - * - * @param [in,out] adr New frame buffer address. - */ - virtual void setTFTFrameBuffer(uint16_t* adr); - - /** - * @fn virtual uint16_t TouchGFXGeneratedHAL::getTFTCurrentLine() - * - * @brief Get the current line (Y) of the TFT controller - * - * This function is used to obtain the progress of the TFT controller. More - * specifically, the line (or Y-value) currently being transferred. - * - * Note: The value must be adjusted to account for vertical back porch before - * returning, such that the value is always within the range of 0 <= value < - * actual display height in pixels - * - * It is used for the REFRESH_STRATEGY_OPTIM_SINGLE_BUFFER_TFT_CTRL frame refresh - * strategy in order to synchronize frame buffer drawing with TFT controller - * progress. If this strategy is used, the concrete HAL subclass must provide an - * override of this function that returns correct line value. If this strategy is - * not used, then the getTFTCurrentLine function is never called and can be - * disregarded. - * - * @return In this default implementation, 0xFFFF is returned to signify "not implemented". - */ - virtual uint16_t getTFTCurrentLine(); - - virtual void InvalidateCache(); - - virtual void FlushCache(); - -}; -#endif // TouchGFXGeneratedHAL_HPP - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Software/build/FT23_Charger.map b/Software/build/FT23_Charger.map new file mode 100644 index 0000000..1cc653c --- /dev/null +++ b/Software/build/FT23_Charger.map @@ -0,0 +1,5178 @@ +Archive member included to satisfy reference by file (symbol) + +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o (atexit) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o (exit) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) (__stdio_exit_handler) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) (_fwalk_sglue) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) (__sread) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o (memset) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) (_close_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) (errno) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) (_impure_ptr) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) (_lseek_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) (_read_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) (_write_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + build/debug/syscalls.o (__errno) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o (__libc_init_array) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o (__libc_fini_array) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) (__retarget_lock_init_recursive) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + build/debug/stm32h7xx_hal_fdcan.o (memcpy) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) (__register_exitproc) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) (__call_exitprocs) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) (_free_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) (_malloc_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) (__malloc_lock) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) (_fflush_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) (_sbrk_r) +/usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + build/debug/stm32h7xx_hal_uart.o (__aeabi_uldivmod) +/usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) (__udivmoddi4) +/usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) (__aeabi_ldiv0) + +Discarded input sections + + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + .data 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + .rodata 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + .text 0x00000000 0x70 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .ARM.extab 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .ARM.exidx 0x00000000 0x10 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .debug_line 0x00000000 0x75 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .debug_line_str + 0x00000000 0xb4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .debug_info 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .debug_abbrev 0x00000000 0x14 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .debug_str 0x00000000 0xc0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .ARM.attributes + 0x00000000 0x1e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o + .text 0x00000000 0x0 build/debug/main.o + .data 0x00000000 0x0 build/debug/main.o + .bss 0x00000000 0x0 build/debug/main.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal.o + .text.HAL_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal.o + .text.HAL_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal.o + .text.HAL_DeInit + 0x00000000 0x84 build/debug/stm32h7xx_hal.o + .text.HAL_GetTickPrio + 0x00000000 0xc build/debug/stm32h7xx_hal.o + .text.HAL_SetTickFreq + 0x00000000 0x2c build/debug/stm32h7xx_hal.o + .text.HAL_GetTickFreq + 0x00000000 0xc build/debug/stm32h7xx_hal.o + .text.HAL_SuspendTick + 0x00000000 0xe build/debug/stm32h7xx_hal.o + .text.HAL_ResumeTick + 0x00000000 0xe build/debug/stm32h7xx_hal.o + .text.HAL_GetHalVersion + 0x00000000 0x8 build/debug/stm32h7xx_hal.o + .text.HAL_GetREVID + 0x00000000 0xc build/debug/stm32h7xx_hal.o + .text.HAL_GetDEVID + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_GetUIDw0 + 0x00000000 0xc build/debug/stm32h7xx_hal.o + .text.HAL_GetUIDw1 + 0x00000000 0xc build/debug/stm32h7xx_hal.o + .text.HAL_GetUIDw2 + 0x00000000 0xc build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_VREFBUF_VoltageScalingConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_VREFBUF_HighImpedanceConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_VREFBUF_TrimmingConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_EnableVREFBUF + 0x00000000 0x34 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_DisableVREFBUF + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_AnalogSwitchConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal.o + .text.HAL_EnableCompensationCell + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DisableCompensationCell + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_EnableIOSpeedOptimize + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_DisableIOSpeedOptimize + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_CompensationCodeSelect + 0x00000000 0x14 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_CompensationCodeConfig + 0x00000000 0x18 build/debug/stm32h7xx_hal.o + .text.HAL_SYSCFG_VDDMMC_CompensationCodeConfig + 0x00000000 0x18 build/debug/stm32h7xx_hal.o + .text.HAL_DBGMCU_EnableDBGSleepMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DBGMCU_DisableDBGSleepMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DBGMCU_EnableDBGStopMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DBGMCU_DisableDBGStopMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DBGMCU_EnableDBGStandbyMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DBGMCU_DisableDBGStandbyMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_EnableDomain3DBGStopMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DisableDomain3DBGStopMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_EnableDomain3DBGStandbyMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_DisableDomain3DBGStandbyMode + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_SetFMCMemorySwappingConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal.o + .text.HAL_GetFMCMemorySwappingConfig + 0x00000000 0x10 build/debug/stm32h7xx_hal.o + .text.HAL_EXTI_EdgeConfig + 0x00000000 0x50 build/debug/stm32h7xx_hal.o + .text.HAL_EXTI_GenerateSWInterrupt + 0x00000000 0x20 build/debug/stm32h7xx_hal.o + .text.HAL_EXTI_D1_ClearFlag + 0x00000000 0x18 build/debug/stm32h7xx_hal.o + .text.HAL_EXTI_D1_EventInputConfig + 0x00000000 0x84 build/debug/stm32h7xx_hal.o + .text.HAL_EXTI_D3_EventInputConfig + 0x00000000 0x7c build/debug/stm32h7xx_hal.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_cortex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_cortex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_cortex.o + .text.__NVIC_DisableIRQ + 0x00000000 0x24 build/debug/stm32h7xx_hal_cortex.o + .text.__NVIC_GetPriority + 0x00000000 0x20 build/debug/stm32h7xx_hal_cortex.o + .text.NVIC_DecodePriority + 0x00000000 0x3e build/debug/stm32h7xx_hal_cortex.o + .text.__NVIC_SystemReset + 0x00000000 0x24 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_DisableIRQ + 0x00000000 0x8 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_SystemReset + 0x00000000 0x6 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_MPU_Disable + 0x00000000 0x1c build/debug/stm32h7xx_hal_cortex.o + .text.HAL_MPU_Enable + 0x00000000 0x20 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_MPU_EnableRegion + 0x00000000 0x18 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_MPU_DisableRegion + 0x00000000 0x18 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_MPU_ConfigRegion + 0x00000000 0x58 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_GetPriorityGrouping + 0x00000000 0x10 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_GetPriority + 0x00000000 0x18 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_SetPendingIRQ + 0x00000000 0x1c build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_GetPendingIRQ + 0x00000000 0x24 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_ClearPendingIRQ + 0x00000000 0x1c build/debug/stm32h7xx_hal_cortex.o + .text.HAL_NVIC_GetActive + 0x00000000 0x24 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_SYSTICK_CLKSourceConfig + 0x00000000 0x20 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_SYSTICK_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_SYSTICK_IRQHandler + 0x00000000 0x8 build/debug/stm32h7xx_hal_cortex.o + .text.HAL_GetCurrentCPUID + 0x00000000 0x4 build/debug/stm32h7xx_hal_cortex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_crc.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_crc.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_crc.o + .text.CRC_Handle_8 + 0x00000000 0x88 build/debug/stm32h7xx_hal_crc.o + .text.CRC_Handle_16 + 0x00000000 0x4e build/debug/stm32h7xx_hal_crc.o + .text.HAL_CRC_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_crc.o + .text.HAL_CRC_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_crc.o + .text.HAL_CRC_DeInit + 0x00000000 0x34 build/debug/stm32h7xx_hal_crc.o + .text.HAL_CRC_Accumulate + 0x00000000 0x42 build/debug/stm32h7xx_hal_crc.o + .text.HAL_CRC_Calculate + 0x00000000 0x50 build/debug/stm32h7xx_hal_crc.o + .text.HAL_CRC_GetState + 0x00000000 0x4 build/debug/stm32h7xx_hal_crc.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_crc_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_crc_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_crc_ex.o + .text.HAL_CRCEx_Input_Data_Reverse + 0x00000000 0x18 build/debug/stm32h7xx_hal_crc_ex.o + .text.HAL_CRCEx_Output_Data_Reverse + 0x00000000 0x18 build/debug/stm32h7xx_hal_crc_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_dma.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_dma.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_dma.o + .text.DMA_SetConfig + 0x00000000 0x1e8 build/debug/stm32h7xx_hal_dma.o + .text.DMA_CalcBaseAndBitshift + 0x00000000 0xb0 build/debug/stm32h7xx_hal_dma.o + .text.DMA_CheckFifoParam + 0x00000000 0xa0 build/debug/stm32h7xx_hal_dma.o + .text.DMA_CalcDMAMUXChannelBaseAndMask + 0x00000000 0xac build/debug/stm32h7xx_hal_dma.o + .text.DMA_CalcDMAMUXRequestGenBaseAndMask + 0x00000000 0x7c build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_Init + 0x00000000 0x3e0 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_DeInit + 0x00000000 0x2bc build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_Start + 0x00000000 0x144 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_Start_IT + 0x00000000 0x294 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_Abort + 0x00000000 0x33c build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_Abort_IT + 0x00000000 0x26c build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_PollForTransfer + 0x00000000 0x450 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_IRQHandler + 0x00000000 0x768 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_RegisterCallback + 0x00000000 0x7c build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_UnRegisterCallback + 0x00000000 0x90 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_dma.o + .text.HAL_DMA_GetError + 0x00000000 0x4 build/debug/stm32h7xx_hal_dma.o + .rodata.flagBitshiftOffset.0 + 0x00000000 0x8 build/debug/stm32h7xx_hal_dma.o + .debug_info 0x00000000 0xe90 build/debug/stm32h7xx_hal_dma.o + .debug_abbrev 0x00000000 0x29c build/debug/stm32h7xx_hal_dma.o + .debug_loclists + 0x00000000 0xa9f build/debug/stm32h7xx_hal_dma.o + .debug_aranges + 0x00000000 0xa0 build/debug/stm32h7xx_hal_dma.o + .debug_rnglists + 0x00000000 0x8c build/debug/stm32h7xx_hal_dma.o + .debug_line 0x00000000 0x249f build/debug/stm32h7xx_hal_dma.o + .debug_str 0x00000000 0x943 build/debug/stm32h7xx_hal_dma.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_dma.o + .debug_frame 0x00000000 0x1fc build/debug/stm32h7xx_hal_dma.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_dma.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_dma_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_dma_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_dma_ex.o + .text.DMA_MultiBufferSetConfig + 0x00000000 0xa8 build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart + 0x00000000 0x214 build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart_IT + 0x00000000 0x394 build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_ChangeMemory + 0x00000000 0x88 build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_ConfigMuxSync + 0x00000000 0x6e build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_ConfigMuxRequestGenerator + 0x00000000 0x5a build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_EnableMuxRequestGenerator + 0x00000000 0x1e build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_DisableMuxRequestGenerator + 0x00000000 0x1e build/debug/stm32h7xx_hal_dma_ex.o + .text.HAL_DMAEx_MUX_IRQHandler + 0x00000000 0x5a build/debug/stm32h7xx_hal_dma_ex.o + .debug_info 0x00000000 0x8f9 build/debug/stm32h7xx_hal_dma_ex.o + .debug_abbrev 0x00000000 0x20a build/debug/stm32h7xx_hal_dma_ex.o + .debug_loclists + 0x00000000 0x5df build/debug/stm32h7xx_hal_dma_ex.o + .debug_aranges + 0x00000000 0x60 build/debug/stm32h7xx_hal_dma_ex.o + .debug_rnglists + 0x00000000 0x47 build/debug/stm32h7xx_hal_dma_ex.o + .debug_line 0x00000000 0xb2a build/debug/stm32h7xx_hal_dma_ex.o + .debug_str 0x00000000 0x7e0 build/debug/stm32h7xx_hal_dma_ex.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_dma_ex.o + .debug_frame 0x00000000 0x104 build/debug/stm32h7xx_hal_dma_ex.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_dma_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_exti.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_exti.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_SetConfigLine + 0x00000000 0x140 build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_GetConfigLine + 0x00000000 0x108 build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_ClearConfigLine + 0x00000000 0xec build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_RegisterCallback + 0x00000000 0x12 build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_GetHandle + 0x00000000 0xc build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_IRQHandler + 0x00000000 0x28 build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_GetPending + 0x00000000 0x20 build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_ClearPending + 0x00000000 0x1c build/debug/stm32h7xx_hal_exti.o + .text.HAL_EXTI_GenerateSWI + 0x00000000 0x1c build/debug/stm32h7xx_hal_exti.o + .debug_info 0x00000000 0x89b build/debug/stm32h7xx_hal_exti.o + .debug_abbrev 0x00000000 0x1c9 build/debug/stm32h7xx_hal_exti.o + .debug_loclists + 0x00000000 0x98e build/debug/stm32h7xx_hal_exti.o + .debug_aranges + 0x00000000 0x60 build/debug/stm32h7xx_hal_exti.o + .debug_rnglists + 0x00000000 0x46 build/debug/stm32h7xx_hal_exti.o + .debug_line 0x00000000 0x857 build/debug/stm32h7xx_hal_exti.o + .debug_str 0x00000000 0x4c7 build/debug/stm32h7xx_hal_exti.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_exti.o + .debug_frame 0x00000000 0x100 build/debug/stm32h7xx_hal_exti.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_exti.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_fdcan.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_fdcan.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_fdcan.o + .text.FDCAN_CopyMessageToRAM + 0x00000000 0x8c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnterPowerDownMode + 0x00000000 0x42 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ExitPowerDownMode + 0x00000000 0x4a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigClockCalibration + 0x00000000 0x94 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetClockCalibrationState + 0x00000000 0x10 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ResetClockCalibrationState + 0x00000000 0x48 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetClockCalibrationCounter + 0x00000000 0x28 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigFilter + 0x00000000 0x8a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigGlobalFilter + 0x00000000 0x32 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigExtendedIdMask + 0x00000000 0x22 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigRxFifoOverwrite + 0x00000000 0x46 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigFifoWatermark + 0x00000000 0x5c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigRamWatchdog + 0x00000000 0x28 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigTimestampCounter + 0x00000000 0x28 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnableTimestampCounter + 0x00000000 0x28 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DisableTimestampCounter + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetTimestampCounter + 0x00000000 0x8 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ResetTimestampCounter + 0x00000000 0x22 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigTimeoutCounter + 0x00000000 0x30 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnableTimeoutCounter + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DisableTimeoutCounter + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetTimeoutCounter + 0x00000000 0x8 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ResetTimeoutCounter + 0x00000000 0x20 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigTxDelayCompensation + 0x00000000 0x24 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnableTxDelayCompensation + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DisableTxDelayCompensation + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnableISOMode + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DisableISOMode + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnableEdgeFiltering + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DisableEdgeFiltering + 0x00000000 0x26 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_Start + 0x00000000 0x32 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_Stop + 0x00000000 0x96 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DeInit + 0x00000000 0x2a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_AddMessageToTxFifoQ + 0x00000000 0x74 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_AddMessageToTxBuffer + 0x00000000 0x7e build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_EnableTxBufferRequest + 0x00000000 0x22 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetLatestTxFifoQRequestBuffer + 0x00000000 0x6 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_AbortTxRequest + 0x00000000 0x22 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetRxMessage + 0x00000000 0x1dc build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetTxEvent + 0x00000000 0xca build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetHighPriorityMessageStatus + 0x00000000 0x34 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetProtocolStatus + 0x00000000 0x4a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetErrorCounters + 0x00000000 0x1e build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_IsRxBufferMessageAvailable + 0x00000000 0x40 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_IsTxBufferMessagePending + 0x00000000 0xe build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetRxFifoFillLevel + 0x00000000 0x1c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetTxFifoFreeLevel + 0x00000000 0xc build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_IsRestrictedOperationMode + 0x00000000 0xa build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ExitRestrictedOperationMode + 0x00000000 0x2a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigOperation + 0x00000000 0x1a0 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigReferenceMessage + 0x00000000 0x4e build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigTrigger + 0x00000000 0x7a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_SetGlobalTime + 0x00000000 0x9c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_SetClockSynchronization + 0x00000000 0xa0 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigStopWatch + 0x00000000 0x5a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigRegisterTimeMark + 0x00000000 0xc4 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_EnableRegisterTimeMarkPulse + 0x00000000 0x52 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_DisableRegisterTimeMarkPulse + 0x00000000 0x52 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_EnableTriggerTimeMarkPulse + 0x00000000 0x6c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_DisableTriggerTimeMarkPulse + 0x00000000 0x6c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_EnableHardwareGapControl + 0x00000000 0x6c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_DisableHardwareGapControl + 0x00000000 0x6c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_EnableTimeMarkGapControl + 0x00000000 0x6c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_DisableTimeMarkGapControl + 0x00000000 0x6c build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_SetNextIsGap + 0x00000000 0x84 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_SetEndOfGap + 0x00000000 0x84 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigExternalSyncPhase + 0x00000000 0x44 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_EnableExternalSynchronization + 0x00000000 0x52 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_DisableExternalSynchronization + 0x00000000 0x52 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_GetOperationStatus + 0x00000000 0x5a build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ConfigInterruptLines + 0x00000000 0x38 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ConfigInterruptLines + 0x00000000 0x38 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_ActivateNotification + 0x00000000 0x90 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_DeactivateNotification + 0x00000000 0x88 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_ActivateNotification + 0x00000000 0x56 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_TT_DeactivateNotification + 0x00000000 0x52 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_GetError + 0x00000000 0x6 build/debug/stm32h7xx_hal_fdcan.o + .rodata.DLCtoBytes + 0x00000000 0x10 build/debug/stm32h7xx_hal_fdcan.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_flash.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_flash.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_EndOfOperationCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_OperationErrorCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_IRQHandler + 0x00000000 0x1f4 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_Unlock + 0x00000000 0x5c build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_Lock + 0x00000000 0x3c build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_OB_Unlock + 0x00000000 0x34 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_OB_Lock + 0x00000000 0x20 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_GetError + 0x00000000 0xc build/debug/stm32h7xx_hal_flash.o + .text.FLASH_WaitForLastOperation + 0x00000000 0xf4 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_Program + 0x00000000 0x10c build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_Program_IT + 0x00000000 0xfc build/debug/stm32h7xx_hal_flash.o + .text.FLASH_OB_WaitForLastOperation + 0x00000000 0x60 build/debug/stm32h7xx_hal_flash.o + .text.FLASH_CRC_WaitForLastOperation + 0x00000000 0xb8 build/debug/stm32h7xx_hal_flash.o + .text.HAL_FLASH_OB_Launch + 0x00000000 0x3c build/debug/stm32h7xx_hal_flash.o + .bss.pFlash 0x00000000 0x1c build/debug/stm32h7xx_hal_flash.o + .debug_info 0x00000000 0xa8f build/debug/stm32h7xx_hal_flash.o + .debug_abbrev 0x00000000 0x2a9 build/debug/stm32h7xx_hal_flash.o + .debug_loclists + 0x00000000 0x642 build/debug/stm32h7xx_hal_flash.o + .debug_aranges + 0x00000000 0x88 build/debug/stm32h7xx_hal_flash.o + .debug_rnglists + 0x00000000 0x66 build/debug/stm32h7xx_hal_flash.o + .debug_line 0x00000000 0xa8f build/debug/stm32h7xx_hal_flash.o + .debug_str 0x00000000 0x713 build/debug/stm32h7xx_hal_flash.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_flash.o + .debug_frame 0x00000000 0x154 build/debug/stm32h7xx_hal_flash.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_flash.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_flash_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_flash_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_MassErase + 0x00000000 0x40 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_EnableWRP + 0x00000000 0x2c build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_DisableWRP + 0x00000000 0x28 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetWRP + 0x00000000 0x2c build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_RDPConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetRDP + 0x00000000 0x20 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_UserConfig + 0x00000000 0xc4 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetUser + 0x00000000 0x14 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_PCROPConfig + 0x00000000 0x44 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetPCROP + 0x00000000 0x50 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_BOR_LevelConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetBOR + 0x00000000 0x10 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_BootAddConfig + 0x00000000 0x30 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetBootAdd + 0x00000000 0x14 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_SecureAreaConfig + 0x00000000 0x4c build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_GetSecureArea + 0x00000000 0x50 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_CRC_AddSector + 0x00000000 0x3c build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_CRC_SelectAddress + 0x00000000 0x1c build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_OTP_LockConfig + 0x00000000 0x10 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_OB_OTP_GetLock + 0x00000000 0xc build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBProgram + 0x00000000 0xec build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetConfig + 0x00000000 0x7c build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Unlock_Bank1 + 0x00000000 0x34 build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Lock_Bank1 + 0x00000000 0x14 build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Unlock_Bank2 + 0x00000000 0x3c build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Lock_Bank2 + 0x00000000 0x18 build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_ComputeCRC + 0x00000000 0x164 build/debug/stm32h7xx_hal_flash_ex.o + .text.FLASH_Erase_Sector + 0x00000000 0x48 build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase + 0x00000000 0x12c build/debug/stm32h7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase_IT + 0x00000000 0xe8 build/debug/stm32h7xx_hal_flash_ex.o + .debug_info 0x00000000 0x1046 build/debug/stm32h7xx_hal_flash_ex.o + .debug_abbrev 0x00000000 0x28c build/debug/stm32h7xx_hal_flash_ex.o + .debug_loclists + 0x00000000 0x686 build/debug/stm32h7xx_hal_flash_ex.o + .debug_aranges + 0x00000000 0x108 build/debug/stm32h7xx_hal_flash_ex.o + .debug_rnglists + 0x00000000 0xc6 build/debug/stm32h7xx_hal_flash_ex.o + .debug_line 0x00000000 0xe1a build/debug/stm32h7xx_hal_flash_ex.o + .debug_str 0x00000000 0x9f3 build/debug/stm32h7xx_hal_flash_ex.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_flash_ex.o + .debug_frame 0x00000000 0x268 build/debug/stm32h7xx_hal_flash_ex.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_flash_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_gpio.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_gpio.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_gpio.o + .text.HAL_GPIO_DeInit + 0x00000000 0x150 build/debug/stm32h7xx_hal_gpio.o + .text.HAL_GPIO_ReadPin + 0x00000000 0xe build/debug/stm32h7xx_hal_gpio.o + .text.HAL_GPIO_TogglePin + 0x00000000 0x12 build/debug/stm32h7xx_hal_gpio.o + .text.HAL_GPIO_LockPin + 0x00000000 0x2e build/debug/stm32h7xx_hal_gpio.o + .text.HAL_GPIO_EXTI_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_gpio.o + .text.HAL_GPIO_EXTI_IRQHandler + 0x00000000 0x1e build/debug/stm32h7xx_hal_gpio.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_hsem.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_hsem.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_Take + 0x00000000 0x24 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_FastTake + 0x00000000 0x20 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_IsSemTaken + 0x00000000 0x18 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_Release + 0x00000000 0x10 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_ReleaseAll + 0x00000000 0x14 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_SetClearKey + 0x00000000 0x18 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_GetClearKey + 0x00000000 0x10 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_ActivateNotification + 0x00000000 0x10 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_DeactivateNotification + 0x00000000 0x10 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_FreeCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_hsem.o + .text.HAL_HSEM_IRQHandler + 0x00000000 0x1c build/debug/stm32h7xx_hal_hsem.o + .debug_info 0x00000000 0x3b7 build/debug/stm32h7xx_hal_hsem.o + .debug_abbrev 0x00000000 0x1eb build/debug/stm32h7xx_hal_hsem.o + .debug_loclists + 0x00000000 0xdf build/debug/stm32h7xx_hal_hsem.o + .debug_aranges + 0x00000000 0x70 build/debug/stm32h7xx_hal_hsem.o + .debug_rnglists + 0x00000000 0x4f build/debug/stm32h7xx_hal_hsem.o + .debug_line 0x00000000 0x2c8 build/debug/stm32h7xx_hal_hsem.o + .debug_str 0x00000000 0x358 build/debug/stm32h7xx_hal_hsem.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_hsem.o + .debug_frame 0x00000000 0xc8 build/debug/stm32h7xx_hal_hsem.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_hsem.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_i2c.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_i2c.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Flush_TXDR + 0x00000000 0x22 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_TransferConfig + 0x00000000 0x3c build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Enable_IRQ + 0x00000000 0x9c build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Disable_IRQ + 0x00000000 0x6e build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ConvertOtherXferOptions + 0x00000000 0x1e build/debug/stm32h7xx_hal_i2c.o + .text.I2C_IsErrorOccurred + 0x00000000 0x118 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_WaitOnTXISFlagUntilTimeout + 0x00000000 0x60 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_WaitOnFlagUntilTimeout + 0x00000000 0x7c build/debug/stm32h7xx_hal_i2c.o + .text.I2C_RequestMemoryWrite + 0x00000000 0x7c build/debug/stm32h7xx_hal_i2c.o + .text.I2C_RequestMemoryRead + 0x00000000 0x78 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_WaitOnSTOPFlagUntilTimeout + 0x00000000 0x5e build/debug/stm32h7xx_hal_i2c.o + .text.I2C_WaitOnRXNEFlagUntilTimeout + 0x00000000 0xaa build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_DeInit + 0x00000000 0x32 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit + 0x00000000 0x1a4 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Receive + 0x00000000 0x178 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit + 0x00000000 0x1f2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive + 0x00000000 0x182 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_IT + 0x00000000 0xc4 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_IT + 0x00000000 0x98 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_IT + 0x00000000 0x8c build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_IT + 0x00000000 0x64 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_DMA + 0x00000000 0x170 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_DMA + 0x00000000 0x150 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_DMA + 0x00000000 0x13c build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_DMA + 0x00000000 0xf0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Mem_Write + 0x00000000 0x1a8 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Mem_Read + 0x00000000 0x1b0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_IT + 0x00000000 0xb8 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_IT + 0x00000000 0xb4 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_DMA + 0x00000000 0x134 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_DMA + 0x00000000 0x134 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_IsDeviceReady + 0x00000000 0x168 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_IT + 0x00000000 0x10c build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_DMA + 0x00000000 0x1e4 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_IT + 0x00000000 0xb0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_DMA + 0x00000000 0x170 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_IT + 0x00000000 0xe0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_DMA + 0x00000000 0x1a8 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_IT + 0x00000000 0xe0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_DMA + 0x00000000 0x1a8 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_EnableListen_IT + 0x00000000 0x28 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_DisableListen_IT + 0x00000000 0x38 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_Master_Abort_IT + 0x00000000 0x84 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_EV_IRQHandler + 0x00000000 0x10 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_MasterTxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_MasterRxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITMasterSeqCplt + 0x00000000 0x52 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_SlaveTxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_SlaveRxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITSlaveSeqCplt + 0x00000000 0x7e build/debug/stm32h7xx_hal_i2c.o + .text.I2C_DMASlaveTransmitCplt + 0x00000000 0x22 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_DMASlaveReceiveCplt + 0x00000000 0xa0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_AddrCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITAddrCplt + 0x00000000 0xa0 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_ListenCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITListenCplt + 0x00000000 0x68 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_MemTxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_MemRxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_ErrorCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_AbortCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_TreatErrorCallback + 0x00000000 0x2c build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITError + 0x00000000 0x130 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITSlaveCplt + 0x00000000 0x2ec build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Slave_ISR_IT + 0x00000000 0x146 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_ITMasterCplt + 0x00000000 0x11e build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Master_ISR_IT + 0x00000000 0x192 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Mem_ISR_DMA + 0x00000000 0x1a0 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Slave_ISR_DMA + 0x00000000 0x23c build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Master_ISR_DMA + 0x00000000 0x140 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_DMAError + 0x00000000 0x138 build/debug/stm32h7xx_hal_i2c.o + .text.I2C_DMAMasterTransmitCplt + 0x00000000 0x5a build/debug/stm32h7xx_hal_i2c.o + .text.I2C_DMAMasterReceiveCplt + 0x00000000 0x5a build/debug/stm32h7xx_hal_i2c.o + .text.I2C_Mem_ISR_IT + 0x00000000 0x198 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_ER_IRQHandler + 0x00000000 0x6a build/debug/stm32h7xx_hal_i2c.o + .text.I2C_DMAAbort + 0x00000000 0x1a build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_GetMode + 0x00000000 0x6 build/debug/stm32h7xx_hal_i2c.o + .text.HAL_I2C_GetError + 0x00000000 0x4 build/debug/stm32h7xx_hal_i2c.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_i2c_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_i2c_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_i2c_ex.o + .text.HAL_I2CEx_EnableWakeUp + 0x00000000 0x52 build/debug/stm32h7xx_hal_i2c_ex.o + .text.HAL_I2CEx_DisableWakeUp + 0x00000000 0x52 build/debug/stm32h7xx_hal_i2c_ex.o + .text.HAL_I2CEx_EnableFastModePlus + 0x00000000 0x30 build/debug/stm32h7xx_hal_i2c_ex.o + .text.HAL_I2CEx_DisableFastModePlus + 0x00000000 0x34 build/debug/stm32h7xx_hal_i2c_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_ltdc.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_ltdc.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_DeInit + 0x00000000 0x6a build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigColorKeying + 0x00000000 0x4a build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigCLUT + 0x00000000 0x82 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_EnableColorKeying + 0x00000000 0x3c build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_DisableColorKeying + 0x00000000 0x3c build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_EnableCLUT + 0x00000000 0x3c build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_DisableCLUT + 0x00000000 0x3c build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_EnableDither + 0x00000000 0x34 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_DisableDither + 0x00000000 0x34 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowSize + 0x00000000 0x56 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowPosition + 0x00000000 0x56 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetPixelFormat + 0x00000000 0x42 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetAlpha + 0x00000000 0x42 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetPitch + 0x00000000 0xb4 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_Reload + 0x00000000 0x3a build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigLayer_NoReload + 0x00000000 0x64 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowSize_NoReload + 0x00000000 0x52 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowPosition_NoReload + 0x00000000 0x52 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetPixelFormat_NoReload + 0x00000000 0x3e build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetAlpha_NoReload + 0x00000000 0x3e build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetAddress_NoReload + 0x00000000 0x3e build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_SetPitch_NoReload + 0x00000000 0x9c build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigColorKeying_NoReload + 0x00000000 0x4a build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_EnableColorKeying_NoReload + 0x00000000 0x38 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_DisableColorKeying_NoReload + 0x00000000 0x38 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_EnableCLUT_NoReload + 0x00000000 0x38 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_DisableCLUT_NoReload + 0x00000000 0x38 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_GetError + 0x00000000 0x6 build/debug/stm32h7xx_hal_ltdc.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_ltdc_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_ltdc_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_ltdc_ex.o + .debug_info 0x00000000 0x81 build/debug/stm32h7xx_hal_ltdc_ex.o + .debug_abbrev 0x00000000 0x26 build/debug/stm32h7xx_hal_ltdc_ex.o + .debug_aranges + 0x00000000 0x18 build/debug/stm32h7xx_hal_ltdc_ex.o + .debug_line 0x00000000 0x59 build/debug/stm32h7xx_hal_ltdc_ex.o + .debug_str 0x00000000 0x1ae build/debug/stm32h7xx_hal_ltdc_ex.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_ltdc_ex.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_ltdc_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_mdma.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_mdma.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_mdma.o + .text.MDMA_SetConfig + 0x00000000 0x90 build/debug/stm32h7xx_hal_mdma.o + .text.MDMA_Init + 0x00000000 0xb8 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_Init + 0x00000000 0x60 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_DeInit + 0x00000000 0x56 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_ConfigPostRequestMask + 0x00000000 0x6a build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_RegisterCallback + 0x00000000 0x78 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_UnRegisterCallback + 0x00000000 0x90 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_LinkedList_CreateNode + 0x00000000 0x10a build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_LinkedList_AddNode + 0x00000000 0xe2 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_LinkedList_RemoveNode + 0x00000000 0xcc build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_LinkedList_EnableCircularMode + 0x00000000 0x58 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_LinkedList_DisableCircularMode + 0x00000000 0x52 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_Start + 0x00000000 0x76 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_Start_IT + 0x00000000 0xaa build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_Abort + 0x00000000 0x7a build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_Abort_IT + 0x00000000 0x2a build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_PollForTransfer + 0x00000000 0x12c build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_GenerateSWRequest + 0x00000000 0x40 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_IRQHandler + 0x00000000 0x1b0 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_mdma.o + .text.HAL_MDMA_GetError + 0x00000000 0x4 build/debug/stm32h7xx_hal_mdma.o + .debug_info 0x00000000 0xe03 build/debug/stm32h7xx_hal_mdma.o + .debug_abbrev 0x00000000 0x243 build/debug/stm32h7xx_hal_mdma.o + .debug_loclists + 0x00000000 0xc23 build/debug/stm32h7xx_hal_mdma.o + .debug_aranges + 0x00000000 0xc0 build/debug/stm32h7xx_hal_mdma.o + .debug_rnglists + 0x00000000 0x94 build/debug/stm32h7xx_hal_mdma.o + .debug_line 0x00000000 0x13de build/debug/stm32h7xx_hal_mdma.o + .debug_str 0x00000000 0xa17 build/debug/stm32h7xx_hal_mdma.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_mdma.o + .debug_frame 0x00000000 0x26c build/debug/stm32h7xx_hal_mdma.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_mdma.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_mmc.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_mmc.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_mmc.o + .debug_info 0x00000000 0x81 build/debug/stm32h7xx_hal_mmc.o + .debug_abbrev 0x00000000 0x26 build/debug/stm32h7xx_hal_mmc.o + .debug_aranges + 0x00000000 0x18 build/debug/stm32h7xx_hal_mmc.o + .debug_line 0x00000000 0x55 build/debug/stm32h7xx_hal_mmc.o + .debug_str 0x00000000 0x1aa build/debug/stm32h7xx_hal_mmc.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_mmc.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_mmc.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_mmc_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_mmc_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_mmc_ex.o + .debug_info 0x00000000 0x81 build/debug/stm32h7xx_hal_mmc_ex.o + .debug_abbrev 0x00000000 0x26 build/debug/stm32h7xx_hal_mmc_ex.o + .debug_aranges + 0x00000000 0x18 build/debug/stm32h7xx_hal_mmc_ex.o + .debug_line 0x00000000 0x58 build/debug/stm32h7xx_hal_mmc_ex.o + .debug_str 0x00000000 0x1ad build/debug/stm32h7xx_hal_mmc_ex.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_mmc_ex.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_mmc_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_msp.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_msp.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_msp.o + .text.HAL_FMC_MspDeInit + 0x00000000 0x80 build/debug/stm32h7xx_hal_msp.o + .text.HAL_CRC_MspDeInit + 0x00000000 0x24 build/debug/stm32h7xx_hal_msp.o + .text.HAL_FDCAN_MspDeInit + 0x00000000 0x44 build/debug/stm32h7xx_hal_msp.o + .text.HAL_I2C_MspDeInit + 0x00000000 0x3c build/debug/stm32h7xx_hal_msp.o + .text.HAL_LTDC_MspDeInit + 0x00000000 0x7c build/debug/stm32h7xx_hal_msp.o + .text.HAL_SD_MspDeInit + 0x00000000 0x4c build/debug/stm32h7xx_hal_msp.o + .text.HAL_UART_MspDeInit + 0x00000000 0x58 build/debug/stm32h7xx_hal_msp.o + .text.HAL_PCD_MspDeInit + 0x00000000 0x34 build/debug/stm32h7xx_hal_msp.o + .text.HAL_SDRAM_MspDeInit + 0x00000000 0x8 build/debug/stm32h7xx_hal_msp.o + .bss.FMC_DeInitialized + 0x00000000 0x4 build/debug/stm32h7xx_hal_msp.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_nand.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_nand.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_nand.o + .debug_info 0x00000000 0x81 build/debug/stm32h7xx_hal_nand.o + .debug_abbrev 0x00000000 0x26 build/debug/stm32h7xx_hal_nand.o + .debug_aranges + 0x00000000 0x18 build/debug/stm32h7xx_hal_nand.o + .debug_line 0x00000000 0x56 build/debug/stm32h7xx_hal_nand.o + .debug_str 0x00000000 0x1ab build/debug/stm32h7xx_hal_nand.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_nand.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_nand.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_nor.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_nor.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_nor.o + .debug_info 0x00000000 0x81 build/debug/stm32h7xx_hal_nor.o + .debug_abbrev 0x00000000 0x26 build/debug/stm32h7xx_hal_nor.o + .debug_aranges + 0x00000000 0x18 build/debug/stm32h7xx_hal_nor.o + .debug_line 0x00000000 0x55 build/debug/stm32h7xx_hal_nor.o + .debug_str 0x00000000 0x1aa build/debug/stm32h7xx_hal_nor.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_nor.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_nor.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_pcd.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_pcd.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_pcd.o + .text.PCD_WriteEmptyTxFifo + 0x00000000 0xd0 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DeInit + 0x00000000 0x2e build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_Start + 0x00000000 0x44 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_Stop + 0x00000000 0x4c build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DataOutStageCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.PCD_EP_OutXfrComplete_int + 0x00000000 0x104 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DataInStageCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_SetupStageCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.PCD_EP_OutSetupPacket_int + 0x00000000 0x50 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_SOFCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_ResetCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_SuspendCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_ResumeCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_ISOOUTIncompleteCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_ISOINIncompleteCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_ConnectCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DisconnectCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DevConnect + 0x00000000 0x3e build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DevDisconnect + 0x00000000 0x3e build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_SetAddress + 0x00000000 0x26 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_Open + 0x00000000 0x8c build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_Close + 0x00000000 0x70 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_Receive + 0x00000000 0x4a build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_GetRxCount + 0x00000000 0x12 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_Transmit + 0x00000000 0x4a build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_SetStall + 0x00000000 0x86 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_ClrStall + 0x00000000 0x74 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_Abort + 0x00000000 0x34 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_IRQHandler + 0x00000000 0x600 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_EP_Flush + 0x00000000 0x36 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_ActivateRemoteWakeup + 0x00000000 0xa build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_DeActivateRemoteWakeup + 0x00000000 0xa build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_pcd.o + .text.HAL_PCD_SetTestMode + 0x00000000 0x24 build/debug/stm32h7xx_hal_pcd.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_pcd_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_pcd_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_SetTxFiFo + 0x00000000 0x4c build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_SetRxFiFo + 0x00000000 0x8 build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_DeActivateLPM + 0x00000000 0x20 build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_ActivateBCD + 0x00000000 0x2c build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_DeActivateBCD + 0x00000000 0x24 build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_LPM_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_BCD_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pcd_ex.o + .text.HAL_PCDEx_BCD_VBUSDetect + 0x00000000 0xb8 build/debug/stm32h7xx_hal_pcd_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_pwr.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_pwr.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_DeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnableBkUpAccess + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_DisableBkUpAccess + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_ConfigPVD + 0x00000000 0xa0 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnablePVD + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_DisablePVD + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnableWakeUpPin + 0x00000000 0x18 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_DisableWakeUpPin + 0x00000000 0x14 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnterSLEEPMode + 0x00000000 0x1c build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnterSTOPMode + 0x00000000 0x44 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnterSTANDBYMode + 0x00000000 0x28 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnableSleepOnExit + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_DisableSleepOnExit + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_EnableSEVOnPend + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_DisableSEVOnPend + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_PVDCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr.o + .text.HAL_PWR_PVD_IRQHandler + 0x00000000 0x28 build/debug/stm32h7xx_hal_pwr.o + .debug_info 0x00000000 0x922 build/debug/stm32h7xx_hal_pwr.o + .debug_abbrev 0x00000000 0x196 build/debug/stm32h7xx_hal_pwr.o + .debug_loclists + 0x00000000 0x50 build/debug/stm32h7xx_hal_pwr.o + .debug_aranges + 0x00000000 0xa0 build/debug/stm32h7xx_hal_pwr.o + .debug_rnglists + 0x00000000 0x74 build/debug/stm32h7xx_hal_pwr.o + .debug_line 0x00000000 0x3d1 build/debug/stm32h7xx_hal_pwr.o + .debug_str 0x00000000 0x600 build/debug/stm32h7xx_hal_pwr.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_pwr.o + .debug_frame 0x00000000 0x128 build/debug/stm32h7xx_hal_pwr.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_pwr.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_pwr_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_pwr_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetSupplyConfig + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_ControlVoltageScaling + 0x00000000 0x48 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetVoltageRange + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_ControlStopModeVoltageScaling + 0x00000000 0x14 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetStopModeVoltageRange + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnterSTOP2Mode + 0x00000000 0x4c build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnterSTOPMode + 0x00000000 0x58 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_ClearPendingEvent + 0x00000000 0x4 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnterSTANDBYMode + 0x00000000 0x30 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_ConfigD3Domain + 0x00000000 0x14 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableFlashPowerDown + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableFlashPowerDown + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableMemoryShutOff + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableMemoryShutOff + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableWakeUpPin + 0x00000000 0xa8 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableWakeUpPin + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetWakeupFlag + 0x00000000 0xc build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_ClearWakeupFlag + 0x00000000 0x1c build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WKUP1_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WKUP2_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WKUP3_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WKUP4_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WKUP5_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WKUP6_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_WAKEUP_PIN_IRQHandler + 0x00000000 0x98 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableBkUpReg + 0x00000000 0x34 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableBkUpReg + 0x00000000 0x34 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableUSBReg + 0x00000000 0x34 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableUSBReg + 0x00000000 0x34 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableUSBVoltageDetector + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableBatteryCharging + 0x00000000 0x1c build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableBatteryCharging + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableAnalogBooster + 0x00000000 0x18 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableAnalogBooster + 0x00000000 0x18 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableMonitoring + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableMonitoring + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetTemperatureLevel + 0x00000000 0x1c build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetVBATLevel + 0x00000000 0x1c build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetMMCVoltage + 0x00000000 0x18 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_ConfigAVD + 0x00000000 0x98 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableAVD + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableAVD + 0x00000000 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_AVDCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_pwr_ex.o + .text.HAL_PWREx_PVD_AVD_IRQHandler + 0x00000000 0x78 build/debug/stm32h7xx_hal_pwr_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_rcc.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_rcc.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_DeInit + 0x00000000 0x1d4 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_MCOConfig + 0x00000000 0xa4 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_EnableCSS + 0x00000000 0x10 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_DisableCSS + 0x00000000 0x10 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_GetOscConfig + 0x00000000 0x14c build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_GetClockConfig + 0x00000000 0x54 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_CSSCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_rcc.o + .text.HAL_RCC_NMI_IRQHandler + 0x00000000 0x20 build/debug/stm32h7xx_hal_rcc.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_rcc_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_rcc_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKConfig + 0x00000000 0x1e0 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetD1PCLK1Freq + 0x00000000 0x24 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetD1SysClockFreq + 0x00000000 0x44 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnableLSECSS + 0x00000000 0x10 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisableLSECSS + 0x00000000 0x18 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnableLSECSS_IT + 0x00000000 0x30 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_WakeUpStopCLKConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_KerWakeUpStopCLKConfig + 0x00000000 0x14 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRSConfig + 0x00000000 0x74 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRSSoftwareSynchronizationGenerate + 0x00000000 0x10 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRSGetSynchronizationInfo + 0x00000000 0x24 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRSWaitSynchronization + 0x00000000 0xac build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRS_SyncOkCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRS_SyncWarnCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRS_ExpectedSyncCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRS_ErrorCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_CRS_IRQHandler + 0x00000000 0x88 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_LSECSS_Callback + 0x00000000 0x2 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_LSECSS_IRQHandler + 0x00000000 0x20 build/debug/stm32h7xx_hal_rcc_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_sd.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_sd.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_sd.o + .text.SD_PowerOFF + 0x00000000 0xa build/debug/stm32h7xx_hal_sd.o + .text.SD_Read_IT + 0x00000000 0x3c build/debug/stm32h7xx_hal_sd.o + .text.SD_Write_IT + 0x00000000 0x4c build/debug/stm32h7xx_hal_sd.o + .text.SD_SwitchSpeed + 0x00000000 0x114 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_DeInit + 0x00000000 0x24 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_ReadBlocks + 0x00000000 0x20c build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_WriteBlocks + 0x00000000 0x21c build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_ReadBlocks_IT + 0x00000000 0xd4 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_WriteBlocks_IT + 0x00000000 0xd0 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_ReadBlocks_DMA + 0x00000000 0xe0 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_WriteBlocks_DMA + 0x00000000 0xe0 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_Erase + 0x00000000 0xf8 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_GetError + 0x00000000 0x4 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_TxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_RxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_ErrorCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_AbortCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_GetCardCID + 0x00000000 0x52 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_GetCardInfo + 0x00000000 0x24 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_ConfigSpeedBusOperation + 0x00000000 0x104 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_Abort + 0x00000000 0xf4 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_Abort_IT + 0x00000000 0x4c build/debug/stm32h7xx_hal_sd.o + .text.HAL_SDEx_Read_DMADoubleBuf0CpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SDEx_Read_DMADoubleBuf1CpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SDEx_Write_DMADoubleBuf0CpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SDEx_Write_DMADoubleBuf1CpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_IRQHandler + 0x00000000 0x22c build/debug/stm32h7xx_hal_sd.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_sd_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_sd_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_sd_ex.o + .text.HAL_SDEx_ConfigDMAMultiBuffer + 0x00000000 0x26 build/debug/stm32h7xx_hal_sd_ex.o + .text.HAL_SDEx_ReadBlocksDMAMultiBuffer + 0x00000000 0xd4 build/debug/stm32h7xx_hal_sd_ex.o + .text.HAL_SDEx_WriteBlocksDMAMultiBuffer + 0x00000000 0xc0 build/debug/stm32h7xx_hal_sd_ex.o + .text.HAL_SDEx_ChangeDMABuffer + 0x00000000 0x10 build/debug/stm32h7xx_hal_sd_ex.o + .debug_info 0x00000000 0x7d8 build/debug/stm32h7xx_hal_sd_ex.o + .debug_abbrev 0x00000000 0x22d build/debug/stm32h7xx_hal_sd_ex.o + .debug_loclists + 0x00000000 0x355 build/debug/stm32h7xx_hal_sd_ex.o + .debug_aranges + 0x00000000 0x38 build/debug/stm32h7xx_hal_sd_ex.o + .debug_rnglists + 0x00000000 0x27 build/debug/stm32h7xx_hal_sd_ex.o + .debug_line 0x00000000 0x486 build/debug/stm32h7xx_hal_sd_ex.o + .debug_str 0x00000000 0x69f build/debug/stm32h7xx_hal_sd_ex.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_sd_ex.o + .debug_frame 0x00000000 0x84 build/debug/stm32h7xx_hal_sd_ex.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_sd_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_sdram.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_sdram.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_DeInit + 0x00000000 0x1c build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_DMA_XferCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sdram.o + .text.SDRAM_DMACpltProt + 0x00000000 0x1a build/debug/stm32h7xx_hal_sdram.o + .text.SDRAM_DMACplt + 0x00000000 0x1a build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_DMA_XferErrorCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_sdram.o + .text.SDRAM_DMAError + 0x00000000 0x1a build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Read_8b + 0x00000000 0x5a build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Write_8b + 0x00000000 0x56 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Read_16b + 0x00000000 0x68 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Write_16b + 0x00000000 0x72 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Read_32b + 0x00000000 0x52 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Write_32b + 0x00000000 0x54 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Read_DMA + 0x00000000 0x74 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_Write_DMA + 0x00000000 0x68 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_WriteProtection_Enable + 0x00000000 0x32 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_WriteProtection_Disable + 0x00000000 0x2e build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_SendCommand + 0x00000000 0x42 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_ProgramRefreshRate + 0x00000000 0x30 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_SetAutoRefreshNumber + 0x00000000 0x30 build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_GetModeStatus + 0x00000000 0xc build/debug/stm32h7xx_hal_sdram.o + .text.HAL_SDRAM_GetState + 0x00000000 0x6 build/debug/stm32h7xx_hal_sdram.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_sram.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_sram.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_sram.o + .debug_info 0x00000000 0x81 build/debug/stm32h7xx_hal_sram.o + .debug_abbrev 0x00000000 0x26 build/debug/stm32h7xx_hal_sram.o + .debug_aranges + 0x00000000 0x18 build/debug/stm32h7xx_hal_sram.o + .debug_line 0x00000000 0x56 build/debug/stm32h7xx_hal_sram.o + .debug_str 0x00000000 0x1ab build/debug/stm32h7xx_hal_sram.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_hal_sram.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_hal_sram.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_uart.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_uart.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_uart.o + .text.UART_EndTxTransfer + 0x00000000 0x32 build/debug/stm32h7xx_hal_uart.o + .text.UART_TxISR_8BIT + 0x00000000 0x56 build/debug/stm32h7xx_hal_uart.o + .text.UART_TxISR_16BIT + 0x00000000 0x5a build/debug/stm32h7xx_hal_uart.o + .text.UART_TxISR_8BIT_FIFOEN + 0x00000000 0x74 build/debug/stm32h7xx_hal_uart.o + .text.UART_TxISR_16BIT_FIFOEN + 0x00000000 0x78 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_MspInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_MspDeInit + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_DeInit + 0x00000000 0x44 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Transmit_IT + 0x00000000 0xa8 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Transmit_DMA + 0x00000000 0x9c build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_DMAPause + 0x00000000 0x8c build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_DMAResume + 0x00000000 0x7c build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_DMAStop + 0x00000000 0xb2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Abort + 0x00000000 0x124 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortTransmit + 0x00000000 0x98 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortReceive + 0x00000000 0xb8 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_TxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMATransmitCplt + 0x00000000 0x46 build/debug/stm32h7xx_hal_uart.o + .text.UART_EndTransmit_IT + 0x00000000 0x24 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_TxHalfCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMATxHalfCplt + 0x00000000 0xa build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_RxCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_RxHalfCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_ErrorCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMAError + 0x00000000 0x58 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMAAbortOnError + 0x00000000 0x10 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Abort_IT + 0x00000000 0x150 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMARxAbortCallback + 0x00000000 0x44 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMATxAbortCallback + 0x00000000 0x50 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortTransmitCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortTransmit_IT + 0x00000000 0xac build/debug/stm32h7xx_hal_uart.o + .text.UART_DMATxOnlyAbortCallback + 0x00000000 0x2a build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortReceiveCpltCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_AbortReceive_IT + 0x00000000 0xd8 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMARxOnlyAbortCallback + 0x00000000 0x28 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UARTEx_RxEventCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_IRQHandler + 0x00000000 0x3d0 build/debug/stm32h7xx_hal_uart.o + .text.UART_RxISR_8BIT + 0x00000000 0xdc build/debug/stm32h7xx_hal_uart.o + .text.UART_RxISR_16BIT + 0x00000000 0xd8 build/debug/stm32h7xx_hal_uart.o + .text.UART_RxISR_8BIT_FIFOEN + 0x00000000 0x1c8 build/debug/stm32h7xx_hal_uart.o + .text.UART_RxISR_16BIT_FIFOEN + 0x00000000 0x1c8 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMARxHalfCplt + 0x00000000 0x20 build/debug/stm32h7xx_hal_uart.o + .text.UART_DMAReceiveCplt + 0x00000000 0x90 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_ReceiverTimeout_Config + 0x00000000 0x18 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_EnableReceiverTimeout + 0x00000000 0x4c build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_DisableReceiverTimeout + 0x00000000 0x4c build/debug/stm32h7xx_hal_uart.o + .text.HAL_MultiProcessor_EnterMuteMode + 0x00000000 0xc build/debug/stm32h7xx_hal_uart.o + .text.HAL_HalfDuplex_EnableTransmitter + 0x00000000 0x4c build/debug/stm32h7xx_hal_uart.o + .text.HAL_HalfDuplex_EnableReceiver + 0x00000000 0x4c build/debug/stm32h7xx_hal_uart.o + .text.HAL_LIN_SendBreak + 0x00000000 0x32 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_GetState + 0x00000000 0xc build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_GetError + 0x00000000 0x6 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Transmit + 0x00000000 0xd0 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Receive + 0x00000000 0x116 build/debug/stm32h7xx_hal_uart.o + .text.HAL_HalfDuplex_Init + 0x00000000 0x72 build/debug/stm32h7xx_hal_uart.o + .text.HAL_LIN_Init + 0x00000000 0x96 build/debug/stm32h7xx_hal_uart.o + .text.HAL_MultiProcessor_Init + 0x00000000 0x8e build/debug/stm32h7xx_hal_uart.o + .text.HAL_MultiProcessor_EnableMuteMode + 0x00000000 0x38 build/debug/stm32h7xx_hal_uart.o + .text.HAL_MultiProcessor_DisableMuteMode + 0x00000000 0x38 build/debug/stm32h7xx_hal_uart.o + .text.UART_Start_Receive_IT + 0x00000000 0x13c build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Receive_IT + 0x00000000 0x4c build/debug/stm32h7xx_hal_uart.o + .text.UART_Start_Receive_DMA + 0x00000000 0xb0 build/debug/stm32h7xx_hal_uart.o + .text.HAL_UART_Receive_DMA + 0x00000000 0x4c build/debug/stm32h7xx_hal_uart.o + .text 0x00000000 0x0 build/debug/stm32h7xx_hal_uart_ex.o + .data 0x00000000 0x0 build/debug/stm32h7xx_hal_uart_ex.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_hal_uart_ex.o + .text.UARTEx_Wakeup_AddressConfig + 0x00000000 0x2e build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_RS485Ex_Init + 0x00000000 0x82 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_WakeupCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_RxFifoFullCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_TxFifoEmptyCallback + 0x00000000 0x2 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_MultiProcessorEx_AddressLength_Set + 0x00000000 0x38 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_StopModeWakeUpSourceConfig + 0x00000000 0x82 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_EnableStopMode + 0x00000000 0x2e build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_DisableStopMode + 0x00000000 0x2e build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_EnableFifoMode + 0x00000000 0x48 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_ReceiveToIdle + 0x00000000 0x15e build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_ReceiveToIdle_IT + 0x00000000 0x4e build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_ReceiveToIdle_DMA + 0x00000000 0x50 build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_GetRxEventType + 0x00000000 0x4 build/debug/stm32h7xx_hal_uart_ex.o + .text 0x00000000 0x0 build/debug/stm32h7xx_it.o + .data 0x00000000 0x0 build/debug/stm32h7xx_it.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_it.o + .text 0x00000000 0x0 build/debug/stm32h7xx_ll_delayblock.o + .data 0x00000000 0x0 build/debug/stm32h7xx_ll_delayblock.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_ll_delayblock.o + .text.DelayBlock_Enable + 0x00000000 0x8e build/debug/stm32h7xx_ll_delayblock.o + .text.DelayBlock_Disable + 0x00000000 0x8 build/debug/stm32h7xx_ll_delayblock.o + .text.DelayBlock_Configure + 0x00000000 0x1c build/debug/stm32h7xx_ll_delayblock.o + .debug_info 0x00000000 0x259 build/debug/stm32h7xx_ll_delayblock.o + .debug_abbrev 0x00000000 0x13c build/debug/stm32h7xx_ll_delayblock.o + .debug_loclists + 0x00000000 0x161 build/debug/stm32h7xx_ll_delayblock.o + .debug_aranges + 0x00000000 0x30 build/debug/stm32h7xx_ll_delayblock.o + .debug_rnglists + 0x00000000 0x20 build/debug/stm32h7xx_ll_delayblock.o + .debug_line 0x00000000 0x2c4 build/debug/stm32h7xx_ll_delayblock.o + .debug_str 0x00000000 0x2a1 build/debug/stm32h7xx_ll_delayblock.o + .comment 0x00000000 0x24 build/debug/stm32h7xx_ll_delayblock.o + .debug_frame 0x00000000 0x64 build/debug/stm32h7xx_ll_delayblock.o + .ARM.attributes + 0x00000000 0x32 build/debug/stm32h7xx_ll_delayblock.o + .text 0x00000000 0x0 build/debug/stm32h7xx_ll_fmc.o + .data 0x00000000 0x0 build/debug/stm32h7xx_ll_fmc.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NORSRAM_Init + 0x00000000 0x94 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NORSRAM_DeInit + 0x00000000 0x34 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NORSRAM_Timing_Init + 0x00000000 0x5c build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NORSRAM_Extended_Timing_Init + 0x00000000 0x44 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NORSRAM_WriteOperation_Enable + 0x00000000 0x10 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NORSRAM_WriteOperation_Disable + 0x00000000 0x10 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_Init + 0x00000000 0x38 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_CommonSpace_Timing_Init + 0x00000000 0x1a build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_AttributeSpace_Timing_Init + 0x00000000 0x1a build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_DeInit + 0x00000000 0x1c build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_ECC_Enable + 0x00000000 0xc build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_ECC_Disable + 0x00000000 0xc build/debug/stm32h7xx_ll_fmc.o + .text.FMC_NAND_GetECC + 0x00000000 0x3a build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_DeInit + 0x00000000 0x1e build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_WriteProtection_Enable + 0x00000000 0x10 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_WriteProtection_Disable + 0x00000000 0x10 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_SendCommand + 0x00000000 0x2a build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_ProgramRefreshRate + 0x00000000 0x10 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_SetAutoRefreshNumber + 0x00000000 0x12 build/debug/stm32h7xx_ll_fmc.o + .text.FMC_SDRAM_GetModeStatus + 0x00000000 0x14 build/debug/stm32h7xx_ll_fmc.o + .text 0x00000000 0x0 build/debug/stm32h7xx_ll_sdmmc.o + .data 0x00000000 0x0 build/debug/stm32h7xx_ll_sdmmc.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_WriteFIFO + 0x00000000 0xa build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_PowerState_Cycle + 0x00000000 0xc build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_PowerState_OFF + 0x00000000 0xc build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_GetDataCounter + 0x00000000 0x4 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_GetFIFOCount + 0x00000000 0x6 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_SetSDMMCReadWaitMode + 0x00000000 0xe build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdBlockCount + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdReadSingleBlock + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdReadMultiBlock + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdWriteSingleBlock + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdWriteMultiBlock + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSDEraseStartAdd + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSDEraseEndAdd + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdEraseStartAdd + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdEraseEndAdd + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdErase + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdStopTransfer + 0x00000000 0x58 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSetRelAddMmc + 0x00000000 0x34 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSleepMmc + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSwitch + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdVoltageSwitch + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSendEXTCSD + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdOpCondition + 0x00000000 0x2c build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_GetCmdResp4 + 0x00000000 0x60 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_CmdSendOperationcondition + 0x00000000 0x30 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_GetCmdResp5 + 0x00000000 0xbc build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_SDIO_CmdReadWriteDirect + 0x00000000 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_SDIO_CmdReadWriteExtended + 0x00000000 0x30 build/debug/stm32h7xx_ll_sdmmc.o + .text 0x00000000 0x0 build/debug/stm32h7xx_ll_usb.o + .data 0x00000000 0x0 build/debug/stm32h7xx_ll_usb.o + .bss 0x00000000 0x0 build/debug/stm32h7xx_ll_usb.o + .text.USB_SetTurnaroundTime + 0x00000000 0xe4 build/debug/stm32h7xx_ll_usb.o + .text.USB_EnableGlobalInt + 0x00000000 0xc build/debug/stm32h7xx_ll_usb.o + .text.USB_GetDevSpeed + 0x00000000 0x22 build/debug/stm32h7xx_ll_usb.o + .text.USB_ActivateEndpoint + 0x00000000 0x98 build/debug/stm32h7xx_ll_usb.o + .text.USB_ActivateDedicatedEndpoint + 0x00000000 0xa0 build/debug/stm32h7xx_ll_usb.o + .text.USB_DeactivateEndpoint + 0x00000000 0xe0 build/debug/stm32h7xx_ll_usb.o + .text.USB_DeactivateDedicatedEndpoint + 0x00000000 0xa0 build/debug/stm32h7xx_ll_usb.o + .text.USB_EPStopXfer + 0x00000000 0xbe build/debug/stm32h7xx_ll_usb.o + .text.USB_WritePacket + 0x00000000 0x2e build/debug/stm32h7xx_ll_usb.o + .text.USB_EPStartXfer + 0x00000000 0x244 build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadPacket + 0x00000000 0x46 build/debug/stm32h7xx_ll_usb.o + .text.USB_EPSetStall + 0x00000000 0x5a build/debug/stm32h7xx_ll_usb.o + .text.USB_EPClearStall + 0x00000000 0x5c build/debug/stm32h7xx_ll_usb.o + .text.USB_StopDevice + 0x00000000 0x40 build/debug/stm32h7xx_ll_usb.o + .text.USB_SetDevAddress + 0x00000000 0x20 build/debug/stm32h7xx_ll_usb.o + .text.USB_DevConnect + 0x00000000 0x1c build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadInterrupts + 0x00000000 0x8 build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadChInterrupts + 0x00000000 0x12 build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadDevAllOutEpInterrupt + 0x00000000 0x10 build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadDevAllInEpInterrupt + 0x00000000 0x10 build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadDevOutEPInterrupt + 0x00000000 0x12 build/debug/stm32h7xx_ll_usb.o + .text.USB_ReadDevInEPInterrupt + 0x00000000 0x24 build/debug/stm32h7xx_ll_usb.o + .text.USB_ClearInterrupts + 0x00000000 0x8 build/debug/stm32h7xx_ll_usb.o + .text.USB_ActivateSetup + 0x00000000 0x1c build/debug/stm32h7xx_ll_usb.o + .text.USB_EP0_OutStart + 0x00000000 0x60 build/debug/stm32h7xx_ll_usb.o + .text.USB_HostInit + 0x00000000 0xd8 build/debug/stm32h7xx_ll_usb.o + .text.USB_InitFSLSPClkSel + 0x00000000 0x42 build/debug/stm32h7xx_ll_usb.o + .text.USB_ResetPort + 0x00000000 0x3e build/debug/stm32h7xx_ll_usb.o + .text.USB_DriveVbus + 0x00000000 0x46 build/debug/stm32h7xx_ll_usb.o + .text.USB_GetHostSpeed + 0x00000000 0x16 build/debug/stm32h7xx_ll_usb.o + .text.USB_GetCurrentFrame + 0x00000000 0xa build/debug/stm32h7xx_ll_usb.o + .text.USB_HC_Init + 0x00000000 0x13c build/debug/stm32h7xx_ll_usb.o + .text.USB_HC_ReadInterrupt + 0x00000000 0xa build/debug/stm32h7xx_ll_usb.o + .text.USB_HC_Halt + 0x00000000 0xfc build/debug/stm32h7xx_ll_usb.o + .text.USB_DoPing + 0x00000000 0x24 build/debug/stm32h7xx_ll_usb.o + .text.USB_HC_StartXfer + 0x00000000 0x2d8 build/debug/stm32h7xx_ll_usb.o + .text.USB_StopHost + 0x00000000 0x92 build/debug/stm32h7xx_ll_usb.o + .text.USB_ActivateRemoteWakeup + 0x00000000 0x1a build/debug/stm32h7xx_ll_usb.o + .text.USB_DeActivateRemoteWakeup + 0x00000000 0x10 build/debug/stm32h7xx_ll_usb.o + .text 0x00000000 0x0 build/debug/syscalls.o + .data 0x00000000 0x0 build/debug/syscalls.o + .bss 0x00000000 0x0 build/debug/syscalls.o + .text.initialise_monitor_handles + 0x00000000 0x2 build/debug/syscalls.o + .text._getpid 0x00000000 0x4 build/debug/syscalls.o + .text._kill 0x00000000 0x10 build/debug/syscalls.o + .text._exit 0x00000000 0xc build/debug/syscalls.o + .text._read 0x00000000 0x20 build/debug/syscalls.o + .text._write 0x00000000 0x1c build/debug/syscalls.o + .text._close 0x00000000 0x6 build/debug/syscalls.o + .text._fstat 0x00000000 0xa build/debug/syscalls.o + .text._isatty 0x00000000 0x4 build/debug/syscalls.o + .text._lseek 0x00000000 0x4 build/debug/syscalls.o + .text._open 0x00000000 0xa build/debug/syscalls.o + .text._wait 0x00000000 0x10 build/debug/syscalls.o + .text._unlink 0x00000000 0x10 build/debug/syscalls.o + .text._times 0x00000000 0x6 build/debug/syscalls.o + .text._stat 0x00000000 0xa build/debug/syscalls.o + .text._link 0x00000000 0x10 build/debug/syscalls.o + .text._fork 0x00000000 0x10 build/debug/syscalls.o + .text._execve 0x00000000 0x10 build/debug/syscalls.o + .data.environ 0x00000000 0x4 build/debug/syscalls.o + .bss.__env 0x00000000 0x4 build/debug/syscalls.o + .debug_info 0x00000000 0x789 build/debug/syscalls.o + .debug_abbrev 0x00000000 0x1c1 build/debug/syscalls.o + .debug_loclists + 0x00000000 0x2cd build/debug/syscalls.o + .debug_aranges + 0x00000000 0xa8 build/debug/syscalls.o + .debug_rnglists + 0x00000000 0x79 build/debug/syscalls.o + .debug_line 0x00000000 0x380 build/debug/syscalls.o + .debug_str 0x00000000 0x3e1 build/debug/syscalls.o + .comment 0x00000000 0x24 build/debug/syscalls.o + .debug_frame 0x00000000 0x190 build/debug/syscalls.o + .ARM.attributes + 0x00000000 0x32 build/debug/syscalls.o + .text 0x00000000 0x0 build/debug/sysmem.o + .data 0x00000000 0x0 build/debug/sysmem.o + .bss 0x00000000 0x0 build/debug/sysmem.o + .text._sbrk 0x00000000 0x48 build/debug/sysmem.o + .bss.__sbrk_heap_end + 0x00000000 0x4 build/debug/sysmem.o + .debug_info 0x00000000 0x171 build/debug/sysmem.o + .debug_abbrev 0x00000000 0xea build/debug/sysmem.o + .debug_loclists + 0x00000000 0x52 build/debug/sysmem.o + .debug_aranges + 0x00000000 0x20 build/debug/sysmem.o + .debug_rnglists + 0x00000000 0x13 build/debug/sysmem.o + .debug_line 0x00000000 0x13c build/debug/sysmem.o + .debug_str 0x00000000 0x20d build/debug/sysmem.o + .comment 0x00000000 0x24 build/debug/sysmem.o + .debug_frame 0x00000000 0x28 build/debug/sysmem.o + .ARM.attributes + 0x00000000 0x32 build/debug/sysmem.o + .text 0x00000000 0x0 build/debug/system_stm32h7xx.o + .data 0x00000000 0x0 build/debug/system_stm32h7xx.o + .bss 0x00000000 0x0 build/debug/system_stm32h7xx.o + .text.SystemCoreClockUpdate + 0x00000000 0x250 build/debug/system_stm32h7xx.o + .text 0x00000000 0x14 build/debug/startup_stm32h7a3xx.o + .data 0x00000000 0x0 build/debug/startup_stm32h7a3xx.o + .bss 0x00000000 0x0 build/debug/startup_stm32h7a3xx.o + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .text.atexit 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_info 0x00000000 0x11e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_abbrev 0x00000000 0xc1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_loclists + 0x00000000 0x30 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_line 0x00000000 0xee /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_str 0x00000000 0x21f /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .debug_frame 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .text.exit 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_info 0x00000000 0x11b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_abbrev 0x00000000 0xd8 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_loclists + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_line 0x00000000 0x183 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_str 0x00000000 0x208 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .debug_frame 0x00000000 0x28 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.std 0x00000000 0x6c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.stdio_exit_handler + 0x00000000 0x18 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.cleanup_stdio + 0x00000000 0x40 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock + 0x00000000 0x18 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock + 0x00000000 0x18 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.global_stdio_init.part.0 + 0x00000000 0x40 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_acquire + 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_release + 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sfp 0x00000000 0xa4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__sinit 0x00000000 0x30 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock_all + 0x00000000 0x1c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock_all + 0x00000000 0x1c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .data.__sglue 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .bss.__sf 0x00000000 0x138 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .bss.__stdio_exit_handler + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_info 0x00000000 0xfb8 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_abbrev 0x00000000 0x424 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_loclists + 0x00000000 0x2b6 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_aranges + 0x00000000 0x78 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_rnglists + 0x00000000 0x7d /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_line 0x00000000 0x598 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_str 0x00000000 0x785 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .debug_frame 0x00000000 0x144 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .text._fwalk_sglue + 0x00000000 0x3c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_info 0x00000000 0x7d2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_abbrev 0x00000000 0x19b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_loclists + 0x00000000 0x91 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_line 0x00000000 0x204 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_str 0x00000000 0x512 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .debug_frame 0x00000000 0x34 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sread 0x00000000 0x22 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .text.__seofread + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .text.__swrite + 0x00000000 0x38 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sseek 0x00000000 0x26 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .text.__sclose + 0x00000000 0x8 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_info 0x00000000 0xa90 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_abbrev 0x00000000 0x221 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_loclists + 0x00000000 0x25d /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_aranges + 0x00000000 0x40 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_rnglists + 0x00000000 0x2b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_line 0x00000000 0x2b5 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_str 0x00000000 0x56f /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .debug_frame 0x00000000 0x88 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .text._close_r + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_info 0x00000000 0x75c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_abbrev 0x00000000 0x1b0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_loclists + 0x00000000 0x58 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_line 0x00000000 0x1e6 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_str 0x00000000 0x4f8 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .debug_frame 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .text._reclaim_reent + 0x00000000 0xbc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .bss.errno 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_info 0x00000000 0x8a1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_abbrev 0x00000000 0x1f7 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_loclists + 0x00000000 0x9c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_rnglists + 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_line 0x00000000 0x2bc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_str 0x00000000 0x521 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .debug_frame 0x00000000 0x38 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .data._impure_ptr + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .data._impure_data + 0x00000000 0x4c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .debug_info 0x00000000 0x715 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .debug_abbrev 0x00000000 0x149 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .debug_aranges + 0x00000000 0x18 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .debug_line 0x00000000 0x112 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .debug_str 0x00000000 0x502 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .text._lseek_r + 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_info 0x00000000 0x7a8 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_abbrev 0x00000000 0x1c4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_loclists + 0x00000000 0xa0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_line 0x00000000 0x1e5 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_str 0x00000000 0x506 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .debug_frame 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .text._read_r 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_info 0x00000000 0x7bf /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_abbrev 0x00000000 0x1b0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_loclists + 0x00000000 0xa0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_line 0x00000000 0x1e4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_str 0x00000000 0x506 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .debug_frame 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .text._write_r + 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_info 0x00000000 0x7c5 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_abbrev 0x00000000 0x1b5 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_loclists + 0x00000000 0xa0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_line 0x00000000 0x1e5 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_str 0x00000000 0x508 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .debug_frame 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .text.__errno 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_info 0x00000000 0x6fb /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_abbrev 0x00000000 0x15e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_line 0x00000000 0x134 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_str 0x00000000 0x4fc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .debug_frame 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .text.__libc_fini_array + 0x00000000 0x28 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_info 0x00000000 0xf7 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_abbrev 0x00000000 0xcc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_loclists + 0x00000000 0x34 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_line 0x00000000 0xc5 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_str 0x00000000 0x219 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .debug_frame 0x00000000 0x38 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init_recursive + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close_recursive + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire_recursive + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release_recursive + 0x00000000 0x2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___arc4random_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___dd_hash_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___tz_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___env_recursive_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___malloc_recursive_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___at_quick_exit_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___atexit_recursive_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .bss.__lock___sfp_recursive_mutex + 0x00000000 0x1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_info 0x00000000 0x218 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_abbrev 0x00000000 0x115 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_loclists + 0x00000000 0x29 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_aranges + 0x00000000 0x68 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_rnglists + 0x00000000 0x49 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_line 0x00000000 0x187 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_str 0x00000000 0x379 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .debug_frame 0x00000000 0xb0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .text.__register_exitproc + 0x00000000 0xb4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .bss.__atexit0 + 0x00000000 0x8c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .data.__atexit_dummy + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_info 0x00000000 0x2d9 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_abbrev 0x00000000 0x1ea /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_loclists + 0x00000000 0x9e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_rnglists + 0x00000000 0x14 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_line 0x00000000 0x25c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_str 0x00000000 0x33e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .debug_frame 0x00000000 0x34 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .text.__call_exitprocs + 0x00000000 0xbc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .bss.__atexit 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .data.__atexit_recursive_mutex + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_info 0x00000000 0x290 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_abbrev 0x00000000 0x1cd /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_loclists + 0x00000000 0xe2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_rnglists + 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_line 0x00000000 0x21b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_str 0x00000000 0x2fe /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .debug_frame 0x00000000 0x48 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .text._free_r 0x00000000 0x94 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_info 0x00000000 0x851 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_abbrev 0x00000000 0x236 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_loclists + 0x00000000 0xe0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_rnglists + 0x00000000 0x14 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_line 0x00000000 0x2d4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_str 0x00000000 0x582 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .debug_frame 0x00000000 0x38 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .text.sbrk_aligned + 0x00000000 0x44 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .text._malloc_r + 0x00000000 0x100 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_sbrk_start + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_free_list + 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_info 0x00000000 0x9bc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_abbrev 0x00000000 0x24a /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_loclists + 0x00000000 0x23a /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_aranges + 0x00000000 0x28 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_rnglists + 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_line 0x00000000 0x4c4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_str 0x00000000 0x5e3 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x00000000 0x50 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .text.__malloc_lock + 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .text.__malloc_unlock + 0x00000000 0xc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_info 0x00000000 0x76b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_abbrev 0x00000000 0x1bf /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_loclists + 0x00000000 0x46 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_aranges + 0x00000000 0x28 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_rnglists + 0x00000000 0x19 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_line 0x00000000 0x1b4 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_str 0x00000000 0x584 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .debug_frame 0x00000000 0x30 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .text.__sflush_r + 0x00000000 0x104 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .text._fflush_r + 0x00000000 0x50 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .text.fflush 0x00000000 0x28 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_info 0x00000000 0x9f2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_abbrev 0x00000000 0x2b2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_loclists + 0x00000000 0x209 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_aranges + 0x00000000 0x30 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_rnglists + 0x00000000 0x3b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_line 0x00000000 0x41e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_str 0x00000000 0x5cd /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .debug_frame 0x00000000 0x5c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .text._sbrk_r 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_info 0x00000000 0x782 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_abbrev 0x00000000 0x1da /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_loclists + 0x00000000 0x58 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_aranges + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_rnglists + 0x00000000 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_line 0x00000000 0x1e6 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_str 0x00000000 0x50b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .comment 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x00000000 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .ARM.attributes + 0x00000000 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .ARM.extab 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + .rodata 0x00000000 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + .eh_frame 0x00000000 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + .text 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + .data 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + .bss 0x00000000 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + +Memory Configuration + +Name Origin Length Attributes +DTCMRAM 0x20000000 0x00020000 xrw +RAM 0x24000000 0x00100000 xrw +ITCMRAM 0x00000000 0x00010000 xrw +FLASH 0x08000000 0x00200000 xr +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +LOAD build/debug/main.o +LOAD build/debug/stm32h7xx_hal.o +LOAD build/debug/stm32h7xx_hal_cortex.o +LOAD build/debug/stm32h7xx_hal_crc.o +LOAD build/debug/stm32h7xx_hal_crc_ex.o +LOAD build/debug/stm32h7xx_hal_dma.o +LOAD build/debug/stm32h7xx_hal_dma_ex.o +LOAD build/debug/stm32h7xx_hal_exti.o +LOAD build/debug/stm32h7xx_hal_fdcan.o +LOAD build/debug/stm32h7xx_hal_flash.o +LOAD build/debug/stm32h7xx_hal_flash_ex.o +LOAD build/debug/stm32h7xx_hal_gpio.o +LOAD build/debug/stm32h7xx_hal_hsem.o +LOAD build/debug/stm32h7xx_hal_i2c.o +LOAD build/debug/stm32h7xx_hal_i2c_ex.o +LOAD build/debug/stm32h7xx_hal_ltdc.o +LOAD build/debug/stm32h7xx_hal_ltdc_ex.o +LOAD build/debug/stm32h7xx_hal_mdma.o +LOAD build/debug/stm32h7xx_hal_mmc.o +LOAD build/debug/stm32h7xx_hal_mmc_ex.o +LOAD build/debug/stm32h7xx_hal_msp.o +LOAD build/debug/stm32h7xx_hal_nand.o +LOAD build/debug/stm32h7xx_hal_nor.o +LOAD build/debug/stm32h7xx_hal_pcd.o +LOAD build/debug/stm32h7xx_hal_pcd_ex.o +LOAD build/debug/stm32h7xx_hal_pwr.o +LOAD build/debug/stm32h7xx_hal_pwr_ex.o +LOAD build/debug/stm32h7xx_hal_rcc.o +LOAD build/debug/stm32h7xx_hal_rcc_ex.o +LOAD build/debug/stm32h7xx_hal_sd.o +LOAD build/debug/stm32h7xx_hal_sd_ex.o +LOAD build/debug/stm32h7xx_hal_sdram.o +LOAD build/debug/stm32h7xx_hal_sram.o +LOAD build/debug/stm32h7xx_hal_uart.o +LOAD build/debug/stm32h7xx_hal_uart_ex.o +LOAD build/debug/stm32h7xx_it.o +LOAD build/debug/stm32h7xx_ll_delayblock.o +LOAD build/debug/stm32h7xx_ll_fmc.o +LOAD build/debug/stm32h7xx_ll_sdmmc.o +LOAD build/debug/stm32h7xx_ll_usb.o +LOAD build/debug/syscalls.o +LOAD build/debug/sysmem.o +LOAD build/debug/system_stm32h7xx.o +LOAD build/debug/startup_stm32h7a3xx.o +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libm.a +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libnosys.a +START GROUP +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a +END GROUP +START GROUP +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a +END GROUP +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + 0x20020000 _estack = (ORIGIN (DTCMRAM) + LENGTH (DTCMRAM)) + 0x00000200 _Min_Heap_Size = 0x200 + 0x00000400 _Min_Stack_Size = 0x400 + +.isr_vector 0x08000000 0x2ac + 0x08000000 . = ALIGN (0x4) + *(.isr_vector) + .isr_vector 0x08000000 0x2ac build/debug/startup_stm32h7a3xx.o + 0x08000000 g_pfnVectors + 0x080002ac . = ALIGN (0x4) + +.text 0x080002ac 0x70d4 + 0x080002ac . = ALIGN (0x4) + *(.text) + .text 0x080002ac 0x88 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + .text 0x08000334 0x30 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + 0x08000334 __aeabi_uldivmod + .text 0x08000364 0x2f8 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + 0x08000364 __udivmoddi4 + .text 0x0800065c 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + 0x0800065c __aeabi_ldiv0 + 0x0800065c __aeabi_idiv0 + *(.text*) + .text.MX_GPIO_Init + 0x08000660 0x19c build/debug/main.o + .text.Error_Handler + 0x080007fc 0x4 build/debug/main.o + 0x080007fc Error_Handler + .text.MX_FDCAN1_Init + 0x08000800 0x60 build/debug/main.o + .text.MX_FMC_Init + 0x08000860 0x70 build/debug/main.o + .text.MX_I2C4_Init + 0x080008d0 0x54 build/debug/main.o + .text.MX_SDMMC2_SD_Init + 0x08000924 0x28 build/debug/main.o + .text.MX_USART10_UART_Init + 0x0800094c 0x60 build/debug/main.o + .text.MX_USB_OTG_HS_PCD_Init + 0x080009ac 0x38 build/debug/main.o + .text.MX_UART5_Init + 0x080009e4 0x60 build/debug/main.o + .text.MX_LTDC_Init + 0x08000a44 0xbc build/debug/main.o + .text.MX_CRC_Init + 0x08000b00 0x2c build/debug/main.o + .text.SystemClock_Config + 0x08000b2c 0xc0 build/debug/main.o + 0x08000b2c SystemClock_Config + .text.PeriphCommonClock_Config + 0x08000bec 0x48 build/debug/main.o + 0x08000bec PeriphCommonClock_Config + .text.main 0x08000c34 0x60 build/debug/main.o + 0x08000c34 main + .text.HAL_InitTick + 0x08000c94 0x50 build/debug/stm32h7xx_hal.o + 0x08000c94 HAL_InitTick + .text.HAL_Init + 0x08000ce4 0x5c build/debug/stm32h7xx_hal.o + 0x08000ce4 HAL_Init + .text.HAL_IncTick + 0x08000d40 0x18 build/debug/stm32h7xx_hal.o + 0x08000d40 HAL_IncTick + .text.HAL_GetTick + 0x08000d58 0xc build/debug/stm32h7xx_hal.o + 0x08000d58 HAL_GetTick + .text.HAL_Delay + 0x08000d64 0x28 build/debug/stm32h7xx_hal.o + 0x08000d64 HAL_Delay + .text.__NVIC_EnableIRQ + 0x08000d8c 0x1c build/debug/stm32h7xx_hal_cortex.o + .text.__NVIC_SetPriority + 0x08000da8 0x24 build/debug/stm32h7xx_hal_cortex.o + .text.NVIC_EncodePriority + 0x08000dcc 0x3e build/debug/stm32h7xx_hal_cortex.o + *fill* 0x08000e0a 0x2 + .text.HAL_NVIC_SetPriorityGrouping + 0x08000e0c 0x24 build/debug/stm32h7xx_hal_cortex.o + 0x08000e0c HAL_NVIC_SetPriorityGrouping + .text.HAL_NVIC_SetPriority + 0x08000e30 0x20 build/debug/stm32h7xx_hal_cortex.o + 0x08000e30 HAL_NVIC_SetPriority + .text.HAL_NVIC_EnableIRQ + 0x08000e50 0x8 build/debug/stm32h7xx_hal_cortex.o + 0x08000e50 HAL_NVIC_EnableIRQ + .text.HAL_SYSTICK_Config + 0x08000e58 0x28 build/debug/stm32h7xx_hal_cortex.o + 0x08000e58 HAL_SYSTICK_Config + .text.HAL_CRC_Init + 0x08000e80 0x80 build/debug/stm32h7xx_hal_crc.o + 0x08000e80 HAL_CRC_Init + .text.HAL_CRCEx_Polynomial_Set + 0x08000f00 0xc4 build/debug/stm32h7xx_hal_crc_ex.o + 0x08000f00 HAL_CRCEx_Polynomial_Set + .text.FDCAN_CalcultateRamBlockAddresses + 0x08000fc4 0x1d4 build/debug/stm32h7xx_hal_fdcan.o + .text.HAL_FDCAN_Init + 0x08001198 0x294 build/debug/stm32h7xx_hal_fdcan.o + 0x08001198 HAL_FDCAN_Init + .text.HAL_FDCAN_ClockCalibrationCallback + 0x0800142c 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800142c HAL_FDCAN_ClockCalibrationCallback + .text.HAL_FDCAN_TxEventFifoCallback + 0x0800142e 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800142e HAL_FDCAN_TxEventFifoCallback + .text.HAL_FDCAN_RxFifo0Callback + 0x08001430 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001430 HAL_FDCAN_RxFifo0Callback + .text.HAL_FDCAN_RxFifo1Callback + 0x08001432 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001432 HAL_FDCAN_RxFifo1Callback + .text.HAL_FDCAN_TxFifoEmptyCallback + 0x08001434 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001434 HAL_FDCAN_TxFifoEmptyCallback + .text.HAL_FDCAN_TxBufferCompleteCallback + 0x08001436 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001436 HAL_FDCAN_TxBufferCompleteCallback + .text.HAL_FDCAN_TxBufferAbortCallback + 0x08001438 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001438 HAL_FDCAN_TxBufferAbortCallback + .text.HAL_FDCAN_RxBufferNewMessageCallback + 0x0800143a 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800143a HAL_FDCAN_RxBufferNewMessageCallback + .text.HAL_FDCAN_TimestampWraparoundCallback + 0x0800143c 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800143c HAL_FDCAN_TimestampWraparoundCallback + .text.HAL_FDCAN_TimeoutOccurredCallback + 0x0800143e 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800143e HAL_FDCAN_TimeoutOccurredCallback + .text.HAL_FDCAN_HighPriorityMessageCallback + 0x08001440 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001440 HAL_FDCAN_HighPriorityMessageCallback + .text.HAL_FDCAN_ErrorCallback + 0x08001442 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001442 HAL_FDCAN_ErrorCallback + .text.HAL_FDCAN_ErrorStatusCallback + 0x08001444 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001444 HAL_FDCAN_ErrorStatusCallback + .text.HAL_FDCAN_TT_ScheduleSyncCallback + 0x08001446 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001446 HAL_FDCAN_TT_ScheduleSyncCallback + .text.HAL_FDCAN_TT_TimeMarkCallback + 0x08001448 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x08001448 HAL_FDCAN_TT_TimeMarkCallback + .text.HAL_FDCAN_TT_StopWatchCallback + 0x0800144a 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800144a HAL_FDCAN_TT_StopWatchCallback + .text.HAL_FDCAN_TT_GlobalTimeCallback + 0x0800144c 0x2 build/debug/stm32h7xx_hal_fdcan.o + 0x0800144c HAL_FDCAN_TT_GlobalTimeCallback + *fill* 0x0800144e 0x2 + .text.HAL_FDCAN_IRQHandler + 0x08001450 0x320 build/debug/stm32h7xx_hal_fdcan.o + 0x08001450 HAL_FDCAN_IRQHandler + .text.HAL_GPIO_Init + 0x08001770 0x220 build/debug/stm32h7xx_hal_gpio.o + 0x08001770 HAL_GPIO_Init + .text.HAL_GPIO_WritePin + 0x08001990 0xc build/debug/stm32h7xx_hal_gpio.o + 0x08001990 HAL_GPIO_WritePin + .text.HAL_I2C_Init + 0x0800199c 0xc8 build/debug/stm32h7xx_hal_i2c.o + 0x0800199c HAL_I2C_Init + .text.HAL_I2CEx_ConfigAnalogFilter + 0x08001a64 0x5a build/debug/stm32h7xx_hal_i2c_ex.o + 0x08001a64 HAL_I2CEx_ConfigAnalogFilter + .text.HAL_I2CEx_ConfigDigitalFilter + 0x08001abe 0x56 build/debug/stm32h7xx_hal_i2c_ex.o + 0x08001abe HAL_I2CEx_ConfigDigitalFilter + .text.LTDC_SetConfig + 0x08001b14 0x1a8 build/debug/stm32h7xx_hal_ltdc.o + .text.HAL_LTDC_Init + 0x08001cbc 0xbc build/debug/stm32h7xx_hal_ltdc.o + 0x08001cbc HAL_LTDC_Init + .text.HAL_LTDC_ErrorCallback + 0x08001d78 0x2 build/debug/stm32h7xx_hal_ltdc.o + 0x08001d78 HAL_LTDC_ErrorCallback + .text.HAL_LTDC_LineEventCallback + 0x08001d7a 0x2 build/debug/stm32h7xx_hal_ltdc.o + 0x08001d7a HAL_LTDC_LineEventCallback + .text.HAL_LTDC_ReloadEventCallback + 0x08001d7c 0x2 build/debug/stm32h7xx_hal_ltdc.o + 0x08001d7c HAL_LTDC_ReloadEventCallback + .text.HAL_LTDC_IRQHandler + 0x08001d7e 0xda build/debug/stm32h7xx_hal_ltdc.o + 0x08001d7e HAL_LTDC_IRQHandler + .text.HAL_LTDC_ConfigLayer + 0x08001e58 0x68 build/debug/stm32h7xx_hal_ltdc.o + 0x08001e58 HAL_LTDC_ConfigLayer + .text.HAL_LTDC_SetAddress + 0x08001ec0 0x42 build/debug/stm32h7xx_hal_ltdc.o + 0x08001ec0 HAL_LTDC_SetAddress + *fill* 0x08001f02 0x2 + .text.HAL_LTDC_ProgramLineEvent + 0x08001f04 0x48 build/debug/stm32h7xx_hal_ltdc.o + 0x08001f04 HAL_LTDC_ProgramLineEvent + .text.HAL_FMC_MspInit + 0x08001f4c 0x104 build/debug/stm32h7xx_hal_msp.o + .text.HAL_MspInit + 0x08002050 0x24 build/debug/stm32h7xx_hal_msp.o + 0x08002050 HAL_MspInit + .text.HAL_CRC_MspInit + 0x08002074 0x34 build/debug/stm32h7xx_hal_msp.o + 0x08002074 HAL_CRC_MspInit + .text.HAL_FDCAN_MspInit + 0x080020a8 0xd4 build/debug/stm32h7xx_hal_msp.o + 0x080020a8 HAL_FDCAN_MspInit + .text.HAL_I2C_MspInit + 0x0800217c 0x98 build/debug/stm32h7xx_hal_msp.o + 0x0800217c HAL_I2C_MspInit + .text.HAL_LTDC_MspInit + 0x08002214 0x22c build/debug/stm32h7xx_hal_msp.o + 0x08002214 HAL_LTDC_MspInit + .text.HAL_SD_MspInit + 0x08002440 0xe4 build/debug/stm32h7xx_hal_msp.o + 0x08002440 HAL_SD_MspInit + .text.HAL_UART_MspInit + 0x08002524 0x10c build/debug/stm32h7xx_hal_msp.o + 0x08002524 HAL_UART_MspInit + .text.HAL_PCD_MspInit + 0x08002630 0xb8 build/debug/stm32h7xx_hal_msp.o + 0x08002630 HAL_PCD_MspInit + .text.HAL_SDRAM_MspInit + 0x080026e8 0x8 build/debug/stm32h7xx_hal_msp.o + 0x080026e8 HAL_SDRAM_MspInit + .text.HAL_PCD_Init + 0x080026f0 0x102 build/debug/stm32h7xx_hal_pcd.o + 0x080026f0 HAL_PCD_Init + *fill* 0x080027f2 0x2 + .text.HAL_PCDEx_ActivateLPM + 0x080027f4 0x28 build/debug/stm32h7xx_hal_pcd_ex.o + 0x080027f4 HAL_PCDEx_ActivateLPM + .text.HAL_PWREx_ConfigSupply + 0x0800281c 0x54 build/debug/stm32h7xx_hal_pwr_ex.o + 0x0800281c HAL_PWREx_ConfigSupply + .text.HAL_PWREx_EnableUSBVoltageDetector + 0x08002870 0x10 build/debug/stm32h7xx_hal_pwr_ex.o + 0x08002870 HAL_PWREx_EnableUSBVoltageDetector + .text.HAL_RCC_OscConfig + 0x08002880 0x660 build/debug/stm32h7xx_hal_rcc.o + 0x08002880 HAL_RCC_OscConfig + .text.HAL_RCC_GetSysClockFreq + 0x08002ee0 0x1f8 build/debug/stm32h7xx_hal_rcc.o + 0x08002ee0 HAL_RCC_GetSysClockFreq + .text.HAL_RCC_ClockConfig + 0x080030d8 0x294 build/debug/stm32h7xx_hal_rcc.o + 0x080030d8 HAL_RCC_ClockConfig + .text.HAL_RCC_GetHCLKFreq + 0x0800336c 0x44 build/debug/stm32h7xx_hal_rcc.o + 0x0800336c HAL_RCC_GetHCLKFreq + .text.HAL_RCC_GetPCLK1Freq + 0x080033b0 0x24 build/debug/stm32h7xx_hal_rcc.o + 0x080033b0 HAL_RCC_GetPCLK1Freq + .text.HAL_RCC_GetPCLK2Freq + 0x080033d4 0x24 build/debug/stm32h7xx_hal_rcc.o + 0x080033d4 HAL_RCC_GetPCLK2Freq + .text.RCCEx_PLL2_Config + 0x080033f8 0x108 build/debug/stm32h7xx_hal_rcc_ex.o + .text.RCCEx_PLL3_Config + 0x08003500 0x108 build/debug/stm32h7xx_hal_rcc_ex.o + .text.HAL_RCCEx_PeriphCLKConfig + 0x08003608 0xb1c build/debug/stm32h7xx_hal_rcc_ex.o + 0x08003608 HAL_RCCEx_PeriphCLKConfig + .text.HAL_RCCEx_GetD3PCLK1Freq + 0x08004124 0x24 build/debug/stm32h7xx_hal_rcc_ex.o + 0x08004124 HAL_RCCEx_GetD3PCLK1Freq + .text.HAL_RCCEx_GetPLL2ClockFreq + 0x08004148 0x200 build/debug/stm32h7xx_hal_rcc_ex.o + 0x08004148 HAL_RCCEx_GetPLL2ClockFreq + .text.HAL_RCCEx_GetPLL3ClockFreq + 0x08004348 0x200 build/debug/stm32h7xx_hal_rcc_ex.o + 0x08004348 HAL_RCCEx_GetPLL3ClockFreq + .text.HAL_RCCEx_GetPLL1ClockFreq + 0x08004548 0x200 build/debug/stm32h7xx_hal_rcc_ex.o + 0x08004548 HAL_RCCEx_GetPLL1ClockFreq + .text.HAL_RCCEx_GetPeriphCLKFreq + 0x08004748 0x620 build/debug/stm32h7xx_hal_rcc_ex.o + 0x08004748 HAL_RCCEx_GetPeriphCLKFreq + .text.SD_PowerON + 0x08004d68 0xc4 build/debug/stm32h7xx_hal_sd.o + .text.SD_SendSDStatus + 0x08004e2c 0x108 build/debug/stm32h7xx_hal_sd.o + .text.SD_FindSCR + 0x08004f34 0x108 build/debug/stm32h7xx_hal_sd.o + .text.SD_WideBus_Enable + 0x0800503c 0x4e build/debug/stm32h7xx_hal_sd.o + .text.SD_WideBus_Disable + 0x0800508a 0x4e build/debug/stm32h7xx_hal_sd.o + .text.SD_SendStatus + 0x080050d8 0x2c build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_GetCardCSD + 0x08005104 0x1b8 build/debug/stm32h7xx_hal_sd.o + 0x08005104 HAL_SD_GetCardCSD + .text.SD_InitCard + 0x080052bc 0xfc build/debug/stm32h7xx_hal_sd.o + .text.HAL_SD_InitCard + 0x080053b8 0xd4 build/debug/stm32h7xx_hal_sd.o + 0x080053b8 HAL_SD_InitCard + .text.HAL_SD_GetCardStatus + 0x0800548c 0xcc build/debug/stm32h7xx_hal_sd.o + 0x0800548c HAL_SD_GetCardStatus + .text.HAL_SD_ConfigWideBusOperation + 0x08005558 0x158 build/debug/stm32h7xx_hal_sd.o + 0x08005558 HAL_SD_ConfigWideBusOperation + .text.HAL_SD_GetCardState + 0x080056b0 0x22 build/debug/stm32h7xx_hal_sd.o + 0x080056b0 HAL_SD_GetCardState + .text.HAL_SD_Init + 0x080056d2 0xba build/debug/stm32h7xx_hal_sd.o + 0x080056d2 HAL_SD_Init + .text.HAL_SDRAM_Init + 0x0800578c 0x50 build/debug/stm32h7xx_hal_sdram.o + 0x0800578c HAL_SDRAM_Init + .text.HAL_SDRAM_RefreshErrorCallback + 0x080057dc 0x2 build/debug/stm32h7xx_hal_sdram.o + 0x080057dc HAL_SDRAM_RefreshErrorCallback + .text.HAL_SDRAM_IRQHandler + 0x080057de 0x20 build/debug/stm32h7xx_hal_sdram.o + 0x080057de HAL_SDRAM_IRQHandler + *fill* 0x080057fe 0x2 + .text.UART_EndRxTransfer + 0x08005800 0x58 build/debug/stm32h7xx_hal_uart.o + .text.UART_SetConfig + 0x08005858 0x9f8 build/debug/stm32h7xx_hal_uart.o + 0x08005858 UART_SetConfig + .text.UART_AdvFeatureConfig + 0x08006250 0xca build/debug/stm32h7xx_hal_uart.o + 0x08006250 UART_AdvFeatureConfig + .text.UART_WaitOnFlagUntilTimeout + 0x0800631a 0xa6 build/debug/stm32h7xx_hal_uart.o + 0x0800631a UART_WaitOnFlagUntilTimeout + .text.UART_CheckIdleState + 0x080063c0 0xca build/debug/stm32h7xx_hal_uart.o + 0x080063c0 UART_CheckIdleState + .text.HAL_UART_Init + 0x0800648a 0x66 build/debug/stm32h7xx_hal_uart.o + 0x0800648a HAL_UART_Init + .text.UARTEx_SetNbDataToProcess + 0x080064f0 0x4c build/debug/stm32h7xx_hal_uart_ex.o + .text.HAL_UARTEx_DisableFifoMode + 0x0800653c 0x3e build/debug/stm32h7xx_hal_uart_ex.o + 0x0800653c HAL_UARTEx_DisableFifoMode + .text.HAL_UARTEx_SetTxFifoThreshold + 0x0800657a 0x4a build/debug/stm32h7xx_hal_uart_ex.o + 0x0800657a HAL_UARTEx_SetTxFifoThreshold + .text.HAL_UARTEx_SetRxFifoThreshold + 0x080065c4 0x4a build/debug/stm32h7xx_hal_uart_ex.o + 0x080065c4 HAL_UARTEx_SetRxFifoThreshold + .text.NMI_Handler + 0x0800660e 0x2 build/debug/stm32h7xx_it.o + 0x0800660e NMI_Handler + .text.HardFault_Handler + 0x08006610 0x2 build/debug/stm32h7xx_it.o + 0x08006610 HardFault_Handler + .text.MemManage_Handler + 0x08006612 0x2 build/debug/stm32h7xx_it.o + 0x08006612 MemManage_Handler + .text.BusFault_Handler + 0x08006614 0x2 build/debug/stm32h7xx_it.o + 0x08006614 BusFault_Handler + .text.UsageFault_Handler + 0x08006616 0x2 build/debug/stm32h7xx_it.o + 0x08006616 UsageFault_Handler + .text.SVC_Handler + 0x08006618 0x2 build/debug/stm32h7xx_it.o + 0x08006618 SVC_Handler + .text.DebugMon_Handler + 0x0800661a 0x2 build/debug/stm32h7xx_it.o + 0x0800661a DebugMon_Handler + .text.PendSV_Handler + 0x0800661c 0x2 build/debug/stm32h7xx_it.o + 0x0800661c PendSV_Handler + .text.SysTick_Handler + 0x0800661e 0x8 build/debug/stm32h7xx_it.o + 0x0800661e SysTick_Handler + *fill* 0x08006626 0x2 + .text.FDCAN1_IT0_IRQHandler + 0x08006628 0x10 build/debug/stm32h7xx_it.o + 0x08006628 FDCAN1_IT0_IRQHandler + .text.FDCAN1_IT1_IRQHandler + 0x08006638 0x10 build/debug/stm32h7xx_it.o + 0x08006638 FDCAN1_IT1_IRQHandler + .text.FMC_IRQHandler + 0x08006648 0x10 build/debug/stm32h7xx_it.o + 0x08006648 FMC_IRQHandler + .text.FDCAN_CAL_IRQHandler + 0x08006658 0x10 build/debug/stm32h7xx_it.o + 0x08006658 FDCAN_CAL_IRQHandler + .text.LTDC_IRQHandler + 0x08006668 0x18 build/debug/stm32h7xx_it.o + 0x08006668 LTDC_IRQHandler + .text.FMC_SDRAM_Init + 0x08006680 0x70 build/debug/stm32h7xx_ll_fmc.o + 0x08006680 FMC_SDRAM_Init + .text.FMC_SDRAM_Timing_Init + 0x080066f0 0xa8 build/debug/stm32h7xx_ll_fmc.o + 0x080066f0 FMC_SDRAM_Timing_Init + .text.SDMMC_GetCmdError + 0x08006798 0x3c build/debug/stm32h7xx_ll_sdmmc.o + .text.SDMMC_Init + 0x080067d4 0x30 build/debug/stm32h7xx_ll_sdmmc.o + 0x080067d4 SDMMC_Init + .text.SDMMC_ReadFIFO + 0x08006804 0x6 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006804 SDMMC_ReadFIFO + .text.SDMMC_PowerState_ON + 0x0800680a 0xc build/debug/stm32h7xx_ll_sdmmc.o + 0x0800680a SDMMC_PowerState_ON + .text.SDMMC_GetPowerState + 0x08006816 0x8 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006816 SDMMC_GetPowerState + *fill* 0x0800681e 0x2 + .text.SDMMC_SendCommand + 0x08006820 0x24 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006820 SDMMC_SendCommand + .text.SDMMC_GetCommandResponse + 0x08006844 0x6 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006844 SDMMC_GetCommandResponse + .text.SDMMC_GetResponse + 0x0800684a 0x6 build/debug/stm32h7xx_ll_sdmmc.o + 0x0800684a SDMMC_GetResponse + .text.SDMMC_ConfigData + 0x08006850 0x24 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006850 SDMMC_ConfigData + .text.SDMMC_CmdGoIdleState + 0x08006874 0x26 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006874 SDMMC_CmdGoIdleState + *fill* 0x0800689a 0x2 + .text.SDMMC_GetCmdResp1 + 0x0800689c 0x160 build/debug/stm32h7xx_ll_sdmmc.o + 0x0800689c SDMMC_GetCmdResp1 + .text.SDMMC_CmdBlockLength + 0x080069fc 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x080069fc SDMMC_CmdBlockLength + .text.SDMMC_CmdSelDesel + 0x08006a2e 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006a2e SDMMC_CmdSelDesel + .text.SDMMC_CmdAppCommand + 0x08006a60 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006a60 SDMMC_CmdAppCommand + .text.SDMMC_CmdBusWidth + 0x08006a92 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006a92 SDMMC_CmdBusWidth + .text.SDMMC_CmdSendSCR + 0x08006ac4 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006ac4 SDMMC_CmdSendSCR + .text.SDMMC_CmdSendStatus + 0x08006af6 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006af6 SDMMC_CmdSendStatus + .text.SDMMC_CmdStatusRegister + 0x08006b28 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006b28 SDMMC_CmdStatusRegister + *fill* 0x08006b5a 0x2 + .text.SDMMC_GetCmdResp2 + 0x08006b5c 0x60 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006b5c SDMMC_GetCmdResp2 + .text.SDMMC_CmdSendCID + 0x08006bbc 0x2c build/debug/stm32h7xx_ll_sdmmc.o + 0x08006bbc SDMMC_CmdSendCID + .text.SDMMC_CmdSendCSD + 0x08006be8 0x2c build/debug/stm32h7xx_ll_sdmmc.o + 0x08006be8 SDMMC_CmdSendCSD + .text.SDMMC_GetCmdResp3 + 0x08006c14 0x50 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006c14 SDMMC_GetCmdResp3 + .text.SDMMC_CmdAppOperCommand + 0x08006c64 0x2c build/debug/stm32h7xx_ll_sdmmc.o + 0x08006c64 SDMMC_CmdAppOperCommand + .text.SDMMC_GetCmdResp6 + 0x08006c90 0xa4 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006c90 SDMMC_GetCmdResp6 + .text.SDMMC_CmdSetRelAdd + 0x08006d34 0x32 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006d34 SDMMC_CmdSetRelAdd + *fill* 0x08006d66 0x2 + .text.SDMMC_GetCmdResp7 + 0x08006d68 0x64 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006d68 SDMMC_GetCmdResp7 + .text.SDMMC_CmdOperCond + 0x08006dcc 0x30 build/debug/stm32h7xx_ll_sdmmc.o + 0x08006dcc SDMMC_CmdOperCond + .text.USB_CoreReset + 0x08006dfc 0x4a build/debug/stm32h7xx_ll_usb.o + *fill* 0x08006e46 0x2 + .text.USB_CoreInit + 0x08006e48 0xa4 build/debug/stm32h7xx_ll_usb.o + 0x08006e48 USB_CoreInit + .text.USB_DisableGlobalInt + 0x08006eec 0xc build/debug/stm32h7xx_ll_usb.o + 0x08006eec USB_DisableGlobalInt + .text.USB_FlushTxFifo + 0x08006ef8 0x4a build/debug/stm32h7xx_ll_usb.o + 0x08006ef8 USB_FlushTxFifo + .text.USB_FlushRxFifo + 0x08006f42 0x46 build/debug/stm32h7xx_ll_usb.o + 0x08006f42 USB_FlushRxFifo + .text.USB_SetDevSpeed + 0x08006f88 0xe build/debug/stm32h7xx_ll_usb.o + 0x08006f88 USB_SetDevSpeed + *fill* 0x08006f96 0x2 + .text.USB_DevInit + 0x08006f98 0x190 build/debug/stm32h7xx_ll_usb.o + 0x08006f98 USB_DevInit + .text.USB_DevDisconnect + 0x08007128 0x1c build/debug/stm32h7xx_ll_usb.o + 0x08007128 USB_DevDisconnect + .text.USB_GetMode + 0x08007144 0x8 build/debug/stm32h7xx_ll_usb.o + 0x08007144 USB_GetMode + .text.USB_SetCurrentMode + 0x0800714c 0x62 build/debug/stm32h7xx_ll_usb.o + 0x0800714c USB_SetCurrentMode + *fill* 0x080071ae 0x2 + .text.SystemInit + 0x080071b0 0xd0 build/debug/system_stm32h7xx.o + 0x080071b0 SystemInit + .text.ExitRun0Mode + 0x08007280 0x1c build/debug/system_stm32h7xx.o + 0x08007280 ExitRun0Mode + .text.Reset_Handler + 0x0800729c 0x54 build/debug/startup_stm32h7a3xx.o + 0x0800729c Reset_Handler + .text.Default_Handler + 0x080072f0 0x2 build/debug/startup_stm32h7a3xx.o + 0x080072f0 RTC_Alarm_IRQHandler + 0x080072f0 EXTI2_IRQHandler + 0x080072f0 TIM8_CC_IRQHandler + 0x080072f0 UART8_IRQHandler + 0x080072f0 BDMA2_Channel1_IRQHandler + 0x080072f0 SPI4_IRQHandler + 0x080072f0 BDMA2_Channel0_IRQHandler + 0x080072f0 TIM1_CC_IRQHandler + 0x080072f0 DMA2_Stream5_IRQHandler + 0x080072f0 JPEG_IRQHandler + 0x080072f0 DMA1_Stream5_IRQHandler + 0x080072f0 EXTI3_IRQHandler + 0x080072f0 LPTIM4_IRQHandler + 0x080072f0 TIM8_TRG_COM_TIM14_IRQHandler + 0x080072f0 LPTIM2_IRQHandler + 0x080072f0 DFSDM1_FLT1_IRQHandler + 0x080072f0 DMAMUX2_OVR_IRQHandler + 0x080072f0 GFXMMU_IRQHandler + 0x080072f0 TIM8_UP_TIM13_IRQHandler + 0x080072f0 I2C3_ER_IRQHandler + 0x080072f0 DFSDM1_FLT2_IRQHandler + 0x080072f0 USART10_IRQHandler + 0x080072f0 MDMA_IRQHandler + 0x080072f0 LPTIM3_IRQHandler + 0x080072f0 BDMA2_Channel3_IRQHandler + 0x080072f0 HSEM1_IRQHandler + 0x080072f0 EXTI0_IRQHandler + 0x080072f0 I2C2_EV_IRQHandler + 0x080072f0 DAC2_IRQHandler + 0x080072f0 DMA1_Stream2_IRQHandler + 0x080072f0 FPU_IRQHandler + 0x080072f0 OTG_HS_WKUP_IRQHandler + 0x080072f0 LTDC_ER_IRQHandler + 0x080072f0 DMA2_Stream2_IRQHandler + 0x080072f0 SPI1_IRQHandler + 0x080072f0 OCTOSPI1_IRQHandler + 0x080072f0 TIM6_DAC_IRQHandler + 0x080072f0 BDMA2_Channel6_IRQHandler + 0x080072f0 DMA2_Stream3_IRQHandler + 0x080072f0 OCTOSPI2_IRQHandler + 0x080072f0 SAI2_IRQHandler + 0x080072f0 BDMA1_IRQHandler + 0x080072f0 DFSDM1_FLT3_IRQHandler + 0x080072f0 USART6_IRQHandler + 0x080072f0 TIM17_IRQHandler + 0x080072f0 USART3_IRQHandler + 0x080072f0 LPTIM5_IRQHandler + 0x080072f0 UART5_IRQHandler + 0x080072f0 DMA2_Stream0_IRQHandler + 0x080072f0 TIM4_IRQHandler + 0x080072f0 I2C1_EV_IRQHandler + 0x080072f0 DMA1_Stream6_IRQHandler + 0x080072f0 DMAMUX1_OVR_IRQHandler + 0x080072f0 DMA1_Stream1_IRQHandler + 0x080072f0 TIM16_IRQHandler + 0x080072f0 UART4_IRQHandler + 0x080072f0 TIM3_IRQHandler + 0x080072f0 RCC_IRQHandler + 0x080072f0 UART9_IRQHandler + 0x080072f0 TIM8_BRK_TIM12_IRQHandler + 0x080072f0 TIM1_TRG_COM_IRQHandler + 0x080072f0 Default_Handler + 0x080072f0 ECC_IRQHandler + 0x080072f0 BDMA2_Channel2_IRQHandler + 0x080072f0 CEC_IRQHandler + 0x080072f0 EXTI15_10_IRQHandler + 0x080072f0 DFSDM1_FLT4_IRQHandler + 0x080072f0 ADC_IRQHandler + 0x080072f0 DMA1_Stream7_IRQHandler + 0x080072f0 SPI5_IRQHandler + 0x080072f0 TIM7_IRQHandler + 0x080072f0 SDMMC1_IRQHandler + 0x080072f0 TIM5_IRQHandler + 0x080072f0 DMA2_Stream7_IRQHandler + 0x080072f0 TIM15_IRQHandler + 0x080072f0 I2C3_EV_IRQHandler + 0x080072f0 DFSDM2_IRQHandler + 0x080072f0 EXTI9_5_IRQHandler + 0x080072f0 RTC_WKUP_IRQHandler + 0x080072f0 SPDIF_RX_IRQHandler + 0x080072f0 PVD_PVM_IRQHandler + 0x080072f0 SPI2_IRQHandler + 0x080072f0 OTG_HS_EP1_IN_IRQHandler + 0x080072f0 DFSDM1_FLT5_IRQHandler + 0x080072f0 DMA1_Stream0_IRQHandler + 0x080072f0 CRS_IRQHandler + 0x080072f0 EXTI4_IRQHandler + 0x080072f0 DFSDM1_FLT6_IRQHandler + 0x080072f0 RNG_IRQHandler + 0x080072f0 FDCAN2_IT1_IRQHandler + 0x080072f0 COMP_IRQHandler + 0x080072f0 TIM1_UP_IRQHandler + 0x080072f0 OTG_HS_EP1_OUT_IRQHandler + 0x080072f0 WWDG_IRQHandler + 0x080072f0 SPI6_IRQHandler + 0x080072f0 MDIOS_IRQHandler + 0x080072f0 I2C4_EV_IRQHandler + 0x080072f0 FDCAN2_IT0_IRQHandler + 0x080072f0 LPUART1_IRQHandler + 0x080072f0 TIM2_IRQHandler + 0x080072f0 BDMA2_Channel5_IRQHandler + 0x080072f0 OTG_HS_IRQHandler + 0x080072f0 DMA2D_IRQHandler + 0x080072f0 TIM1_BRK_IRQHandler + 0x080072f0 EXTI1_IRQHandler + 0x080072f0 SDMMC2_IRQHandler + 0x080072f0 DTS_IRQHandler + 0x080072f0 UART7_IRQHandler + 0x080072f0 MDIOS_WKUP_IRQHandler + 0x080072f0 USART2_IRQHandler + 0x080072f0 DFSDM1_FLT0_IRQHandler + 0x080072f0 I2C2_ER_IRQHandler + 0x080072f0 DMA2_Stream1_IRQHandler + 0x080072f0 DFSDM1_FLT7_IRQHandler + 0x080072f0 FLASH_IRQHandler + 0x080072f0 DMA2_Stream4_IRQHandler + 0x080072f0 USART1_IRQHandler + 0x080072f0 SPI3_IRQHandler + 0x080072f0 WAKEUP_PIN_IRQHandler + 0x080072f0 DMA1_Stream4_IRQHandler + 0x080072f0 I2C1_ER_IRQHandler + 0x080072f0 BDMA2_Channel7_IRQHandler + 0x080072f0 SWPMI1_IRQHandler + 0x080072f0 LPTIM1_IRQHandler + 0x080072f0 DCMI_PSSI_IRQHandler + 0x080072f0 I2C4_ER_IRQHandler + 0x080072f0 DMA2_Stream6_IRQHandler + 0x080072f0 SAI1_IRQHandler + 0x080072f0 DMA1_Stream3_IRQHandler + 0x080072f0 RTC_TAMP_STAMP_CSS_LSE_IRQHandler + 0x080072f0 BDMA2_Channel4_IRQHandler + .text.memset 0x080072f2 0x10 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + 0x080072f2 memset + *fill* 0x08007302 0x2 + .text.__libc_init_array + 0x08007304 0x48 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + 0x08007304 __libc_init_array + .text.memcpy 0x0800734c 0x1c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + 0x0800734c memcpy + *(.glue_7) + .glue_7 0x08007368 0x0 linker stubs + *(.glue_7t) + .glue_7t 0x08007368 0x0 linker stubs + *(.eh_frame) + .eh_frame 0x08007368 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + *(.init) + .init 0x08007368 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + 0x08007368 _init + .init 0x0800736c 0x8 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + *(.fini) + .fini 0x08007374 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + 0x08007374 _fini + .fini 0x08007378 0x8 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + 0x08007380 . = ALIGN (0x4) + 0x08007380 _etext = . + +.vfp11_veneer 0x08007380 0x0 + .vfp11_veneer 0x08007380 0x0 linker stubs + +.v4_bx 0x08007380 0x0 + .v4_bx 0x08007380 0x0 linker stubs + +.iplt 0x08007380 0x0 + .iplt 0x08007380 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + +.rodata 0x08007380 0x84 + 0x08007380 . = ALIGN (0x4) + *(.rodata) + .rodata 0x08007380 0x4c build/debug/stm32h7xx_hal_fdcan.o + *(.rodata*) + .rodata.UARTPrescTable + 0x080073cc 0x18 build/debug/stm32h7xx_hal_uart.o + 0x080073cc UARTPrescTable + .rodata.denominator.0 + 0x080073e4 0x8 build/debug/stm32h7xx_hal_uart_ex.o + .rodata.numerator.1 + 0x080073ec 0x8 build/debug/stm32h7xx_hal_uart_ex.o + .rodata.D1CorePrescTable + 0x080073f4 0x10 build/debug/system_stm32h7xx.o + 0x080073f4 D1CorePrescTable + 0x08007404 . = ALIGN (0x4) + +.ARM.extab + *(.ARM.extab* .gnu.linkonce.armextab.*) + +.ARM 0x08007404 0x8 + 0x08007404 __exidx_start = . + *(.ARM.exidx*) + .ARM.exidx 0x08007404 0x8 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + 0x0800740c __exidx_end = . + +.rel.dyn 0x0800740c 0x0 + .rel.iplt 0x0800740c 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + +.preinit_array 0x0800740c 0x0 + 0x0800740c PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x0800740c PROVIDE (__preinit_array_end = .) + +.init_array 0x0800740c 0x4 + 0x0800740c PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + .init_array 0x0800740c 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + 0x08007410 PROVIDE (__init_array_end = .) + +.fini_array 0x08007410 0x4 + 0x08007410 PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + .fini_array 0x08007410 0x4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + 0x08007414 PROVIDE (__fini_array_end = .) + 0x08007414 _sidata = LOADADDR (.data) + +.data 0x20000000 0x10 load address 0x08007414 + 0x20000000 . = ALIGN (0x4) + 0x20000000 _sdata = . + *(.data) + *(.data*) + .data.uwTickFreq + 0x20000000 0x1 build/debug/stm32h7xx_hal.o + 0x20000000 uwTickFreq + *fill* 0x20000001 0x3 + .data.uwTickPrio + 0x20000004 0x4 build/debug/stm32h7xx_hal.o + 0x20000004 uwTickPrio + .data.SystemD2Clock + 0x20000008 0x4 build/debug/system_stm32h7xx.o + 0x20000008 SystemD2Clock + .data.SystemCoreClock + 0x2000000c 0x4 build/debug/system_stm32h7xx.o + 0x2000000c SystemCoreClock + 0x20000010 . = ALIGN (0x4) + 0x20000010 _edata = . + +.tm_clone_table + 0x20000010 0x0 load address 0x08007424 + .tm_clone_table + 0x20000010 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + .tm_clone_table + 0x20000010 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + +.igot.plt 0x20000010 0x0 load address 0x08007424 + .igot.plt 0x20000010 0x0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + 0x20000010 . = ALIGN (0x4) + +.bss 0x20000010 0x9ea0 load address 0x08007424 + 0x20000010 _sbss = . + 0x20000010 __bss_start__ = _sbss + *(.bss) + .bss 0x20000010 0x1c /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + *(.bss*) + .bss.framebuffer + 0x2000002c 0x9600 build/debug/main.o + 0x2000002c framebuffer + .bss.hsdram1 0x2000962c 0x34 build/debug/main.o + 0x2000962c hsdram1 + .bss.hpcd_USB_OTG_HS + 0x20009660 0x4e4 build/debug/main.o + 0x20009660 hpcd_USB_OTG_HS + .bss.huart10 0x20009b44 0x94 build/debug/main.o + 0x20009b44 huart10 + .bss.huart5 0x20009bd8 0x94 build/debug/main.o + 0x20009bd8 huart5 + .bss.hsd2 0x20009c6c 0x7c build/debug/main.o + 0x20009c6c hsd2 + .bss.hltdc 0x20009ce8 0xa8 build/debug/main.o + 0x20009ce8 hltdc + .bss.hi2c4 0x20009d90 0x54 build/debug/main.o + 0x20009d90 hi2c4 + .bss.hfdcan1 0x20009de4 0xa0 build/debug/main.o + 0x20009de4 hfdcan1 + .bss.hcrc 0x20009e84 0x24 build/debug/main.o + 0x20009e84 hcrc + .bss.uwTick 0x20009ea8 0x4 build/debug/stm32h7xx_hal.o + 0x20009ea8 uwTick + .bss.FMC_Initialized + 0x20009eac 0x4 build/debug/stm32h7xx_hal_msp.o + *(COMMON) + 0x20009eb0 . = ALIGN (0x4) + 0x20009eb0 _ebss = . + 0x20009eb0 __bss_end__ = _ebss + +._user_heap_stack + 0x20009eb0 0x600 load address 0x08007424 + 0x20009eb0 . = ALIGN (0x8) + [!provide] PROVIDE (end = .) + 0x20009eb0 PROVIDE (_end = .) + 0x2000a0b0 . = (. + _Min_Heap_Size) + *fill* 0x20009eb0 0x200 + 0x2000a4b0 . = (. + _Min_Stack_Size) + *fill* 0x2000a0b0 0x400 + 0x2000a4b0 . = ALIGN (0x8) + +/DISCARD/ + libc.a(*) + libm.a(*) + libgcc.a(*) +OUTPUT(build/debug/FT23_Charger.elf elf32-littlearm) +LOAD linker stubs +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libm.a +LOAD /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a + +.ARM.attributes + 0x00000000 0x2e + .ARM.attributes + 0x00000000 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + .ARM.attributes + 0x00000020 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + .ARM.attributes + 0x00000052 0x32 build/debug/main.o + .ARM.attributes + 0x00000084 0x32 build/debug/stm32h7xx_hal.o + .ARM.attributes + 0x000000b6 0x32 build/debug/stm32h7xx_hal_cortex.o + .ARM.attributes + 0x000000e8 0x32 build/debug/stm32h7xx_hal_crc.o + .ARM.attributes + 0x0000011a 0x32 build/debug/stm32h7xx_hal_crc_ex.o + .ARM.attributes + 0x0000014c 0x32 build/debug/stm32h7xx_hal_fdcan.o + .ARM.attributes + 0x0000017e 0x32 build/debug/stm32h7xx_hal_gpio.o + .ARM.attributes + 0x000001b0 0x32 build/debug/stm32h7xx_hal_i2c.o + .ARM.attributes + 0x000001e2 0x32 build/debug/stm32h7xx_hal_i2c_ex.o + .ARM.attributes + 0x00000214 0x32 build/debug/stm32h7xx_hal_ltdc.o + .ARM.attributes + 0x00000246 0x32 build/debug/stm32h7xx_hal_msp.o + .ARM.attributes + 0x00000278 0x32 build/debug/stm32h7xx_hal_pcd.o + .ARM.attributes + 0x000002aa 0x32 build/debug/stm32h7xx_hal_pcd_ex.o + .ARM.attributes + 0x000002dc 0x32 build/debug/stm32h7xx_hal_pwr_ex.o + .ARM.attributes + 0x0000030e 0x32 build/debug/stm32h7xx_hal_rcc.o + .ARM.attributes + 0x00000340 0x32 build/debug/stm32h7xx_hal_rcc_ex.o + .ARM.attributes + 0x00000372 0x32 build/debug/stm32h7xx_hal_sd.o + .ARM.attributes + 0x000003a4 0x32 build/debug/stm32h7xx_hal_sdram.o + .ARM.attributes + 0x000003d6 0x32 build/debug/stm32h7xx_hal_uart.o + .ARM.attributes + 0x00000408 0x32 build/debug/stm32h7xx_hal_uart_ex.o + .ARM.attributes + 0x0000043a 0x32 build/debug/stm32h7xx_it.o + .ARM.attributes + 0x0000046c 0x32 build/debug/stm32h7xx_ll_fmc.o + .ARM.attributes + 0x0000049e 0x32 build/debug/stm32h7xx_ll_sdmmc.o + .ARM.attributes + 0x000004d0 0x32 build/debug/stm32h7xx_ll_usb.o + .ARM.attributes + 0x00000502 0x32 build/debug/system_stm32h7xx.o + .ARM.attributes + 0x00000534 0x21 build/debug/startup_stm32h7a3xx.o + .ARM.attributes + 0x00000555 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x00000587 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x000005b9 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .ARM.attributes + 0x000005eb 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .ARM.attributes + 0x0000060b 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .ARM.attributes + 0x0000063d 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + .ARM.attributes + 0x0000065d 0x32 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + .ARM.attributes + 0x0000068f 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtn.o + +.comment 0x00000000 0x46 + .comment 0x00000000 0x46 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o + 0x24 (size before relaxing) + .comment 0x00000046 0x24 build/debug/main.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_cortex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_crc.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_crc_ex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_fdcan.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_gpio.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_i2c.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_i2c_ex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_ltdc.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_msp.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_pcd.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_pcd_ex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_pwr_ex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_rcc.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_rcc_ex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_sd.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_sdram.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_uart.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_hal_uart_ex.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_it.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_ll_fmc.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_ll_sdmmc.o + .comment 0x00000046 0x24 build/debug/stm32h7xx_ll_usb.o + .comment 0x00000046 0x24 build/debug/system_stm32h7xx.o + .comment 0x00000046 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .comment 0x00000046 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .comment 0x00000046 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .comment 0x00000046 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .comment 0x00000046 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + +.debug_info 0x00000000 0x2d6f1 + .debug_info 0x00000000 0x3a4f build/debug/main.o + .debug_info 0x00003a4f 0x14ef build/debug/stm32h7xx_hal.o + .debug_info 0x00004f3e 0x12fc build/debug/stm32h7xx_hal_cortex.o + .debug_info 0x0000623a 0x600 build/debug/stm32h7xx_hal_crc.o + .debug_info 0x0000683a 0x352 build/debug/stm32h7xx_hal_crc_ex.o + .debug_info 0x00006b8c 0x3275 build/debug/stm32h7xx_hal_fdcan.o + .debug_info 0x00009e01 0xb76 build/debug/stm32h7xx_hal_gpio.o + .debug_info 0x0000a977 0x44f5 build/debug/stm32h7xx_hal_i2c.o + .debug_info 0x0000ee6c 0xc81 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_info 0x0000faed 0x1504 build/debug/stm32h7xx_hal_ltdc.o + .debug_info 0x00010ff1 0x3ebc build/debug/stm32h7xx_hal_msp.o + .debug_info 0x00014ead 0x1c4f build/debug/stm32h7xx_hal_pcd.o + .debug_info 0x00016afc 0xa1a build/debug/stm32h7xx_hal_pcd_ex.o + .debug_info 0x00017516 0x107c build/debug/stm32h7xx_hal_pwr_ex.o + .debug_info 0x00018592 0x1174 build/debug/stm32h7xx_hal_rcc.o + .debug_info 0x00019706 0x1986 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_info 0x0001b08c 0x263b build/debug/stm32h7xx_hal_sd.o + .debug_info 0x0001d6c7 0x132d build/debug/stm32h7xx_hal_sdram.o + .debug_info 0x0001e9f4 0x657c build/debug/stm32h7xx_hal_uart.o + .debug_info 0x00024f70 0x1226 build/debug/stm32h7xx_hal_uart_ex.o + .debug_info 0x00026196 0x1327 build/debug/stm32h7xx_it.o + .debug_info 0x000274bd 0xcbe build/debug/stm32h7xx_ll_fmc.o + .debug_info 0x0002817b 0x1e7c build/debug/stm32h7xx_ll_sdmmc.o + .debug_info 0x00029ff7 0x1f0d build/debug/stm32h7xx_ll_usb.o + .debug_info 0x0002bf04 0xd5c build/debug/system_stm32h7xx.o + .debug_info 0x0002cc60 0x30 build/debug/startup_stm32h7a3xx.o + .debug_info 0x0002cc90 0xe0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_info 0x0002cd70 0x10b /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_info 0x0002ce7b 0x121 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_info 0x0002cf9c 0x24 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_info 0x0002cfc0 0x6f5 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .debug_info 0x0002d6b5 0x3c /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + +.debug_abbrev 0x00000000 0x43f0 + .debug_abbrev 0x00000000 0x35a build/debug/main.o + .debug_abbrev 0x0000035a 0x2b6 build/debug/stm32h7xx_hal.o + .debug_abbrev 0x00000610 0x3ad build/debug/stm32h7xx_hal_cortex.o + .debug_abbrev 0x000009bd 0x223 build/debug/stm32h7xx_hal_crc.o + .debug_abbrev 0x00000be0 0x16d build/debug/stm32h7xx_hal_crc_ex.o + .debug_abbrev 0x00000d4d 0x2be build/debug/stm32h7xx_hal_fdcan.o + .debug_abbrev 0x0000100b 0x251 build/debug/stm32h7xx_hal_gpio.o + .debug_abbrev 0x0000125c 0x296 build/debug/stm32h7xx_hal_i2c.o + .debug_abbrev 0x000014f2 0x1f5 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_abbrev 0x000016e7 0x24a build/debug/stm32h7xx_hal_ltdc.o + .debug_abbrev 0x00001931 0x302 build/debug/stm32h7xx_hal_msp.o + .debug_abbrev 0x00001c33 0x2fa build/debug/stm32h7xx_hal_pcd.o + .debug_abbrev 0x00001f2d 0x2ad build/debug/stm32h7xx_hal_pcd_ex.o + .debug_abbrev 0x000021da 0x2b7 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_abbrev 0x00002491 0x2a8 build/debug/stm32h7xx_hal_rcc.o + .debug_abbrev 0x00002739 0x293 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_abbrev 0x000029cc 0x29f build/debug/stm32h7xx_hal_sd.o + .debug_abbrev 0x00002c6b 0x20e build/debug/stm32h7xx_hal_sdram.o + .debug_abbrev 0x00002e79 0x38b build/debug/stm32h7xx_hal_uart.o + .debug_abbrev 0x00003204 0x343 build/debug/stm32h7xx_hal_uart_ex.o + .debug_abbrev 0x00003547 0x21a build/debug/stm32h7xx_it.o + .debug_abbrev 0x00003761 0x1c4 build/debug/stm32h7xx_ll_fmc.o + .debug_abbrev 0x00003925 0x249 build/debug/stm32h7xx_ll_sdmmc.o + .debug_abbrev 0x00003b6e 0x329 build/debug/stm32h7xx_ll_usb.o + .debug_abbrev 0x00003e97 0x169 build/debug/system_stm32h7xx.o + .debug_abbrev 0x00004000 0x24 build/debug/startup_stm32h7a3xx.o + .debug_abbrev 0x00004024 0x9e /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_abbrev 0x000040c2 0xc9 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_abbrev 0x0000418b 0xc1 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_abbrev 0x0000424c 0x14 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_abbrev 0x00004260 0x16a /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .debug_abbrev 0x000043ca 0x26 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + +.debug_loclists + 0x00000000 0x15376 + .debug_loclists + 0x00000000 0x21 build/debug/main.o + .debug_loclists + 0x00000021 0x2d8 build/debug/stm32h7xx_hal.o + .debug_loclists + 0x000002f9 0x50a build/debug/stm32h7xx_hal_cortex.o + .debug_loclists + 0x00000803 0x3f6 build/debug/stm32h7xx_hal_crc.o + .debug_loclists + 0x00000bf9 0x1a3 build/debug/stm32h7xx_hal_crc_ex.o + .debug_loclists + 0x00000d9c 0x275a build/debug/stm32h7xx_hal_fdcan.o + .debug_loclists + 0x000034f6 0x2a0 build/debug/stm32h7xx_hal_gpio.o + .debug_loclists + 0x00003796 0x3c87 build/debug/stm32h7xx_hal_i2c.o + .debug_loclists + 0x0000741d 0x129 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_loclists + 0x00007546 0x116c build/debug/stm32h7xx_hal_ltdc.o + .debug_loclists + 0x000086b2 0x2e0 build/debug/stm32h7xx_hal_msp.o + .debug_loclists + 0x00008992 0xd74 build/debug/stm32h7xx_hal_pcd.o + .debug_loclists + 0x00009706 0x18e build/debug/stm32h7xx_hal_pcd_ex.o + .debug_loclists + 0x00009894 0x2b2 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_loclists + 0x00009b46 0x621 build/debug/stm32h7xx_hal_rcc.o + .debug_loclists + 0x0000a167 0x1426 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_loclists + 0x0000b58d 0x1877 build/debug/stm32h7xx_hal_sd.o + .debug_loclists + 0x0000ce04 0xa76 build/debug/stm32h7xx_hal_sdram.o + .debug_loclists + 0x0000d87a 0x38d3 build/debug/stm32h7xx_hal_uart.o + .debug_loclists + 0x0001114d 0x7dc build/debug/stm32h7xx_hal_uart_ex.o + .debug_loclists + 0x00011929 0x578 build/debug/stm32h7xx_ll_fmc.o + .debug_loclists + 0x00011ea1 0xed2 build/debug/stm32h7xx_ll_sdmmc.o + .debug_loclists + 0x00012d73 0x18ca build/debug/stm32h7xx_ll_usb.o + .debug_loclists + 0x0001463d 0x120 build/debug/system_stm32h7xx.o + .debug_loclists + 0x0001475d 0x4d /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_loclists + 0x000147aa 0x54 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_loclists + 0x000147fe 0xad /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_loclists + 0x000148ab 0xacb /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + +.debug_aranges 0x00000000 0x1bf0 + .debug_aranges + 0x00000000 0x88 build/debug/main.o + .debug_aranges + 0x00000088 0x1a0 build/debug/stm32h7xx_hal.o + .debug_aranges + 0x00000228 0xf8 build/debug/stm32h7xx_hal_cortex.o + .debug_aranges + 0x00000320 0x60 build/debug/stm32h7xx_hal_crc.o + .debug_aranges + 0x00000380 0x30 build/debug/stm32h7xx_hal_crc_ex.o + .debug_aranges + 0x000003b0 0x338 build/debug/stm32h7xx_hal_fdcan.o + .debug_aranges + 0x000006e8 0x58 build/debug/stm32h7xx_hal_gpio.o + .debug_aranges + 0x00000740 0x2a0 build/debug/stm32h7xx_hal_i2c.o + .debug_aranges + 0x000009e0 0x48 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_aranges + 0x00000a28 0x158 build/debug/stm32h7xx_hal_ltdc.o + .debug_aranges + 0x00000b80 0xb0 build/debug/stm32h7xx_hal_msp.o + .debug_aranges + 0x00000c30 0x140 build/debug/stm32h7xx_hal_pcd.o + .debug_aranges + 0x00000d70 0x60 build/debug/stm32h7xx_hal_pcd_ex.o + .debug_aranges + 0x00000dd0 0x188 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_aranges + 0x00000f58 0x88 build/debug/stm32h7xx_hal_rcc.o + .debug_aranges + 0x00000fe0 0xf0 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_aranges + 0x000010d0 0x170 build/debug/stm32h7xx_hal_sd.o + .debug_aranges + 0x00001240 0xe8 build/debug/stm32h7xx_hal_sdram.o + .debug_aranges + 0x00001328 0x248 build/debug/stm32h7xx_hal_uart.o + .debug_aranges + 0x00001570 0xa8 build/debug/stm32h7xx_hal_uart_ex.o + .debug_aranges + 0x00001618 0x88 build/debug/stm32h7xx_it.o + .debug_aranges + 0x000016a0 0xc8 build/debug/stm32h7xx_ll_fmc.o + .debug_aranges + 0x00001768 0x1d0 build/debug/stm32h7xx_ll_sdmmc.o + .debug_aranges + 0x00001938 0x1a0 build/debug/stm32h7xx_ll_usb.o + .debug_aranges + 0x00001ad8 0x30 build/debug/system_stm32h7xx.o + .debug_aranges + 0x00001b08 0x28 build/debug/startup_stm32h7a3xx.o + .debug_aranges + 0x00001b30 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_aranges + 0x00001b50 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_aranges + 0x00001b70 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_aranges + 0x00001b90 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_aranges + 0x00001bb0 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .debug_aranges + 0x00001bd0 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + +.debug_rnglists + 0x00000000 0x15fc + .debug_rnglists + 0x00000000 0x64 build/debug/main.o + .debug_rnglists + 0x00000064 0x135 build/debug/stm32h7xx_hal.o + .debug_rnglists + 0x00000199 0xb5 build/debug/stm32h7xx_hal_cortex.o + .debug_rnglists + 0x0000024e 0x45 build/debug/stm32h7xx_hal_crc.o + .debug_rnglists + 0x00000293 0x20 build/debug/stm32h7xx_hal_crc_ex.o + .debug_rnglists + 0x000002b3 0x29a build/debug/stm32h7xx_hal_fdcan.o + .debug_rnglists + 0x0000054d 0x3f build/debug/stm32h7xx_hal_gpio.o + .debug_rnglists + 0x0000058c 0x21e build/debug/stm32h7xx_hal_i2c.o + .debug_rnglists + 0x000007aa 0x31 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_rnglists + 0x000007db 0x103 build/debug/stm32h7xx_hal_ltdc.o + .debug_rnglists + 0x000008de 0x87 build/debug/stm32h7xx_hal_msp.o + .debug_rnglists + 0x00000965 0xf1 build/debug/stm32h7xx_hal_pcd.o + .debug_rnglists + 0x00000a56 0x44 build/debug/stm32h7xx_hal_pcd_ex.o + .debug_rnglists + 0x00000a9a 0x156 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_rnglists + 0x00000bf0 0xa9 build/debug/stm32h7xx_hal_rcc.o + .debug_rnglists + 0x00000c99 0xb9 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_rnglists + 0x00000d52 0x123 build/debug/stm32h7xx_hal_sd.o + .debug_rnglists + 0x00000e75 0xa9 build/debug/stm32h7xx_hal_sdram.o + .debug_rnglists + 0x00000f1e 0x1cb build/debug/stm32h7xx_hal_uart.o + .debug_rnglists + 0x000010e9 0x88 build/debug/stm32h7xx_hal_uart_ex.o + .debug_rnglists + 0x00001171 0x61 build/debug/stm32h7xx_it.o + .debug_rnglists + 0x000011d2 0x93 build/debug/stm32h7xx_ll_fmc.o + .debug_rnglists + 0x00001265 0x15a build/debug/stm32h7xx_ll_sdmmc.o + .debug_rnglists + 0x000013bf 0x141 build/debug/stm32h7xx_ll_usb.o + .debug_rnglists + 0x00001500 0x21 build/debug/system_stm32h7xx.o + .debug_rnglists + 0x00001521 0x19 build/debug/startup_stm32h7a3xx.o + .debug_rnglists + 0x0000153a 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_rnglists + 0x0000154d 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_rnglists + 0x00001560 0x13 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_rnglists + 0x00001573 0x89 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + +.debug_line 0x00000000 0x1fcee + .debug_line 0x00000000 0xc7b build/debug/main.o + .debug_line 0x00000c7b 0x88f build/debug/stm32h7xx_hal.o + .debug_line 0x0000150a 0x7d3 build/debug/stm32h7xx_hal_cortex.o + .debug_line 0x00001cdd 0x519 build/debug/stm32h7xx_hal_crc.o + .debug_line 0x000021f6 0x24b build/debug/stm32h7xx_hal_crc_ex.o + .debug_line 0x00002441 0x3338 build/debug/stm32h7xx_hal_fdcan.o + .debug_line 0x00005779 0x6af build/debug/stm32h7xx_hal_gpio.o + .debug_line 0x00005e28 0x4fdb build/debug/stm32h7xx_hal_i2c.o + .debug_line 0x0000ae03 0x367 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_line 0x0000b16a 0x11af build/debug/stm32h7xx_hal_ltdc.o + .debug_line 0x0000c319 0xc2a build/debug/stm32h7xx_hal_msp.o + .debug_line 0x0000cf43 0x13d7 build/debug/stm32h7xx_hal_pcd.o + .debug_line 0x0000e31a 0x458 build/debug/stm32h7xx_hal_pcd_ex.o + .debug_line 0x0000e772 0xae4 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_line 0x0000f256 0x1337 build/debug/stm32h7xx_hal_rcc.o + .debug_line 0x0001058d 0x1e24 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_line 0x000123b1 0x2982 build/debug/stm32h7xx_hal_sd.o + .debug_line 0x00014d33 0x9d9 build/debug/stm32h7xx_hal_sdram.o + .debug_line 0x0001570c 0x50e3 build/debug/stm32h7xx_hal_uart.o + .debug_line 0x0001a7ef 0xa10 build/debug/stm32h7xx_hal_uart_ex.o + .debug_line 0x0001b1ff 0x2f7 build/debug/stm32h7xx_it.o + .debug_line 0x0001b4f6 0x6af build/debug/stm32h7xx_ll_fmc.o + .debug_line 0x0001bba5 0x1424 build/debug/stm32h7xx_ll_sdmmc.o + .debug_line 0x0001cfc9 0x1e92 build/debug/stm32h7xx_ll_usb.o + .debug_line 0x0001ee5b 0x3ef build/debug/system_stm32h7xx.o + .debug_line 0x0001f24a 0x77 build/debug/startup_stm32h7a3xx.o + .debug_line 0x0001f2c1 0x12d /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_line 0x0001f3ee 0xff /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_line 0x0001f4ed 0x185 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_line 0x0001f672 0x4e /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_line 0x0001f6c0 0x5e4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .debug_line 0x0001fca4 0x4a /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + +.debug_str 0x00000000 0xa987 + .debug_str 0x00000000 0xa987 build/debug/main.o + 0x274a (size before relaxing) + .debug_str 0x0000a987 0x1456 build/debug/stm32h7xx_hal.o + .debug_str 0x0000a987 0x1029 build/debug/stm32h7xx_hal_cortex.o + .debug_str 0x0000a987 0x47c build/debug/stm32h7xx_hal_crc.o + .debug_str 0x0000a987 0x422 build/debug/stm32h7xx_hal_crc_ex.o + .debug_str 0x0000a987 0x1d96 build/debug/stm32h7xx_hal_fdcan.o + .debug_str 0x0000a987 0x6ac build/debug/stm32h7xx_hal_gpio.o + .debug_str 0x0000a987 0x1170 build/debug/stm32h7xx_hal_i2c.o + .debug_str 0x0000a987 0xb03 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_str 0x0000a987 0x9c2 build/debug/stm32h7xx_hal_ltdc.o + .debug_str 0x0000a987 0x2c21 build/debug/stm32h7xx_hal_msp.o + .debug_str 0x0000a987 0xe36 build/debug/stm32h7xx_hal_pcd.o + .debug_str 0x0000a987 0x822 build/debug/stm32h7xx_hal_pcd_ex.o + .debug_str 0x0000a987 0xae5 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_str 0x0000a987 0xa36 build/debug/stm32h7xx_hal_rcc.o + .debug_str 0x0000a987 0xef5 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_str 0x0000a987 0x1016 build/debug/stm32h7xx_hal_sd.o + .debug_str 0x0000a987 0xb9e build/debug/stm32h7xx_hal_sdram.o + .debug_str 0x0000a987 0x14be build/debug/stm32h7xx_hal_uart.o + .debug_str 0x0000a987 0xb91 build/debug/stm32h7xx_hal_uart_ex.o + .debug_str 0x0000a987 0xf04 build/debug/stm32h7xx_it.o + .debug_str 0x0000a987 0x8a3 build/debug/stm32h7xx_ll_fmc.o + .debug_str 0x0000a987 0x935 build/debug/stm32h7xx_ll_sdmmc.o + .debug_str 0x0000a987 0xd7e build/debug/stm32h7xx_ll_usb.o + .debug_str 0x0000a987 0x74d build/debug/system_stm32h7xx.o + .debug_str 0x0000a987 0x6d build/debug/startup_stm32h7a3xx.o + .debug_str 0x0000a987 0x1e2 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_str 0x0000a987 0x243 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_str 0x0000a987 0x200 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_str 0x0000a987 0xd2 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_str 0x0000a987 0x6ae /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + .debug_str 0x0000a987 0xf2 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + +.debug_frame 0x00000000 0x4a78 + .debug_frame 0x00000000 0x190 build/debug/main.o + .debug_frame 0x00000190 0x370 build/debug/stm32h7xx_hal.o + .debug_frame 0x00000500 0x214 build/debug/stm32h7xx_hal_cortex.o + .debug_frame 0x00000714 0xec build/debug/stm32h7xx_hal_crc.o + .debug_frame 0x00000800 0x58 build/debug/stm32h7xx_hal_crc_ex.o + .debug_frame 0x00000858 0x7a4 build/debug/stm32h7xx_hal_fdcan.o + .debug_frame 0x00000ffc 0xd4 build/debug/stm32h7xx_hal_gpio.o + .debug_frame 0x000010d0 0x98c build/debug/stm32h7xx_hal_i2c.o + .debug_frame 0x00001a5c 0x80 build/debug/stm32h7xx_hal_i2c_ex.o + .debug_frame 0x00001adc 0x3c4 build/debug/stm32h7xx_hal_ltdc.o + .debug_frame 0x00001ea0 0x23c build/debug/stm32h7xx_hal_msp.o + .debug_frame 0x000020dc 0x378 build/debug/stm32h7xx_hal_pcd.o + .debug_frame 0x00002454 0xb8 build/debug/stm32h7xx_hal_pcd_ex.o + .debug_frame 0x0000250c 0x354 build/debug/stm32h7xx_hal_pwr_ex.o + .debug_frame 0x00002860 0x184 build/debug/stm32h7xx_hal_rcc.o + .debug_frame 0x000029e4 0x274 build/debug/stm32h7xx_hal_rcc_ex.o + .debug_frame 0x00002c58 0x4c0 build/debug/stm32h7xx_hal_sd.o + .debug_frame 0x00003118 0x284 build/debug/stm32h7xx_hal_sdram.o + .debug_frame 0x0000339c 0x680 build/debug/stm32h7xx_hal_uart.o + .debug_frame 0x00003a1c 0x1c8 build/debug/stm32h7xx_hal_uart_ex.o + .debug_frame 0x00003be4 0x120 build/debug/stm32h7xx_it.o + .debug_frame 0x00003d04 0x1d8 build/debug/stm32h7xx_ll_fmc.o + .debug_frame 0x00003edc 0x5e0 build/debug/stm32h7xx_ll_sdmmc.o + .debug_frame 0x000044bc 0x498 build/debug/stm32h7xx_ll_usb.o + .debug_frame 0x00004954 0x50 build/debug/system_stm32h7xx.o + .debug_frame 0x000049a4 0x20 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + .debug_frame 0x000049c4 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + .debug_frame 0x000049f0 0x28 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + .debug_frame 0x00004a18 0x2c /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x00004a44 0x34 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + +.debug_line_str + 0x00000000 0x125 + .debug_line_str + 0x00000000 0x125 build/debug/startup_stm32h7a3xx.o + 0x53 (size before relaxing) + .debug_line_str + 0x00000125 0xc6 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + .debug_line_str + 0x00000125 0xca /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + +Cross Reference Table + +Symbol File +ADC_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA1_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel0_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel1_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel2_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel3_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel4_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel5_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel6_IRQHandler build/debug/startup_stm32h7a3xx.o +BDMA2_Channel7_IRQHandler build/debug/startup_stm32h7a3xx.o +BusFault_Handler build/debug/stm32h7xx_it.o +CEC_IRQHandler build/debug/startup_stm32h7a3xx.o +COMP_IRQHandler build/debug/startup_stm32h7a3xx.o +CRS_IRQHandler build/debug/startup_stm32h7a3xx.o +D1CorePrescTable build/debug/system_stm32h7xx.o + build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal.o +DAC2_IRQHandler build/debug/startup_stm32h7a3xx.o +DCMI_PSSI_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT0_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT1_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT2_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT3_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT4_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT5_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT6_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM1_FLT7_IRQHandler build/debug/startup_stm32h7a3xx.o +DFSDM2_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream0_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream1_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream2_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream3_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream4_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream5_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream6_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA1_Stream7_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2D_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream0_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream1_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream2_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream3_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream4_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream5_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream6_IRQHandler build/debug/startup_stm32h7a3xx.o +DMA2_Stream7_IRQHandler build/debug/startup_stm32h7a3xx.o +DMAMUX1_OVR_IRQHandler build/debug/startup_stm32h7a3xx.o +DMAMUX2_OVR_IRQHandler build/debug/startup_stm32h7a3xx.o +DTS_IRQHandler build/debug/startup_stm32h7a3xx.o +DebugMon_Handler build/debug/stm32h7xx_it.o +Default_Handler build/debug/startup_stm32h7a3xx.o +DelayBlock_Configure build/debug/stm32h7xx_ll_delayblock.o +DelayBlock_Disable build/debug/stm32h7xx_ll_delayblock.o +DelayBlock_Enable build/debug/stm32h7xx_ll_delayblock.o +ECC_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI0_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI15_10_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI1_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI2_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI3_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI4_IRQHandler build/debug/startup_stm32h7a3xx.o +EXTI9_5_IRQHandler build/debug/startup_stm32h7a3xx.o +Error_Handler build/debug/main.o + build/debug/stm32h7xx_hal_msp.o +ExitRun0Mode build/debug/system_stm32h7xx.o + build/debug/startup_stm32h7a3xx.o +FDCAN1_IT0_IRQHandler build/debug/stm32h7xx_it.o +FDCAN1_IT1_IRQHandler build/debug/stm32h7xx_it.o +FDCAN2_IT0_IRQHandler build/debug/startup_stm32h7a3xx.o +FDCAN2_IT1_IRQHandler build/debug/startup_stm32h7a3xx.o +FDCAN_CAL_IRQHandler build/debug/stm32h7xx_it.o +FLASH_CRC_WaitForLastOperation build/debug/stm32h7xx_hal_flash.o + build/debug/stm32h7xx_hal_flash_ex.o +FLASH_Erase_Sector build/debug/stm32h7xx_hal_flash_ex.o + build/debug/stm32h7xx_hal_flash.o +FLASH_IRQHandler build/debug/startup_stm32h7a3xx.o +FLASH_OB_WaitForLastOperation build/debug/stm32h7xx_hal_flash.o + build/debug/stm32h7xx_hal_flash_ex.o +FLASH_WaitForLastOperation build/debug/stm32h7xx_hal_flash.o + build/debug/stm32h7xx_hal_flash_ex.o +FMC_IRQHandler build/debug/stm32h7xx_it.o +FMC_NAND_AttributeSpace_Timing_Init build/debug/stm32h7xx_ll_fmc.o +FMC_NAND_CommonSpace_Timing_Init build/debug/stm32h7xx_ll_fmc.o +FMC_NAND_DeInit build/debug/stm32h7xx_ll_fmc.o +FMC_NAND_ECC_Disable build/debug/stm32h7xx_ll_fmc.o +FMC_NAND_ECC_Enable build/debug/stm32h7xx_ll_fmc.o +FMC_NAND_GetECC build/debug/stm32h7xx_ll_fmc.o +FMC_NAND_Init build/debug/stm32h7xx_ll_fmc.o +FMC_NORSRAM_DeInit build/debug/stm32h7xx_ll_fmc.o +FMC_NORSRAM_Extended_Timing_Init build/debug/stm32h7xx_ll_fmc.o +FMC_NORSRAM_Init build/debug/stm32h7xx_ll_fmc.o +FMC_NORSRAM_Timing_Init build/debug/stm32h7xx_ll_fmc.o +FMC_NORSRAM_WriteOperation_Disable build/debug/stm32h7xx_ll_fmc.o +FMC_NORSRAM_WriteOperation_Enable build/debug/stm32h7xx_ll_fmc.o +FMC_SDRAM_DeInit build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_GetModeStatus build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_Init build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_ProgramRefreshRate build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_SendCommand build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_SetAutoRefreshNumber build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_Timing_Init build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_WriteProtection_Disable build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FMC_SDRAM_WriteProtection_Enable build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_hal_sdram.o +FPU_IRQHandler build/debug/startup_stm32h7a3xx.o +GFXMMU_IRQHandler build/debug/startup_stm32h7a3xx.o +HAL_CRCEx_Input_Data_Reverse build/debug/stm32h7xx_hal_crc_ex.o +HAL_CRCEx_Output_Data_Reverse build/debug/stm32h7xx_hal_crc_ex.o +HAL_CRCEx_Polynomial_Set build/debug/stm32h7xx_hal_crc_ex.o + build/debug/stm32h7xx_hal_crc.o +HAL_CRC_Accumulate build/debug/stm32h7xx_hal_crc.o +HAL_CRC_Calculate build/debug/stm32h7xx_hal_crc.o +HAL_CRC_DeInit build/debug/stm32h7xx_hal_crc.o +HAL_CRC_GetState build/debug/stm32h7xx_hal_crc.o +HAL_CRC_Init build/debug/stm32h7xx_hal_crc.o + build/debug/main.o +HAL_CRC_MspDeInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_crc.o +HAL_CRC_MspInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_crc.o +HAL_DBGMCU_DisableDBGSleepMode build/debug/stm32h7xx_hal.o +HAL_DBGMCU_DisableDBGStandbyMode build/debug/stm32h7xx_hal.o +HAL_DBGMCU_DisableDBGStopMode build/debug/stm32h7xx_hal.o +HAL_DBGMCU_EnableDBGSleepMode build/debug/stm32h7xx_hal.o +HAL_DBGMCU_EnableDBGStandbyMode build/debug/stm32h7xx_hal.o +HAL_DBGMCU_EnableDBGStopMode build/debug/stm32h7xx_hal.o +HAL_DMAEx_ChangeMemory build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_ConfigMuxRequestGenerator build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_ConfigMuxSync build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_DisableMuxRequestGenerator build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_EnableMuxRequestGenerator build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_MUX_IRQHandler build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_MultiBufferStart build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMAEx_MultiBufferStart_IT build/debug/stm32h7xx_hal_dma_ex.o +HAL_DMA_Abort build/debug/stm32h7xx_hal_dma.o + build/debug/stm32h7xx_hal_uart.o +HAL_DMA_Abort_IT build/debug/stm32h7xx_hal_dma.o + build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_i2c.o +HAL_DMA_DeInit build/debug/stm32h7xx_hal_dma.o +HAL_DMA_GetError build/debug/stm32h7xx_hal_dma.o + build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_i2c.o +HAL_DMA_GetState build/debug/stm32h7xx_hal_dma.o + build/debug/stm32h7xx_hal_i2c.o +HAL_DMA_IRQHandler build/debug/stm32h7xx_hal_dma.o +HAL_DMA_Init build/debug/stm32h7xx_hal_dma.o +HAL_DMA_PollForTransfer build/debug/stm32h7xx_hal_dma.o +HAL_DMA_RegisterCallback build/debug/stm32h7xx_hal_dma.o +HAL_DMA_Start build/debug/stm32h7xx_hal_dma.o +HAL_DMA_Start_IT build/debug/stm32h7xx_hal_dma.o + build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_i2c.o +HAL_DMA_UnRegisterCallback build/debug/stm32h7xx_hal_dma.o +HAL_DeInit build/debug/stm32h7xx_hal.o +HAL_Delay build/debug/stm32h7xx_hal.o + build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_sd.o + build/debug/stm32h7xx_hal_pcd_ex.o +HAL_DisableCompensationCell build/debug/stm32h7xx_hal.o +HAL_DisableDomain3DBGStandbyMode build/debug/stm32h7xx_hal.o +HAL_DisableDomain3DBGStopMode build/debug/stm32h7xx_hal.o +HAL_EXTI_ClearConfigLine build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_ClearPending build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_D1_ClearFlag build/debug/stm32h7xx_hal.o +HAL_EXTI_D1_EventInputConfig build/debug/stm32h7xx_hal.o +HAL_EXTI_D3_EventInputConfig build/debug/stm32h7xx_hal.o +HAL_EXTI_EdgeConfig build/debug/stm32h7xx_hal.o +HAL_EXTI_GenerateSWI build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_GenerateSWInterrupt build/debug/stm32h7xx_hal.o +HAL_EXTI_GetConfigLine build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_GetHandle build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_GetPending build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_IRQHandler build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_RegisterCallback build/debug/stm32h7xx_hal_exti.o +HAL_EXTI_SetConfigLine build/debug/stm32h7xx_hal_exti.o +HAL_EnableCompensationCell build/debug/stm32h7xx_hal.o +HAL_EnableDomain3DBGStandbyMode build/debug/stm32h7xx_hal.o +HAL_EnableDomain3DBGStopMode build/debug/stm32h7xx_hal.o +HAL_FDCAN_AbortTxRequest build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ActivateNotification build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_AddMessageToTxBuffer build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_AddMessageToTxFifoQ build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ClockCalibrationCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigClockCalibration build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigExtendedIdMask build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigFifoWatermark build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigFilter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigGlobalFilter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigInterruptLines build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigRamWatchdog build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigRxFifoOverwrite build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigTimeoutCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigTimestampCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ConfigTxDelayCompensation build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DeInit build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DeactivateNotification build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DisableEdgeFiltering build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DisableISOMode build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DisableTimeoutCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DisableTimestampCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_DisableTxDelayCompensation build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnableEdgeFiltering build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnableISOMode build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnableTimeoutCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnableTimestampCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnableTxBufferRequest build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnableTxDelayCompensation build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_EnterPowerDownMode build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ErrorCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ErrorStatusCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ExitPowerDownMode build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ExitRestrictedOperationMode build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetClockCalibrationCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetClockCalibrationState build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetError build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetErrorCounters build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetHighPriorityMessageStatus build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetLatestTxFifoQRequestBuffer build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetProtocolStatus build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetRxFifoFillLevel build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetRxMessage build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetState build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetTimeoutCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetTimestampCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetTxEvent build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_GetTxFifoFreeLevel build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_HighPriorityMessageCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_IRQHandler build/debug/stm32h7xx_hal_fdcan.o + build/debug/stm32h7xx_it.o +HAL_FDCAN_Init build/debug/stm32h7xx_hal_fdcan.o + build/debug/main.o +HAL_FDCAN_IsRestrictedOperationMode build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_IsRxBufferMessageAvailable build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_IsTxBufferMessagePending build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_MspDeInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_MspInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ResetClockCalibrationState build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ResetTimeoutCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_ResetTimestampCounter build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_RxBufferNewMessageCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_RxFifo0Callback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_RxFifo1Callback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_Start build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_Stop build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ActivateNotification build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigExternalSyncPhase build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigInterruptLines build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigOperation build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigReferenceMessage build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigRegisterTimeMark build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigStopWatch build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ConfigTrigger build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_DeactivateNotification build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_DisableExternalSynchronization build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_DisableHardwareGapControl build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_DisableRegisterTimeMarkPulse build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_DisableTimeMarkGapControl build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_DisableTriggerTimeMarkPulse build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_EnableExternalSynchronization build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_EnableHardwareGapControl build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_EnableRegisterTimeMarkPulse build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_EnableTimeMarkGapControl build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_EnableTriggerTimeMarkPulse build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_GetOperationStatus build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_GlobalTimeCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_ScheduleSyncCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_SetClockSynchronization build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_SetEndOfGap build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_SetGlobalTime build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_SetNextIsGap build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_StopWatchCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TT_TimeMarkCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TimeoutOccurredCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TimestampWraparoundCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TxBufferAbortCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TxBufferCompleteCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TxEventFifoCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FDCAN_TxFifoEmptyCallback build/debug/stm32h7xx_hal_fdcan.o +HAL_FLASHEx_ComputeCRC build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_Erase build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_Erase_IT build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_Lock_Bank1 build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_Lock_Bank2 build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_OBGetConfig build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_OBProgram build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_Unlock_Bank1 build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASHEx_Unlock_Bank2 build/debug/stm32h7xx_hal_flash_ex.o +HAL_FLASH_EndOfOperationCallback build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_GetError build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_IRQHandler build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_Lock build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_OB_Launch build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_OB_Lock build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_OB_Unlock build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_OperationErrorCallback build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_Program build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_Program_IT build/debug/stm32h7xx_hal_flash.o +HAL_FLASH_Unlock build/debug/stm32h7xx_hal_flash.o +HAL_GPIO_DeInit build/debug/stm32h7xx_hal_gpio.o + build/debug/stm32h7xx_hal_msp.o +HAL_GPIO_EXTI_Callback build/debug/stm32h7xx_hal_gpio.o +HAL_GPIO_EXTI_IRQHandler build/debug/stm32h7xx_hal_gpio.o +HAL_GPIO_Init build/debug/stm32h7xx_hal_gpio.o + build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_msp.o + build/debug/main.o +HAL_GPIO_LockPin build/debug/stm32h7xx_hal_gpio.o +HAL_GPIO_ReadPin build/debug/stm32h7xx_hal_gpio.o +HAL_GPIO_TogglePin build/debug/stm32h7xx_hal_gpio.o +HAL_GPIO_WritePin build/debug/stm32h7xx_hal_gpio.o + build/debug/main.o +HAL_GetCurrentCPUID build/debug/stm32h7xx_hal_cortex.o +HAL_GetDEVID build/debug/stm32h7xx_hal.o +HAL_GetFMCMemorySwappingConfig build/debug/stm32h7xx_hal.o +HAL_GetHalVersion build/debug/stm32h7xx_hal.o +HAL_GetREVID build/debug/stm32h7xx_hal.o + build/debug/stm32h7xx_hal_rcc_ex.o +HAL_GetTick build/debug/stm32h7xx_hal.o + build/debug/stm32h7xx_ll_fmc.o + build/debug/stm32h7xx_ll_delayblock.o + build/debug/stm32h7xx_hal_uart_ex.o + build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_sd.o + build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_pwr_ex.o + build/debug/stm32h7xx_hal_pcd_ex.o + build/debug/stm32h7xx_hal_mdma.o + build/debug/stm32h7xx_hal_ltdc.o + build/debug/stm32h7xx_hal_i2c.o + build/debug/stm32h7xx_hal_flash.o + build/debug/stm32h7xx_hal_fdcan.o + build/debug/stm32h7xx_hal_dma.o +HAL_GetTickFreq build/debug/stm32h7xx_hal.o +HAL_GetTickPrio build/debug/stm32h7xx_hal.o +HAL_GetUIDw0 build/debug/stm32h7xx_hal.o +HAL_GetUIDw1 build/debug/stm32h7xx_hal.o +HAL_GetUIDw2 build/debug/stm32h7xx_hal.o +HAL_HSEM_ActivateNotification build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_DeactivateNotification build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_FastTake build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_FreeCallback build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_GetClearKey build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_IRQHandler build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_IsSemTaken build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_Release build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_ReleaseAll build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_SetClearKey build/debug/stm32h7xx_hal_hsem.o +HAL_HSEM_Take build/debug/stm32h7xx_hal_hsem.o +HAL_HalfDuplex_EnableReceiver build/debug/stm32h7xx_hal_uart.o +HAL_HalfDuplex_EnableTransmitter build/debug/stm32h7xx_hal_uart.o +HAL_HalfDuplex_Init build/debug/stm32h7xx_hal_uart.o +HAL_I2CEx_ConfigAnalogFilter build/debug/stm32h7xx_hal_i2c_ex.o + build/debug/main.o +HAL_I2CEx_ConfigDigitalFilter build/debug/stm32h7xx_hal_i2c_ex.o + build/debug/main.o +HAL_I2CEx_DisableFastModePlus build/debug/stm32h7xx_hal_i2c_ex.o +HAL_I2CEx_DisableWakeUp build/debug/stm32h7xx_hal_i2c_ex.o +HAL_I2CEx_EnableFastModePlus build/debug/stm32h7xx_hal_i2c_ex.o +HAL_I2CEx_EnableWakeUp build/debug/stm32h7xx_hal_i2c_ex.o +HAL_I2C_AbortCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_AddrCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_DeInit build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_DisableListen_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_ER_IRQHandler build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_EV_IRQHandler build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_EnableListen_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_ErrorCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_GetError build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_GetMode build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_GetState build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Init build/debug/stm32h7xx_hal_i2c.o + build/debug/main.o +HAL_I2C_IsDeviceReady build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_ListenCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_MasterRxCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_MasterTxCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Abort_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Receive build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Receive_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Receive_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Seq_Receive_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Seq_Receive_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Seq_Transmit_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Seq_Transmit_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Transmit build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Transmit_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Master_Transmit_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_MemRxCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_MemTxCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Mem_Read build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Mem_Read_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Mem_Read_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Mem_Write build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Mem_Write_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Mem_Write_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_MspDeInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_MspInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_SlaveRxCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_SlaveTxCpltCallback build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Receive build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Receive_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Receive_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Seq_Receive_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Seq_Receive_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Seq_Transmit_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Seq_Transmit_IT build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Transmit build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Transmit_DMA build/debug/stm32h7xx_hal_i2c.o +HAL_I2C_Slave_Transmit_IT build/debug/stm32h7xx_hal_i2c.o +HAL_IncTick build/debug/stm32h7xx_hal.o + build/debug/stm32h7xx_it.o +HAL_Init build/debug/stm32h7xx_hal.o + build/debug/main.o +HAL_InitTick build/debug/stm32h7xx_hal.o + build/debug/stm32h7xx_hal_rcc.o +HAL_LIN_Init build/debug/stm32h7xx_hal_uart.o +HAL_LIN_SendBreak build/debug/stm32h7xx_hal_uart.o +HAL_LTDC_ConfigCLUT build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_ConfigColorKeying build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_ConfigColorKeying_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_ConfigLayer build/debug/stm32h7xx_hal_ltdc.o + build/debug/main.o +HAL_LTDC_ConfigLayer_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_DeInit build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_DisableCLUT build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_DisableCLUT_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_DisableColorKeying build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_DisableColorKeying_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_DisableDither build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_EnableCLUT build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_EnableCLUT_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_EnableColorKeying build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_EnableColorKeying_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_EnableDither build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_ErrorCallback build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_GetError build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_GetState build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_IRQHandler build/debug/stm32h7xx_hal_ltdc.o + build/debug/stm32h7xx_it.o +HAL_LTDC_Init build/debug/stm32h7xx_hal_ltdc.o + build/debug/main.o +HAL_LTDC_LineEventCallback build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_MspDeInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_MspInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_ProgramLineEvent build/debug/stm32h7xx_hal_ltdc.o + build/debug/stm32h7xx_it.o +HAL_LTDC_Reload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_ReloadEventCallback build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetAddress build/debug/stm32h7xx_hal_ltdc.o + build/debug/main.o +HAL_LTDC_SetAddress_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetAlpha build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetAlpha_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetPitch build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetPitch_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetPixelFormat build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetPixelFormat_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetWindowPosition build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetWindowPosition_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetWindowSize build/debug/stm32h7xx_hal_ltdc.o +HAL_LTDC_SetWindowSize_NoReload build/debug/stm32h7xx_hal_ltdc.o +HAL_MDMA_Abort build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_Abort_IT build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_ConfigPostRequestMask build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_DeInit build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_GenerateSWRequest build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_GetError build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_GetState build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_IRQHandler build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_Init build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_LinkedList_AddNode build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_LinkedList_CreateNode build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_LinkedList_DisableCircularMode build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_LinkedList_EnableCircularMode build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_LinkedList_RemoveNode build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_PollForTransfer build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_RegisterCallback build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_Start build/debug/stm32h7xx_hal_mdma.o +HAL_MDMA_Start_IT build/debug/stm32h7xx_hal_mdma.o + build/debug/stm32h7xx_hal_sdram.o +HAL_MDMA_UnRegisterCallback build/debug/stm32h7xx_hal_mdma.o +HAL_MPU_ConfigRegion build/debug/stm32h7xx_hal_cortex.o +HAL_MPU_Disable build/debug/stm32h7xx_hal_cortex.o +HAL_MPU_DisableRegion build/debug/stm32h7xx_hal_cortex.o +HAL_MPU_Enable build/debug/stm32h7xx_hal_cortex.o +HAL_MPU_EnableRegion build/debug/stm32h7xx_hal_cortex.o +HAL_MspDeInit build/debug/stm32h7xx_hal.o +HAL_MspInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal.o +HAL_MultiProcessorEx_AddressLength_Set build/debug/stm32h7xx_hal_uart_ex.o +HAL_MultiProcessor_DisableMuteMode build/debug/stm32h7xx_hal_uart.o +HAL_MultiProcessor_EnableMuteMode build/debug/stm32h7xx_hal_uart.o +HAL_MultiProcessor_EnterMuteMode build/debug/stm32h7xx_hal_uart.o +HAL_MultiProcessor_Init build/debug/stm32h7xx_hal_uart.o +HAL_NVIC_ClearPendingIRQ build/debug/stm32h7xx_hal_cortex.o +HAL_NVIC_DisableIRQ build/debug/stm32h7xx_hal_cortex.o + build/debug/stm32h7xx_hal_msp.o +HAL_NVIC_EnableIRQ build/debug/stm32h7xx_hal_cortex.o + build/debug/stm32h7xx_hal_msp.o +HAL_NVIC_GetActive build/debug/stm32h7xx_hal_cortex.o +HAL_NVIC_GetPendingIRQ build/debug/stm32h7xx_hal_cortex.o +HAL_NVIC_GetPriority build/debug/stm32h7xx_hal_cortex.o +HAL_NVIC_GetPriorityGrouping build/debug/stm32h7xx_hal_cortex.o +HAL_NVIC_SetPendingIRQ build/debug/stm32h7xx_hal_cortex.o +HAL_NVIC_SetPriority build/debug/stm32h7xx_hal_cortex.o + build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal.o +HAL_NVIC_SetPriorityGrouping build/debug/stm32h7xx_hal_cortex.o + build/debug/stm32h7xx_hal.o +HAL_NVIC_SystemReset build/debug/stm32h7xx_hal_cortex.o +HAL_PCDEx_ActivateBCD build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCDEx_ActivateLPM build/debug/stm32h7xx_hal_pcd_ex.o + build/debug/stm32h7xx_hal_pcd.o +HAL_PCDEx_BCD_Callback build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCDEx_BCD_VBUSDetect build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCDEx_DeActivateBCD build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCDEx_DeActivateLPM build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCDEx_LPM_Callback build/debug/stm32h7xx_hal_pcd_ex.o + build/debug/stm32h7xx_hal_pcd.o +HAL_PCDEx_SetRxFiFo build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCDEx_SetTxFiFo build/debug/stm32h7xx_hal_pcd_ex.o +HAL_PCD_ActivateRemoteWakeup build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_ConnectCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DataInStageCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DataOutStageCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DeActivateRemoteWakeup build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DeInit build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DevConnect build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DevDisconnect build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_DisconnectCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_Abort build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_Close build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_ClrStall build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_Flush build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_GetRxCount build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_Open build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_Receive build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_SetStall build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_EP_Transmit build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_GetState build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_IRQHandler build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_ISOINIncompleteCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_ISOOUTIncompleteCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_Init build/debug/stm32h7xx_hal_pcd.o + build/debug/main.o +HAL_PCD_MspDeInit build/debug/stm32h7xx_hal_msp.o +HAL_PCD_MspInit build/debug/stm32h7xx_hal_msp.o +HAL_PCD_ResetCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_ResumeCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_SOFCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_SetAddress build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_SetTestMode build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_SetupStageCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_Start build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_Stop build/debug/stm32h7xx_hal_pcd.o +HAL_PCD_SuspendCallback build/debug/stm32h7xx_hal_pcd.o +HAL_PWREx_AVDCallback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_ClearPendingEvent build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_ClearWakeupFlag build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_ConfigAVD build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_ConfigD3Domain build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_ConfigSupply build/debug/stm32h7xx_hal_pwr_ex.o + build/debug/main.o +HAL_PWREx_ControlStopModeVoltageScaling build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_ControlVoltageScaling build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableAVD build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableAnalogBooster build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableBatteryCharging build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableBkUpReg build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableFlashPowerDown build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableMemoryShutOff build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableMonitoring build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableUSBReg build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableUSBVoltageDetector build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_DisableWakeUpPin build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableAVD build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableAnalogBooster build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableBatteryCharging build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableBkUpReg build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableFlashPowerDown build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableMemoryShutOff build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableMonitoring build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableUSBReg build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnableUSBVoltageDetector build/debug/stm32h7xx_hal_pwr_ex.o + build/debug/stm32h7xx_hal_msp.o +HAL_PWREx_EnableWakeUpPin build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnterSTANDBYMode build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnterSTOP2Mode build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_EnterSTOPMode build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetMMCVoltage build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetStopModeVoltageRange build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetSupplyConfig build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetTemperatureLevel build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetVBATLevel build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetVoltageRange build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_GetWakeupFlag build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_PVD_AVD_IRQHandler build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WAKEUP_PIN_IRQHandler build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WKUP1_Callback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WKUP2_Callback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WKUP3_Callback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WKUP4_Callback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WKUP5_Callback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWREx_WKUP6_Callback build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWR_ConfigPVD build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_DeInit build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_DisableBkUpAccess build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_DisablePVD build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_DisableSEVOnPend build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_DisableSleepOnExit build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_DisableWakeUpPin build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnableBkUpAccess build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnablePVD build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnableSEVOnPend build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnableSleepOnExit build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnableWakeUpPin build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnterSLEEPMode build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnterSTANDBYMode build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_EnterSTOPMode build/debug/stm32h7xx_hal_pwr.o +HAL_PWR_PVDCallback build/debug/stm32h7xx_hal_pwr.o + build/debug/stm32h7xx_hal_pwr_ex.o +HAL_PWR_PVD_IRQHandler build/debug/stm32h7xx_hal_pwr.o +HAL_RCCEx_CRSConfig build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRSGetSynchronizationInfo build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRSSoftwareSynchronizationGenerate build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRSWaitSynchronization build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRS_ErrorCallback build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRS_ExpectedSyncCallback build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRS_IRQHandler build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRS_SyncOkCallback build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_CRS_SyncWarnCallback build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_DisableLSECSS build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_EnableLSECSS build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_EnableLSECSS_IT build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_GetD1PCLK1Freq build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_GetD1SysClockFreq build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_GetD3PCLK1Freq build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_uart.o +HAL_RCCEx_GetPLL1ClockFreq build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_GetPLL2ClockFreq build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_uart.o +HAL_RCCEx_GetPLL3ClockFreq build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_uart.o +HAL_RCCEx_GetPeriphCLKConfig build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_GetPeriphCLKFreq build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_sd.o +HAL_RCCEx_KerWakeUpStopCLKConfig build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_LSECSS_Callback build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_LSECSS_IRQHandler build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCCEx_PeriphCLKConfig build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_msp.o + build/debug/main.o +HAL_RCCEx_WakeUpStopCLKConfig build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCC_CSSCallback build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_ClockConfig build/debug/stm32h7xx_hal_rcc.o + build/debug/main.o +HAL_RCC_DeInit build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_DisableCSS build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_EnableCSS build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_GetClockConfig build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_GetHCLKFreq build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_pcd.o +HAL_RCC_GetOscConfig build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_GetPCLK1Freq build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_rcc_ex.o +HAL_RCC_GetPCLK2Freq build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_uart.o +HAL_RCC_GetSysClockFreq build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal.o +HAL_RCC_MCOConfig build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_NMI_IRQHandler build/debug/stm32h7xx_hal_rcc.o +HAL_RCC_OscConfig build/debug/stm32h7xx_hal_rcc.o + build/debug/main.o +HAL_RS485Ex_Init build/debug/stm32h7xx_hal_uart_ex.o +HAL_ResumeTick build/debug/stm32h7xx_hal.o +HAL_SDEx_ChangeDMABuffer build/debug/stm32h7xx_hal_sd_ex.o +HAL_SDEx_ConfigDMAMultiBuffer build/debug/stm32h7xx_hal_sd_ex.o +HAL_SDEx_ReadBlocksDMAMultiBuffer build/debug/stm32h7xx_hal_sd_ex.o +HAL_SDEx_Read_DMADoubleBuf0CpltCallback build/debug/stm32h7xx_hal_sd.o +HAL_SDEx_Read_DMADoubleBuf1CpltCallback build/debug/stm32h7xx_hal_sd.o +HAL_SDEx_WriteBlocksDMAMultiBuffer build/debug/stm32h7xx_hal_sd_ex.o +HAL_SDEx_Write_DMADoubleBuf0CpltCallback build/debug/stm32h7xx_hal_sd.o +HAL_SDEx_Write_DMADoubleBuf1CpltCallback build/debug/stm32h7xx_hal_sd.o +HAL_SDRAM_DMA_XferCpltCallback build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_DMA_XferErrorCallback build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_DeInit build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_GetModeStatus build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_GetState build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_IRQHandler build/debug/stm32h7xx_hal_sdram.o + build/debug/stm32h7xx_it.o +HAL_SDRAM_Init build/debug/stm32h7xx_hal_sdram.o + build/debug/main.o +HAL_SDRAM_MspDeInit build/debug/stm32h7xx_hal_msp.o +HAL_SDRAM_MspInit build/debug/stm32h7xx_hal_msp.o +HAL_SDRAM_ProgramRefreshRate build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Read_16b build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Read_32b build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Read_8b build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Read_DMA build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_RefreshErrorCallback build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_SendCommand build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_SetAutoRefreshNumber build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_WriteProtection_Disable build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_WriteProtection_Enable build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Write_16b build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Write_32b build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Write_8b build/debug/stm32h7xx_hal_sdram.o +HAL_SDRAM_Write_DMA build/debug/stm32h7xx_hal_sdram.o +HAL_SD_Abort build/debug/stm32h7xx_hal_sd.o +HAL_SD_AbortCallback build/debug/stm32h7xx_hal_sd.o +HAL_SD_Abort_IT build/debug/stm32h7xx_hal_sd.o +HAL_SD_ConfigSpeedBusOperation build/debug/stm32h7xx_hal_sd.o +HAL_SD_ConfigWideBusOperation build/debug/stm32h7xx_hal_sd.o +HAL_SD_DeInit build/debug/stm32h7xx_hal_sd.o +HAL_SD_Erase build/debug/stm32h7xx_hal_sd.o +HAL_SD_ErrorCallback build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetCardCID build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetCardCSD build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetCardInfo build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetCardState build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetCardStatus build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetError build/debug/stm32h7xx_hal_sd.o +HAL_SD_GetState build/debug/stm32h7xx_hal_sd.o +HAL_SD_IRQHandler build/debug/stm32h7xx_hal_sd.o +HAL_SD_Init build/debug/stm32h7xx_hal_sd.o + build/debug/main.o +HAL_SD_InitCard build/debug/stm32h7xx_hal_sd.o +HAL_SD_MspDeInit build/debug/stm32h7xx_hal_msp.o +HAL_SD_MspInit build/debug/stm32h7xx_hal_msp.o +HAL_SD_ReadBlocks build/debug/stm32h7xx_hal_sd.o +HAL_SD_ReadBlocks_DMA build/debug/stm32h7xx_hal_sd.o +HAL_SD_ReadBlocks_IT build/debug/stm32h7xx_hal_sd.o +HAL_SD_RxCpltCallback build/debug/stm32h7xx_hal_sd.o +HAL_SD_TxCpltCallback build/debug/stm32h7xx_hal_sd.o +HAL_SD_WriteBlocks build/debug/stm32h7xx_hal_sd.o +HAL_SD_WriteBlocks_DMA build/debug/stm32h7xx_hal_sd.o +HAL_SD_WriteBlocks_IT build/debug/stm32h7xx_hal_sd.o +HAL_SYSCFG_AnalogSwitchConfig build/debug/stm32h7xx_hal.o +HAL_SYSCFG_CompensationCodeConfig build/debug/stm32h7xx_hal.o +HAL_SYSCFG_CompensationCodeSelect build/debug/stm32h7xx_hal.o +HAL_SYSCFG_DisableIOSpeedOptimize build/debug/stm32h7xx_hal.o +HAL_SYSCFG_DisableVREFBUF build/debug/stm32h7xx_hal.o +HAL_SYSCFG_EnableIOSpeedOptimize build/debug/stm32h7xx_hal.o +HAL_SYSCFG_EnableVREFBUF build/debug/stm32h7xx_hal.o +HAL_SYSCFG_VDDMMC_CompensationCodeConfig build/debug/stm32h7xx_hal.o +HAL_SYSCFG_VREFBUF_HighImpedanceConfig build/debug/stm32h7xx_hal.o +HAL_SYSCFG_VREFBUF_TrimmingConfig build/debug/stm32h7xx_hal.o +HAL_SYSCFG_VREFBUF_VoltageScalingConfig build/debug/stm32h7xx_hal.o +HAL_SYSTICK_CLKSourceConfig build/debug/stm32h7xx_hal_cortex.o +HAL_SYSTICK_Callback build/debug/stm32h7xx_hal_cortex.o +HAL_SYSTICK_Config build/debug/stm32h7xx_hal_cortex.o + build/debug/stm32h7xx_hal.o +HAL_SYSTICK_IRQHandler build/debug/stm32h7xx_hal_cortex.o +HAL_SetFMCMemorySwappingConfig build/debug/stm32h7xx_hal.o +HAL_SetTickFreq build/debug/stm32h7xx_hal.o +HAL_SuspendTick build/debug/stm32h7xx_hal.o +HAL_UARTEx_DisableFifoMode build/debug/stm32h7xx_hal_uart_ex.o + build/debug/main.o +HAL_UARTEx_DisableStopMode build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_EnableFifoMode build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_EnableStopMode build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_GetRxEventType build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_ReceiveToIdle build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_ReceiveToIdle_DMA build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_ReceiveToIdle_IT build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_RxEventCallback build/debug/stm32h7xx_hal_uart.o +HAL_UARTEx_RxFifoFullCallback build/debug/stm32h7xx_hal_uart_ex.o + build/debug/stm32h7xx_hal_uart.o +HAL_UARTEx_SetRxFifoThreshold build/debug/stm32h7xx_hal_uart_ex.o + build/debug/main.o +HAL_UARTEx_SetTxFifoThreshold build/debug/stm32h7xx_hal_uart_ex.o + build/debug/main.o +HAL_UARTEx_StopModeWakeUpSourceConfig build/debug/stm32h7xx_hal_uart_ex.o +HAL_UARTEx_TxFifoEmptyCallback build/debug/stm32h7xx_hal_uart_ex.o + build/debug/stm32h7xx_hal_uart.o +HAL_UARTEx_WakeupCallback build/debug/stm32h7xx_hal_uart_ex.o + build/debug/stm32h7xx_hal_uart.o +HAL_UART_Abort build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortCpltCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortReceive build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortReceiveCpltCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortReceive_IT build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortTransmit build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortTransmitCpltCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_AbortTransmit_IT build/debug/stm32h7xx_hal_uart.o +HAL_UART_Abort_IT build/debug/stm32h7xx_hal_uart.o +HAL_UART_DMAPause build/debug/stm32h7xx_hal_uart.o +HAL_UART_DMAResume build/debug/stm32h7xx_hal_uart.o +HAL_UART_DMAStop build/debug/stm32h7xx_hal_uart.o +HAL_UART_DeInit build/debug/stm32h7xx_hal_uart.o +HAL_UART_DisableReceiverTimeout build/debug/stm32h7xx_hal_uart.o +HAL_UART_EnableReceiverTimeout build/debug/stm32h7xx_hal_uart.o +HAL_UART_ErrorCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_GetError build/debug/stm32h7xx_hal_uart.o +HAL_UART_GetState build/debug/stm32h7xx_hal_uart.o +HAL_UART_IRQHandler build/debug/stm32h7xx_hal_uart.o +HAL_UART_Init build/debug/stm32h7xx_hal_uart.o + build/debug/main.o +HAL_UART_MspDeInit build/debug/stm32h7xx_hal_msp.o +HAL_UART_MspInit build/debug/stm32h7xx_hal_msp.o + build/debug/stm32h7xx_hal_uart_ex.o +HAL_UART_Receive build/debug/stm32h7xx_hal_uart.o +HAL_UART_Receive_DMA build/debug/stm32h7xx_hal_uart.o +HAL_UART_Receive_IT build/debug/stm32h7xx_hal_uart.o +HAL_UART_ReceiverTimeout_Config build/debug/stm32h7xx_hal_uart.o +HAL_UART_RxCpltCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_RxHalfCpltCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_Transmit build/debug/stm32h7xx_hal_uart.o +HAL_UART_Transmit_DMA build/debug/stm32h7xx_hal_uart.o +HAL_UART_Transmit_IT build/debug/stm32h7xx_hal_uart.o +HAL_UART_TxCpltCallback build/debug/stm32h7xx_hal_uart.o +HAL_UART_TxHalfCpltCallback build/debug/stm32h7xx_hal_uart.o +HSEM1_IRQHandler build/debug/startup_stm32h7a3xx.o +HardFault_Handler build/debug/stm32h7xx_it.o +I2C1_ER_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C1_EV_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C2_ER_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C2_EV_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C3_ER_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C3_EV_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C4_ER_IRQHandler build/debug/startup_stm32h7a3xx.o +I2C4_EV_IRQHandler build/debug/startup_stm32h7a3xx.o +JPEG_IRQHandler build/debug/startup_stm32h7a3xx.o +LPTIM1_IRQHandler build/debug/startup_stm32h7a3xx.o +LPTIM2_IRQHandler build/debug/startup_stm32h7a3xx.o +LPTIM3_IRQHandler build/debug/startup_stm32h7a3xx.o +LPTIM4_IRQHandler build/debug/startup_stm32h7a3xx.o +LPTIM5_IRQHandler build/debug/startup_stm32h7a3xx.o +LPUART1_IRQHandler build/debug/startup_stm32h7a3xx.o +LTDC_ER_IRQHandler build/debug/startup_stm32h7a3xx.o +LTDC_IRQHandler build/debug/stm32h7xx_it.o +MDIOS_IRQHandler build/debug/startup_stm32h7a3xx.o +MDIOS_WKUP_IRQHandler build/debug/startup_stm32h7a3xx.o +MDMA_IRQHandler build/debug/startup_stm32h7a3xx.o +MemManage_Handler build/debug/stm32h7xx_it.o +NMI_Handler build/debug/stm32h7xx_it.o +OCTOSPI1_IRQHandler build/debug/startup_stm32h7a3xx.o +OCTOSPI2_IRQHandler build/debug/startup_stm32h7a3xx.o +OTG_HS_EP1_IN_IRQHandler build/debug/startup_stm32h7a3xx.o +OTG_HS_EP1_OUT_IRQHandler build/debug/startup_stm32h7a3xx.o +OTG_HS_IRQHandler build/debug/startup_stm32h7a3xx.o +OTG_HS_WKUP_IRQHandler build/debug/startup_stm32h7a3xx.o +PVD_PVM_IRQHandler build/debug/startup_stm32h7a3xx.o +PendSV_Handler build/debug/stm32h7xx_it.o +PeriphCommonClock_Config build/debug/main.o +RCC_IRQHandler build/debug/startup_stm32h7a3xx.o +RNG_IRQHandler build/debug/startup_stm32h7a3xx.o +RTC_Alarm_IRQHandler build/debug/startup_stm32h7a3xx.o +RTC_TAMP_STAMP_CSS_LSE_IRQHandler build/debug/startup_stm32h7a3xx.o +RTC_WKUP_IRQHandler build/debug/startup_stm32h7a3xx.o +Reset_Handler build/debug/startup_stm32h7a3xx.o +SAI1_IRQHandler build/debug/startup_stm32h7a3xx.o +SAI2_IRQHandler build/debug/startup_stm32h7a3xx.o +SDMMC1_IRQHandler build/debug/startup_stm32h7a3xx.o +SDMMC2_IRQHandler build/debug/startup_stm32h7a3xx.o +SDMMC_CmdAppCommand build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdAppOperCommand build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdBlockCount build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdBlockLength build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdBusWidth build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdErase build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdEraseEndAdd build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdEraseStartAdd build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdGoIdleState build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdOpCondition build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdOperCond build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdReadMultiBlock build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd_ex.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdReadSingleBlock build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSDEraseEndAdd build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSDEraseStartAdd build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSelDesel build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSendCID build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSendCSD build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSendEXTCSD build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdSendOperationcondition build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdSendSCR build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSendStatus build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSetRelAdd build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSetRelAddMmc build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdSleepMmc build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdStatusRegister build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdStopTransfer build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdSwitch build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdVoltageSwitch build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_CmdWriteMultiBlock build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd_ex.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_CmdWriteSingleBlock build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_ConfigData build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd_ex.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_GetCmdResp1 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCmdResp2 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCmdResp3 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCmdResp4 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCmdResp5 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCmdResp6 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCmdResp7 build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetCommandResponse build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetDataCounter build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetFIFOCount build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_GetPowerState build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_GetResponse build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_Init build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_PowerState_Cycle build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_PowerState_OFF build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_PowerState_ON build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_ReadFIFO build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SDMMC_SDIO_CmdReadWriteDirect build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_SDIO_CmdReadWriteExtended build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_SendCommand build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_SetSDMMCReadWaitMode build/debug/stm32h7xx_ll_sdmmc.o +SDMMC_WriteFIFO build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_sd.o +SPDIF_RX_IRQHandler build/debug/startup_stm32h7a3xx.o +SPI1_IRQHandler build/debug/startup_stm32h7a3xx.o +SPI2_IRQHandler build/debug/startup_stm32h7a3xx.o +SPI3_IRQHandler build/debug/startup_stm32h7a3xx.o +SPI4_IRQHandler build/debug/startup_stm32h7a3xx.o +SPI5_IRQHandler build/debug/startup_stm32h7a3xx.o +SPI6_IRQHandler build/debug/startup_stm32h7a3xx.o +SVC_Handler build/debug/stm32h7xx_it.o +SWPMI1_IRQHandler build/debug/startup_stm32h7a3xx.o +SysTick_Handler build/debug/stm32h7xx_it.o +SystemClock_Config build/debug/main.o +SystemCoreClock build/debug/system_stm32h7xx.o + build/debug/stm32h7xx_ll_sdmmc.o + build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal_mdma.o + build/debug/stm32h7xx_hal_dma.o + build/debug/stm32h7xx_hal.o +SystemCoreClockUpdate build/debug/system_stm32h7xx.o +SystemD2Clock build/debug/system_stm32h7xx.o + build/debug/stm32h7xx_hal_rcc_ex.o + build/debug/stm32h7xx_hal_rcc.o + build/debug/stm32h7xx_hal.o +SystemInit build/debug/system_stm32h7xx.o + build/debug/startup_stm32h7a3xx.o +TIM15_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM16_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM17_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM1_BRK_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM1_CC_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM1_TRG_COM_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM1_UP_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM2_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM3_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM4_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM5_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM6_DAC_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM7_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM8_BRK_TIM12_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM8_CC_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM8_TRG_COM_TIM14_IRQHandler build/debug/startup_stm32h7a3xx.o +TIM8_UP_TIM13_IRQHandler build/debug/startup_stm32h7a3xx.o +UART4_IRQHandler build/debug/startup_stm32h7a3xx.o +UART5_IRQHandler build/debug/startup_stm32h7a3xx.o +UART7_IRQHandler build/debug/startup_stm32h7a3xx.o +UART8_IRQHandler build/debug/startup_stm32h7a3xx.o +UART9_IRQHandler build/debug/startup_stm32h7a3xx.o +UARTPrescTable build/debug/stm32h7xx_hal_uart.o +UART_AdvFeatureConfig build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_uart_ex.o +UART_CheckIdleState build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_uart_ex.o +UART_SetConfig build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_uart_ex.o +UART_Start_Receive_DMA build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_uart_ex.o +UART_Start_Receive_IT build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_uart_ex.o +UART_WaitOnFlagUntilTimeout build/debug/stm32h7xx_hal_uart.o + build/debug/stm32h7xx_hal_uart_ex.o +USART10_IRQHandler build/debug/startup_stm32h7a3xx.o +USART1_IRQHandler build/debug/startup_stm32h7a3xx.o +USART2_IRQHandler build/debug/startup_stm32h7a3xx.o +USART3_IRQHandler build/debug/startup_stm32h7a3xx.o +USART6_IRQHandler build/debug/startup_stm32h7a3xx.o +USB_ActivateDedicatedEndpoint build/debug/stm32h7xx_ll_usb.o +USB_ActivateEndpoint build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ActivateRemoteWakeup build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ActivateSetup build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ClearInterrupts build/debug/stm32h7xx_ll_usb.o +USB_CoreInit build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DeActivateRemoteWakeup build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DeactivateDedicatedEndpoint build/debug/stm32h7xx_ll_usb.o +USB_DeactivateEndpoint build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DevConnect build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DevDisconnect build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DevInit build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DisableGlobalInt build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_DoPing build/debug/stm32h7xx_ll_usb.o +USB_DriveVbus build/debug/stm32h7xx_ll_usb.o +USB_EP0_OutStart build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_EPClearStall build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_EPSetStall build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_EPStartXfer build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_EPStopXfer build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_EnableGlobalInt build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_FlushRxFifo build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_FlushTxFifo build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_GetCurrentFrame build/debug/stm32h7xx_ll_usb.o +USB_GetDevSpeed build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_GetHostSpeed build/debug/stm32h7xx_ll_usb.o +USB_GetMode build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_HC_Halt build/debug/stm32h7xx_ll_usb.o +USB_HC_Init build/debug/stm32h7xx_ll_usb.o +USB_HC_ReadInterrupt build/debug/stm32h7xx_ll_usb.o +USB_HC_StartXfer build/debug/stm32h7xx_ll_usb.o +USB_HostInit build/debug/stm32h7xx_ll_usb.o +USB_InitFSLSPClkSel build/debug/stm32h7xx_ll_usb.o +USB_ReadChInterrupts build/debug/stm32h7xx_ll_usb.o +USB_ReadDevAllInEpInterrupt build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ReadDevAllOutEpInterrupt build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ReadDevInEPInterrupt build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ReadDevOutEPInterrupt build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ReadInterrupts build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ReadPacket build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_ResetPort build/debug/stm32h7xx_ll_usb.o +USB_SetCurrentMode build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_SetDevAddress build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_SetDevSpeed build/debug/stm32h7xx_ll_usb.o +USB_SetTurnaroundTime build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_StopDevice build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +USB_StopHost build/debug/stm32h7xx_ll_usb.o +USB_WritePacket build/debug/stm32h7xx_ll_usb.o + build/debug/stm32h7xx_hal_pcd.o +UsageFault_Handler build/debug/stm32h7xx_it.o +WAKEUP_PIN_IRQHandler build/debug/startup_stm32h7a3xx.o +WWDG_IRQHandler build/debug/startup_stm32h7a3xx.o +_ITM_deregisterTMCloneTable /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +_ITM_registerTMCloneTable /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +_Min_Stack_Size build/debug/sysmem.o +__TMC_END__ /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtend.o + /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +__aeabi_idiv0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) +__aeabi_ldiv0 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_dvmd_tls.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) +__aeabi_uldivmod /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) + build/debug/stm32h7xx_hal_uart.o +__atexit /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) +__atexit0 /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) +__atexit_dummy /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) +__atexit_recursive_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) +__bss_end__ /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +__bss_start__ /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +__call_exitprocs /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) +__deregister_frame_info /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +__dso_handle /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +__env build/debug/syscalls.o +__errno /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + build/debug/sysmem.o + build/debug/syscalls.o +__fini_array_end /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) +__fini_array_start /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) +__fp_lock_all /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__fp_unlock_all /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__init_array_end /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) +__init_array_start /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) +__io_getchar build/debug/syscalls.o +__io_putchar build/debug/syscalls.o +__libc_fini_array /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +__libc_init_array /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) + build/debug/startup_stm32h7a3xx.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +__lock___arc4random_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__lock___at_quick_exit_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__lock___atexit_recursive_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) +__lock___dd_hash_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__lock___env_recursive_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__lock___malloc_recursive_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) +__lock___sfp_recursive_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__lock___tz_mutex /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__malloc_free_list /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) +__malloc_lock /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) +__malloc_sbrk_start /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) +__malloc_unlock /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) +__on_exit_args /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) +__preinit_array_end /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) +__preinit_array_start /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) +__register_exitproc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) +__register_frame_info /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crtbegin.o +__retarget_lock_acquire /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__retarget_lock_acquire_recursive /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__retarget_lock_close /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__retarget_lock_close_recursive /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__retarget_lock_init /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__retarget_lock_init_recursive /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__retarget_lock_release /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__retarget_lock_release_recursive /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mlock.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__call_atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__retarget_lock_try_acquire /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__retarget_lock_try_acquire_recursive /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lock.o) +__sclose /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__seofread /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) +__sf /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) +__sflush_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) +__sfp /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__sfp_lock_acquire /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__sfp_lock_release /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__sglue /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) +__sinit /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) +__sread /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__sseek /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__stack /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +__stdio_exit_handler /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) +__swrite /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +__udivmoddi4 /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_udivmoddi4.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/libgcc.a(_aeabi_uldivmod.o) +_close build/debug/syscalls.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) +_close_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) +_ebss build/debug/startup_stm32h7a3xx.o +_edata build/debug/startup_stm32h7a3xx.o +_end build/debug/sysmem.o +_estack build/debug/startup_stm32h7a3xx.o + build/debug/sysmem.o +_execve build/debug/syscalls.o +_exit build/debug/syscalls.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) +_fflush_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +_fini /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fini.o) +_fork build/debug/syscalls.o +_free_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-freer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) +_fstat build/debug/syscalls.o +_fwalk_sglue /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fwalk.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +_getpid build/debug/syscalls.o +_impure_data /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +_impure_ptr /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-impure.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-errno.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) +_init /usr/lib/gcc/arm-none-eabi/14.1.0/thumb/v7e-m+dp/hard/crti.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-init.o) +_isatty build/debug/syscalls.o +_kill build/debug/syscalls.o +_link build/debug/syscalls.o +_lseek build/debug/syscalls.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) +_lseek_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) +_mainCRTStartup /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +_malloc_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) +_open build/debug/syscalls.o +_read build/debug/syscalls.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) +_read_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) +_reclaim_reent /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) +_sbrk build/debug/sysmem.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) +_sbrk_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-mallocr.o) +_sbss build/debug/startup_stm32h7a3xx.o +_sdata build/debug/startup_stm32h7a3xx.o +_sidata build/debug/startup_stm32h7a3xx.o +_stack_init /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +_start /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +_stat build/debug/syscalls.o +_times build/debug/syscalls.o +_unlink build/debug/syscalls.o +_wait build/debug/syscalls.o +_write build/debug/syscalls.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) +_write_r /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-stdio.o) +atexit /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-atexit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +environ build/debug/syscalls.o +errno /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-reent.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-sbrkr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-writer.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-readr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-lseekr.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-closer.o) +exit /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-exit.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +fflush /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-fflush.o) +framebuffer build/debug/main.o +g_pfnVectors build/debug/startup_stm32h7a3xx.o +hardware_init_hook /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +hcrc build/debug/main.o +hfdcan1 build/debug/main.o + build/debug/stm32h7xx_it.o +hi2c4 build/debug/main.o +hltdc build/debug/main.o + build/debug/stm32h7xx_it.o +hpcd_USB_OTG_HS build/debug/main.o +hsd2 build/debug/main.o +hsdram1 build/debug/main.o + build/debug/stm32h7xx_it.o +huart10 build/debug/main.o +huart5 build/debug/main.o +initialise_monitor_handles build/debug/syscalls.o +main build/debug/main.o + build/debug/startup_stm32h7a3xx.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +malloc /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-__atexit.o) +memcpy /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memcpy-stub.o) + build/debug/stm32h7xx_hal_fdcan.o +memset /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-memset.o) + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/libc_nano.a(libc_a-findfp.o) + build/debug/stm32h7xx_hal_sd.o + build/debug/stm32h7xx_hal_msp.o + build/debug/main.o + /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +pFlash build/debug/stm32h7xx_hal_flash.o + build/debug/stm32h7xx_hal_flash_ex.o +software_init_hook /usr/lib/gcc/arm-none-eabi/14.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard/crt0.o +uwTick build/debug/stm32h7xx_hal.o +uwTickFreq build/debug/stm32h7xx_hal.o +uwTickPrio build/debug/stm32h7xx_hal.o + build/debug/stm32h7xx_hal_rcc.o diff --git a/Software/openocd.cfg b/Software/openocd.cfg new file mode 100644 index 0000000..bb2c93b --- /dev/null +++ b/Software/openocd.cfg @@ -0,0 +1,8 @@ +#OpenOCD configuration file, generated by STM32 for VSCode + +# Programmer, can be changed to several interfaces +# Standard will be the STLink interface as this is the standard for STM32 dev boards +source [find interface/stlink.cfg] + +# The target MCU. This should match your board +source [find target/stm32h7x.cfg] diff --git a/Software/Core/Startup/startup_stm32h7a3zitx.s b/Software/startup_stm32h7a3xx.s similarity index 100% rename from Software/Core/Startup/startup_stm32h7a3zitx.s rename to Software/startup_stm32h7a3xx.s diff --git a/Software/STM32H7A3ZITX_FLASH.ld b/Software/stm32h7a3zitx_flash.ld similarity index 58% rename from Software/STM32H7A3ZITX_FLASH.ld rename to Software/stm32h7a3zitx_flash.ld index 10f4fb5..8939802 100644 --- a/Software/STM32H7A3ZITX_FLASH.ld +++ b/Software/stm32h7a3zitx_flash.ld @@ -1,179 +1,190 @@ -/* -****************************************************************************** -** -** File : LinkerScript.ld -** -** Author : STM32CubeIDE -** -** Abstract : Linker script for STM32H7 series -** 2048Kbytes FLASH and 1376Kbytes RAM -** -** Set heap size, stack size and stack location according -** to application requirements. -** -** Set memory bank area and size if external memory is used. -** -** Target : STMicroelectronics STM32 -** -** Distribution: The file is distributed as is, without any warranty -** of any kind. -** -***************************************************************************** -** @attention -** -** Copyright (c) 2024 STMicroelectronics. -** All rights reserved. -** -** This software is licensed under terms that can be found in the LICENSE file -** in the root directory of this software component. -** If no LICENSE file comes with this software, it is provided AS-IS. -** -**************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of RAM */ -/* Generate a link error if heap and stack don't fit into RAM */ -_Min_Heap_Size = 0x200; /* required amount of heap */ -_Min_Stack_Size = 0x400; /* required amount of stack */ - -/* Specify the memory areas */ -MEMORY -{ - ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K - DTCMRAM1 (xrw) : ORIGIN = 0x20000000, LENGTH = 64K - DTCMRAM2 (xrw) : ORIGIN = 0x20010000, LENGTH = 64K - RAM (xrw) : ORIGIN = 0x24000000, LENGTH = 1024K - RAM_CD (xrw) : ORIGIN = 0x30000000, LENGTH = 128K - RAM_SRD (xrw) : ORIGIN = 0x38000000, LENGTH = 32K -} - -/* Define output sections */ -SECTIONS -{ - /* The startup code goes first into FLASH */ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) /* Startup code */ - . = ALIGN(4); - } >FLASH - - /* The program code and other data goes into FLASH */ - .text : - { - . = ALIGN(4); - *(.text) /* .text sections (code) */ - *(.text*) /* .text* sections (code) */ - *(.glue_7) /* glue arm to thumb code */ - *(.glue_7t) /* glue thumb to arm code */ - *(.eh_frame) - - KEEP (*(.init)) - KEEP (*(.fini)) - - . = ALIGN(4); - _etext = .; /* define a global symbols at end of code */ - } >FLASH - - /* Constant data goes into FLASH */ - .rodata : - { - . = ALIGN(4); - *(.rodata) /* .rodata sections (constants, strings, etc.) */ - *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ - . = ALIGN(4); - } >FLASH - - .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } >FLASH - .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ - { - __exidx_start = .; - *(.ARM.exidx*) - __exidx_end = .; - } >FLASH - - .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array*)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >FLASH - - .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array*)) - PROVIDE_HIDDEN (__init_array_end = .); - } >FLASH - - .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT(.fini_array.*))) - KEEP (*(.fini_array*)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >FLASH - - /* used by the startup to initialize data */ - _sidata = LOADADDR(.data); - - /* Initialized data sections goes into RAM, load LMA copy after code */ - .data : - { - . = ALIGN(4); - _sdata = .; /* create a global symbol at data start */ - *(.data) /* .data sections */ - *(.data*) /* .data* sections */ - *(.RamFunc) /* .RamFunc sections */ - *(.RamFunc*) /* .RamFunc* sections */ - - . = ALIGN(4); - _edata = .; /* define a global symbol at data end */ - } >RAM AT> FLASH - - /* Uninitialized data section */ - . = ALIGN(4); - .bss : - { - /* This is used by the startup in order to initialize the .bss section */ - _sbss = .; /* define a global symbol at bss start */ - __bss_start__ = _sbss; - *(.bss) - *(.bss*) - *(COMMON) - - . = ALIGN(4); - _ebss = .; /* define a global symbol at bss end */ - __bss_end__ = _ebss; - } >RAM - - /* User_heap_stack section, used to check that there is enough RAM left */ - ._user_heap_stack : - { - . = ALIGN(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the standard libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} +/* +****************************************************************************** +** + +** File : LinkerScript.ld +** +** Author : STM32CubeMX +** +** Abstract : Linker script for STM32H7A3ZITx series +** 2048Kbytes FLASH and 1216Kbytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed “as is,” without any warranty +** of any kind. +** +***************************************************************************** +** @attention +** +**

© COPYRIGHT(c) 2019 STMicroelectronics

+** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** 1. Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** 3. Neither the name of STMicroelectronics nor the names of its contributors +** may be used to endorse or promote products derived from this software +** without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = ORIGIN(DTCMRAM) + LENGTH(DTCMRAM); /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K +RAM (xrw) : ORIGIN = 0x24000000, LENGTH = 1024K +ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 2048K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >DTCMRAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >DTCMRAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >DTCMRAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + +} + +