From 4df0d28751ffa0dc3f0c19689c0066526bb46f0c Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Mon, 4 Aug 2025 16:58:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=BE=D0=B4=D0=B1=D0=B0=D1=81=20(=D0=BD=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mxproject | 34 +- CANEmu.ioc | 27 +- Core/CANEmu/canEmu.h | 1 + Core/Inc/stm32f1xx_hal_conf.h | 2 +- Core/Inc/tim.h | 3 + Core/Inc/usart.h | 52 + Core/Modbus/crc_algs.c | 116 +++ Core/Modbus/crc_algs.h | 9 + Core/Modbus/modbus.c | 951 ++++++++++++++++++ Core/Modbus/modbus.h | 372 +++++++ Core/Modbus/modbus_config.h | 44 + Core/Modbus/modbus_data.h | 192 ++++ Core/Modbus/rs_message.c | 550 +++++++++++ Core/Modbus/rs_message.h | 257 +++++ Core/Src/main.c | 39 +- Core/Src/tim.c | 63 ++ Core/Src/usart.c | 117 +++ MDK-ARM/CANEmu.uvguix.I | 201 ++-- MDK-ARM/CANEmu.uvoptx | 195 +++- MDK-ARM/CANEmu.uvprojx | 161 ++- MDK-ARM/CANEmu/CANEmu.axf | Bin 117388 -> 179160 bytes MDK-ARM/CANEmu/CANEmu.build_log.htm | 7 +- MDK-ARM/CANEmu/CANEmu.hex | 1187 +++++++++++++---------- MDK-ARM/CANEmu/CANEmu.htm | 453 ++++++--- MDK-ARM/CANEmu/CANEmu.lnp | 5 + MDK-ARM/CANEmu/CANEmu.map | 1165 ++++++++++++++++------ MDK-ARM/CANEmu/CANEmu_CANEmu.dep | 294 +++++- MDK-ARM/CANEmu/canemu.d | 1 + MDK-ARM/CANEmu/canemu.o | Bin 6036 -> 6064 bytes MDK-ARM/CANEmu/canform.d | 1 + MDK-ARM/CANEmu/crc_algs.d | 31 + MDK-ARM/CANEmu/crc_algs.o | Bin 0 -> 5928 bytes MDK-ARM/CANEmu/gpio.d | 3 +- MDK-ARM/CANEmu/main.d | 10 +- MDK-ARM/CANEmu/main.o | Bin 5928 -> 7076 bytes MDK-ARM/CANEmu/modbus.d | 32 + MDK-ARM/CANEmu/modbus.o | Bin 0 -> 33132 bytes MDK-ARM/CANEmu/rs_message.d | 33 + MDK-ARM/CANEmu/rs_message.o | Bin 0 -> 21776 bytes MDK-ARM/CANEmu/stm32f1xx_hal.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_cortex.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_dma.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_exti.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_flash.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_flash_ex.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_gpio.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_gpio_ex.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_msp.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_pwr.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_rcc.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_rcc_ex.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_tim.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_tim_ex.d | 3 +- MDK-ARM/CANEmu/stm32f1xx_hal_uart.d | 31 + MDK-ARM/CANEmu/stm32f1xx_hal_uart.o | Bin 0 -> 55072 bytes MDK-ARM/CANEmu/stm32f1xx_it.d | 1 + MDK-ARM/CANEmu/system_stm32f1xx.d | 3 +- MDK-ARM/CANEmu/tim.d | 3 +- MDK-ARM/CANEmu/tim.o | Bin 8156 -> 9248 bytes MDK-ARM/CANEmu/usart.d | 30 + MDK-ARM/CANEmu/usart.o | Bin 0 -> 7872 bytes 61 files changed, 5592 insertions(+), 1126 deletions(-) create mode 100644 Core/Inc/usart.h create mode 100644 Core/Modbus/crc_algs.c create mode 100644 Core/Modbus/crc_algs.h create mode 100644 Core/Modbus/modbus.c create mode 100644 Core/Modbus/modbus.h create mode 100644 Core/Modbus/modbus_config.h create mode 100644 Core/Modbus/modbus_data.h create mode 100644 Core/Modbus/rs_message.c create mode 100644 Core/Modbus/rs_message.h create mode 100644 Core/Src/usart.c create mode 100644 MDK-ARM/CANEmu/crc_algs.d create mode 100644 MDK-ARM/CANEmu/crc_algs.o create mode 100644 MDK-ARM/CANEmu/modbus.d create mode 100644 MDK-ARM/CANEmu/modbus.o create mode 100644 MDK-ARM/CANEmu/rs_message.d create mode 100644 MDK-ARM/CANEmu/rs_message.o create mode 100644 MDK-ARM/CANEmu/stm32f1xx_hal_uart.d create mode 100644 MDK-ARM/CANEmu/stm32f1xx_hal_uart.o create mode 100644 MDK-ARM/CANEmu/usart.d create mode 100644 MDK-ARM/CANEmu/usart.o diff --git a/.mxproject b/.mxproject index dca4e7c..ce665e6 100644 --- a/.mxproject +++ b/.mxproject @@ -1,29 +1,31 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\tim.c;..\Core\Src\usart.c;..\Core\Src\stm32f1xx_it.c;..\Core\Src\stm32f1xx_hal_msp.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;; +HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=USE_HAL_DRIVER;STM32F103xB;USE_HAL_DRIVER;USE_HAL_DRIVER; + [PreviousGenFiles] AdvancedFolderStructure=true -HeaderFileListSize=5 +HeaderFileListSize=6 HeaderFiles#0=..\Core\Inc\gpio.h HeaderFiles#1=..\Core\Inc\tim.h -HeaderFiles#2=..\Core\Inc\stm32f1xx_it.h -HeaderFiles#3=..\Core\Inc\stm32f1xx_hal_conf.h -HeaderFiles#4=..\Core\Inc\main.h +HeaderFiles#2=..\Core\Inc\usart.h +HeaderFiles#3=..\Core\Inc\stm32f1xx_it.h +HeaderFiles#4=..\Core\Inc\stm32f1xx_hal_conf.h +HeaderFiles#5=..\Core\Inc\main.h HeaderFolderListSize=1 HeaderPath#0=..\Core\Inc HeaderFiles=; -SourceFileListSize=5 +SourceFileListSize=6 SourceFiles#0=..\Core\Src\gpio.c SourceFiles#1=..\Core\Src\tim.c -SourceFiles#2=..\Core\Src\stm32f1xx_it.c -SourceFiles#3=..\Core\Src\stm32f1xx_hal_msp.c -SourceFiles#4=..\Core\Src\main.c +SourceFiles#2=..\Core\Src\usart.c +SourceFiles#3=..\Core\Src\stm32f1xx_it.c +SourceFiles#4=..\Core\Src\stm32f1xx_hal_msp.c +SourceFiles#5=..\Core\Src\main.c SourceFolderListSize=1 SourcePath#0=..\Core\Src SourceFiles=; -[PreviousLibFiles] -LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; - -[PreviousUsedKeilFiles] -SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\tim.c;..\Core\Src\stm32f1xx_it.c;..\Core\Src\stm32f1xx_hal_msp.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;; -HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; -CDefines=USE_HAL_DRIVER;STM32F103xB;USE_HAL_DRIVER;USE_HAL_DRIVER; - diff --git a/CANEmu.ioc b/CANEmu.ioc index 9159708..6b20c24 100644 --- a/CANEmu.ioc +++ b/CANEmu.ioc @@ -11,19 +11,24 @@ Mcu.IP0=NVIC Mcu.IP1=RCC Mcu.IP2=SYS Mcu.IP3=TIM2 -Mcu.IPNb=4 +Mcu.IP4=TIM3 +Mcu.IP5=USART1 +Mcu.IPNb=6 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC14-OSC32_IN Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin10=VP_TIM2_VS_ClockSourceINT +Mcu.Pin11=VP_TIM3_VS_ClockSourceINT Mcu.Pin2=PD0-OSC_IN Mcu.Pin3=PD1-OSC_OUT Mcu.Pin4=PB0 -Mcu.Pin5=PA13 -Mcu.Pin6=PA14 -Mcu.Pin7=VP_SYS_VS_Systick -Mcu.Pin8=VP_TIM2_VS_ClockSourceINT -Mcu.PinsNb=9 +Mcu.Pin5=PA9 +Mcu.Pin6=PA10 +Mcu.Pin7=PA13 +Mcu.Pin8=PA14 +Mcu.Pin9=VP_SYS_VS_Systick +Mcu.PinsNb=12 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx @@ -40,10 +45,14 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX PB0.Locked=true PB0.Signal=GPIO_Output PC14-OSC32_IN.Mode=LSE-External-Oscillator @@ -107,8 +116,14 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.TimSysFreq_Value=72000000 RCC.USBFreq_Value=72000000 RCC.VCOOutput2Freq_Value=8000000 +TIM3.IPParameters=Period +TIM3.Period=7200 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_TIM2_VS_ClockSourceINT.Mode=Internal VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +VP_TIM3_VS_ClockSourceINT.Mode=Internal +VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT board=custom diff --git a/Core/CANEmu/canEmu.h b/Core/CANEmu/canEmu.h index cb03280..aa3c1ce 100644 --- a/Core/CANEmu/canEmu.h +++ b/Core/CANEmu/canEmu.h @@ -28,6 +28,7 @@ typedef struct CAN_TxHeaderTypeDef header; uint8_t data[8]; uint32_t bitrate_bps; + uint32_t period_ms; CAN_ErrorFlags_t errors; }CANEmu_HandleTypeDef; diff --git a/Core/Inc/stm32f1xx_hal_conf.h b/Core/Inc/stm32f1xx_hal_conf.h index d6ef350..192f89f 100644 --- a/Core/Inc/stm32f1xx_hal_conf.h +++ b/Core/Inc/stm32f1xx_hal_conf.h @@ -65,7 +65,7 @@ /*#define HAL_SPI_MODULE_ENABLED */ /*#define HAL_SRAM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED -/*#define HAL_UART_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED /*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ diff --git a/Core/Inc/tim.h b/Core/Inc/tim.h index f52bef6..29e0392 100644 --- a/Core/Inc/tim.h +++ b/Core/Inc/tim.h @@ -34,11 +34,14 @@ extern "C" { extern TIM_HandleTypeDef htim2; +extern TIM_HandleTypeDef htim3; + /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_TIM2_Init(void); +void MX_TIM3_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h new file mode 100644 index 0000000..10c6193 --- /dev/null +++ b/Core/Inc/usart.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.h + * @brief This file contains all the function prototypes for + * the usart.c file + ****************************************************************************** + * @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 */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USART_H__ +#define __USART_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern UART_HandleTypeDef huart1; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_USART1_UART_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USART_H__ */ + diff --git a/Core/Modbus/crc_algs.c b/Core/Modbus/crc_algs.c new file mode 100644 index 0000000..fcfa779 --- /dev/null +++ b/Core/Modbus/crc_algs.c @@ -0,0 +1,116 @@ +#include "crc_algs.h" + + +uint32_t CRC_calc; +uint32_t CRC_ref; + +//uint16_t CRC_calc; +//uint16_t CRC_ref; + + +// left this global for debug +uint8_t uchCRCHi = 0xFF; +uint8_t uchCRCLo = 0xFF; +unsigned uIndex; + + +uint32_t crc32(uint8_t *data, uint32_t data_size) +{ + static const unsigned int crc32_table[] = +{ + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D +}; +unsigned int crc = 0xFFFFFFFF; + while (data_size--) + { + crc = (crc >> 8) ^ crc32_table[(crc ^ *data) & 255]; + data++; + } + return crc^0xFFFFFFFF; +} + + +uint16_t crc16(uint8_t *data, uint32_t data_size) +{ + /*Table of CRC values for high order byte*/ + static unsigned char auchCRCHi[]= + { + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41, + 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40, + }; + /*Table of CRC values for low order byte*/ + static char auchCRCLo[] = + { + 0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04, + 0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8, + 0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC, + 0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10, + 0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4, + 0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38, + 0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C, + 0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0, + 0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4, + 0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68, + 0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C, + 0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0, + 0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54, + 0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98, + 0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C, + 0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40, + }; + uchCRCHi = 0xFF; + uchCRCLo = 0xFF; + /* CRC Generation Function */ + while( data_size--) /* pass through message buffer */ + { + uIndex = uchCRCHi ^ *data++; /* calculate the CRC */ + uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex]; + uchCRCLo = auchCRCLo[uIndex]; + } + return uchCRCHi | uchCRCLo<<8; +} diff --git a/Core/Modbus/crc_algs.h b/Core/Modbus/crc_algs.h new file mode 100644 index 0000000..3502d6a --- /dev/null +++ b/Core/Modbus/crc_algs.h @@ -0,0 +1,9 @@ +#include "modbus_config.h" + +// extern here to use in bootloader.c +extern uint32_t CRC_calc; +extern uint32_t CRC_ref; + + +uint16_t crc16(uint8_t *data, uint32_t data_size); +uint32_t crc32(uint8_t *data, uint32_t data_size); diff --git a/Core/Modbus/modbus.c b/Core/Modbus/modbus.c new file mode 100644 index 0000000..55970c1 --- /dev/null +++ b/Core/Modbus/modbus.c @@ -0,0 +1,951 @@ +/** +************************************************************************** +* @file modbus.c +* @brief Модуль для реализации MODBUS. +************************************************************************** +* @details Файл содержит реализацию функций работы с Modbus, включая: +* - доступ к coils и registers; +* - обработку команд протокола; +* - взаимодействие с RS (UART); +* - инициализацию. +* +* @section Функции и макросы +* +* ### Доступ к coils: +* - MB_Set_Coil_Local() — Установить coil по локальному адресу. +* - MB_Reset_Coil_Local() — Сбросить coil по локальному адресу. +* - MB_Toogle_Coil_Local() — Инвертировать coil по локальному адресу. +* - MB_Read_Coil_Local() — Прочитать coil по локальному адресу. +* - MB_Write_Coil_Global() — Установить/сбросить coil по глобальному адресу. +* - MB_Read_Coil_Global() — Прочитать coil по глобальному адресу. +* +* ### Обработка команд Modbus: +* - MB_DefineRegistersAddress() — Определить начальный адрес регистра. +* - MB_DefineCoilsAddress() — Определить начальный адрес coils. +* - MB_Check_Address_For_Arr() — Проверить, принадлежит ли адрес массиву. +* - Основные команды Modbus: +* - MB_Read_Coils() +* - MB_Read_Hold_Regs() +* - MB_Write_Single_Coil() +* - MB_Write_Miltuple_Coils() +* - MB_Write_Miltuple_Regs() +* +* ### Функции для работы с RS (UART): +* - RS_Parse_Message() / RS_Collect_Message() — Парсинг и сборка сообщения. +* - RS_Response() — Отправка ответа. +* - RS_Define_Size_of_RX_Message() — Определение размера принимаемого сообщения. +* - RS_Init() — Инициализация UART. +* +* ### Инициализация: +* - MODBUS_FirstInit() — Инициализация модуля Modbus. +* +* @section Структура данных Modbus +* +* #### Holding/Input Registers: +* - Регистры — 16-битные слова. Доступ к регистрам осуществляется через указатель. +* Таким образом, сами регистры могут представлять собой как массив так и структуру. +* +* #### Coils: +* - Coils — это биты, упакованные в 16-битные слова. Доступ к коилам осуществляется через указатель. +* Таким образом, сами коилы могут представлять собой как массив так и структуру. +* +* @section Инструкция по подключению +* Для корректной работы надо подключить обработчики RS_UART_Handler(), RS_TIM_Handler(), +* в соответствубщие низкоуровневые прерывания UART_IRQHandler, TIM_IRQHandler. После HAL'овского обработчика +* +* Также необходимо в modbus_config.h настроить дефайны для нужной работы UART +* После для запуска Modbus: +* @verbatim + //----------------Прием модбас----------------// + #include "rs_message.h" + MODBUS_FirstInit(); + RS_Receive_IT(&hmodbus1, &MODBUS_MSG); +* @endverbatim +* +******************************************************************************/ + +#include "rs_message.h" +uint32_t dbg_temp, dbg_temp2, dbg_temp3; // for debug +/* MODBUS HANDLES */ +extern UART_HandleTypeDef rs_huart; +extern TIM_HandleTypeDef rs_htim; +RS_HandleTypeDef hmodbus1; + +/* DEFINE REGISTERS/COILS */ +MB_DeviceIdentificationTypeDef MB_INFO; +MB_DataStructureTypeDef MB_DATA; +RS_MsgTypeDef MODBUS_MSG; + +//------------------------------------------------------------------- +//-----------------------------FOR USER------------------------------ +/** + * @brief First set up of MODBUS. + * @details Первый инит модбас. Заполняет структуры и инициализирует таймер и юарт для общения по модбас. + * @note This called from main + */ +void MODBUS_FirstInit(void) +{ + MB_DevoceInentificationInit(); + //-----------SETUP MODBUS------------- + // set up modbus: MB_RX_Size_NotConst and Timeout enable + hmodbus1.ID = MODBUS_DEVICE_ID; + hmodbus1.sRS_Timeout = MODBUS_TIMEOUT; + hmodbus1.sRS_Mode = SLAVE_ALWAYS_WAIT; + hmodbus1.sRS_RX_Size_Mode = RS_RX_Size_NotConst; + + // INIT + hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &rs_huart, &rs_htim, 0); + + RS_EnableReceive(); +} +/** + * @brief Set or Reset Coil at its global address. + * @param Addr - адрес коила. + * @param WriteVal - Что записать в коил: 0 или 1. + * @return ExceptionCode - Код исключения если коила по адресу не существует, и NO_ERRORS если все ок. + * + * @details Позволяет обратиться к любому коилу по его глобальному адрессу. + Вне зависимости от того как коилы размещены в памяти. + */ +MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal) +{ + //---------CHECK FOR ERRORS---------- + MB_ExceptionTypeDef Exception = NO_ERRORS; + uint16_t *coils; + uint16_t start_shift = 0; // shift in coils register + + //------------WRITE COIL------------- + Exception = MB_DefineCoilsAddress(&coils, Addr, 1, &start_shift, 1); + if(Exception == NO_ERRORS) + { + switch(WriteVal) + { + case SET_COIL: + *coils |= (1<= R_ARR_ADDR) + { + // if quantity too big return error + if ((Addr - R_ARR_ADDR) + Qnt > R_ARR_NUMB) + { + return ILLEGAL_DATA_ADDRESS; // return exception code + } + // if all ok - return no errors + return NO_ERRORS; + } + // if address isnt from this array return error + else + return ILLEGAL_DATA_ADDRESS; // return exception code +} +/** + * @brief Define Address Origin for Input/Holding Registers + * @param pRegs - указатель на указатель регистров. + * @param Addr - адрес начального регистра. + * @param Qnt - количество запрашиваемых регистров. + * @param WriteFlag - флаг регистр нужны для чтения или записи. + * @return ExceptionCode - Код исключения если есть, и NO_ERRORS если нет. + * + * @details Определение адреса начального регистра. + * @note WriteFlag пока не используется. + */ +MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t RegisterType) +{ + /* check quantity error */ + if (Qnt > 125) + { + return ILLEGAL_DATA_VALUE; // return exception code + } + + if(RegisterType == RegisterType_Holding) + { + // Default holding registers + if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_ADDR, R_HOLDING_QNT) == NO_ERRORS) + { + *pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // указатель на выбранный по Addr регистр + } + // if address doesnt match any array - return illegal data address response + else + { + return ILLEGAL_DATA_ADDRESS; + } + } + else if(RegisterType == RegisterType_Input) + { + // Default input registers + if(MB_Check_Address_For_Arr(Addr, Qnt, R_INPUT_ADDR, R_INPUT_QNT) == NO_ERRORS) + { + *pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // указатель на выбранный по Addr регистр + } + // if address doesnt match any array - return illegal data address response + else + { + return ILLEGAL_DATA_ADDRESS; + } + } + else + { + return ILLEGAL_FUNCTION; + } + // if found requeried array return no err + return NO_ERRORS; // return no errors +} +/** + * @brief Define Address Origin for coils + * @param pCoils - указатель на указатель коилов. + * @param Addr - адресс начального коила. + * @param Qnt - количество запрашиваемых коилов. + * @param start_shift - указатель на переменную содержащую сдвиг внутри регистра для начального коила. + * @param WriteFlag - флаг коилы нужны для чтения или записи. + * @return ExceptionCode - Код исключения если есть, и NO_ERRORS если нет. + * + * @details Определение адреса начального регистра запрашиваемых коилов. + * @note WriteFlag используется для определния регистров GPIO: ODR или IDR. + */ +MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag) +{ + /* check quantity error */ + if (Qnt > 2000) + { + return ILLEGAL_DATA_VALUE; // return exception code + } + + // Default coils + if(MB_Check_Address_For_Arr(Addr, Qnt, C_CONTROL_ADDR, C_CONTROL_QNT) == NO_ERRORS) + { + *pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr); // указатель на выбранный по Addr массив коилов + } + // if address doesnt match any array - return illegal data address response + else + { + return ILLEGAL_DATA_ADDRESS; + } + + *start_shift = Addr % 16; // set shift to requested coil + // if found requeried array return no err + return NO_ERRORS; // return no errors +} + + +/** + * @brief Proccess command Read Coils (01 - 0x01). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Read Coils. + */ +uint8_t MB_Read_Coils(RS_MsgTypeDef *modbus_msg) +{ + //---------CHECK FOR ERRORS---------- + uint16_t *coils; + uint16_t start_shift = 0; // shift in coils register + + modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, modbus_msg->Qnt, &start_shift, 0); + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + //-----------READING COIL------------ + // setup output message data size + modbus_msg->ByteCnt = Divide_Up(modbus_msg->Qnt, 8); + // create mask for coils + uint16_t mask_for_coils = 0; // mask for coils that've been chosen + uint16_t setted_coils = 0; // value of setted coils + uint16_t temp_reg = 0; // temp register for saving coils that hasnt been chosen + uint16_t coil_cnt = 0; // counter for processed coils + + // cycle until all registers with requered coils would be processed + int shift = start_shift; // set shift to first coil in first register + int ind = 0; // index for coils registers and data + for(; ind <= Divide_Up(start_shift + modbus_msg->Qnt, 16); ind++) + { + //----SET MASK FOR COILS REGISTER---- + mask_for_coils = 0; + for(; shift < 0x10; shift++) + { + mask_for_coils |= 1<<(shift); // choose certain coil + if(++coil_cnt >= modbus_msg->Qnt) + break; + } + shift = 0; // set shift to zero for the next step + + //-----------READ COILS-------------- + modbus_msg->DATA[ind] = (*(coils+ind)&mask_for_coils) >> start_shift; + if(ind > 0) + modbus_msg->DATA[ind-1] |= ((*(coils+ind)&mask_for_coils) << 16) >> start_shift; + + } + // т.к. DATA 16-битная, для 8-битной передачи, надо поменять местами верхний и нижний байты + for(; ind >= 0; --ind) + modbus_msg->DATA[ind] = ByteSwap16(modbus_msg->DATA[ind]); + + return 1; +} + +/** + * @brief Proccess command Read Holding Registers (03 - 0x03). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Read Holding Registers. + */ +uint8_t MB_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg) +{ + //---------CHECK FOR ERRORS---------- + // get origin address for data + uint16_t *pHoldRegs; + modbus_msg->Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, modbus_msg->Qnt, RegisterType_Holding); // определение адреса регистров + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + + //-----------READING REGS------------ + // setup output message data size + modbus_msg->ByteCnt = modbus_msg->Qnt*2; // *2 because we transmit 8 bits, not 16 bits + // read data + int i; + for (i = 0; iQnt; i++) + { + modbus_msg->DATA[i] = *(pHoldRegs++); + } + return 1; +} + +/** + * @brief Proccess command Read Input Registers (04 - 0x04). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Read Input Registers. + */ +uint8_t MB_Read_Input_Regs(RS_MsgTypeDef *modbus_msg) +{ + //---------CHECK FOR ERRORS---------- + // get origin address for data + uint16_t *pInRegs; + modbus_msg->Except_Code = MB_DefineRegistersAddress(&pInRegs, modbus_msg->Addr, modbus_msg->Qnt, RegisterType_Input); // определение адреса регистров + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + + //-----------READING REGS------------ + // setup output message data size + modbus_msg->ByteCnt = modbus_msg->Qnt*2; // *2 because we transmit 8 bits, not 16 bits + // read data + int i; + for (i = 0; iQnt; i++) + { + if(*((int16_t *)pInRegs) > 0) + modbus_msg->DATA[i] = (*pInRegs++); + else + modbus_msg->DATA[i] = (*pInRegs++); + } + return 1; +} +/** + * @brief Proccess command Write Single Coils (05 - 0x05). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Write Single Coils. + */ +uint8_t MB_Write_Single_Coil(RS_MsgTypeDef *modbus_msg) +{ + //---------CHECK FOR ERRORS---------- + if ((modbus_msg->Qnt != 0x0000) && (modbus_msg->Qnt != 0xFF00)) + { + modbus_msg->Except_Code = ILLEGAL_DATA_VALUE; + return 0; + } + // define position of coil + uint16_t *coils; + uint16_t start_shift = 0; // shift in coils register + modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, 0, &start_shift, 1); + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + + //----------WRITTING COIL------------ + if(modbus_msg->Qnt == 0xFF00) + *(coils) |= 1<Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, 1, RegisterType_Holding); // определение адреса регистров + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + //-----------WRITTING REG------------ + *(pHoldRegs) = modbus_msg->Qnt; + return 1; +} + +/** + * @brief Proccess command Write Multiple Coils (15 - 0x0F). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Write Multiple Coils. + */ +uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg) +{ + //---------CHECK FOR ERRORS---------- + if (modbus_msg->ByteCnt != Divide_Up(modbus_msg->Qnt, 8)) + { // if quantity too large OR if quantity and bytes count arent match + modbus_msg->Except_Code = ILLEGAL_DATA_VALUE; + return 0; + } + // define position of coil + uint16_t *coils; // pointer to coils + uint16_t start_shift = 0; // shift in coils register + modbus_msg->Except_Code = MB_DefineCoilsAddress(&coils, modbus_msg->Addr, modbus_msg->Qnt, &start_shift, 1); + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + //----------WRITTING COILS----------- + // create mask for coils + uint16_t mask_for_coils = 0; // mask for coils that've been chosen + uint32_t setted_coils = 0; // value of setted coils + uint16_t temp_reg = 0; // temp register for saving coils that hasnt been chosen + uint16_t coil_cnt = 0; // counter for processed coils + + // cycle until all registers with requered coils would be processed + int shift = start_shift; // set shift to first coil in first register + for(int ind = 0; ind <= Divide_Up(start_shift + modbus_msg->Qnt, 16); ind++) + { + //----SET MASK FOR COILS REGISTER---- + mask_for_coils = 0; + for(; shift < 0x10; shift++) + { + mask_for_coils |= 1<<(shift); // choose certain coil + if(++coil_cnt >= modbus_msg->Qnt) + break; + } + shift = 0; // set shift to zero for the next step + + + + //-----------WRITE COILS------------- + // get current coils + temp_reg = *(coils+ind); + // set coils + setted_coils = ByteSwap16(modbus_msg->DATA[ind]) << start_shift; + if(ind > 0) + { + setted_coils |= ((ByteSwap16(modbus_msg->DATA[ind-1]) << start_shift) >> 16); + } + // write coils + + *(coils+ind) = setted_coils & mask_for_coils; + // restore untouched coils + *(coils+ind) |= temp_reg&(~mask_for_coils); + + + if(coil_cnt >= modbus_msg->Qnt) // if all coils written - break cycle + break; // *kind of unnecessary + } + + return 1; +} + +/** + * @brief Proccess command Write Multiple Registers (16 - 0x10). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Write Multiple Registers. + */ +uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg) +{ + //---------CHECK FOR ERRORS---------- + if (modbus_msg->Qnt*2 != modbus_msg->ByteCnt) + { // if quantity and bytes count arent match + modbus_msg->Except_Code = 3; + return 0; + } + // get origin address for data + uint16_t *pHoldRegs; + modbus_msg->Except_Code = MB_DefineRegistersAddress(&pHoldRegs, modbus_msg->Addr, modbus_msg->Qnt, RegisterType_Holding); // определение адреса регистров + if(modbus_msg->Except_Code != NO_ERRORS) + return 0; + + //-----------WRITTING REGS----------- + for (int i = 0; iQnt; i++) + { + *(pHoldRegs++) = modbus_msg->DATA[i]; + } + return 1; +} + +void MB_WriteObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj) +{ + mbdata[(*ind)++] = obj->length; + for (int i = 0; i < obj->length; i++) + { + mbdata[(*ind)++] = obj->name[i]; + } +} +/** + * @brief Proccess command Read Device Identification (43/14 - 0x2B/0E). + * @param modbus_msg - указатель на структуру собщения modbus. + * @return fMessageHandled - статус о результате обработки комманды. + * @details Обработка команды Write Single Register. + */ +uint8_t MB_Read_Device_Identification(RS_MsgTypeDef *modbus_msg) +{ + char *mbdata = (char *)modbus_msg->DATA; + unsigned ind = 0; + switch(modbus_msg->DevId.ReadDevId) + { + case MB_BASIC_IDENTIFICATION: + mbdata[ind++] = 0x00; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.VendorName); + mbdata[ind++] = 0x01; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ProductCode); + mbdata[ind++] = 0x02; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.Revision); + modbus_msg->DevId.NumbOfObj = 3; + break; + case MB_REGULAR_IDENTIFICATION: + mbdata[ind++] = 0x03; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.VendorUrl); + mbdata[ind++] = 0x04; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ProductName); + mbdata[ind++] = 0x05; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.ModelName); + mbdata[ind++] = 0x06; + MB_WriteObjectToMessage(mbdata, &ind, &MB_INFO.UserApplicationName); + modbus_msg->DevId.NumbOfObj = 4; + break; + default: + return 0; + } + + modbus_msg->ByteCnt = ind; + return 1; +} + + +/** + * @brief Respond accord to received message. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @return RS_RES - статус о результате ответа на комманду. + * @details Обработка принятой комманды и ответ на неё. + */ +RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg) +{ + RS_StatusTypeDef MB_RES = 0; + hmodbus->f.MessageHandled = 0; + hmodbus->f.EchoResponse = 0; + RS_Reset_TX_Flags(hmodbus); // reset flag for correct transmit + + if(modbus_msg->Func_Code < ERR_VALUES_START)// if no errors after parsing + { + switch (modbus_msg->Func_Code) + { + // Read Coils + case MB_R_COILS: + hmodbus->f.MessageHandled = MB_Read_Coils(hmodbus->pMessagePtr); + break; + + // Read Hodling Registers + case MB_R_HOLD_REGS: + hmodbus->f.MessageHandled = MB_Read_Hold_Regs(hmodbus->pMessagePtr); + break; + case MB_R_IN_REGS: + hmodbus->f.MessageHandled = MB_Read_Input_Regs(hmodbus->pMessagePtr); + break; + + + // Write Single Coils + case MB_W_COIL: + hmodbus->f.MessageHandled = MB_Write_Single_Coil(hmodbus->pMessagePtr); + if(hmodbus->f.MessageHandled) + { + hmodbus->f.EchoResponse = 1; + hmodbus->RS_Message_Size -= 2; // echo response if write ok (minus 2 cause of two CRC bytes) + } + break; + + case MB_W_HOLD_REG: + hmodbus->f.MessageHandled = MB_Write_Single_Reg(hmodbus->pMessagePtr); + if(hmodbus->f.MessageHandled) + { + hmodbus->f.EchoResponse = 1; + hmodbus->RS_Message_Size -= 2; // echo response if write ok (minus 2 cause of two CRC bytes) + } + break; + + // Write Multiple Coils + case MB_W_COILS: + hmodbus->f.MessageHandled = MB_Write_Miltuple_Coils(hmodbus->pMessagePtr); + if(hmodbus->f.MessageHandled) + { + hmodbus->f.EchoResponse = 1; + hmodbus->RS_Message_Size = 6; // echo response if write ok (withous data bytes) + } + break; + + // Write Multiple Registers + case MB_W_HOLD_REGS: + hmodbus->f.MessageHandled = MB_Write_Miltuple_Regs(hmodbus->pMessagePtr); + if(hmodbus->f.MessageHandled) + { + hmodbus->f.EchoResponse = 1; + hmodbus->RS_Message_Size = 6; // echo response if write ok (withous data bytes) + } + break; + + case MB_R_DEVICE_INFO: + hmodbus->f.MessageHandled = MB_Read_Device_Identification(hmodbus->pMessagePtr); + break; + + + /* unknown func code */ + default: modbus_msg->Except_Code = 0x01; /* set exception code: illegal function */ + } + + if(hmodbus->f.MessageHandled == 0) + { + modbus_msg->Func_Code += ERR_VALUES_START; + } + else + { + } + + + } + + // if we need response - check that transmit isnt busy + if( RS_Is_TX_Busy(hmodbus) ) + RS_Abort(hmodbus, ABORT_TX); // if tx busy - set it free + + // Transmit right there, or sets (fDeferredResponse) to transmit response in main code + MB_RES = RS_Handle_Transmit_Start(hmodbus, modbus_msg); + + hmodbus->RS_STATUS = MB_RES; + return MB_RES; +} + +/** + * @brief Collect message in buffer to transmit it. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @param msg_uart_buff - указатель на буффер UART. + * @return RS_RES - статус о результате заполнения буфера. + * @details Заполнение буффера UART из структуры сообщения. + */ +RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff) +{ + int ind = 0; // ind for modbus-uart buffer + + if(hmodbus->f.EchoResponse && hmodbus->f.MessageHandled) // if echo response need + ind = hmodbus->RS_Message_Size; + else + { + //------INFO ABOUT DATA/MESSAGE------ + //-----------[first bytes]----------- + // set ID of message/user + modbus_uart_buff[ind++] = modbus_msg->MbAddr; + + // set dat or err response + modbus_uart_buff[ind++] = modbus_msg->Func_Code; + + if (modbus_msg->Func_Code < ERR_VALUES_START) // if no error occur + { + // fill modbus header + if(modbus_msg->Func_Code == MB_R_DEVICE_INFO) // devide identification header + { + modbus_uart_buff[ind++] = modbus_msg->DevId.MEI_Type; + modbus_uart_buff[ind++] = modbus_msg->DevId.ReadDevId; + modbus_uart_buff[ind++] = modbus_msg->DevId.Conformity; + modbus_uart_buff[ind++] = modbus_msg->DevId.MoreFollows; + modbus_uart_buff[ind++] = modbus_msg->DevId.NextObjId; + modbus_uart_buff[ind++] = modbus_msg->DevId.NumbOfObj; + + if (modbus_msg->ByteCnt > DATA_SIZE*2) // if ByteCnt less than DATA_SIZE + { + return RS_COLLECT_MSG_ERR; + } + + + //---------------DATA---------------- + //-----------[data bytes]------------ + uint8_t *tmp_data_addr = (uint8_t *)modbus_msg->DATA; + for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data + { // set data + modbus_uart_buff[ind++] = *tmp_data_addr; + tmp_data_addr++; + } + + } + else // modbus data header + { + // set size of received data + if (modbus_msg->ByteCnt <= DATA_SIZE*2) // if ByteCnt less than DATA_SIZE + modbus_uart_buff[ind++] = modbus_msg->ByteCnt; + else // otherwise return data_size err + { + return RS_COLLECT_MSG_ERR; + } + + //---------------DATA---------------- + //-----------[data bytes]------------ + uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA; + for(int i = 0; i < modbus_msg->ByteCnt; i++) // filling buffer with data + { // set data + if (i%2 == 0) // HI byte + modbus_uart_buff[ind++] = (*tmp_data_addr)>>8; + else // LO byte + { + modbus_uart_buff[ind++] = *tmp_data_addr; + tmp_data_addr++; + } + } + + } + + } + else // if some error occur + { // send expection code + modbus_uart_buff[ind++] = modbus_msg->Except_Code; + } + } + //---------------CRC---------------- + //---------[last 16 bytes]---------- + // calc crc of received data + uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind); + // write crc to message structure and modbus-uart buffer + modbus_msg->MB_CRC = CRC_VALUE; + modbus_uart_buff[ind++] = CRC_VALUE; + modbus_uart_buff[ind++] = CRC_VALUE >> 8; + + hmodbus->RS_Message_Size = ind; + + return RS_OK; // returns ok +} + +/** + * @brief Parse message from buffer to process it. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @param msg_uart_buff - указатель на буффер UART. + * @return RS_RES - статус о результате заполнения структуры. + * @details Заполнение структуры сообщения из буффера UART. + */ +RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff) +{ + uint32_t check_empty_buff; + int ind = 0; // ind for modbus-uart buffer + //-----INFO ABOUT DATA/MESSAGE------- + //-----------[first bits]------------ + // get ID of message/user + modbus_msg->MbAddr = modbus_uart_buff[ind++]; + if(modbus_msg->MbAddr != hmodbus->ID) + return RS_SKIP; + + // get func code + modbus_msg->Func_Code = modbus_uart_buff[ind++]; + if(modbus_msg->Func_Code == MB_R_DEVICE_INFO) // if it device identification request + { + modbus_msg->DevId.MEI_Type = modbus_uart_buff[ind++]; + modbus_msg->DevId.ReadDevId = modbus_uart_buff[ind++]; + modbus_msg->DevId.NextObjId = modbus_uart_buff[ind++]; + modbus_msg->ByteCnt = 0; + } + else // if its classic modbus request + { + // get address from CMD + modbus_msg->Addr = modbus_uart_buff[ind++] << 8; + modbus_msg->Addr |= modbus_uart_buff[ind++]; + + // get address from CMD + modbus_msg->Qnt = modbus_uart_buff[ind++] << 8; + modbus_msg->Qnt |= modbus_uart_buff[ind++]; + } + if(hmodbus->f.RX_Half == 0) // if all message received + { + //---------------DATA---------------- + // (optional) + if (modbus_msg->ByteCnt != 0) + { + ind++; // increment ind for data_size byte + //check that data size is correct + if (modbus_msg->ByteCnt > DATA_SIZE*2) + { + modbus_msg->Func_Code += ERR_VALUES_START; + return RS_PARSE_MSG_ERR; + } + uint16_t *tmp_data_addr = (uint16_t *)modbus_msg->DATA; + for(int i = 0; i < modbus_msg->ByteCnt; i++) // /2 because we transmit 8 bits, not 16 bits + { // set data + if (i%2 == 0) + *tmp_data_addr = ((uint16_t)modbus_uart_buff[ind++] << 8); + else + { + *tmp_data_addr |= modbus_uart_buff[ind++]; + tmp_data_addr++; + } + } + } + + //---------------CRC---------------- + //----------[last 16 bits]---------- + // calc crc of received data + uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind); + // get crc of received data + modbus_msg->MB_CRC = modbus_uart_buff[ind++]; + modbus_msg->MB_CRC |= modbus_uart_buff[ind++] << 8; + // compare crc + if (modbus_msg->MB_CRC != CRC_VALUE) + { + modbus_msg->Func_Code += ERR_VALUES_START; + } + // hmodbus->MB_RESPONSE = MB_CRC_ERR; // set func code - error about wrong crc + + // check is buffer empty + check_empty_buff = 0; + for(int i=0; iMB_RESPONSE = MB_EMPTY_MSG; // + } + + return RS_OK; + +} + +/** + * @brief Define size of RX Message that need to be received. + * @param hRS - указатель на хендлер RS. + * @param rx_data_size - указатель на переменную для записи кол-ва байт для принятия. + * @return RS_RES - статус о корректности рассчета кол-ва байт для принятия. + * @details Определение сколько байтов надо принять по протоколу. + */ +RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_t *rx_data_size) +{ + RS_StatusTypeDef MB_RES = 0; + + MB_RES = RS_Parse_Message(hmodbus, hmodbus->pMessagePtr, hmodbus->pBufferPtr); + if(MB_RES == RS_SKIP) // if message not for us + return MB_RES; // return + + + if ((hmodbus->pMessagePtr->Func_Code & ~ERR_VALUES_START) < 0x0F) + { + hmodbus->pMessagePtr->ByteCnt = 0; + *rx_data_size = 1; + + } + else + { + hmodbus->pMessagePtr->ByteCnt = hmodbus->pBufferPtr[RX_FIRST_PART_SIZE-1]; // get numb of data in command + // +1 because that defines is size, not ind. + *rx_data_size = hmodbus->pMessagePtr->ByteCnt + 2; + } + + + if(hmodbus->pMessagePtr->Func_Code == MB_R_DEVICE_INFO) + { + *rx_data_size = 0; + } + + hmodbus->RS_Message_Size = RX_FIRST_PART_SIZE + *rx_data_size; // size of whole message + return RS_OK; +} + +//-----------------------------FOR USER------------------------------ +//------------------------------------------------------------------- + + +void MB_DevoceInentificationInit(void) +{ + MB_INFO.VendorName.name = MODBUS_VENDOR_NAME; + MB_INFO.ProductCode.name = MODBUS_PRODUCT_CODE; + MB_INFO.Revision.name = MODBUS_REVISION; + MB_INFO.VendorUrl.name = MODBUS_VENDOR_URL; + MB_INFO.ProductName.name = MODBUS_PRODUCT_NAME; + MB_INFO.ModelName.name = MODBUS_MODEL_NAME; + MB_INFO.UserApplicationName.name = MODBUS_USER_APPLICATION_NAME; + + + MB_INFO.VendorName.length = sizeof(MODBUS_VENDOR_NAME); + MB_INFO.ProductCode.length = sizeof(MODBUS_PRODUCT_CODE); + MB_INFO.Revision.length = sizeof(MODBUS_REVISION); + MB_INFO.VendorUrl.length = sizeof(MODBUS_VENDOR_URL); + MB_INFO.ProductName.length = sizeof(MODBUS_PRODUCT_NAME); + MB_INFO.ModelName.length = sizeof(MODBUS_MODEL_NAME); + MB_INFO.UserApplicationName.length = sizeof(MODBUS_USER_APPLICATION_NAME); +} + + + diff --git a/Core/Modbus/modbus.h b/Core/Modbus/modbus.h new file mode 100644 index 0000000..8514eb4 --- /dev/null +++ b/Core/Modbus/modbus.h @@ -0,0 +1,372 @@ +/** + ************************************************************************** + * @file modbus.h + * @brief Заголовочный файл модуля MODBUS. + * @details Данный файл необходимо подключить в rs_message.h. После подключать + * rs_message.h к основному проекту. + * + * @defgroup MODBUS + * @brief Modbus stuff + * + *************************************************************************/ +#ifndef __MODBUS_H_ +#define __MODBUS_H_ + +#include "modbus_config.h" +#include "modbus_data.h" +//#include "settings.h" // for modbus settings + +/** + * @addtogroup MODBUS_SETTINGS + * @ingroup MODBUS + * @brief Some defines for modbus + @{ + */ +///////////////////////////////////////////////////////////////////// +//////////////////////////---SETTINGS---///////////////////////////// +// USER SETTINGS FOR MODBUS IN interface_config.h +//////////////////////////---SETTINGS---///////////////////////////// + + +///////////////////////////////////////////////////////////////////// +/////////////////////---USER MESSAGE DEFINES---////////////////////// +//-------------DEFINES FOR STRUCTURE---------------- +/* defines for structure of modbus message */ +#define MbAddr_SIZE 1 ///< size of (MbAddr) +#define Func_Code_SIZE 1 ///< size of (Func_Code) +#define Addr_SIZE 2 ///< size of (Addr) +#define Qnt_SIZE 2 ///< size of (Qnt) +#define ByteCnt_SIZE 1 ///< size of (ByteCnt) +#define DATA_SIZE 125 ///< maximum number of data: DWORD (NOT MESSAGE SIZE) +#define CRC_SIZE 2 ///< size of (MB_CRC) in bytes + +/** @brief Size of whole message */ +#define INFO_SIZE_MAX (MbAddr_SIZE+Func_Code_SIZE+Addr_SIZE+Qnt_SIZE+ByteCnt_SIZE) + +/** @brief Size of first part of message that will be received +first receive info part of message, than defines size of rest message*/ +#define RX_FIRST_PART_SIZE INFO_SIZE_MAX + +/** @brief Size of buffer: max size of whole message */ +#define MSG_SIZE_MAX (INFO_SIZE_MAX + DATA_SIZE*2 + CRC_SIZE) // max possible size of message + +/** @brief Structure for modbus exception codes */ +typedef enum //MB_ExceptionTypeDef +{ + // reading + NO_ERRORS = 0x00, ///< no errors + ILLEGAL_FUNCTION = 0x01, ///< Принятый код функции не может быть обработан + ILLEGAL_DATA_ADDRESS = 0x02, ///< Адрес данных, указанный в запросе, недоступен + ILLEGAL_DATA_VALUE = 0x03, ///< Значение, содержащееся в поле данных запроса, является недопустимой величиной + SLAVE_DEVICE_FAILURE = 0x04, ///< Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие +// ACKNOWLEDGE = 0x05, ///< idk +// SLAVE_DEVICE_BUSY = 0x06, ///< idk +// MEMORY_PARITY_ERROR = 0x08, ///< idk +}MB_ExceptionTypeDef; + +#define ERR_VALUES_START 0x80U ///< from this value starts error func codes +/** @brief Structure for modbus func codes */ +typedef enum //MB_FunctonTypeDef +{ + /* COMMANDS */ + // reading + MB_R_COILS = 0x01, ///< Чтение битовых ячеек + MB_R_DISC_IN = 0x02, ///< Чтение дискретных входов +#ifndef MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS + MB_R_HOLD_REGS = 0x03, ///< Чтение входных регистров + MB_R_IN_REGS = 0x04, ///< Чтение регистров хранения +#else + MB_R_HOLD_REGS = 0x04, ///< Чтение входных регистров + MB_R_IN_REGS = 0x03, ///< Чтение регистров хранения +#endif + + // writting + MB_W_COIL = 0x05, ///< Запись битовой ячейки + MB_W_HOLD_REG = 0x06, ///< Запись одиночного регистра + MB_W_COILS = 0x0F, ///< Запись нескольких битовых ячеек + MB_W_HOLD_REGS = 0x10, ///< Запись нескольких регистров + + MB_R_DEVICE_INFO = 0x2B, ///< Чтения информации об устройстве + + /* ERRORS */ + // error reading + MB_ERR_R_COILS = MB_R_COILS + ERR_VALUES_START, ///< Ошибка чтения битовых ячеек + MB_ERR_R_DISC_IN = MB_R_DISC_IN + ERR_VALUES_START, ///< Ошибка чтения дискретных входов + MB_ERR_R_IN_REGS = MB_R_IN_REGS + ERR_VALUES_START, ///< Ошибка чтения регистров хранения + MB_ERR_R_HOLD_REGS = MB_R_HOLD_REGS + ERR_VALUES_START, ///< Ошибка чтения входных регистров + + // error writting + MB_ERR_W_COIL = MB_W_COIL + ERR_VALUES_START, ///< Ошибка записи битовой ячейки + MB_ERR_W_HOLD_REG = MB_W_HOLD_REG + ERR_VALUES_START, ///< Ошибка записи одиночного регистра + MB_ERR_W_COILS = MB_W_COILS + ERR_VALUES_START, ///< Ошибка записи нескольких битовых ячеек + MB_ERR_W_HOLD_REGS = MB_W_HOLD_REGS + ERR_VALUES_START, ///< Ошибка записи нескольких регистров +}MB_FunctonTypeDef; + +/** @brief Structure for MEI func codes */ +typedef enum //MB_FunctonTypeDef +{ + MEI_DEVICE_IDENTIFICATION = 0x0E, +}MB_MEITypeDef; + +/** @brief Structure for MEI func codes */ +typedef enum //MB_FunctonTypeDef +{ + MB_BASIC_IDENTIFICATION = 0x01, + MB_REGULAR_IDENTIFICATION = 0x02, + + + /* ERRORS */ + MB_ERR_BASIC_IDENTIFICATION = MB_BASIC_IDENTIFICATION + ERR_VALUES_START, + MB_ERR_REGULAR_IDENTIFICATION = MB_REGULAR_IDENTIFICATION + ERR_VALUES_START, +}MB_ConformityTypeDef; + +/** @brief Structure for decive identification message type */ +typedef struct +{ + MB_MEITypeDef MEI_Type; ///< MEI Type assigned number for Device Identification Interface + MB_ConformityTypeDef ReadDevId; + MB_ConformityTypeDef Conformity; + uint8_t MoreFollows; ///< in this library always a zero + uint8_t NextObjId; + uint8_t NumbOfObj; +}MB_DevIdMsgTypeDef; + +/** @brief Structure for modbus messsage */ +typedef struct // RS_MsgTypeDef +{ + uint8_t MbAddr; ///< Modbus Slave Address + MB_FunctonTypeDef Func_Code; ///< Modbus Function Code + MB_DevIdMsgTypeDef DevId; ///< Read Device Identification Header struct + uint16_t Addr; ///< Modbus Address of data + uint16_t Qnt; ///< Quantity of modbus data + uint8_t ByteCnt; ///< Quantity of bytes of data in message to transmit/receive + + uint16_t DATA[DATA_SIZE]; ///< Modbus Data + MB_ExceptionTypeDef Except_Code; ///< Exception Code for the command + + uint16_t MB_CRC; ///< Modbus CRC +}RS_MsgTypeDef; +//-------------------------------------------------- +extern RS_MsgTypeDef MODBUS_MSG; +/////////////////////---MODBUS USER SETTINGS---////////////////////// + +/** MODBUS_SETTINGS + * @} + */ + + +///////////////////////////////////////////////////////////////////// +////////////////////---MODBUS MESSAGE DEFINES---///////////////////// +/** + * @addtogroup MODBUS_MESSAGE_DEFINES + * @ingroup MODBUS + * @brief Some defines for modbus + @{ + */ +/** @brief Structure for coils operation */ +typedef enum +{ + SET_COIL, + RESET_COIL, + TOOGLE_COIL, +}MB_CoilsOpTypeDef; + +//-------------------------------------------------- + +/** + * @brief Macros to set pointer to 16-bit array + * @param _arr_ - массив регистров (16-бит). + */ +#define MB_Set_Arr16_Ptr(_arr_) ((uint16_t*)(&(_arr_))) +/** + * @brief Macros to set pointer to register + * @param _parr_ - массив регистров. + * @param _addr_ - Номер регистра (его индекс) от начала массива _arr_. + */ +#define MB_Set_Register_Ptr(_parr_, _addr_) ((uint16_t *)(_parr_)+(_addr_)) + +/** + * @brief Macros to set pointer to a certain register that contains certain coil + * @param _parr_ - массив коилов. + * @param _coil_ - Номер коила от начала массива _arr_. + * @note Используется вместе с @ref MB_Set_Coil_Mask + @verbatim Пояснение выражений + (_coil_/16) - get index (address shift) of register that contain certain coil + Visual explanation: 30th coil in coils registers array + xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxCx + |register[0]----| |register[1]----| + |skip this------| |get this-------| + |shift to 14 bit| + @endverbatim + */ +#define MB_Set_Coil_Reg_Ptr(_parr_, _coil_) ((uint16_t *)(_parr_)+((_coil_)/16)) +/** + * @brief Macros to set mask to a certain bit in coils register + * @param _coil_ - Номер коила от начала массива _arr_. + * @note Используется вместе с @ref MB_Set_Coil_Reg_Ptr + @verbatim Пояснение выражений + (16*(_coil_/16) - how many coils we need to skip. e.g. (16*30/16) - skip 16 coils from first register + _coil_-(16*(_coil_/16)) - shift to certain coil in certain register + e.g. Coil(30) gets in register[1] (30/16 = 1) coil №14 (30 - (16*30/16) = 30 - 16 = 14) + + Visual explanation: 30th coil in coils registers array + xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxCx + |register[0]----| |register[1]----| + |skip this------| |get this-------| + |shift to 14 bit| + @endverbatim + */ +#define MB_Set_Coil_Mask(_coil_) (1 << ( _coil_ - (16*((_coil_)/16)) )) + +/** + * @brief Read Coil at its local address. + * @param _parr_ - массив коилов. + * @param _coil_ - Номер коила от начала массива _arr_. + * @return uint16_t - Возвращает запрошенный коил на 0м бите. + * + * @details Позволяет обратиться к коилу по адресу относительно _arr_. + */ +#define MB_Read_Coil_Local(_parr_, _coil_) (( *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) & MB_Set_Coil_Mask(_coil_) ) >> (_coil_)) +/** + * @brief Set Coil at its local address. + * @param _parr_ - указатель на массив коилов. + * @param _coil_ - Номер коила от начала массива _arr_. + * + * @details Позволяет обратиться к коилу по адресу относительно _arr_. + */ +#define MB_Set_Coil_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) |= MB_Set_Coil_Mask(_coil_) +/** + * @brief Reset Coil at its local address. + * @param _parr_ - указатель на массив коилов. + * @param _coil_ - Номер коила от начала массива _arr_. + * + * @details Позволяет обратиться к коилу по адресу относительно _arr_. + */ +#define MB_Reset_Coil_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) &= ~(MB_Set_Coil_Mask(_coil_)) +/** + * @brief Set Coil at its local address. + * @param _parr_ - указатель на массив коилов. + * @param _coil_ - Номер коила от начала массива _arr_. + * + * @details Позволяет обратиться к коилу по адресу относительно _arr_. + */ +#define MB_Toogle_Coil_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) ^= MB_Set_Coil_Mask(_coil_) +//-------------------------------------------------- + + +//------------------OTHER DEFINES------------------- +#define RegisterType_Holding 0 +#define RegisterType_Input 1 +#define RegisterType_Discrete 2 +// create hadnles and settings for uart, tim, rs with _modbus_ name +//-------------------------------------------------- + +#ifndef Divide_Up +/** + * @brief Calc dividing including remainder + * @param _val_ - делимое. + * @param _div_ - делитель. + * @details Если результат деления без остатка: он возвращается как есть + Если с остатком - округляется вверх + */ +//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */ +#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */ +#endif + +#ifndef ByteSwap16 +/** + * @brief Swap between Little Endian and Big Endian + * @param v - Переменная для свапа. + * @return v (new) - Свапнутая переменная. + * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты. + */ +#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8))) +#endif +/** GENERAL_MODBUS_STUFF + * @} + */ +////////////////////---MODBUS MESSAGE DEFINES---///////////////////// + + + +///////////////////////////////////////////////////////////////////// +/////////////////////////---FUNCTIONS---///////////////////////////// +/** + * @addtogroup MODBUS_FUNCTIONS + * @ingroup MODBUS + * @brief Function for controling modbus communication + */ + +//----------------FUNCTIONS FOR USER---------------- +/** + * @addtogroup MODBUS_DATA_ACCESS_FUNCTIONS + * @ingroup MODBUS_FUNCTIONS + * @brief Function for user use + @{ + */ +/* First set up of MODBUS */ +void MODBUS_FirstInit(void); +/* Set or Reset Coil at its global address */ +MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal); +/* Read Coil at its global address */ +uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception); + +/** MODBUS_DATA_ACCESS_FUNCTIONS + * @} + */ + +//---------PROCESS MODBUS COMMAND FUNCTIONS--------- +/** + * @addtogroup MODBUS_CMD_PROCESS_FUNCTIONS + * @ingroup MODBUS_FUNCTIONS + * @brief Function process commands + @{ + */ +/* Check is address valid for certain array */ +MB_ExceptionTypeDef MB_Check_Address_For_Arr(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB); +/* Define Address Origin for Input/Holding Registers */ +MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t RegisterType); +/* Define Address Origin for coils */ +MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag); +/* Proccess command Read Coils (01 - 0x01) */ +uint8_t MB_Read_Coils(RS_MsgTypeDef *modbus_msg); +/* Proccess command Read Holding Registers (03 - 0x03) */ +uint8_t MB_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg); +/* Proccess command Read Input Registers (04 - 0x04) */ +uint8_t MB_Read_Input_Regs(RS_MsgTypeDef *modbus_msg); +/* Proccess command Write Single Coils (05 - 0x05) */ +uint8_t MB_Write_Single_Coil(RS_MsgTypeDef *modbus_msg); +/* Proccess command Write Multiple Coils (15 - 0x0F) */ +uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg); +/* Proccess command Write Multiple Register (16 - 0x10) */ +uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg); + +/** MODBUS_DATA_ACCESS_FUNCTIONS + * @} + */ +/////////////////////////---FUNCTIONS---///////////////////////////// + + + +///////////////////////////////////////////////////////////////////// +/////////////////////////---CALC DEFINES---////////////////////////// + + +// TRACES DEFINES +#ifndef Trace_MB_UART_Enter +#define Trace_MB_UART_Enter() +#endif //Trace_MB_UART_Enter + +#ifndef Trace_MB_UART_Exit +#define Trace_MB_UART_Exit() +#endif //Trace_MB_UART_Exit + +#ifndef Trace_MB_TIM_Enter +#define Trace_MB_TIM_Enter() +#endif //Trace_MB_TIM_Enter + +#ifndef Trace_MB_TIM_Exit +#define Trace_MB_TIM_Exit() +#endif //Trace_MB_TIM_Exit + +#endif //__MODBUS_H_ diff --git a/Core/Modbus/modbus_config.h b/Core/Modbus/modbus_config.h new file mode 100644 index 0000000..f8bb548 --- /dev/null +++ b/Core/Modbus/modbus_config.h @@ -0,0 +1,44 @@ +/** +************************************************************************** +* @file interface_config.h +* @brief Конфигурация для модбаса +*************************************************************************/ +#ifndef _MODBUS_CONFIG_H_ +#define _MODBUS_CONFIG_H_ +#include "stm32f1xx_hal.h" + +// MODBUS PARAMS +#define MODBUS_DEVICE_ID 1 ///< девайс текущего устройства +#define MODBUS_TIMEOUT 1000*10 ///< максимальнйы тайтаут MB в тиках таймера + +// STRING OBJECTS MODBUS +#define MODBUS_VENDOR_NAME "NIO-12" +#define MODBUS_PRODUCT_CODE "" +#define MODBUS_REVISION "Ver. 1.0" +#define MODBUS_VENDOR_URL "" +#define MODBUS_PRODUCT_NAME "" +#define MODBUS_MODEL_NAME "STM32F103" +#define MODBUS_USER_APPLICATION_NAME "" + +// PERIPH FUNCTIONS AND HANDLERS +#define RS_UART_Init MX_USART1_UART_Init //инициализация uart +#define RS_UART_DeInit HAL_UART_MspDeInit //деинициализация uart +#define RS_TIM_Init MX_TIM3_Init //инициализация таймера +#define RS_TIM_DeInit HAL_TIM_Base_MspDeInit//деинициализация таймера +#define rs_huart huart1 //используемый uart +#define rs_htim htim3 //используемый таймера + + +/** + * @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей) + * @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS + * Поэтому чтобы считывать Input Regs - надо поменять их местами. + */ +//#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS + +///////////////////////////////////////////////////////////////////// +/////////////////////////---CALC DEFINES---////////////////////////// + + + +#endif //_MODBUS_CONFIG_H_ \ No newline at end of file diff --git a/Core/Modbus/modbus_data.h b/Core/Modbus/modbus_data.h new file mode 100644 index 0000000..59beb34 --- /dev/null +++ b/Core/Modbus/modbus_data.h @@ -0,0 +1,192 @@ +/** +************************************************************************** +* @file modbus_data.h +* @brief Заголовочный файл с описанием даты MODBUS. +* @details Данный файл необходимо подключается в rs_message.h. После rs_message.h +* подключается к основному проекту. +* +* @defgroup MODBUS_DATA +* @ingroup MODBUS +* @brief Modbus data description +* +*************************************************************************/ + +#ifndef _MODBUS_DATA_H_ +#define _MODBUS_DATA_H_ + +#include "stdint.h" +//--------------DEFINES FOR REGISTERS--------------- +// DEFINES FOR ARRAYS +/** + * @addtogroup MODBUS_DATA_RERISTERS_DEFINES + * @ingroup MODBUS_DATA + * @brief Defines for registers + Структура дефайна адресов + @verbatim + Для массивов регистров: + R__ADDR - модбас адресс первого регистра в массиве + R__QNT - количество регистров в массиве + + При добавлении новых массивов регистров, необходимо их добавить в функцию MB_DefineRegistersAddress + + if(MB_Check_Address_For_Arr(Addr, Qnt, R__ADDR, R__QNT) == NO_ERRORS) + { + *pRegs = MB_Set_Register_Ptr(&, Addr); // начало регистров хранения/входных + } + @endverbatim + * @{ + */ + + +/** + * @brief Регистры хранения + */ +typedef struct //MB_DataInRegsTypeDef +{ + uint16_t RESERVED; +}MB_DataInRegsTypeDef; + + +/** + * @brief Входные регистры + */ +typedef struct //MB_DataInRegsTypeDef +{ // Адрес: + uint16_t CAN_BITRATE_KBPS; // 0 + uint16_t CAN_PERIOD; // 1 + + uint16_t CAN_ID_HI; // 2 + uint16_t CAN_ID_LO; // 3 + uint16_t CAN_DLC; // 4 + + uint16_t reserved[12]; // ... + + uint16_t CAN_DATA_0; // 16 + uint16_t CAN_DATA_1; // 17 + uint16_t CAN_DATA_2; // 18 + uint16_t CAN_DATA_3; // 19 + uint16_t CAN_DATA_4; // 20 + uint16_t CAN_DATA_5; // 21 + uint16_t CAN_DATA_6; // 22 + uint16_t CAN_DATA_7; // 23 +}MB_DataHoldRegsTypeDef; + + +// DEFINES FOR INPUT REGISTERS ARRAYS +#define R_INPUT_ADDR 0 +#define R_INPUT_QNT 1 + +// DEFINES FOR HOLDING REGISTERS ARRAYS +#define R_HOLDING_ADDR 0 +#define R_HOLDING_QNT 23 + + +/** MODBUS_DATA_RERISTERS_DEFINES + * @} + */ + +//----------------DEFINES FOR COILS----------------- +/** + * @addtogroup MODBUS_DATA_COILS_DEFINES + * @ingroup MODBUS_DATA + * @brief Defines for coils + @verbatim + Структура дефайна + Для массивов коилов: + C__ADDR - модбас адресс первого коила в массиве + C__QNT - количество коилов в массиве (минимум 16) + + При добавлении новых массивов коилов, необходимо их добавить в функцию MB_DefineCoilsAddress + + if(MB_Check_Address_For_Arr(Addr, Qnt, C__ADDR, C__QNT) == NO_ERRORS) + { + *pCoils = MB_Set_Coil_Reg_Ptr(&, Addr); + } + + @endverbatim + * @{ + */ + + + +/** + * @brief Коилы + * @details Желательно с помощью reserved делать стркутуру кратной 16-битам + */ +typedef struct //MB_DataCoilsTypeDef +{ // Адрес: + unsigned START_POLLING:1; // 0 + unsigned START_SINGLE_FRAME:1; // 1 + + unsigned HEADER_IDE:1; // 2 + unsigned HEADER_RTR:1; // 3 + + unsigned reserved:13; // ... + + unsigned FLIP_SRS:1; // 16 + unsigned FLIP_IDE:1; // 17 + unsigned FLIP_RTR:1; // 18 + unsigned FLIP_R1:1; // 19 + unsigned FLIP_R0:1; // 20 + unsigned FLIP_MSGID_BIT:1; // 21 + unsigned FLIP_DATA_BIT:1; // 22 + unsigned FLIP_CRC_BIT:1; // 23 + unsigned DISABLE_STUFF_BITS:1; // 24 +}MB_DataCoilsTypeDef; + +// DEFINES FOR COIL ARRAYS +#define C_CONTROL_ADDR 0 +#define C_CONTROL_QNT 24 + +/** MODBUS_DATA_COILS_DEFINES + * @} + */ + + +//-----------MODBUS DEVICE DATA SETTING------------- +// MODBUS DATA STRUCTTURE +/** + * @brief Структура со всеми регистрами и коилами модбас + * @ingroup MODBUS_DATA + */ +typedef struct // tester modbus data +{ + MB_DataInRegsTypeDef InRegs; ///< Modbus input registers @ref MB_DataInRegsTypeDef + + MB_DataCoilsTypeDef Coils; ///< Modbus coils @ref MB_DataCoilsTypeDef + + MB_DataHoldRegsTypeDef HoldRegs; ///< Modbus holding registers @ref MB_DataHoldRegsTypeDef +}MB_DataStructureTypeDef; +extern MB_DataStructureTypeDef MB_DATA; + + +/** + * @brief Структура для объекта Modbus + * @ingroup MODBUS_DATA + */ +typedef struct +{ + unsigned length; + char *name; +}MB_DeviceObjectTypeDef; +/** + * @brief Структура для объектов Modbus + * @ingroup MODBUS_DATA + */ +typedef struct +{ + MB_DeviceObjectTypeDef VendorName; + MB_DeviceObjectTypeDef ProductCode; + MB_DeviceObjectTypeDef Revision; + MB_DeviceObjectTypeDef VendorUrl; + MB_DeviceObjectTypeDef ProductName; + MB_DeviceObjectTypeDef ModelName; + MB_DeviceObjectTypeDef UserApplicationName; +}MB_DeviceIdentificationTypeDef; +void MB_DevoceInentificationInit(void); + + +#endif //_MODBUS_DATA_H_ + +///////////////////////////////////////////////////////////// +///////////////////////TEMP/OUTDATE/OTHER//////////////////// \ No newline at end of file diff --git a/Core/Modbus/rs_message.c b/Core/Modbus/rs_message.c new file mode 100644 index 0000000..9fbeb14 --- /dev/null +++ b/Core/Modbus/rs_message.c @@ -0,0 +1,550 @@ +/** +************************************************************************** +* @file rs_message.c +* @brief Модуль для реализации протоколов по RS/UART. +**************************************************************************\ +* @details +* Данный модуль реализует основные функции для приема и передачи сообщений +* по протоколу RS через UART в режиме прерываний. Реализована обработка +* приема и передачи данных, управление состояниями RS, а также функции для +* инициализации и управления периферией. +* +* Реализованы следующие функции: +* - RS_Receive_IT() — запуск приема данных в прерывании по UART. +* - RS_Transmit_IT() — запуск передачи данных в прерывании по UART. +* - RS_Init() — инициализация структуры RS и привязка периферии. +* - RS_ReInit_UART() — переинициализация UART и перезапуск приема данных. +* - RS_Abort() — остановка работы RS/UART с очисткой флагов и структур. +* - RS_Handle_Receive_Start() — обработка старта приема данных по RS. +* +* В модуле также определен буфер RS_Buffer[] для хранения принимаемых/передаваемых данных. +* +* @note +* Для корректной работы модуля предполагается использование соответствующих +* обработчиков прерываний UART и таймера (RS_UART_Handler(), RS_TIM_Handler()), +* которые надо вызывать с обработчиках используемой периферии + +@verbatim +//-------------------Функции-------------------// +Functions: users + - RS_Parse_Message/RS_Collect_Message Заполнение структуры сообщения и буфера + - RS_Response Ответ на сообщение + - RS_Define_Size_of_RX_Message Определение размера принимаемых данных + +Functions: general + - RS_Receive_IT Ожидание комманды и ответ на неё + - RS_Transmit_IT Отправление комманды и ожидание ответа + - RS_Init Инициализация переферии и структуры для RS + - RS_ReInit_UART Реинициализация UART для RS + - RS_Abort Отмена приема/передачи по ЮАРТ + - RS_Init Инициализация периферии и modbus handler + +Functions: callback/handler + - RS_Handle_Receive_Start Функция для запуска приема или остановки RS + - RS_Handle_Transmit_Start Функция для запуска передачи или остановки RS + + - RS_UART_RxCpltCallback Коллбек при окончании приема или передачи + RS_UART_TxCpltCallback + + - RS_UART_Handler Обработчик прерывания для UART + - RS_TIM_Handler Обработчик прерывания для TIM + +@endverbatim +*************************************************************************/ +#include "rs_message.h" + +uint8_t RS_Buffer[MSG_SIZE_MAX]; // uart buffer + +extern void RS_UART_Init(void); +extern void RS_UART_DeInit(UART_HandleTypeDef *huart); +extern void RS_TIM_Init(void); +extern void RS_TIM_DeInit(TIM_HandleTypeDef *htim); + +//------------------------------------------------------------------- +//-------------------------GENERAL FUNCTIONS------------------------- +/** + * @brief Start receive IT. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @return RS_RES - статус о состоянии RS после инициализации приема. + */ +RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) +{ + RS_StatusTypeDef RS_RES = 0; + HAL_StatusTypeDef uart_res = 0; + + //-------------CHECK RS LINE---------------- + // check that receive isnt busy + if( RS_Is_RX_Busy(hRS) ) // if tx busy - return busy status + return RS_BUSY; + + //-----------INITIALIZE RECEIVE------------- + // if all OK: start receiving + RS_EnableReceive(); + RS_Set_Busy(hRS); // set RS busy + RS_Set_RX_Flags(hRS); // initialize flags for receive + hRS->pMessagePtr = RS_msg; // set pointer to message structire for filling it from UARTHandler fucntions + + // start receiving + uart_res = HAL_UART_Receive_IT(hRS->huart, hRS->pBufferPtr, RX_FIRST_PART_SIZE); // receive until ByteCnt+1 byte, + // then in Callback restart receive for rest bytes + + // if receive isnt started - abort RS + if(uart_res != HAL_OK) + { + RS_RES = RS_Abort(hRS, ABORT_RS); + printf_rs_err("\n%d: Error RS: Failed to start RS receiving...", uwTick); + } + else + { + RS_RES = RS_OK; + printf_rs("\n%d: RS: Start Receiving...", uwTick); + } + + hRS->RS_STATUS = RS_RES; + return RS_RES; // returns result of receive init +} + +/** + * @brief Start transmit IT. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @return RS_RES - статус о состоянии RS после инициализации передачи. + */ +RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) +{ + RS_StatusTypeDef RS_RES = 0; + HAL_StatusTypeDef uart_res = 0; + + //-------------CHECK RS LINE---------------- + // check that transmit isnt busy + if( RS_Is_TX_Busy(hRS) ) // if tx busy - return busy status + return RS_BUSY; + // check receive line + + + //------------COLLECT MESSAGE--------------- + RS_RES = RS_Collect_Message(hRS, RS_msg, hRS->pBufferPtr); + if (RS_RES != RS_OK) // if message isnt collect - stop RS and return error in RS_RES + {// need collect message status, so doesnt write abort to RS_RES + RS_Abort(hRS, ABORT_RS); + RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); // restart receive + } + else // if collect successful + { + + //----------INITIALIZE TRANSMIT------------- + RS_EnableTransmit(); +// for(int i = 0; i < hRS->sRS_Timeout; i++); + + RS_Set_Busy(hRS); // set RS busy + RS_Set_TX_Flags(hRS); // initialize flags for transmit IT + hRS->pMessagePtr = RS_msg; // set pointer for filling given structure from UARTHandler fucntion + + // if all OK: start transmitting + uart_res = HAL_UART_Transmit_IT(hRS->huart, hRS->pBufferPtr, hRS->RS_Message_Size); + // if transmit isnt started - abort RS + if(uart_res != HAL_OK) + { + RS_RES = RS_Abort(hRS, ABORT_RS); + printf_rs_err("\n%d: Error RS: Failed to start RS transmitting...", uwTick); + } + else + { + RS_RES = RS_OK; + printf_rs("\n%d: RS: Start Transmitting...", uwTick); + } + } + + + hRS->RS_STATUS = RS_RES; + return RS_RES; // returns result of transmit init +} + +/** + * @brief Initialize UART and handle RS stucture. + * @param hRS - указатель на хендлер RS. + * @param suart - указатель на структуру с настройками UART. + * @param stim - указатель на структуру с настройками таймера. + * @param pRS_BufferPtr - указатель на буффер для приема-передачи по UART. Если он NULL, то поставиться библиотечный буфер. + * @return RS_RES - статус о состоянии RS после инициализации. + * @note Инициализация перефирии и структуры для приема-передачи по RS. + */ +RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr) +{ + // check that hRS is defined + if (hRS == NULL) + return RS_ERR; + // check that huart is defined + if (huart == NULL) + return RS_ERR; + // init uart + +// RS_UART_Init(); + hRS->huart = huart; + +// RS_TIM_Init(); + hRS->htim = htim; + + if (hRS->sRS_RX_Size_Mode == NULL) + return RS_ERR; + + // check that buffer is defined + if (hRS->pBufferPtr == NULL) + { + hRS->pBufferPtr = RS_Buffer; // if no - set default + } + else + hRS->pBufferPtr = pRS_BufferPtr; // if yes - set by user + + return RS_OK; +} + +/** + * @brief ReInitialize UART and RS receive. + * @param hRS - указатель на хендлер RS. + * @param suart - указатель на структуру с настройками UART. + * @return RS_RES - статус о состоянии RS после инициализации. + * @note Реинициализация UART и приема по RS. + */ +HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart) +{ + HAL_StatusTypeDef RS_RES; + hRS->f.ReInit_UART = 0; + +// // check is settings are valid +// if(Check_UART_Init_Struct(suart) != HAL_OK) +// return HAL_ERROR; + + RS_Abort(hRS, ABORT_RS); + + RS_UART_DeInit(huart); + + RS_UART_Init(); + + + RS_Receive_IT(hRS, hRS->pMessagePtr); + return RS_RES; +} + + +/** + * @brief Abort RS/UART. + * @param hRS - указатель на хендлер RS. + * @param AbortMode - выбор, что надо отменить. + - ABORT_TX: Отмена передачи по ЮАРТ, с очищением флагов TX, + - ABORT_RX: Отмена приема по ЮАРТ, с очищением флагов RX, + - ABORT_RX_TX: Отмена приема и передачи по ЮАРТ, + - ABORT_RS: Отмена приема-передачи RS, с очищением всей структуры. + * @return RS_RES - статус о состоянии RS после аборта. + * @note Отмена работы UART в целом или отмена приема/передачи RS. + Также очищается хендл hRS. + */ +RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode) +{ + HAL_StatusTypeDef uart_res = 0; + hRS->htim->Instance->CNT = 0; + __HAL_TIM_CLEAR_IT(hRS->htim, TIM_IT_UPDATE); + + if(hRS->sRS_Timeout) // if timeout setted + HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout + + if((AbortMode&ABORT_RS) == 0x00) + { + if((AbortMode&ABORT_RX) == ABORT_RX) + { + uart_res = HAL_UART_AbortReceive(hRS->huart); // abort receive + RS_Reset_RX_Flags(hRS); + } + + if((AbortMode&ABORT_TX) == ABORT_TX) + { + uart_res = HAL_UART_AbortTransmit(hRS->huart); // abort transmit + RS_Reset_TX_Flags(hRS); + } + } + else + { + uart_res = HAL_UART_Abort(hRS->huart); + RS_Clear_All(hRS); + } + hRS->RS_STATUS = RS_ABORTED; + return RS_ABORTED; +} + + +//-------------------------GENERAL FUNCTIONS------------------------- +//------------------------------------------------------------------- + + + +//------------------------------------------------------------------- +//--------------------CALLBACK/HANDLER FUNCTIONS--------------------- +/** + * @brief Handle for starting receive. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @return RS_RES - статус о состоянии RS после инициализации приема или окончания общения. + * @note Определяет начинать прием команды/ответа или нет. + */ +RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) +{ + RS_StatusTypeDef RS_RES = 0; + + switch(hRS->sRS_Mode) + { + case SLAVE_ALWAYS_WAIT: // in slave mode with permanent waiting + RS_RES = RS_Receive_IT(hRS, RS_msg); break; // start receiving again + case SLAVE_TIMEOUT_WAIT: // in slave mode with timeout waiting (start receiving cmd by request) + RS_Set_Free(hRS); RS_RES = RS_OK; break; // end RS communication (set RS unbusy) + } + + if(RS_RES != RS_OK) + { + } + + return RS_RES; +} +/** + * @brief Handle for starting transmit. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @return RS_RES - статус о состоянии RS после инициализации передачи. + * @note Определяет отвечать ли на команду или нет. + */ +RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) +{ + RS_StatusTypeDef RS_RES = 0; + + switch(hRS->sRS_Mode) + { + case SLAVE_ALWAYS_WAIT: // in slave mode always response + case SLAVE_TIMEOUT_WAIT: // transmit response + RS_RES = RS_Transmit_IT(hRS, RS_msg); break; + } + if(RS_RES != RS_OK) + { + } + + return RS_RES; +} + +/** + * @brief UART RX Callback: define behaviour after receiving parts of message. + * @param hRS - указатель на хендлер RS. + * @return RS_RES - статус о состоянии RS после обработки приема. + * @note Контролирует прием сообщения: определяет размер принимаемой посылки и обрабатывает его. + */ +RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS) +{ + RS_StatusTypeDef RS_RES = 0; + HAL_StatusTypeDef uart_res = 0; + + // if we had received bytes before ByteCnt + if((hRS->sRS_RX_Size_Mode == RS_RX_Size_NotConst) && (hRS->f.RX_Half == 0)) // if data size isnt constant and its first half, and + { // First receive part of message, then define size of rest of message, and start receive it + hRS->f.RX_Half = 1; + //---------------FIND DATA SIZE----------------- + uint32_t NuRS_of_Rest_Bytes = 0xFFFF; + RS_RES = RS_Define_Size_of_RX_Message(hRS, &NuRS_of_Rest_Bytes); + + + // if we need to skip this message - restart receive + if(RS_RES == RS_SKIP || NuRS_of_Rest_Bytes == 0xFFFF) + { + RS_Abort(hRS, ABORT_RX); + RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); + return RS_RES; + } + + // if there is no bytes to receive + if(NuRS_of_Rest_Bytes == 0) + { + hRS->f.RX_Half = 0; + + //---------PROCESS DATA & ENDING RECEIVING-------- + RS_Set_RX_End(hRS); + + if(hRS->sRS_Timeout) // if timeout setted + HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout + + // parse received data + RS_RES = RS_Parse_Message(hRS, hRS->pMessagePtr, hRS->pBufferPtr); // parse message + + // RESPONSE + RS_RES = RS_Response(hRS, hRS->pMessagePtr); + return RS_RES; + } + + + //-------------START UART RECEIVE--------------- + uart_res = HAL_UART_Receive_IT(hRS->huart, (hRS->pBufferPtr + RX_FIRST_PART_SIZE), NuRS_of_Rest_Bytes); + + if(uart_res != HAL_OK) + {// need uart status, so doesnt write abort to RS_RES + RS_RES = RS_Abort(hRS, ABORT_RS); + } + else + RS_RES = RS_OK; + } + else // if we had received whole message + { + hRS->f.RX_Half = 0; + + //---------PROCESS DATA & ENDING RECEIVING-------- + RS_Set_RX_End(hRS); + + if(hRS->sRS_Timeout) // if timeout setted + HAL_TIM_Base_Stop_IT(hRS->htim); // stop timeout + + // parse received data + RS_RES = RS_Parse_Message(hRS, hRS->pMessagePtr, hRS->pBufferPtr); // parse message + + // RESPONSE + RS_RES = RS_Response(hRS, hRS->pMessagePtr); + } + + return RS_RES; +} + + +/** + * @brief UART TX Callback: define behaviour after transmiting message. + * @param hRS - указатель на хендлер RS. + * @return RS_RES - статус о состоянии RS после обработки приема. + * @note Определяет поведение RS после передачи сообщения. + */ +RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS) +{ + RS_StatusTypeDef RS_RES = RS_OK; + HAL_StatusTypeDef uart_res = 0; + + //--------------ENDING TRANSMITTING------------- + RS_Set_TX_End(hRS); + RS_EnableReceive(); +// for(int i = 0; i < hRS->sRS_Timeout; i++); + + //-----------START RECEIVING or END RS---------- + RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); + + return RS_RES; +} + +/** + * @brief Handler for UART. + * @param hRS - указатель на хендлер RS. + * @note Обрабатывает ошибки если есть и вызывает RS Коллбеки. + * Добавить вызов этой функции в UARTx_IRQHandler() после HAL_UART_IRQHandler(). + */ +void RS_UART_Handler(RS_HandleTypeDef *hRS) +{ + //-------------CALL RS CALLBACKS------------ + /* IF NO ERROR OCCURS */ + if(hRS->huart->ErrorCode == 0) + { + hRS->htim->Instance->CNT = 0; // reset cnt; + /* Start timeout */ + if(hRS->sRS_Timeout) // if timeout setted + if((hRS->huart->RxXferCount+1 == hRS->huart->RxXferSize) && RS_Is_RX_Busy(hRS)) // if first byte is received and receive is active + { + hRS->htim->Instance->ARR = hRS->sRS_Timeout; // reset cnt; + HAL_TIM_Base_Start_IT(hRS->htim); + RS_Set_RX_Active_Flags(hRS); + } + + /* RX Callback */ + if (( hRS->huart->RxXferCount == 0U) && RS_Is_RX_Busy(hRS) && // if all bytes are received and receive is active + hRS->huart->RxState != HAL_UART_STATE_BUSY_RX) // also check that receive "REALLY" isnt busy + RS_UART_RxCpltCallback(hRS); + + /* TX Callback */ + if (( hRS->huart->TxXferCount == 0U) && RS_Is_TX_Busy(hRS) && // if all bytes are transmited and transmit is active + hRS->huart->gState != HAL_UART_STATE_BUSY_TX) // also check that receive "REALLY" isnt busy + RS_UART_TxCpltCallback(hRS); + } + //----------------ERRORS HANDLER---------------- + else + { + /* de-init uart transfer */ + RS_Abort(hRS, ABORT_RS); + RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); + // later, maybe, will be added specific handlers for err + } +} + + +/** + * @brief Handler for TIM. + * @param hRS - указатель на хендлер RS. + * @note Попадание сюда = таймаут и перезапуск RS приема + * Добавить вызов этой функции в TIMx_IRQHandler() после HAL_TIM_IRQHandler(). + */ +void RS_TIM_Handler(RS_HandleTypeDef *hRS) +{ + HAL_TIM_Base_Stop_IT(hRS->htim); + RS_Abort(hRS, ABORT_RS); + + RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); +} +//--------------------CALLBACK/HANDLER FUNCTIONS--------------------- +//------------------------------------------------------------------- + + + +//------------------------------------------------------------------- +//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE--------------- +/** + * @brief Respond accord to received message. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @return RS_RES - статус о результате ответа на комманду. + * @note Обработка принятой комманды и ответ на неё. + */ +__weak RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) +{ + /* Redefine function for user purposes */ + return RS_ERR; +} + +/** + * @brief Collect message in buffer to transmit it. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @param msg_uart_buff - указатель на буффер UART. + * @return RS_RES - статус о результате заполнения буфера. + * @note Заполнение буффера UART из структуры сообщения. + */ +__weak RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff) +{ + /* Redefine function for user purposes */ + return RS_ERR; +} + +/** + * @brief Parse message from buffer to process it. + * @param hRS - указатель на хендлер RS. + * @param RS_msg - указатель на структуру сообщения. + * @param msg_uart_buff - указатель на буффер UART. + * @return RS_RES - статус о результате заполнения структуры. + * @note Заполнение структуры сообщения из буффера UART. + */ +__weak RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff) +{ + /* Redefine function for user purposes */ + return RS_ERR; +} + +/** + * @brief Define size of RX Message that need to be received. + * @param hRS - указатель на хендлер RS. + * @param rx_data_size - указатель на переменную для записи кол-ва байт для принятия. + * @return RS_RES - статус о корректности рассчета кол-ва байт для принятия. + * @note Определение сколько байтов надо принять по протоколу. + */ +__weak RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hRS, uint32_t *rx_data_size) +{ + /* Redefine function for user purposes */ + return RS_ERR; +} +//--------------WEAK PROTOTYPES FOR PROCESSING MESSAGE--------------- +//------------------------------------------------------------------- diff --git a/Core/Modbus/rs_message.h b/Core/Modbus/rs_message.h new file mode 100644 index 0000000..8131a52 --- /dev/null +++ b/Core/Modbus/rs_message.h @@ -0,0 +1,257 @@ +/** +************************************************************************** +* @file rs_message.h +* @brief Заголовочный файл для модуля реализации протоколов по RS/UART. +************************************************************************** +* @defgroup RS_TOOLS +* @brief Всякое для работы по UART/RS +************************************************************************** +@details +************************************************************************** +Для настройки RS/UART под нужный протокол, необходимо: + - Определить структуру сообщения RS_MsgTypeDef и + дефайны RX_FIRST_PART_SIZE и MSG_SIZE_MAX. + - Подключить этот файл в раздел rs_message.h. + - Определить функции для обработки сообщения: RS_Parse_Message(), + RS_Collect_Message(), RS_Response(), RS_Define_Size_of_RX_Message() + - Добавить UART/TIM Handler в Хендлер используемых UART/TIM. + +Так же данный модуль использует счетчики +************************************************************************** +@verbatim +Визуальное описание. Форматирование сохраняется как в коде. +@endverbatim +*************************************************************************/ +#ifndef __RS_LIB_H_ +#define __RS_LIB_H_ + +#include "modbus.h" + +#include "crc_algs.h" + + +///////////////////////////////////////////////////////////////////// +////////////////////////////---DEFINES---//////////////////////////// +/* Check that all defines required by RS are defined */ +#ifndef MSG_SIZE_MAX +#error Define MSG_SIZE_MAX (Maximum size of message). This is necessary to create buffer for UART. +#endif + +#ifndef RX_FIRST_PART_SIZE +#error Define RX_FIRST_PART_SIZE (Size of first part of message). This is necessary to receive the first part of the message, from which determine the size of the remaining part of the message. +#endif + + +/* Clear message-uart buffer */ +#define RS_Clear_Buff(_buff_) for(int i=0; if.RS_Busy = 0 +#define RS_Set_Busy(_hRS_) _hRS_->f.RS_Busy = 1 + +#define RS_Set_RX_Flags(_hRS_) _hRS_->f.RX_Busy = 1; _hRS_->f.RX_Done = 0; _hRS_->f.RX_Half = 0 +#define RS_Set_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 1 + + +#define RS_Set_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 1; _hRS_->f.TX_Done = 0 + +#define RS_Reset_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 0 +#define RS_Reset_RX_Flags(_hRS_) RS_Reset_RX_Active_Flags(_hRS_); _hRS_->f.RX_Busy = 0; _hRS_->f.RX_Done = 0; _hRS_->f.RX_Half = 0 +#define RS_Reset_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 0; _hRS_->f.TX_Done = 0 + +#define RS_Set_RX_End_Flag(_hRS_) _hRS_->f.RX_Done = 1; +#define RS_Set_TX_End_Flag(_hRS_) _hRS_->f.TX_Done = 1 + +#define RS_Set_RX_End(_hRS_) RS_Reset_RX_Flags(_hRS_); RS_Set_RX_End_Flag(_hRS_) +#define RS_Set_TX_End(_hRS_) RS_Reset_TX_Flags(_hRS_); RS_Set_TX_End_Flag(_hRS_) + +/* Clear all RS stuff */ +#define RS_Clear_All(_hRS_) RS_Clear_Buff(_hRS_->pBufferPtr); RS_Reset_RX_Flags(_hRS_); RS_Reset_TX_Flags(_hRS_); + +//#define MB_Is_RX_Busy(_hRS_) ((_hRS_->huart->gState&HAL_USART_STATE_BUSY_RX) == HAL_USART_STATE_BUSY_RX) +//#define MB_Is_TX_Busy(_hRS_) ((_hRS_->huart->gState&HAL_USART_STATE_BUSY_RX) == HAL_USART_STATE_BUSY_TX) +#define RS_Is_RX_Busy(_hRS_) (_hRS_->f.RX_Busy == 1) +#define RS_Is_TX_Busy(_hRS_) (_hRS_->f.TX_Busy == 1) + + +#ifndef RS_EnableReceive +#define RS_EnableReceive() +#endif +#ifndef RS_EnableTransmit +#define RS_EnableTransmit() +#endif +////////////////////////////---DEFINES---//////////////////////////// + + + +///////////////////////////////////////////////////////////////////// +///////////////////////---STRUCTURES & ENUMS---////////////////////// +//------------------ENUMERATIONS-------------------- +/** @brief Enums for respond CMD about RS status */ +typedef enum // RS_StatusTypeDef +{ + /* IN-CODE STATUS (start from 0x01, and goes up)*/ + /*0x01*/ RS_OK = 0x01, + /*0x02*/ RS_ERR, + /*0x03*/ RS_ABORTED, + /*0x04*/ RS_BUSY, + /*0x05*/ RS_SKIP, + + /*0x06*/ RS_COLLECT_MSG_ERR, + /*0x07*/ RS_PARSE_MSG_ERR, + + // reserved values +// /*0x00*/ RS_UNKNOWN_ERR = 0x00, ///< reserved for case, if no one error founded (nothing changed response from zero) +}RS_StatusTypeDef; + + +/** @brief Enums for RS Modes */ +typedef enum // RS_ModeTypeDef +{ + SLAVE_ALWAYS_WAIT = 0x01, ///< Slave mode with infinity waiting + SLAVE_TIMEOUT_WAIT = 0x02, ///< Slave mode with waiting with timeout +// MASTER = 0x03, ///< Master mode +}RS_ModeTypeDef; + +/** @brief Enums for RS UART Modes */ +typedef enum // RS_ITModeTypeDef +{ + BLCK_MODE = 0x00, ///< Blocking mode + IT_MODE = 0x01, ///< Interrupt mode +}RS_ITModeTypeDef; + +/** @brief Enums for Abort modes */ +typedef enum // RS_AbortTypeDef +{ + ABORT_TX = 0x01, ///< Abort transmit + ABORT_RX = 0x02, ///< Abort receive + ABORT_RX_TX = 0x03, ///< Abort receive and transmit + ABORT_RS = 0x04, ///< Abort uart and reset RS structure +}RS_AbortTypeDef; + +/** @brief Enums for RX Size modes */ +typedef enum // RS_RXSizeTypeDef +{ + RS_RX_Size_Const = 0x01, ///< size of receiving message is constant + RS_RX_Size_NotConst = 0x02, ///< size of receiving message isnt constant +}RS_RXSizeTypeDef; + + +//-----------STRUCTURE FOR HANDLE RS------------ +/** @brief Struct for flags RS */ +typedef struct +{ + unsigned RX_Half:1; ///< flag: 0 - receiving msg before ByteCnt, 0 - receiving msg after ByteCnt + + unsigned RS_Busy:1; ///< flag: 1 - RS is busy, 0 - RS isnt busy + unsigned RX_Ongoing:1; ///< flag: 1 - receiving data right now, 0 - waiting for receiving data + + unsigned RX_Busy:1; ///< flag: 1 - receiving is active, 0 - receiving isnt active + unsigned TX_Busy:1; ///< flag: 1 - transmiting is active, 0 - transmiting isnt active + + unsigned RX_Done:1; ///< flag: 1 - receiving is done, 0 - receiving isnt done + unsigned TX_Done:1; ///< flag: 1 - transmiting is done, 0 - transmiting isnt done + + // setted by user + unsigned MessageHandled:1; ///< flag: 1 - RS command is handled, 0 - RS command isnt handled yet + unsigned EchoResponse:1; ///< flag: 1 - response with received msg, 0 - response with own msg + unsigned DeferredResponse:1; ///< flag: 1 - response not in interrupt, 0 - response in interrupt + unsigned ReInit_UART:1; ///< flag: 1 - need to reinitialize uart, 0 - nothing +}RS_FlagsTypeDef; + + + +/** + * @brief Handle for RS communication. + * @note Prefixes: h - handle, s - settings, f - flag + */ +typedef struct // RS_HandleTypeDef +{ + /* MESSAGE */ + uint8_t ID; ///< ID of RS "channel" + RS_MsgTypeDef *pMessagePtr; ///< pointer to message struct + uint8_t *pBufferPtr; ///< pointer to message buffer + uint32_t RS_Message_Size; ///< size of whole message, not only data + + /* HANDLERS and SETTINGS */ + UART_HandleTypeDef *huart; ///< handler for used uart + TIM_HandleTypeDef *htim; ///< handler for used tim + RS_ModeTypeDef sRS_Mode; ///< setting: slave or master @ref RS_ModeTypeDef + RS_ITModeTypeDef sRS_IT_Mode; ///< setting: 1 - IT mode, 0 - Blocking mode + uint16_t sRS_Timeout; ///< setting: timeout in ms + RS_RXSizeTypeDef sRS_RX_Size_Mode; ///< setting: 1 - not const, 0 - const + + /* FLAGS */ + RS_FlagsTypeDef f; ///< These flags for controling receive/transmit + + /* RS STATUS */ + RS_StatusTypeDef RS_STATUS; ///< RS status +}RS_HandleTypeDef; +extern RS_HandleTypeDef hmodbus1; + + +///////////////////////---STRUCTURES & ENUMS---////////////////////// + + +///////////////////////////////////////////////////////////////////// +///////////////////////////---FUNCTIONS---/////////////////////////// +//----------------FUNCTIONS FOR PROCESSING MESSAGE------------------- +/*--------------------Defined by users purposes--------------------*/ +/* Respond accord to received message */ +RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg); + +/* Collect message in buffer to transmit it */ +RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff); + +/* Parse message from buffer to process it */ +RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg, uint8_t *msg_uart_buff); + +/* Define size of RX Message that need to be received */ +RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hRS, uint32_t *rx_data_size); + + +//-------------------------GENERAL FUNCTIONS------------------------- +/*-----------------Should be called from main code-----------------*/ +/* Start receive IT */ +RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg); + +/* Start transmit IT */ +RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg); + +/* Initialize UART and handle RS stucture */ +RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim, uint8_t *pRS_BufferPtr); + +/* ReInitialize UART and RS receive */ +HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_HandleTypeDef *suart); + +/* Abort RS/UART */ +RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode); +//-------------------------GENERAL FUNCTIONS------------------------- + + +//------------------------------------------------------------------- +//--------------------CALLBACK/HANDLER FUNCTIONS--------------------- +/* Handle for starting receive */ +RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg); +/* Handle for starting transmit */ +RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg); +/* UART RX Callback: define behaviour after receiving parts of message */ +RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS); +/* UART TX Callback: define behaviour after transmiting message */ +RS_StatusTypeDef RS_UART_TxCpltCallback(RS_HandleTypeDef *hRS); +/* Handler for UART */ +void RS_UART_Handler(RS_HandleTypeDef *hRS); +/* Handler for TIM */ +void RS_TIM_Handler(RS_HandleTypeDef *hRS); +//--------------------CALLBACK/HANDLER FUNCTIONS--------------------- +///////////////////////////---FUNCTIONS---/////////////////////////// + + +#ifndef printf_rs_err +#define printf_rs_err(...) +#endif + +#ifndef printf_rs +#define printf_rs(...) +#endif +#endif // __RS_LIB_H_ diff --git a/Core/Src/main.c b/Core/Src/main.c index c9a2f46..ec2e787 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,11 +19,13 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "tim.h" +#include "usart.h" #include "gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "canEmu.h" +#include "rs_message.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -56,6 +58,7 @@ void SystemClock_Config(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ CANEmu_HandleTypeDef hcanemu; +int flag_manual = 0; /* USER CODE END 0 */ /** @@ -88,16 +91,50 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM2_Init(); + MX_TIM3_Init(); + MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ CANEmu_Init(&hcanemu, 125000); hcanemu.header.StdId = 0x123; + MODBUS_FirstInit(); + RS_Receive_IT(&hmodbus1, &MODBUS_MSG); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { - HAL_Delay(100); + if(flag_manual == 0) + { + // can message + hcanemu.header.IDE = MB_DATA.Coils.HEADER_IDE; + hcanemu.header.RTR = MB_DATA.Coils.HEADER_RTR; + hcanemu.bitrate_bps = (uint32_t)MB_DATA.HoldRegs.CAN_BITRATE_KBPS*1000; + hcanemu.header.ExtId = ((uint32_t)MB_DATA.HoldRegs.CAN_ID_HI << 16) || MB_DATA.HoldRegs.CAN_ID_LO; + hcanemu.header.StdId = hcanemu.header.ExtId; + hcanemu.header.DLC = (uint8_t)MB_DATA.HoldRegs.CAN_DLC & 0xF; + hcanemu.data[0] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_0; + hcanemu.data[1] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_1; + hcanemu.data[2] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_2; + hcanemu.data[3] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_3; + hcanemu.data[4] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_4; + hcanemu.data[5] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_5; + hcanemu.data[6] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_6; + hcanemu.data[7] = (uint8_t)MB_DATA.HoldRegs.CAN_DATA_7; + + // errors + hcanemu.errors.FF_SRS = MB_DATA.Coils.FLIP_SRS; + hcanemu.errors.FF_IDE = MB_DATA.Coils.FLIP_IDE; + hcanemu.errors.FF_RTR = MB_DATA.Coils.FLIP_RTR; + hcanemu.errors.FF_R1 = MB_DATA.Coils.FLIP_R1; + hcanemu.errors.FF_R0 = MB_DATA.Coils.FLIP_R0; + hcanemu.errors.MSGID = MB_DATA.Coils.FLIP_MSGID_BIT; + hcanemu.errors.DATA = MB_DATA.Coils.FLIP_DATA_BIT; + hcanemu.errors.CRC_ERR = MB_DATA.Coils.FLIP_CRC_BIT; + hcanemu.errors.STUFF_BITS = MB_DATA.Coils.DISABLE_STUFF_BITS; + } + + HAL_Delay(hcanemu.period_ms); CANEmu_SendFrame(&hcanemu); /* USER CODE END WHILE */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 7150ad4..1fcea9d 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -25,6 +25,7 @@ /* USER CODE END 0 */ TIM_HandleTypeDef htim2; +TIM_HandleTypeDef htim3; /* TIM2 init function */ void MX_TIM2_Init(void) @@ -65,6 +66,46 @@ void MX_TIM2_Init(void) /* USER CODE END TIM2_Init 2 */ +} +/* TIM3 init function */ +void MX_TIM3_Init(void) +{ + + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + htim3.Init.Prescaler = 0; + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + htim3.Init.Period = 7200; + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim3) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + } void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) @@ -81,6 +122,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM2_MspInit 1 */ } + else if(tim_baseHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* TIM3 clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } } void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) @@ -97,6 +149,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM2_MspDeInit 1 */ } + else if(tim_baseHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspDeInit 0 */ + + /* USER CODE END TIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM3_CLK_DISABLE(); + /* USER CODE BEGIN TIM3_MspDeInit 1 */ + + /* USER CODE END TIM3_MspDeInit 1 */ + } } /* USER CODE BEGIN 1 */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c new file mode 100644 index 0000000..e96da31 --- /dev/null +++ b/Core/Src/usart.c @@ -0,0 +1,117 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.c + * @brief This file provides code for the configuration + * of the USART instances. + ****************************************************************************** + * @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 */ +/* Includes ------------------------------------------------------------------*/ +#include "usart.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +UART_HandleTypeDef huart1; + +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* USART1 clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } +} + +void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) +{ + + if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/MDK-ARM/CANEmu.uvguix.I b/MDK-ARM/CANEmu.uvguix.I index a54c8a5..3defcb7 100644 --- a/MDK-ARM/CANEmu.uvguix.I +++ b/MDK-ARM/CANEmu.uvguix.I @@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- F:\Work\Projects\STM\CANEmu\Core\CANEmu + F:\Work\Projects\STM\CANEmu\Core\Modbus @@ -15,17 +15,17 @@ 38003 Registers - 122 78 + 138 62 346 Code Coverage - 860 596 + 860 100 204 Performance Analyzer - 469 153 153 681 + 362 153 153 100 @@ -93,8 +93,8 @@ 2 3 - -32000 - -32000 + -1 + -1 -1 @@ -110,8 +110,8 @@ 0 - 1093 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A000000020000000100000030463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E456D752E63000000000863616E456D752E6300000000C5D4F200FFFFFFFF30463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E456D752E68000000000863616E456D752E6800000000FFDC7800FFFFFFFF31463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E666F726D2E63000000000963616E666F726D2E6300000000BECEA100FFFFFFFF31463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E666F726D2E68000000000963616E666F726D2E6800000000F0A0A100FFFFFFFF50463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F74696D2E68000000001373746D3332663178785F68616C5F74696D2E6800000000BCA8E100FFFFFFFF4C463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C2E68000000000F73746D3332663178785F68616C2E68000000009CC1B600FFFFFFFF2B463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000F7B88600FFFFFFFF53463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D5F65782E63000000001673746D3332663178785F68616C5F74696D5F65782E6300000000D9ADC200FFFFFFFF39463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000A5C2D700FFFFFFFF4C463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C2E63000000000F73746D3332663178785F68616C2E6300000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000D6000000660000009006000094020000 + 1647 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000011000000100000000100000030463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E456D752E63000000000863616E456D752E6300000000C5D4F200FFFFFFFF30463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E456D752E68000000000863616E456D752E6800000000FFDC7800FFFFFFFF31463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E666F726D2E63000000000963616E666F726D2E6300000000BECEA100FFFFFFFF31463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C43414E456D755C63616E666F726D2E68000000000963616E666F726D2E6800000000F0A0A100FFFFFFFF50463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F74696D2E68000000001373746D3332663178785F68616C5F74696D2E6800000000BCA8E100FFFFFFFF4C463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C2E68000000000F73746D3332663178785F68616C2E68000000009CC1B600FFFFFFFF2B463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000F7B88600FFFFFFFF53463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D5F65782E63000000001673746D3332663178785F68616C5F74696D5F65782E6300000000D9ADC200FFFFFFFF39463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000A5C2D700FFFFFFFF4C463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C2E63000000000F73746D3332663178785F68616C2E6300000000B3A6BE00FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C4D6F646275735C6D6F646275735F636F6E6669672E68000000000F6D6F646275735F636F6E6669672E6800000000EAD6A300FFFFFFFF30463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C4D6F646275735C6D6F646275732E6300000000086D6F646275732E6300000000F6FA7D00FFFFFFFF30463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C4D6F646275735C6D6F646275732E6800000000086D6F646275732E6800000000B5E99D00FFFFFFFF35463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C4D6F646275735C6D6F646275735F646174612E68000000000D6D6F646275735F646174612E68000000005FC3CF00FFFFFFFF34463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C4D6F646275735C72735F6D6573736167652E63000000000C72735F6D6573736167652E6300000000C1838300FFFFFFFF33463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C5372635C73746D3332663178785F69742E63000000000E73746D3332663178785F69742E6300000000CACAD500FFFFFFFF2C463A5C576F726B5C50726F6A656374735C53544D5C43414E456D755C436F72655C5372635C75736172742E63000000000775736172742E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000D6000000660000009006000094020000 @@ -1805,8 +1805,8 @@ 59392 File - 2823 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000013F96000000000000001400013F000A617070656E645F62697402696604666C6970076863616E656D75072026204552525F0C63616E5F626974735F6C656E1343414E5F5478486561646572547970654465660E44454255475F5641525F494E49540955494E54385F4D41580B414C49474E5F33324249540CD0B4D0BED0BBD0B6D0B5D0BD0C484156455F55494E54385F540775696E74385F74084C4F4E475F4D415807696E7433325F740B5F61635570427566666572114144435F48616E646C65547970654465660F4D5A4B545F414443547970654465660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2591 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000646465F535253960000000000000005000646465F53525303535253000975696E7431365F7420054D534749440000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 972 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000643414E456D75960000000000000001000643414E456D75000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000643414E456D75960000000000000001000643414E456D75000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1867,7 +1867,7 @@ 0 32767 0 - 8192 + 4096 0 16 @@ -1875,7 +1875,7 @@ 16 - C1000000920100007B0600001D020000 + D600000066000000E0030000D1000000 @@ -1891,7 +1891,7 @@ 0 16 - 0300000066000000CF00000046030000 + 0300000066000000CF000000AD010000 16 @@ -1911,7 +1911,7 @@ 0 16 - 0300000066000000CF0000000C030000 + 0300000066000000CF000000B7020000 16 @@ -1931,7 +1931,7 @@ 0 16 - 4C0300007703000090060000C8030000 + 4C030000DE0100009006000063020000 16 @@ -1951,7 +1951,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -1971,7 +1971,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -1991,7 +1991,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2031,7 +2031,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -2051,7 +2051,7 @@ 0 16 - E7030000660000008D06000046030000 + E7030000660000008D060000AD010000 16 @@ -2071,7 +2071,7 @@ 0 16 - E7030000660000008D06000046030000 + E7030000660000008D060000AD010000 16 @@ -2091,7 +2091,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2111,7 +2111,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2131,7 +2131,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2151,7 +2151,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2171,7 +2171,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2191,7 +2191,7 @@ 0 16 - 0300000066000000CF0000000C030000 + 0300000066000000CF000000B7020000 16 @@ -2211,7 +2211,7 @@ 0 16 - 0300000066000000CF0000000C030000 + 0300000066000000CF000000B7020000 16 @@ -2231,7 +2231,7 @@ 0 16 - 0300000033020000D90400008E020000 + 030000007E0200008D060000D9020000 16 @@ -2251,7 +2251,7 @@ 0 16 - 000000006303000048030000C8030000 + 00000000CA0100004803000063020000 16 @@ -2261,7 +2261,7 @@ 199 199 - 0 + 1 0 0 0 @@ -2271,7 +2271,7 @@ 0 16 - 0300000033020000D90400008E020000 + 000000007B02000090060000C8030000 16 @@ -2311,7 +2311,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -2371,7 +2371,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2391,7 +2391,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -2411,7 +2411,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -2431,7 +2431,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -2451,7 +2451,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -2891,7 +2891,7 @@ 0 16 - 0300000066000000CF00000046030000 + 0300000066000000CF000000AD010000 16 @@ -2911,7 +2911,7 @@ 0 16 - 0300000033020000D90400008E020000 + 030000007E0200008D060000D9020000 16 @@ -2931,7 +2931,7 @@ 0 16 - 0300000033020000D90400008E020000 + 030000007E0200008D060000D9020000 16 @@ -2951,7 +2951,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2971,7 +2971,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -2991,7 +2991,7 @@ 0 16 - 0300000033020000D90400008E020000 + 030000007E0200008D060000D9020000 16 @@ -3011,7 +3011,7 @@ 0 16 - 0300000033020000D90400008E020000 + 030000007E0200008D060000D9020000 16 @@ -3031,7 +3031,7 @@ 0 16 - D9000000660000008D060000C1000000 + D900000066000000DD030000A1000000 16 @@ -3531,7 +3531,7 @@ 0 16 - 4F0300007A0300008D060000E9030000 + 4F030000E10100008D06000016020000 16 @@ -3540,14 +3540,14 @@ 3521 - 000000000D000000000000000020000001000000FFFFFFFFFFFFFFFFD6000000BA000000E0030000BE00000001000000010000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000C1000000920100007B0600001D020000D60000004F000000E0030000BA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFFE00300004F000000E40300005F0300000100000002000010040000000100000019FBFFFF6500000000000000000000000000000001000000FFFFFFFF020000008F0700009007000001800040000001000000BB030000F00100008D040000B5020000E40300004F000000900600005F0300000000000040410056020000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0100000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000018020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002F0200000A0400004F000000DC0400001802000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFD20000004F000000D60000005F030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000D20000003C030000000000004F000000D20000005F0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000005F0300009006000063030000010000000100001004000000010000009EFDFFFF3A00000000000000000000000000000001000000C6000000FFFFFFFF0D0000009307000094070000950700009607000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000010000004C0300004003000090060000DF0300004C0300006303000090060000C803000000000000404100560D0000000755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF080000000000000001000000000000000100000001000000FFFFFFFF48030000630300004C030000C803000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9307000001000000FFFFFFFF9307000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000018020000DC0400001C020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000000000000000000033020000DC040000BE020000000000001C020000DC040000A70200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000D000000000000000020000001000000FFFFFFFFFFFFFFFFD6000000BA000000E0030000BE00000001000000010000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000D600000066000000E0030000D1000000D60000004F000000E0030000BA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFFE00300004F000000E4030000C60100000100000002000010040000000100000019FBFFFF6500000000000000000000000000000001000000FFFFFFFF020000008F0700009007000001800040000001000000E40300006600000090060000E7020000E40300004F00000090060000C60100000000000040410056020000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0100000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000018020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002F0200000A0400004F000000DC0400001802000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFD20000004F000000D6000000C6010000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000D2000000E7020000000000004F000000D2000000C60100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000C601000090060000CA01000001000000010000100400000001000000BBFFFFFFF200000000000000000000000000000001000000C6000000FFFFFFFF0D0000009307000094070000950700009607000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000010000004C030000EB02000090060000500300004C030000CA010000900600006302000000000000404100560D0000000755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF080000000000000001000000000000000100000001000000FFFFFFFF48030000CA0100004C0300006302000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9307000001000000FFFFFFFF9307000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000630200009006000067020000010000000100001004000000010000008AFDFFFF89000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000005403000090060000DF030000000000006702000090060000C80300000000000040820056060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFF01000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2823 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000013F96000000000000001400013F000A617070656E645F62697402696604666C6970076863616E656D75072026204552525F0C63616E5F626974735F6C656E1343414E5F5478486561646572547970654465660E44454255475F5641525F494E49540955494E54385F4D41580B414C49474E5F33324249540CD0B4D0BED0BBD0B6D0B5D0BD0C484156455F55494E54385F540775696E74385F74084C4F4E475F4D415807696E7433325F740B5F61635570427566666572114144435F48616E646C65547970654465660F4D5A4B545F414443547970654465660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2594 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000975696E7431365F7420960000000000000005000646465F53525303535253000975696E7431365F7420054D534749440000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -3603,20 +3603,20 @@ 0 100 - 2 + 16 ..\Core\CANEmu\canEmu.c - 73 - 16 - 49 + 25 + 34 + 26 1 0 ..\Core\CANEmu\canEmu.h - 18 - 1 + 24 + 9 31 1 @@ -3624,18 +3624,18 @@ ..\Core\CANEmu\canform.c - 21 - 28 - 51 + 41 + 129 + 136 1 0 ..\Core\CANEmu\canform.h - 54 - 1 - 17 + 19 + 10 + 11 1 22 0 @@ -3661,8 +3661,8 @@ ../Core/Src/main.c 0 - 77 - 66 + 60 + 70 1 0 @@ -3670,7 +3670,7 @@ ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c 0 - 129 + 130 139 1 @@ -3679,7 +3679,7 @@ startup_stm32f103xb.s 0 - 122 + 123 132 0 @@ -3688,12 +3688,75 @@ ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c 0 - 371 + 373 382 1 0 + + ..\Core\Modbus\modbus_config.h + 59 + 1 + 28 + 1 + + 0 + + + ..\Core\Modbus\modbus.c + 0 + 1 + 1 + 1 + + 0 + + + ..\Core\Modbus\modbus.h + 0 + 1 + 1 + 1 + + 0 + + + ..\Core\Modbus\modbus_data.h + 40 + 111 + 139 + 1 + + 0 + + + ..\Core\Modbus\rs_message.c + 0 + 106 + 115 + 1 + + 0 + + + ../Core/Src/stm32f1xx_it.c + 0 + 1 + 1 + 1 + + 0 + + + ../Core/Src/usart.c + 0 + 22 + 1 + 1 + + 0 + diff --git a/MDK-ARM/CANEmu.uvoptx b/MDK-ARM/CANEmu.uvoptx index 582a4d2..9eecedf 100644 --- a/MDK-ARM/CANEmu.uvoptx +++ b/MDK-ARM/CANEmu.uvoptx @@ -148,39 +148,22 @@ -U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 - - - 0 - 0 - 183 - 1 -
134225938
- 0 - 0 - 0 - 0 - 0 - 1 - ..\Core\CANEmu\canform.c - - \\CANEmu\../Core/CANEmu/canform.c\183 -
-
+ 0 1 - hcanemu + hcanemu,0x0A 1 1 - can_bits + MB_DATA,0x0A 2 1 - raw_len,0x0A + flag_manual @@ -237,7 +220,7 @@ Application/MDK-ARM - 0 + 1 0 0 0 @@ -257,7 +240,7 @@ Application/User/Core - 0 + 1 0 0 0 @@ -304,6 +287,18 @@ 0 0 0 + ../Core/Src/usart.c + usart.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 ../Core/Src/stm32f1xx_it.c stm32f1xx_it.c 0 @@ -311,7 +306,7 @@ 2 - 6 + 7 1 0 0 @@ -331,7 +326,7 @@ 0 3 - 7 + 8 1 0 0 @@ -343,7 +338,7 @@ 3 - 8 + 9 1 0 0 @@ -355,7 +350,7 @@ 3 - 9 + 10 1 0 0 @@ -367,7 +362,7 @@ 3 - 10 + 11 1 0 0 @@ -379,7 +374,7 @@ 3 - 11 + 12 1 0 0 @@ -391,7 +386,7 @@ 3 - 12 + 13 1 0 0 @@ -403,7 +398,7 @@ 3 - 13 + 14 1 0 0 @@ -415,7 +410,7 @@ 3 - 14 + 15 1 0 0 @@ -427,7 +422,7 @@ 3 - 15 + 16 1 0 0 @@ -439,7 +434,7 @@ 3 - 16 + 17 1 0 0 @@ -451,7 +446,7 @@ 3 - 17 + 18 1 0 0 @@ -463,7 +458,7 @@ 3 - 18 + 19 1 0 0 @@ -475,7 +470,7 @@ 3 - 19 + 20 1 0 0 @@ -485,6 +480,18 @@ 0 0 + + 3 + 21 + 1 + 0 + 0 + 0 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c + stm32f1xx_hal_uart.c + 0 + 0 + @@ -495,7 +502,7 @@ 0 4 - 20 + 22 1 0 0 @@ -515,7 +522,7 @@ 0 5 - 21 + 23 1 0 0 @@ -527,7 +534,7 @@ 5 - 22 + 24 5 0 0 @@ -539,7 +546,7 @@ 5 - 23 + 25 1 0 0 @@ -551,7 +558,7 @@ 5 - 24 + 26 5 0 0 @@ -563,6 +570,110 @@ + + Modbus + 1 + 0 + 0 + 0 + + 6 + 27 + 1 + 0 + 0 + 0 + ..\Core\Modbus\crc_algs.c + crc_algs.c + 0 + 0 + + + 6 + 28 + 5 + 0 + 0 + 0 + ..\Core\Modbus\crc_algs.h + crc_algs.h + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\Core\Modbus\modbus.c + modbus.c + 0 + 0 + + + 6 + 30 + 5 + 0 + 0 + 0 + ..\Core\Modbus\modbus.h + modbus.h + 0 + 0 + + + 6 + 31 + 5 + 0 + 0 + 0 + ..\Core\Modbus\modbus_config.h + modbus_config.h + 0 + 0 + + + 6 + 32 + 5 + 0 + 0 + 0 + ..\Core\Modbus\modbus_data.h + modbus_data.h + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\Core\Modbus\rs_message.c + rs_message.c + 0 + 0 + + + 6 + 34 + 5 + 0 + 0 + 0 + ..\Core\Modbus\rs_message.h + rs_message.h + 0 + 0 + + + ::CMSIS 0 diff --git a/MDK-ARM/CANEmu.uvprojx b/MDK-ARM/CANEmu.uvprojx index eede93a..2ca818f 100644 --- a/MDK-ARM/CANEmu.uvprojx +++ b/MDK-ARM/CANEmu.uvprojx @@ -19,7 +19,7 @@ STMicroelectronics Keil.STM32F1xx_DFP.2.4.0 http://www.keil.com/pack/ - IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ @@ -341,7 +341,7 @@ USE_HAL_DRIVER,STM32F103xB - ../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\Core\CANEmu + ../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../Core/CANEmu;..\Core\Modbus @@ -410,6 +410,62 @@ 1 ../Core/Src/tim.c + + usart.c + 1 + ../Core/Src/usart.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + stm32f1xx_it.c 1 @@ -490,6 +546,62 @@ 1 ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c + + stm32f1xx_hal_uart.c + 1 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + @@ -527,6 +639,51 @@ + + Modbus + + + crc_algs.c + 1 + ..\Core\Modbus\crc_algs.c + + + crc_algs.h + 5 + ..\Core\Modbus\crc_algs.h + + + modbus.c + 1 + ..\Core\Modbus\modbus.c + + + modbus.h + 5 + ..\Core\Modbus\modbus.h + + + modbus_config.h + 5 + ..\Core\Modbus\modbus_config.h + + + modbus_data.h + 5 + ..\Core\Modbus\modbus_data.h + + + rs_message.c + 1 + ..\Core\Modbus\rs_message.c + + + rs_message.h + 5 + ..\Core\Modbus\rs_message.h + + + ::CMSIS diff --git a/MDK-ARM/CANEmu/CANEmu.axf b/MDK-ARM/CANEmu/CANEmu.axf index cbfa8fd33423865cbbaedbf43933268d34237ba1..90b045a411fb499e22c8277a07fc029c6b696e54 100644 GIT binary patch literal 179160 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 Iqp83D2M0c>Output: *** Using Compiler 'V6.19', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' Build target 'CANEmu' -compiling canform.c... +compiling canEmu.c... +compiling main.c... +compiling modbus.c... +compiling rs_message.c... linking... -Program Size: Code=8230 RO-data=302 RW-data=12 ZI-data=2284 +Program Size: Code=11542 RO-data=338 RW-data=12 ZI-data=3116 FromELF: creating hex file... "CANEmu\CANEmu.axf" - 0 Error(s), 0 Warning(s). diff --git a/MDK-ARM/CANEmu/CANEmu.hex b/MDK-ARM/CANEmu/CANEmu.hex index d382fea..dd47809 100644 --- a/MDK-ARM/CANEmu/CANEmu.hex +++ b/MDK-ARM/CANEmu/CANEmu.hex @@ -1,8 +1,8 @@ :020000040800F2 -:10000000F808002089010008AD1600086D150008E9 -:10001000A916000891020008391A00080000000023 -:100020000000000000000000000000005D17000854 -:100030008D030008000000001D170008B517000818 +:10000000380C002089010008651E0008CD1B00087F +:10001000611E0008910200088D2500080000000004 +:100020000000000000000000000000009121000816 +:100030008D03000800000000D51E0008E92100081B :10004000A3010008A3010008A3010008A301000800 :10005000A3010008A3010008A3010008A3010008F0 :10006000A3010008A3010008A3010008A3010008E0 @@ -17,17 +17,17 @@ :1000F00000F03AF80AA090E8000C82448344AAF188 :100100000107DA4501D100F02FF8AFF2090EBAE885 :100110000F0013F0010F18BFFB1A43F0010318473B -:100120001420000034200000103A24BF78C878C1A1 +:10012000282D0000482D0000103A24BF78C878C15F :10013000FAD8520724BF30C830C144BF04680C60ED :10014000704700000023002400250026103A28BF35 :1001500078C1FBD8520728BF30C148BF0B60704739 :100160001FB51FBD10B510BD00F058F81146FFF7C0 -:10017000F7FF01F083FF00F076F803B4FFF7F2FF1A +:10017000F7FF02F02DFD00F076F803B4FFF7F2FF71 :1001800003BC00F07DF8000009488047094800479B :10019000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737 :1001A000FEE7FEE704480549054A064B7047000094 -:1001B00029180008ED000008F8020020F8080020C7 -:1001C000F8040020F80400204FF0000200B51346A8 +:1001B0005D220008ED00000838060020380C002001 +:1001C00038080020380800204FF0000200B5134620 :1001D00094469646203922BFA0E80C50A0E80C5067 :1001E000B1F12001BFF4F7AF090728BFA0E80C5018 :1001F00048BF0CC05DF804EB890028BF40F8042B11 @@ -44,495 +44,704 @@ :1002A0004FF08041086840F00100086040F61041BE :1002B000C4F201010120086002B0704780B584B02B :1002C00003900398006A08B9FFE75DE0039800F126 -:1002D0001801828CADF80820029A01F0E5FC039821 +:1002D0001801028DADF80820029A02F08FFA0398F7 :1002E000016A4AF20020C0F24A4000EB5100B0FB24 :1002F000F1F040F27001C2F2000108602420C4F263 :1003000000000068ADF80600BDF80600ADF8040076 -:1003100000200090FFE7009840F27411C2F2000143 -:100320000968884229D2FFE7009940F27400C2F2BE +:1003100000200090FFE7009840F2F831C2F200019F +:100320000968884229D2FFE7009940F2F720C2F21B :100330000000405C38B1FFE740F61041C4F2010113 :100340000120086006E040F61441C4F201010120DA :100350000860FFE740F27000C2F200000168BDF8DB -:1003600004000844ADF80400BDF8040001F0ACFE40 +:1003600004000844ADF80400BDF8040002F024FDC8 :10037000FFE7009801300090CDE740F61041C4F24D :10038000010101200860FFE704B080BD7047000054 :1003900081B0EFF3108072B60090FFE7FEE7000037 -:1003A00080B584B0039000F0C5F9029003980190E5 -:1003B0000198013048B1FFE740F20400C2F20000AA -:1003C0000178019808440190FFE7FFE700F0B2F9D7 -:1003D0000299401A0199884201D2FFE7F6E704B07A -:1003E00080BD000090B00F900E9100200D900990FC -:1003F000FFE70E9800680D99C840002800F07F8143 -:10040000FFE70D99012088400C900E9800680C9928 -:1004100008400B900B980C99884240F06C81FFE7E4 -:100420000E9840680590002851D0FFE705980128F4 -:100430003AD0FFE7059802283FD0FFE70598032848 -:100440005FD0FFE70598112832D0FFE70598122802 -:1004500038D0FFE705980021C1F21101884236D05B -:10046000FFE705980021C1F2120188422FD0FFE773 -:1004700005980021C1F22101884228D0FFE70598A4 -:100480000021C1F22201884221D0FFE70598002116 -:10049000C1F2310188421AD0FFE705980021C1F26C -:1004A0003201884213D02FE00E98C06809902CE0EA -:1004B0000E98C0680430099027E00E98C068083094 -:1004C000099022E00E98C0680C3009901DE00E984B -:1004D000806818B9FFE70420099011E00E98806841 -:1004E000012806D1FFE7082009900C980F990861B0 -:1004F00005E0082009900C980F994861FFE7FFE795 -:1005000003E00020099000E0FFE70B98FF2803D8E4 -:10051000FFE70F98049003E00F9804300490FFE782 -:10052000049808900B98FF2804D8FFE70D988000E6 -:10053000039006E00D996FF01F0000EB810003901F -:10054000FFE70398079008980068079A0F219140E9 -:100550008843099991400843089908600E98C0792A -:10056000C006002840F1C680FFE7FFE741F218000F -:10057000C4F20200016841F001010160006800F06E -:10058000010006900698FFE70D9820F0030008216F -:10059000C4F2010140580A900D9800F00300810058 -:1005A0000F2000FA01F10A9888430A900F9840F64C -:1005B0000001C4F20101884203D1FFE7002002904C -:1005C00026E00F9840F60041C4F20101884203D1B1 -:1005D000FFE70120019018E00F9841F20001C4F2FA -:1005E0000101884203D1FFE7022000900AE00F9941 -:1005F00041F20042C4F201020420914208BF0320EC -:100600000090FFE700980190FFE701980290FFE754 -:1006100002980D9901F00301890000FA01F10A988E -:1006200008430A900A980D9921F003010822C4F2A8 -:10063000010288500E988079C006002809D5FFE78E -:100640000B9A40F20841C4F20101086810430860A7 -:1006500008E00B9A40F20841C4F201010868904397 -:100660000860FFE70E9880798006002809D5FFE72B -:100670000B9A40F20C41C4F2010108681043086073 -:1006800008E00B9A40F20C41C4F201010868904363 -:100690000860FFE70E9880798007002809D5FFE7FA -:1006A0000B9A40F20441C4F201010868104308604B -:1006B00008E00B9A40F20441C4F20101086890433B -:1006C0000860FFE70E988079C00748B1FFE70B9AF2 -:1006D00040F20041C4F2010108681043086008E0DC -:1006E0000B9A40F20041C4F201010868904308608F -:1006F000FFE7FFE7FFE70D9801300D9079E610B0B6 -:100700007047000082B00190ADF802108DF8012012 -:100710009DF8010028B1FFE7BDF8020001990861CA -:1007200005E0BDF80200000401990861FFE702B08E -:100730007047000040F2F020C2F2000000687047ED -:1007400040F20400C2F20000027840F2F021C2F24E -:1007500000010868104408607047000080B542F24C -:100760000001C4F20201086840F010000860032094 -:1007700000F08CF80F2000F005F800F03BF80020A6 -:1007800080BD000080B582B0009040F20000C2F24F -:100790000000006840F20401C2F200010A784FF440 -:1007A0007A71B1FBF2F1B0FBF1F000F03FFD20B146 -:1007B000FFE701208DF8070018E000980F280DD8FA -:1007C000FFE700994FF0FF30002200F045F8009855 -:1007D00040F20801C2F20001086003E001208DF838 -:1007E000070003E000208DF80700FFE79DF80700F1 -:1007F00002B080BD83B0FFE741F21800C4F20200EE -:10080000016841F001010160006800F00100029000 -:100810000298FFE7FFE741F21C00C4F20200016802 -:1008200041F080510160006800F080500190019813 -:10083000FFE7FFE70421C4F2010108680090009877 -:1008400020F0E0600090009840F000700090009868 -:100850000860FFE703B0704780B586B08DF81700D9 -:10086000049103920020029001F0E8F802909DF9B3 -:100870001700019002980499039A00F019FF0146AD -:10088000019801F0E3F806B080BD000080B582B0A9 -:100890000190019801F0FCF802B080BD80B584B0F1 -:1008A00002900191029820B9FFE701208DF80F0016 -:1008B0001BE1019842F20001C4F20201096801F053 -:1008C0000701884216D9FFE742F20000C4F2020095 -:1008D000016821F00701019A11430160006800F0EE -:1008E00007000199884204D0FFE701208DF80F002E -:1008F000FBE0FFE702980078800700282AD5FFE791 -:10090000029800784007002809D5FFE741F204016A -:10091000C4F20201086840F4E0600860FFE7029852 -:1009200000780007002809D5FFE741F20401C4F26E -:100930000201086840F460500860FFE741F20401DA -:10094000C4F20201086820F0F000029A9268104395 -:100950000860FFE702980078C007002860D0FFE732 -:100960000298406801280ED1FFE741F20000C4F26E -:10097000020000688003002804D4FFE701208DF8FE -:100980000F00B2E021E00298406802280ED1FFE794 -:1009900041F20000C4F2020000688001002804D483 -:1009A000FFE701208DF80F009FE00DE041F200000D -:1009B000C4F2020000688007002804D4FFE7012089 -:1009C0008DF80F0091E0FFE7FFE741F20401C4F268 -:1009D0000201086820F00300029A52681043086080 -:1009E000FFF7A8FE0090FFE741F20400C4F2020006 -:1009F000006800F00C0002994968B0EB810F0ED03E -:100A0000FFE7FFF797FE0099401A41F289318842CB -:100A100004D3FFE703208DF80F0066E0E4E7FFE76B -:100A2000019842F20001C4F20201096801F00701D5 -:100A3000884216D2FFE742F20000C4F202000168C9 -:100A400021F00701019A11430160006800F00700DE -:100A50000199884204D0FFE701208DF80F0044E09F -:100A6000FFE702980078400700280CD5FFE741F225 -:100A70000401C4F20201086820F4E060029AD2681E -:100A800010430860FFE702980078000700280DD5A2 -:100A9000FFE741F20401C4F20201086820F460504B -:100AA000029A126940EAC2000860FFE700F022F8EB -:100AB00041F20401C4F202010968C9B20A0942F212 -:100AC0001211C0F60001895CC84040F20001C2F278 -:100AD0000001086040F20800C2F200000068FFF761 -:100AE00051FE00208DF80F00FFE79DF80F0004B0C5 -:100AF00080BD000086B00020059004900390029015 -:100B0000019041F20400C4F20200006805900598CB -:100B100000F00C000146009100283FD0FFE700984C -:100B2000042804D0FFE70098082806D037E041F2F7 -:100B30000020C0F27A00019037E00598C0F38341AD -:100B400042F22210C0F60000405C02909DF81600B0 -:100B5000C007C0B1FFE741F20400C4F20200006820 -:100B6000C0F3404142F23210C0F60000405C0490F5 -:100B7000029841F20021C0F27A0148430499B0FB87 -:100B8000F1F0039007E0029840F60011C0F23D0139 -:100B900048430390FFE70398019006E0FFE741F226 -:100BA0000020C0F27A000190FFE7019806B070477C -:100BB00080B586B00490049820B9FFE701208DF835 -:100BC00017002EE304980078C007002800F0AE80DC -:100BD000FFE741F20400C4F20200006800F00C00DC -:100BE000042813D0FFE741F20400C4F202000068B9 -:100BF00000F00C0008281BD1FFE741F20400C4F20A -:100C000002000068C003002812D5FFE741F200008F -:100C1000C4F2020000688003002808D5FFE70498AA -:100C2000406820B9FFE701208DF81700F9E27CE069 -:100C3000FFE704984068B0F5803F09D1FFE741F233 -:100C40000001C4F20201086840F48030086032E01C -:100C50000498406868B9FFE741F20001C4F202015C -:100C6000086820F480300860086820F4802008605C -:100C700020E004984068B0F5A02F0DD1FFE741F2C5 -:100C80000001C4F20201086840F48020086008688E -:100C900040F4803008600CE041F20001C4F202012F -:100CA000086820F480300860086820F4802008601C -:100CB000FFE7FFE7FFE7FFE704984068D0B1FFE7F1 -:100CC000FFF738FD0390FFE741F20000C4F2020095 -:100CD0000068800300280CD4FFE7FFF72BFD039981 -:100CE000401A652804D3FFE703208DF8170098E227 -:100CF000EAE719E0FFF71EFD0390FFE741F200006D -:100D0000C4F202000068800300280CD5FFE7FFF75B -:100D100011FD0399401A652804D3FFE703208DF8DD -:100D200017007EE2EAE7FFE7FFE7FFE704980078B5 -:100D30008007002840F18D80FFE741F20400C4F2F3 -:100D40000200006810F00C0F13D0FFE741F204001E -:100D5000C4F20200006800F00C00082829D1FFE767 -:100D600041F20400C4F202000068C003002820D44D -:100D7000FFE741F20000C4F202000068800700288B -:100D800009D5FFE704980069012804D0FFE7012096 -:100D90008DF8170045E241F20001C4F20201086833 -:100DA00020F0F800049A526940EAC2000860FFE7A8 -:100DB0004EE00498006958B3FFE70021C4F24221D5 -:100DC00001200860FFF7B6FC0390FFE741F2000046 -:100DD000C4F202000068800700280CD4FFE7FFF788 -:100DE000A9FC0399401A032804D3FFE703208DF8D8 -:100DF000170016E2EAE741F20001C4F202010868B6 -:100E000020F0F800049A526940EAC20008601EE02F -:100E10000021C4F2422100200860FFF78BFC039000 -:100E2000FFE741F20000C4F20200006880070028DA -:100E30000CD5FFE7FFF77EFC0399401A032804D383 -:100E4000FFE703208DF81700EBE1EAE7FFE7FFE794 -:100E5000FFE7049800780007002848D5FFE70498CA -:100E6000806918B3FFE740F28041C4F242210120BB -:100E70000860FFF75FFC0390FFE741F22400C4F233 -:100E800002000068800700280CD4FFE7FFF752FC3F -:100E90000399401A032804D3FFE703208DF81700B5 -:100EA000BFE1EAE7012000F03BFC1FE040F2804197 -:100EB000C4F2422100200860FFF73CFC0390FFE7EA -:100EC00041F22400C4F202000068800700280CD51B -:100ED000FFE7FFF72FFC0399401A032804D3FFE72D -:100EE00003208DF817009CE1EAE7FFE7FFE704988D -:100EF00000784007002840F1D880FFE700208DF8F7 -:100F0000070041F21C00C4F202000068C000002883 -:100F100013D4FFE7FFE741F21C00C4F202000168AE -:100F200041F080510160006800F08050009000980E -:100F3000FFE701208DF80700FFE747F20000C4F249 -:100F400000000068C005002822D4FFE747F2000136 -:100F5000C4F20001086840F480700860FFF7EAFB03 -:100F60000390FFE747F20000C4F200000068C005EC -:100F700000280CD4FFE7FFF7DDFB0399401A652832 -:100F800004D3FFE703208DF817004AE1EAE7FFE703 -:100F9000FFE70498C068012809D1FFE741F220016A -:100FA000C4F20201086840F00100086031E00498D2 -:100FB000C06868B9FFE741F22001C4F20201086885 -:100FC00020F001000860086820F0040008601FE0BD -:100FD0000498C06805280DD1FFE741F22001C4F252 -:100FE0000201086840F004000860086840F0010051 -:100FF00008600CE041F22001C4F20201086820F010 -:1010000001000860086820F004000860FFE7FFE7BF -:10101000FFE7FFE70498C068E0B1FFE7FFF78AFB4E -:101020000390FFE741F22000C4F20200006880074D -:1010300000280ED4FFE7FFF77DFB0399401A41F229 -:101040008931884204D3FFE703208DF81700E8E0D8 -:10105000E8E71BE0FFF76EFB0390FFE741F220009B -:10106000C4F202000068800700280ED5FFE7FFF7F2 -:1010700061FB0399401A41F28931884204D3FFE7AA -:1010800003208DF81700CCE0E8E7FFE79DF80700A4 -:10109000012809D1FFE741F21C01C4F202010868EE -:1010A00020F080500860FFE7FFE70498C06900283F -:1010B00000F0B380FFE741F20400C4F202000068D0 -:1010C00000F00C00082800F08280FFE70498C06957 -:1010D00002285CD1FFE76021C4F2422100200860B1 -:1010E000FFF728FB0390FFE741F20000C4F2020083 -:1010F0000068800100280CD5FFE7FFF71BFB039970 -:10110000401A032804D3FFE703208DF8170088E076 -:10111000EAE70498006AB0F5803F0CD1FFE741F29E -:101120000401C4F20201086820F40030049A9268B5 -:1011300010430860FFE741F20401C4F202010868AD -:1011400020F47410049B1A6A5B6A1A431043086007 -:101150006021C4F2422101200860FFF7EBFA0390FE -:10116000FFE741F20000C4F202000068800100289D -:101170000CD4FFE7FFF7DEFA0399401A032804D3E3 -:10118000FFE703208DF817004BE0EAE71EE060213F -:10119000C4F2422100200860FFF7CCFA0390FFE779 -:1011A00041F20000C4F202000068800100280CD562 -:1011B000FFE7FFF7BFFA0399401A032804D3FFE7BC -:1011C00003208DF817002CE0EAE7FFE724E00498FD -:1011D000C069012804D1FFE701208DF8170020E045 -:1011E00041F20400C4F2020000680290029800F488 -:1011F00080300499096A884208D1FFE7029800F418 -:1012000070100499496A884204D0FFE701208DF8E4 -:10121000170006E0FFE7FFE7FFE700208DF8170063 -:10122000FFE79DF8170006B080BD000080B582B0D2 -:101230000190019800F094FA02B080BD85B003904F -:101240000291FFE7039890F83C00012804D1FFE7E2 -:1012500002208DF813005BE00399012081F83C0027 -:10126000FFE7FFE70399022081F83D00039800683B -:10127000406801900398006880680090019820F011 -:10128000700001900298016801980843019001984C -:101290000399096848600398006842F60041C4F267 -:1012A0000101884218D0FFE703980068B0F1804F31 -:1012B00012D0FFE70398006840F20041C4F2000139 -:1012C000884209D0FFE70398006840F60001C4F2A5 -:1012D000000188420ED1FFE7009820F080000090C6 -:1012E00002984168009808430090009803990968A3 -:1012F0008860FFE70399012081F83D00FFE703992B -:10130000002081F83C00FFE700208DF81300FFE784 -:101310009DF8130005B0704780B582B0009000982A -:1013200020B9FFE701208DF807003FE0009890F812 -:101330003D0040B9FFE70099002081F83C0000988B -:1013400000F038F8FFE70099022081F83D0000998D -:1013500051F8040B00F06AFA0099012081F8460068 -:10136000FFE70099012081F83E00009981F83F00D5 -:10137000009981F84000009981F84100FFE7FFE7FC -:101380000099012081F84200009981F843000099FA -:1013900081F84400009981F84500FFE70099012099 -:1013A00081F83D0000208DF80700FFE79DF8070059 -:1013B00002B080BD82B0019001980068B0F1804F0A -:1013C00010D1FFE7FFE741F21C00C4F20200016800 -:1013D00041F001010160006800F0010000900098F8 -:1013E000FFE7FFE702B0704780B586B00490039135 -:1013F00000208DF80B00FFE7049890F83C000128CE -:1014000004D1FFE702208DF81700ABE0049901201A -:1014100081F83C00FFE7FFE70499022081F83D00D6 -:101420000498006880680190019820F0770001908E -:10143000019820F47F400190019804990968886020 -:10144000039800680090002872D0FFE700981028E9 -:101450006ED0FFE7009820286AD0FFE70098302878 -:1014600066D0FFE70098402855D0FFE70098502845 -:1014700037D0FFE70098602840D0FFE70098702839 -:101480000BD0FFE70098B0F5805F05D0FFE700982C -:10149000B0F5005F16D052E055E004980068039B59 -:1014A0005A689968DB6800F045FA0498006880681B -:1014B0000190019840F07700019001980499096823 -:1014C000886040E004980068039B5A689968DB686C -:1014D00000F030FA04980168886840F48040886021 -:1014E00031E004980068039A5168D26800F052FA1B -:1014F00004980068502100F037FA24E0049800684E -:10150000039A5168D26800F06DFA0498006860216F -:1015100000F02AFA17E004980068039A5168D2682C -:1015200000F038FA04980068402100F01DFA0AE043 -:10153000049800680399096800F016FA03E0012096 -:101540008DF80B00FFE70499012081F83D00FFE7CB -:101550000499002081F83C00FFE79DF80B008DF80E -:101560001700FFE79DF8170006B080BDFFE7FEE714 -:1015700080B58CB000200B900A9009900890FFE78E -:1015800041F21800C4F20200016841F0100101604C -:10159000006800F0100007900798FFE7FFE741F2AE -:1015A0001800C4F20200016841F0200101600068E7 -:1015B00000F0200006900698FFE7FFE741F21800D0 -:1015C000C4F20200016841F008010160006800F007 -:1015D000080005900598FFE7FFE741F21800C4F204 -:1015E0000200016841F004010160006800F004009D -:1015F00004900498FFE740F60040C4F20100039015 -:101600000121019100220292FFF77CF8019A0299D0 -:101610000398089209920A9102210B9108A9FEF7FA -:10162000E1FE0CB080BD000080B588B000210191C2 -:1016300007910691059104910391029140F2A41043 -:10164000C2F200004FF080420260416081604FF6BC -:10165000FF72C26001618161FFF75EFE18B1FFE7B2 -:10166000FEF796FEFFE74FF48050049040F2A4107E -:10167000C2F2000004A9FFF7B7FE18B1FFE7FEF7BA -:1016800087FEFFE700200290039040F2A410C2F210 -:10169000000002A9FFF7D2FD18B1FFE7FEF778FEC0 -:1016A000FFE708B080BD0000FFE7FEE7FFE7FEE7C9 -:1016B00088B0079006910592079800F00700049003 -:1016C0000498C0F10700052803D3FFE70420019028 -:1016D00004E00498C0F107000190FFE7019803902F -:1016E00004980430062803D8FFE70020009003E0A8 -:1016F000049803380090FFE7009802900698039939 -:10170000012202FA01F101390840029B9840059933 -:101710009A40013A1140084308B0704770470000F2 -:1017200082B00190019840F20001C2F20001096804 -:10173000C90844F6D352C1F26202A1FB0221890911 -:1017400048430090FFE700BFFFE70098411E00916B -:101750000028F8D1FFE702B0704700007047000092 -:1017600080B582B0009000980138B0F1807F03D33B -:10177000FFE70120019019E0009801384EF21401B2 -:10178000CEF2000108604FF0FF300F2100F05EF94B -:101790004EF21801CEF20001002008604EF2100255 -:1017A000CEF20002072111600190FFE7019802B01C -:1017B00080BD000080B5FEF7C3FF80BD80B590B04E -:1017C00006A800902821FEF7FFFC0098002305934F -:1017D0000493039302930193012206924FF4803104 -:1017E000079108930A9202220D920E914FF4E01194 -:1017F0000F91FFF7DDF918B1FFE7FEF7C9FDFFE72D -:101800000F20019002210291002003904FF480628A -:101810000492059001A8FFF741F818B1FFE7FEF721 -:10182000B7FDFFE710B080BD7047000083B00290A5 -:101830000191029800680090029842F60041C4F2BB -:101840000101884215D0FFE70298B0F1804F10D017 -:10185000FFE7029840F20041C4F20001884208D03C -:10186000FFE7029840F60001C4F2000188420AD165 -:10187000FFE7009820F07000009001984168009800 -:1018800008430090FFE7029842F60041C4F20101CC -:10189000884215D0FFE70298B0F1804F10D0FFE7E3 -:1018A000029840F20041C4F20001884208D0FFE7EC -:1018B000029840F60001C4F2000188420AD1FFE715 -:1018C000009820F4407000900198C1680098084387 -:1018D0000090FFE7009820F08000019949690843D3 -:1018E0000090009802990860019880680299C86287 -:1018F0000198006802998862029842F60041C4F299 -:101900000101884205D1FFE7019800690299086347 -:10191000FFE702990120486102980069C00730B1D1 -:10192000FFE70299086920F001000861FFE703B0B2 -:101930007047000085B004900391029201930498CF -:1019400080680090009820F47F40009003980299EE -:10195000019A41EA0221014300980843009000984F -:101960000499886005B0704783B002900191029895 -:1019700080680090009820F0700000900198009915 -:10198000084340F00700009000980299886003B077 -:101990007047000085B00490039102920498006A99 -:1019A00000900499086A20F0010008620498806998 -:1019B0000190019820F0F00001900299019840EA0E -:1019C00001100190009820F00A00009003990098FF -:1019D000084300900198049988610098049908626E -:1019E00005B0704785B00490039102920498006A94 -:1019F00000900499086A20F0100008620498806939 -:101A00000190019820F4704001900299019840EAF9 -:101A100001300190009820F0A000009003990098F8 -:101A200040EA011000900198049988610098049997 -:101A3000086205B070470000FFE7FEE74EF60C5065 -:101A4000CEF200000068C0F30220704782B08DF82B -:101A5000070000919DF9070000280AD4FFE70098CD -:101A600000019DF907104EF20042CEF200028854A8 -:101A70000BE0009800019DF8071001F00F014EF6F1 -:101A80001452CEF200028854FFE702B07047000003 -:101A900083B00290029800F0070000904EF60C51BF -:101AA000CEF200010868019001984FF6FF02104045 -:101AB00001900198009A40EA02200022C0F2FA52F6 -:101AC000104301900198086003B0704783B0029002 -:101AD00001918DF8032001980068FF280CD8FFE7DA -:101AE0009DF803000299DDF804C0DCF80020531CC7 -:101AF000CCF800308854FFE703B0704780B586B05B -:101B00000590049103928DF80B309DF80B0001387D -:101B10000190FFE7019800280ED4FFE7059804998B -:101B2000039A019BDA4002F00102FFF7CFFFFFE7C3 -:101B3000019801380190EDE706B080BD80B588B00E -:101B400084460A98CDF81CC00691059204938DF83E -:101B50000F00049900200860079800788DF80E00A7 -:101B6000012000908DF80D00059804999DF80E2035 -:101B7000FFF7ACFF00980290FFE7029806998842B1 -:101B80003CD2FFE707980299405C8DF80700059862 -:101B900004999DF80720FFF799FF9DF807009DF82D -:101BA0000E1088421DD1FFE79DF80D0001308DF821 -:101BB0000D009DF80D00052812D1FFE79DF80F00DC -:101BC00050B9FFE7059804999DF80720B2FA82F210 -:101BD0005209FFF77BFFFFE700208DF80D00FFE7BC -:101BE00007E001208DF80D009DF807008DF80E002C -:101BF000FFE7FFE7029801300290BEE708B080BD22 -:101C000085B0049003910020ADF80A000190FFE731 -:101C10000198039988422AD2FFE704980199405C11 -:101C20008DF80300BDF80A00C0F380308DF8020083 -:101C3000BDF80A004000ADF80A009DF803009DF8C9 -:101C40000210484008D0FFE7BDF80A0044F299515D -:101C50004840ADF80A00FFE7BDF80A006FF3DF3037 -:101C6000ADF80A00FFE7019801300190D0E7BDF818 -:101C70000A0005B07047000081B00090009840F263 -:101C8000EC21C2F20001096888420BD2FFE7009AFA -:101C900040F2EC11C2F20001885CB0FA80F0400919 -:101CA0008854FFE701B0704780B5A6B02492BDF814 -:101CB0009020ADF894202390229140F2EC21C2F2C2 -:101CC00000010F9100220A6040F27810C2F2000079 -:101CD000027040F2EC10C2F20000FFF7F7FE0F981E -:101CE0000068219023988068002858D1FFE7239846 -:101CF00002686FF3DF2240F2EC10C2F200000C9099 -:101D000040F2EC21C2F200010E910B23FFF7F6FE28 -:101D10000C980E990A680B3A2092239A127BFFF7CF -:101D2000D5FE0C980E990A68013A1F9200220D9276 -:101D3000FFF7CCFE0C980D9A0E990B68013B1E9391 -:101D4000FFF7C4FE0E98006801381D909DF89400BE -:101D50008008C00720B1FFE71F98FFF78DFFFFE75E -:101D60009DF894004008C00720B1FFE71E98FFF7D8 -:101D700083FFFFE79DF894000009C00720B1FFE74B -:101D80001D98FFF779FFFFE79DF894004009C00711 -:101D900020B1FFE72098FFF76FFFFFE78AE0239865 -:101DA000406820F060401C901C98C0F38A4240F2CA -:101DB000EC10C2F20000099040F2EC21C2F20001E6 -:101DC0000B910B23FFF79AFE09980B990A680B3ABF -:101DD0001B9201220892FFF779FE089A09980B9945 -:101DE0000B68013B1A93FFF771FE09980B990A687B -:101DF000013A19921C9A6FF39F421223FFF77EFE5D -:101E000009980B990A68123A1892239A127BFFF7E5 -:101E10005DFE09980B990A68013A179200220A920E -:101E2000FFF754FE09980A9A0B990B68013B169329 -:101E3000FFF74CFE0B980068013815909DF8940050 -:101E4000C00720B1FFE71A98FFF716FFFFE79DF8DC -:101E500094004008C00720B1FFE71998FFF70CFF76 -:101E6000FFE79DF894008008C00720B1FFE71798AE -:101E7000FFF702FFFFE79DF89400C008C00720B1FC -:101E8000FFE71698FFF7F8FEFFE79DF894000009BA -:101E9000C00720B1FFE71598FFF7EEFEFFE79DF8BA -:101EA00094004009C00720B1FFE71B98FFF7E4FE4C -:101EB000FFE7FFE72398006900F00F0240F2EC1003 -:101EC000C2F2000040F2EC21C2F200010423FFF74D -:101ED00015FE2398C068002867D1FFE723980069A2 -:101EE00000F00F008DF8530000208DF85200FFE73E -:101EF0009DF852109DF8532000209142079008DA77 -:101F0000FFE79DF8521000200829B8BF0120079074 -:101F1000FFE70798C007002846D0FFE740F2EC2013 -:101F2000C2F200000068139022989DF85210405CA5 -:101F30008DF84B002398007D012812D1FFE79DF812 -:101F4000520006280DDBFFE740F2EC10C2F2000061 -:101F500040F2EC21C2F2000100220823FFF7CEFD7F -:101F60000DE09DF84B2040F2EC10C2F2000040F270 -:101F7000EC21C2F200010823FFF7C0FDFFE79DF846 -:101F800094008009C00740B1FFE79DF8520020B9D6 -:101F9000FFE71398FFF770FEFFE7FFE79DF8520099 -:101FA00001308DF85200A3E7FFE740F2EC20C2F2C7 -:101FB00000000590016840F2EC10C2F200000690AB -:101FC000FFF71EFE059902460698ADF848200A68FC -:101FD0001192BDF848200F23FFF790FD9DF8941053 -:101FE0000020B0EBD11F04D0FFE71198FFF744FEAB -:101FF000FFE740F2EC10C2F20000029040F2EC2148 -:10200000C2F20001039101220492FFF75FFD0298E2 -:10201000039909689DF8952002F001026B461A6049 -:1020200040F27402C2F2000240F27413C2F20003E2 -:10203000FFF784FD02980399049AFFF747FD029881 -:102040000399049AFFF742FD00201090FFE71098D3 -:10205000062810DCFFE740F2EC10C2F2000040F26C -:10206000EC21C2F200010122FFF730FDFFE71098DA -:1020700001301090EBE726B080BD000080B582B043 -:1020800000200190FEF76AFBFFF798FBFFF770FA5C -:10209000FFF7CAFA40F27C10C2F2000000904EF640 -:1020A0004801C0F20101FEF7F5F8009940F2231053 -:1020B0000860FFE76420FEF773F940F27C10C2F27B -:1020C0000000FEF7FBF8F5E783B0ADF80A0044F234 -:1020D0004020C0F20F00019000200090FFE7242074 -:1020E000C4F200000068BDF80A10401A00B2B0F156 -:1020F000FF3F0CDCFFE700980130009044F24121E3 -:10210000C0F20F01884201D3FFE700E0E7E703B028 -:1021100070470000000000000000010203040607F1 -:10212000080902030405060708090A0B0C0D0E0F27 -:1021300010100102582100080000002010000000CB -:10214000280100086821000810000020E8080000AD -:10215000440100080000000000127A0001000000A5 -:08216000100000000000000067 +:1003A00083B0019000208DF80300019890F821009F +:1003B00002280DD0FFE7019904208863FFE7019927 +:1003C000002081F82000FFE701208DF80B0021E0DC +:1003D00001980168086820F00E0008600198016823 +:1003E000086820F0010008600198C16B026C0120D0 +:1003F00090404860FFE70199012081F82100FFE764 +:100400000199002081F82000FFE79DF803008DF896 +:100410000B00FFE79DF80B0003B0704781B0009020 +:100420000098806B01B0704780B584B0039000F0F5 +:10043000C5F90290039801900198013048B1FFE797 +:1004400040F20400C2F200000178019808440190D3 +:10045000FFE7FFE700F0B2F90299401A01998842DC +:1004600001D2FFE7F6E704B080BD000090B00F9026 +:100470000E9100200D900990FFE70E9800680D99ED +:10048000C840002800F07F81FFE70D9901208840D7 +:100490000C900E9800680C9908400B900B980C99E2 +:1004A000884240F06C81FFE70E9840680590002874 +:1004B00051D0FFE7059801283AD0FFE705980228B8 +:1004C0003FD0FFE7059803285FD0FFE70598112884 +:1004D00032D0FFE70598122838D0FFE705980021B1 +:1004E000C1F21101884236D0FFE705980021C1F220 +:1004F000120188422FD0FFE705980021C1F22101A7 +:10050000884228D0FFE705980021C1F222018842E5 +:1005100021D0FFE705980021C1F2310188421AD0AD +:10052000FFE705980021C1F23201884213D02FE085 +:100530000E98C06809902CE00E98C06804300990AD +:1005400027E00E98C0680830099022E00E98C06835 +:100550000C3009901DE00E98806818B9FFE7042060 +:10056000099011E00E988068012806D1FFE7082065 +:1005700009900C980F99086105E0082009900C98E3 +:100580000F994861FFE7FFE703E00020099000E0D2 +:10059000FFE70B98FF2803D8FFE70F98049003E0CC +:1005A0000F9804300490FFE7049808900B98FF28F8 +:1005B00004D8FFE70D988000039006E00D996FF0D6 +:1005C0001F0000EB81000390FFE703980790089855 +:1005D0000068079A0F219140884309999140084388 +:1005E000089908600E98C079C006002840F1C680BE +:1005F000FFE7FFE741F21800C4F20200016841F092 +:1006000001010160006800F0010006900698FFE714 +:100610000D9820F003000821C4F2010140580A900F +:100620000D9800F0030081000F2000FA01F10A98F4 +:1006300088430A900F9840F60001C4F201018842F5 +:1006400003D1FFE70020029026E00F9840F600411A +:10065000C4F20101884203D1FFE70120019018E0B4 +:100660000F9841F20001C4F20101884203D1FFE773 +:10067000022000900AE00F9941F20042C4F2010208 +:100680000420914208BF03200090FFE700980190EA +:10069000FFE701980290FFE702980D9901F003012E +:1006A000890000FA01F10A9808430A900A980D9906 +:1006B00021F003010822C4F2010288500E988079CB +:1006C000C006002809D5FFE70B9A40F20841C4F2A2 +:1006D000010108681043086008E00B9A40F20841E5 +:1006E000C4F20101086890430860FFE70E98807922 +:1006F0008006002809D5FFE70B9A40F20C41C4F2AE +:10070000010108681043086008E00B9A40F20C41B0 +:10071000C4F20101086890430860FFE70E988079F1 +:100720008007002809D5FFE70B9A40F20441C4F284 +:10073000010108681043086008E00B9A40F2044188 +:10074000C4F20101086890430860FFE70E988079C1 +:10075000C00748B1FFE70B9A40F20041C4F2010123 +:1007600008681043086008E00B9A40F20041C4F2A8 +:100770000101086890430860FFE7FFE7FFE70D9875 +:1007800001300D9079E610B07047000082B0019002 +:10079000ADF802108DF801209DF8010028B1FFE7A7 +:1007A000BDF802000199086105E0BDF802000004EF +:1007B00001990861FFE702B07047000040F2346021 +:1007C000C2F200000068704740F20400C2F200006C +:1007D000027840F23461C2F20001086810440860F7 +:1007E0007047000080B542F20001C4F202010868BF +:1007F00040F010000860032000F08CF80F2000F09B +:1008000005F800F03BF8002080BD000080B582B004 +:10081000009040F20000C2F20000006840F20401C3 +:10082000C2F200010A784FF47A71B1FBF2F1B0FB29 +:10083000F1F000F069FD20B1FFE701208DF807001D +:1008400018E000980F280DD8FFE700994FF0FF300F +:10085000002200F045F8009840F20801C2F20001C1 +:10086000086003E001208DF8070003E000208DF808 +:100870000700FFE79DF8070002B080BD83B0FFE7E7 +:1008800041F21800C4F20200016841F00101016068 +:10089000006800F0010002900298FFE7FFE741F2D4 +:1008A0001C00C4F20200016841F080510160006840 +:1008B00000F0805001900198FFE7FFE70421C4F2A7 +:1008C000010108680090009820F0E0600090009816 +:1008D00040F00070009000980860FFE703B0704798 +:1008E00080B586B08DF81700049103920020029025 +:1008F00001F04EFE02909DF91700019002980499B4 +:10090000039A01F0B1FA0146019801F049FE06B0E0 +:1009100080BD000080B582B00190019801F062FEB8 +:1009200002B080BD80B584B002900191029820B9D8 +:10093000FFE701208DF80F001BE1019842F2000152 +:10094000C4F20201096801F00701884216D9FFE7E5 +:1009500042F20000C4F20200016821F00701019A8E +:1009600011430160006800F007000199884204D03B +:10097000FFE701208DF80F00FBE0FFE70298007809 +:10098000800700282AD5FFE7029800784007002852 +:1009900009D5FFE741F20401C4F20201086840F4FE +:1009A000E0600860FFE7029800780007002809D59A +:1009B000FFE741F20401C4F20201086840F460500C +:1009C0000860FFE741F20401C4F20201086820F068 +:1009D000F000029A926810430860FFE702980078DE +:1009E000C007002860D0FFE70298406801280ED1B8 +:1009F000FFE741F20000C4F2020000688003002813 +:100A000004D4FFE701208DF80F00B2E021E0029846 +:100A1000406802280ED1FFE741F20000C4F2020054 +:100A200000688001002804D4FFE701208DF80F0042 +:100A30009FE00DE041F20000C4F202000068800770 +:100A4000002804D4FFE701208DF80F0091E0FFE7B4 +:100A5000FFE741F20401C4F20201086820F003003C +:100A6000029A526810430860FFF7A8FE0090FFE763 +:100A700041F20400C4F20200006800F00C00029988 +:100A80004968B0EB810F0ED0FFE7FFF797FE0099A2 +:100A9000401A41F28931884204D3FFE703208DF8E0 +:100AA0000F0066E0E4E7FFE7019842F20001C4F2BC +:100AB0000201096801F00701884216D2FFE742F2FD +:100AC0000000C4F20200016821F00701019A1143FD +:100AD0000160006800F007000199884204D0FFE738 +:100AE00001208DF80F0044E0FFE7029800784007EE +:100AF00000280CD5FFE741F20401C4F202010868A6 +:100B000020F4E060029AD26810430860FFE7029880 +:100B10000078000700280DD5FFE741F20401C4F278 +:100B20000201086820F46050029A126940EAC2008B +:100B30000860FFE700F04CF841F20401C4F2020142 +:100B40000968C9B20A0942F60261C0F60001895C6F +:100B5000C84040F20001C2F20001086040F2080003 +:100B6000C2F200000068FFF751FE00208DF80F0070 +:100B7000FFE79DF80F0004B080BD000040F20000C8 +:100B8000C2F200000068704780B5FFF7F7FF41F23E +:100B90000401C4F202010968C1F3022242F61261A3 +:100BA000C0F60001895CC84080BD000080B5FFF739 +:100BB000E5FF41F20401C4F202010968C1F3C22257 +:100BC00042F61261C0F60001895CC84080BD000099 +:100BD00086B000200590049003900290019041F2AD +:100BE0000400C4F2020000680590059800F00C00B3 +:100BF0000146009100283FD0FFE70098042804D068 +:100C0000FFE70098082806D037E041F20020C0F244 +:100C10007A00019037E00598C0F3834142F61A60EC +:100C2000C0F60000405C02909DF81600C007C0B1FD +:100C3000FFE741F20400C4F202000068C0F3404143 +:100C400042F62A60C0F60000405C0490029841F22F +:100C50000021C0F27A0148430499B0FBF1F00390FF +:100C600007E0029840F60011C0F23D0148430390AE +:100C7000FFE70398019006E0FFE741F20020C0F291 +:100C80007A000190FFE7019806B0704780B586B002 +:100C90000490049820B9FFE701208DF817002EE397 +:100CA00004980078C007002800F0AE80FFE741F20A +:100CB0000400C4F20200006800F00C00042813D005 +:100CC000FFE741F20400C4F20200006800F00C00EB +:100CD00008281BD1FFE741F20400C4F202000068BB +:100CE000C003002812D5FFE741F20000C4F2020061 +:100CF00000688003002808D5FFE70498406820B901 +:100D0000FFE701208DF81700F9E27CE0FFE7049887 +:100D10004068B0F5803F09D1FFE741F20001C4F21D +:100D20000201086840F48030086032E004984068AE +:100D300068B9FFE741F20001C4F20201086820F43B +:100D400080300860086820F48020086020E0049863 +:100D50004068B0F5A02F0DD1FFE741F20001C4F2C9 +:100D60000201086840F480200860086840F4803080 +:100D700008600CE041F20001C4F20201086820F4AE +:100D800080300860086820F480200860FFE7FFE7F3 +:100D9000FFE7FFE704984068D0B1FFE7FFF70EFDDB +:100DA0000390FFE741F20000C4F2020000688003F4 +:100DB00000280CD4FFE7FFF701FD0399401A6528CE +:100DC00004D3FFE703208DF8170098E2EAE719E063 +:100DD000FFF7F4FC0390FFE741F20000C4F20200C9 +:100DE0000068800300280CD5FFE7FFF7E7FC0399B4 +:100DF000401A652804D3FFE703208DF817007EE230 +:100E0000EAE7FFE7FFE7FFE704980078800700289C +:100E100040F18D80FFE741F20400C4F20200006857 +:100E200010F00C0F13D0FFE741F20400C4F20200EF +:100E3000006800F00C00082829D1FFE741F2040007 +:100E4000C4F202000068C003002820D4FFE741F28A +:100E50000000C4F2020000688007002809D5FFE7FF +:100E600004980069012804D0FFE701208DF81700DD +:100E700045E241F20001C4F20201086820F0F800E6 +:100E8000049A526940EAC2000860FFE74EE0049805 +:100E9000006958B3FFE70021C4F242210120086035 +:100EA000FFF78CFC0390FFE741F20000C4F2020060 +:100EB0000068800700280CD4FFE7FFF77FFC039948 +:100EC000401A032804D3FFE703208DF8170016E229 +:100ED000EAE741F20001C4F20201086820F0F800DC +:100EE000049A526940EAC20008601EE00021C4F280 +:100EF000422100200860FFF761FC0390FFE741F208 +:100F00000000C4F202000068800700280CD5FFE74B +:100F1000FFF754FC0399401A032804D3FFE703208A +:100F20008DF81700EBE1EAE7FFE7FFE7FFE704983A +:100F300000780007002848D5FFE70498806918B3B7 +:100F4000FFE740F28041C4F2422101200860FFF730 +:100F500035FC0390FFE741F22400C4F20200006870 +:100F6000800700280CD4FFE7FFF728FC0399401AFC +:100F7000032804D3FFE703208DF81700BFE1EAE759 +:100F8000012000F0A9FF1FE040F28041C4F242219D +:100F900000200860FFF712FC0390FFE741F22400F5 +:100FA000C4F202000068800700280CD5FFE7FFF7B5 +:100FB00005FC0399401A032804D3FFE703208DF8AA +:100FC00017009CE1EAE7FFE7FFE704980078400795 +:100FD000002840F1D880FFE700208DF8070041F29B +:100FE0001C00C4F202000068C000002813D4FFE710 +:100FF000FFE741F21C00C4F20200016841F0805199 +:101000000160006800F0805000900098FFE7012028 +:101010008DF80700FFE747F20000C4F20000006807 +:10102000C005002822D4FFE747F20001C4F2000106 +:10103000086840F480700860FFF7C0FB0390FFE78A +:1010400047F20000C4F200000068C00500280CD47C +:10105000FFE7FFF7B3FB0399401A652804D3FFE7C6 +:1010600003208DF817004AE1EAE7FFE7FFE704985D +:10107000C068012809D1FFE741F22001C4F2020152 +:10108000086840F00100086031E00498C06868B961 +:10109000FFE741F22001C4F20201086820F00100DC +:1010A0000860086820F0040008601FE00498C06829 +:1010B00005280DD1FFE741F22001C4F202010868C2 +:1010C00040F004000860086840F0010008600CE08F +:1010D00041F22001C4F20201086820F0010008601A +:1010E000086820F004000860FFE7FFE7FFE7FFE77C +:1010F0000498C068E0B1FFE7FFF760FB0390FFE7EB +:1011000041F22000C4F202000068800700280ED4DB +:10111000FFE7FFF753FB0399401A41F289318842F8 +:1011200004D3FFE703208DF81700E8E0E8E71BE0B1 +:10113000FFF744FB0390FFE741F22000C4F20200F6 +:101140000068800700280ED5FFE7FFF737FB0399FB +:10115000401A41F28931884204D3FFE703208DF819 +:101160001700CCE0E8E7FFE79DF80700012809D168 +:10117000FFE741F21C01C4F20201086820F0805030 +:101180000860FFE7FFE70498C069002800F0B3801B +:10119000FFE741F20400C4F20200006800F00C0016 +:1011A000082800F08280FFE70498C06902285CD11B +:1011B000FFE76021C4F2422100200860FFF7FEFA39 +:1011C0000390FFE741F20000C4F2020000688001D2 +:1011D00000280CD5FFE7FFF7F1FA0399401A03281E +:1011E00004D3FFE703208DF8170088E0EAE70498AE +:1011F000006AB0F5803F0CD1FFE741F20401C4F270 +:101200000201086820F40030049A926810430860D4 +:10121000FFE741F20401C4F20201086820F47410EF +:10122000049B1A6A5B6A1A43104308606021C4F287 +:10123000422101200860FFF7C1FA0390FFE741F265 +:101240000000C4F202000068800100280CD4FFE70F +:10125000FFF7B4FA0399401A032804D3FFE70320E9 +:101260008DF817004BE0EAE71EE06021C4F242214E +:1012700000200860FFF7A2FA0390FFE741F20000A8 +:10128000C4F202000068800100280CD5FFE7FFF7D8 +:1012900095FA0399401A032804D3FFE703208DF839 +:1012A00017002CE0EAE7FFE724E00498C069012872 +:1012B00004D1FFE701208DF8170020E041F204007F +:1012C000C4F2020000680290029800F48030049991 +:1012D000096A884208D1FFE7029800F47010049967 +:1012E000496A884204D0FFE701208DF8170006E024 +:1012F000FFE7FFE7FFE700208DF81700FFE79DF805 +:10130000170006B080BD000080B582B00190019842 +:1013100000F040FF02B080BD85B003900291FFE76E +:10132000039890F83C00012804D1FFE702208DF8D3 +:1013300013005BE00399012081F83C00FFE7FFE721 +:101340000399022081F83D000398006840680190ED +:101350000398006880680090019820F07000019068 +:10136000029801680198084301900198039909685F +:1013700048600398006842F60041C4F201018842C7 +:1013800018D0FFE703980068B0F1804F12D0FFE754 +:101390000398006840F20041C4F20001884209D07D +:1013A000FFE70398006840F60001C4F2000188429C +:1013B0000ED1FFE7009820F080000090029841686D +:1013C0000098084300900098039909688860FFE737 +:1013D0000399012081F83D00FFE70399002081F87F +:1013E0003C00FFE700208DF81300FFE79DF8130095 +:1013F00005B0704780B582B00090009820B9FFE733 +:1014000001208DF807003FE0009890F83D0040B9BA +:10141000FFE70099002081F83C00009800F038F8C0 +:10142000FFE70099022081F83D00009951F8040B74 +:1014300000F016FF0099012081F84600FFE70099AF +:10144000012081F83E00009981F83F00009981F861 +:101450004000009981F84100FFE7FFE70099012073 +:1014600081F84200009981F84300009981F8440016 +:10147000009981F84500FFE70099012081F83D00BF +:1014800000208DF80700FFE79DF8070002B080BD3F +:1014900083B0029002980068B0F1804F10D1FFE74E +:1014A000FFE741F21C00C4F20200016841F00101B3 +:1014B0000160006800F0010001900198FFE719E069 +:1014C0000298006840F20041C4F20001884210D145 +:1014D000FFE7FFE741F21C00C4F20200016841F09F +:1014E00002010160006800F0020000900098FFE730 +:1014F000FFE7FFE703B0704781B0009000980168F4 +:10150000C86820F00100C860FFE700980068006A22 +:1015100041F21111084210D1FFE700980068006AFB +:1015200040F24441084207D1FFE70098016808688B +:1015300020F001000860FFE7FFE7FFE700990120C6 +:1015400081F83D00002001B07047000080B586B0F2 +:101550000490039100208DF80B00FFE7049890F8A9 +:101560003C00012804D1FFE702208DF81700ABE012 +:101570000499012081F83C00FFE7FFE7049902206D +:1015800081F83D000498006880680190019820F07F +:1015900077000190019820F47F4001900198049910 +:1015A00009688860039800680090002872D0FFE7FF +:1015B000009810286ED0FFE7009820286AD0FFE737 +:1015C0000098302866D0FFE70098402855D0FFE704 +:1015D0000098502837D0FFE70098602840D0FFE7F8 +:1015E000009870280BD0FFE70098B0F5805F05D019 +:1015F000FFE70098B0F5005F16D052E055E0049880 +:101600000068039B5A689968DB6800F0ADFE049897 +:10161000006880680190019840F07700019001987F +:1016200004990968886040E004980068039B5A6840 +:101630009968DB6800F098FE04980168886840F4B7 +:101640008040886031E004980068039A5168D2684D +:1016500000F0BAFE04980068502100F09FFE24E0DC +:1016600004980068039A5168D26800F0D5FE049887 +:101670000068602100F092FE17E004980068039A69 +:101680005168D26800F0A0FE04980068402100F084 +:1016900085FE0AE0049800680399096800F07EFE60 +:1016A00003E001208DF80B00FFE70499012081F889 +:1016B0003D00FFE70499002081F83C00FFE79DF81A +:1016C0000B008DF81700FFE79DF8170006B080BDEE +:1016D00080B588B00690FFE7FFE70698006850E8FD +:1016E000030F20F4F0700590FFE705990698026853 +:1016F00042E803100028F0D1FFE7FFE7FFE7FFE72C +:101700000698006850E8050F20F001000490FFE7FC +:1017100004990698026842E805100028F0D1FFE716 +:10172000FFE70698006B012814D1FFE7FFE7FFE70A +:101730000698006850E8030F20F010000390FFE7C0 +:1017400003990698026842E803100028F0D1FFE7E9 +:10175000FFE7FFE70698006840690006002832D5D9 +:10176000FFE7FFE7FFE70698006850E8050F20F065 +:1017700080000290FFE702990698026842E805108F +:101780000028F0D1FFE7FFE70698806BD0B1FFE7B4 +:101790000698816B002048630698806BFEF700FE78 +:1017A00078B1FFE70698806BFEF738FE202807D156 +:1017B000FFE706991020486403208DF81F004EE0D3 +:1017C000FFE7FFE7FFE7069800684069400600284A +:1017D00032D5FFE7FFE7FFE70698006850E8050FFE +:1017E00020F040000190FFE701990698026842E866 +:1017F00005100028F0D1FFE7FFE70698C06BD0B1D5 +:10180000FFE70698C16B002048630698C06BFEF79F +:10181000C7FD78B1FFE70698C06BFEF7FFFD2028F3 +:1018200007D1FFE706991020486403208DF81F00B8 +:1018300015E0FFE7FFE7FFE706990020C884069957 +:10184000C88506994864069A202182F84210069AB3 +:1018500082F84110069908638DF81F00FFE79DF894 +:101860001F0008B080BD000080B586B00490FFE77F +:10187000FFE70498006850E8030F20F4907003908D +:10188000FFE703990498026842E803100028F0D1AA +:10189000FFE7FFE7FFE7FFE70498006850E8050F60 +:1018A00020F001000290FFE702990498026842E8E4 +:1018B00005100028F0D1FFE7FFE70498006B01282E +:1018C00014D1FFE7FFE7FFE70498006850E8030F33 +:1018D00020F010000190FFE701990498026842E8A7 +:1018E00003100028F0D1FFE7FFE7FFE70498006846 +:1018F00040694006002832D5FFE7FFE7FFE704987C +:10190000006850E8050F20F040000090FFE70099C4 +:101910000498026842E805100028F0D1FFE7FFE7CD +:101920000498C06BD0B1FFE70498C16B00204863F6 +:101930000498C06BFEF734FD78B1FFE70498C06BE4 +:10194000FEF76CFD202807D1FFE7049910204864BA +:1019500003208DF817000EE0FFE7FFE7FFE704998B +:101960000020C885049A202182F842100499086357 +:101970008DF81700FFE79DF8170006B080BD000046 +:1019800080B584B00290FFE7FFE70298006850E856 +:10199000030F20F0C0000190FFE701990298026850 +:1019A00042E803100028F0D1FFE7FFE70298006843 +:1019B00040690006002832D5FFE7FFE7FFE70298FD +:1019C000006850E8050F20F080000090FFE70099C4 +:1019D0000298026842E805100028F0D1FFE7FFE70F +:1019E0000298806BD0B1FFE70298816B00204863BA +:1019F0000298806BFEF7D4FC78B1FFE70298806B09 +:101A0000FEF70CFD202807D1FFE70299102048645B +:101A100003208DF80F000CE0FFE7FFE7FFE70299D6 +:101A20000020C884029A202182F841108DF80F000E +:101A3000FFE79DF80F0004B080BD000080B582B0C4 +:101A40000090009820B9FFE701208DF8070040E0E2 +:101A50000098806908B1FFE700E0FFE7009890F880 +:101A6000410040B9FFE70099002081F8400000984C +:101A700000F034F8FFE70099242081F84100009835 +:101A80000168C86820F40050C860009800F0EEFCBF +:101A900000980168086920F4904008610098016886 +:101AA000486920F02A00486100980168C86840F43D +:101AB0000050C860009900204864009A202182F8F4 +:101AC0004110009A82F84210009948638DF807008F +:101AD000FFE79DF8070002B080BD000080B58AB026 +:101AE00009900020089007900690059009980068DA +:101AF00043F60001C4F20101884239D1FFE7FFE754 +:101B000041F21800C4F20200016841F48041016012 +:101B1000006800F4804004900498FFE7FFE741F27A +:101B20001800C4F20200016841F00401016000687D +:101B300000F0040003900398FFE74FF40070059055 +:101B4000022006900320089040F60000C4F2010035 +:101B5000019005A90291FEF789FC019802994FF4C2 +:101B600080620592002206920792FEF77FFCFFE753 +:101B70000AB080BD80B584B002900191ADF802201A +:101B8000029890F84200202817D1FFE7019820B171 +:101B9000FFE7BDF8020020B9FFE701208DF80F0034 +:101BA0000FE002990020086302980199BDF8022015 +:101BB00000F0BAFC8DF80F0003E002208DF80F0052 +:101BC000FFE79DF80F0004B080BD0000FFE7FEE7CF +:101BD00040F2B001C2F2000142F63560C0F60000EA +:101BE000486042F64560C0F60000C86042F62C62CC +:101BF000C0F600024A61C861486242F63C62C0F623 +:101C00000002CA6248630720086001208860092238 +:101C10000A61886108620A228A62086370470000CC +:101C200080B582B0FFF7D4FF40F23040C2F200002E +:101C300001900121017042F210724283017602216B +:101C4000017740F2E841C2F2000140F2A042C2F244 +:101C50000002002300F00CFA019981F8240002B080 +:101C600080BD000080B58CB000200B900A900990D8 +:101C70000890FFE741F21800C4F20200016841F049 +:101C800010010160006800F0100007900798FFE75E +:101C9000FFE741F21800C4F20200016841F02001A0 +:101CA0000160006800F0200006900698FFE7FFE75B +:101CB00041F21800C4F20200016841F0080101601D +:101CC000006800F0080005900598FFE7FFE741F283 +:101CD0001800C4F20200016841F0040101600068CC +:101CE00000F0040004900498FFE740F60040C4F2BE +:101CF000010003900121019100220292FEF746FDAE +:101D0000019A02990398089209920A9102210B9173 +:101D100008A9FEF7ABFB0CB080BD000080B588B011 +:101D2000002101910791069105910491039102917F +:101D300040F25840C2F200004FF080420260416021 +:101D400081604FF6FF72C26001618161FFF752FB53 +:101D500018B1FFE7FEF71CFBFFE74FF4805004903B +:101D600040F25840C2F2000004A9FFF7EFFB18B19F +:101D7000FFE7FEF70DFBFFE700200290039040F223 +:101D80005840C2F2000002A9FFF7C6FA18B1FFE7F7 +:101D9000FEF7FEFAFFE708B080BD000080B588B00E +:101DA00000210191079106910591049103910291FF +:101DB00040F2A040C2F2000040F20042C4F2000231 +:101DC0000260416081604FF4E152C2600161816153 +:101DD000FFF710FB18B1FFE7FEF7DAFAFFE74FF461 +:101DE0008050049040F2A040C2F2000004A9FFF726 +:101DF000ADFB18B1FFE7FEF7CBFAFFE7002002903A +:101E0000039040F2A040C2F2000002A9FFF784FA5A +:101E100018B1FFE7FEF7BCFAFFE708B080BD00008D +:101E200080B582B040F2E840C2F20000019043F673 +:101E30000001C4F2010101604FF4E1314160002171 +:101E40008160C16001610C2242618161C161FFF763 +:101E5000F5FD18B1FFE7FEF79BFAFFE702B080BD82 +:101E6000FFE7FEE7FFE7FEE788B0079006910592DF +:101E7000079800F0070004900498C0F107000528B7 +:101E800003D3FFE70420019004E00498C0F10700A9 +:101E90000190FFE70198039004980430062803D8C6 +:101EA000FFE70020009003E0049803380090FFE76C +:101EB0000098029006980399012202FA01F1013973 +:101EC0000840029B984005999A40013A1140084306 +:101ED00008B070477047000082B00190019840F24E +:101EE0000001C2F200010968C90844F6D352C1F2E8 +:101EF0006202A1FB0221890948430090FFE700BF6D +:101F0000FFE70098411E00910028F8D1FFE702B0DA +:101F10007047000080B584B003908DF80B1000204E +:101F20008DF80A0003994969096848620398406975 +:101F300001686FF0010008610398408B28B1FFE74A +:101F400003984069FFF7D8FAFFE79DF80B004007B8 +:101F5000002844D4FFE79DF80B008007002823D514 +:101F6000FFE703980069FFF77FFC8DF80A000399EB +:101F700091F8200000F0FB0081F82000039991F80F +:101F8000200000F0F70081F82000039991F820006C +:101F900000F0DF0081F82000039991F8200000F0A4 +:101FA000FE0081F82000FFE79DF80B00C007A8B1F4 +:101FB000FFE703980069FFF7E3FC8DF80A00039937 +:101FC00091F8200000F0EF0081F82000039991F8CB +:101FD000200000F0BF0081F82000FFE742E00398F6 +:101FE0000069FFF775FB8DF80A0000200190FFE7FC +:101FF0000198B0F5817F0ADCFFE703988168019AB8 +:1020000000208854FFE7019801300190F0E7039920 +:1020100091F8200000F0FB0081F82000039991F86E +:10202000200000F0F70081F82000039991F82000CB +:1020300000F0DF0081F82000039991F8200000F003 +:10204000FE0081F82000039991F8200000F0EF00D5 +:1020500081F82000039991F8200000F0BF0081F87A +:102060002000FFE70399032081F8240004B080BD1D +:1020700085B00390029101920093039820B9FFE785 +:1020800002208DF8130027E0029820B9FFE7022014 +:102090008DF8130020E002980399086101980399D4 +:1020A00048610398007F20B9FFE702208DF81300F4 +:1020B00012E00398806838B9FFE7039940F2F41002 +:1020C000C2F20000886003E0009803998860FFE78F +:1020D00001208DF81300FFE79DF8130005B070474D +:1020E00080B584B00290019100208DF803008DF836 +:1020F0000200029890F82000C008C00720B1FFE756 +:1021000004208DF80F003FE0029991F8200040F084 +:10211000020081F82000029991F8200040F00800A8 +:1021200081F82000029991F8200000F0DF0081F88A +:102130002000029991F8200000F0FE0081F82000B4 +:102140000198029948600298816800690722FFF7A8 +:1021500011FD8DF802009DF8020038B1FFE70298EA +:102160000421FFF7D7FE8DF8030003E001208DF86E +:102170000300FFE79DF80300029981F824009DF811 +:1021800003008DF80F00FFE79DF80F0004B080BD3D +:102190007047000080B582B0009000980138B0F11F +:1021A000807F03D3FFE70120019019E000980138F8 +:1021B0004EF21401CEF2000108604FF0FF300F2103 +:1021C00000F0EEF94EF21801CEF200010020086096 +:1021D0004EF21002CEF20002072111600190FFE7DB +:1021E000019802B080BD000080B5FEF7EDFA80BD19 +:1021F00080B590B006A800902821FDF7E5FF009873 +:102200000023059304930393029301930122069202 +:102210004FF48031079108930A9202220D920E9199 +:102220004FF4E0110F91FEF731FD18B1FFE7FEF713 +:10223000AFF8FFE70F2001900221029100200390E8 +:102240004FF480620492059001A8FEF76BFB18B171 +:10225000FFE7FEF79DF8FFE710B080BD7047000074 +:1022600083B002900191029800680090029842F6B3 +:102270000041C4F20101884215D0FFE70298B0F195 +:10228000804F10D0FFE7029840F20041C4F20001F5 +:10229000884208D0FFE7029840F60001C4F200012E +:1022A00088420AD1FFE7009820F070000090019862 +:1022B0004168009808430090FFE7029842F6004109 +:1022C000C4F20101884215D0FFE70298B0F1804FB7 +:1022D00010D0FFE7029840F20041C4F200018842AA +:1022E00008D0FFE7029840F60001C4F200018842DE +:1022F0000AD1FFE7009820F4407000900198C1686F +:10230000009808430090FFE7009820F080000199B2 +:102310004969084300900098029908600198806814 +:102320000299C8620198006802998862029842F690 +:102330000041C4F20101884205D1FFE7019800691C +:1023400002990863FFE70299012048610298006939 +:10235000C00730B1FFE70299086920F00100086169 +:10236000FFE703B07047000085B00490039102922C +:102370000193049880680090009820F47F400090BA +:1023800003980299019A41EA022101430098084307 +:10239000009000980499886005B0704783B002905F +:1023A0000191029880680090009820F070000090E1 +:1023B00001980099084340F00700009000980299A6 +:1023C000886003B07047000085B0049003910292CA +:1023D0000498006A00900499086A20F001000862DD +:1023E000049880690190019820F0F0000190029912 +:1023F000019840EA01100190009820F00A00009036 +:102400000399009808430090019804998861009806 +:102410000499086205B0704785B004900391029258 +:102420000498006A00900499086A20F0100008627D +:10243000049880690190019820F4704001900299FD +:10244000019840EA01300190009820F0A00000902F +:102450000399009840EA011000900198049988615E +:1024600000980499086205B07047000080B584B0F8 +:10247000039003980068006920F44050039A1168A3 +:10248000D26810430861039988680A694969104352 +:102490000843029003980068C06841F20C618843C9 +:1024A0000299084303990968C86003980068406965 +:1024B00020F44070039A11689269104348610398B0 +:1024C000006843F60001C4F20101884204D1FFE72D +:1024D000FEF76CFB019003E0FEF756FB0190FFE76F +:1024E000019819214843039A116852689200B0FB81 +:1024F000F2FC48F21F52C5F2EB12ACFB023043096A +:10250000642003FB10CC322000EB0C10A0FB020275 +:10251000F02000EA521000EB0310C2F34312104403 +:10252000886004B080BD000083B002900191ADF8D6 +:102530000220019802998862BDF8020002998885FC +:10254000BDF802000299C8850299002048640299EA +:10255000222081F842000298006938B1FFE7029812 +:102560000168C86840F48070C860FFE7029801689D +:10257000486940F00100486102980168C86840F06D +:102580002000C860002003B070470000FFE7FEE7AE +:102590004EF60C50CEF200000068C0F302207047E7 +:1025A00082B08DF8070000919DF9070000280AD439 +:1025B000FFE7009800019DF907104EF20042CEF2AD +:1025C000000288540BE0009800019DF8071001F00C +:1025D0000F014EF61452CEF200028854FFE702B00B +:1025E0007047000083B00290029800F0070000904E +:1025F0004EF60C51CEF200010868019001984FF69A +:10260000FF02104001900198009A40EA0220002247 +:10261000C0F2FA52104301900198086003B070476D +:1026200083B0029001918DF8032001980068FF2883 +:102630000CD8FFE79DF803000299DDF804C0DCF830 +:102640000020531CCCF800308854FFE703B07047DB +:1026500080B586B00590049103928DF80B309DF8FB +:102660000B0001380190FFE7019800280ED4FFE726 +:1026700005980499039A019BDA4002F00102FFF7E2 +:10268000CFFFFFE7019801380190EDE706B080BD6C +:1026900080B588B084460A98CDF81CC00691059292 +:1026A00004938DF80F0004990020086007980078C3 +:1026B0008DF80E00012000908DF80D00059804990A +:1026C0009DF80E20FFF7ACFF00980290FFE70298FC +:1026D000069988423CD2FFE707980299405C8DF842 +:1026E0000700059804999DF80720FFF799FF9DF8CA +:1026F00007009DF80E1088421DD1FFE79DF80D00E0 +:1027000001308DF80D009DF80D00052812D1FFE76E +:102710009DF80F0050B9FFE7059804999DF8072030 +:10272000B2FA82F25209FFF77BFFFFE700208DF833 +:102730000D00FFE707E001208DF80D009DF8070070 +:102740008DF80E00FFE7FFE7029801300290BEE728 +:1027500008B080BD85B0049003910020ADF80A0058 +:102760000190FFE70198039988422AD2FFE7049875 +:102770000199405C8DF80300BDF80A00C0F3803079 +:102780008DF80200BDF80A004000ADF80A009DF87F +:1027900003009DF80210484008D0FFE7BDF80A008A +:1027A00044F299514840ADF80A00FFE7BDF80A002D +:1027B0006FF3DF30ADF80A00FFE7019801300190B8 +:1027C000D0E7BDF80A0005B07047000081B0009066 +:1027D000009840F23061C2F20001096888420BD2D1 +:1027E000FFE7009A40F23051C2F20001885CB0FA73 +:1027F00080F040098854FFE701B0704780B5A6B06B +:102800002492BDF89020ADF894202390229140F2BC +:102810003061C2F200010F9100220A6040F2FC30E8 +:10282000C2F20000027040F23050C2F20000FFF726 +:10283000F7FE0F980068219023988068002858D1EF +:10284000FFE7239802686FF3DF2240F23050C2F2B4 +:1028500000000C9040F23061C2F200010E910B2397 +:10286000FFF7F6FE0C980E990A680B3A2092239A0D +:10287000127BFFF7D5FE0C980E990A68013A1F9259 +:1028800000220D92FFF7CCFE0C980D9A0E990B6862 +:10289000013B1E93FFF7C4FE0E98006801381D909F +:1028A0009DF894008008C00720B1FFE71F98FFF74C +:1028B0008DFFFFE79DF894004008C00720B1FFE7B7 +:1028C0001E98FFF783FFFFE79DF894000009C007FB +:1028D00020B1FFE71D98FFF779FFFFE79DF894000F +:1028E0004009C00720B1FFE72098FFF76FFFFFE71F +:1028F0008AE02398406820F060401C901C98C0F348 +:102900008A4240F23050C2F20000099040F2306139 +:10291000C2F200010B910B23FFF79AFE09980B9965 +:102920000A680B3A1B9201220892FFF779FE089A77 +:1029300009980B990B68013B1A93FFF771FE0998F0 +:102940000B990A68013A19921C9A6FF39F4212235D +:10295000FFF77EFE09980B990A68123A1892239A9B +:10296000127BFFF75DFE09980B990A68013A1792EE +:1029700000220A92FFF754FE09980A9A0B990B68F5 +:10298000013B1693FFF74CFE0B9800680138159039 +:102990009DF89400C00720B1FFE71A98FFF716FFD3 +:1029A000FFE79DF894004008C00720B1FFE71998A1 +:1029B000FFF70CFFFFE79DF894008008C00720B1E7 +:1029C000FFE71798FFF702FFFFE79DF89400C008A4 +:1029D000C00720B1FFE71698FFF7F8FEFFE79DF864 +:1029E00094000009C00720B1FFE71598FFF7EEFE3D +:1029F000FFE79DF894004009C00720B1FFE71B984E +:102A0000FFF7E4FEFFE7FFE72398006900F00F02FD +:102A100040F23050C2F2000040F23061C2F20001D8 +:102A20000423FFF715FE2398C068002867D1FFE74D +:102A30002398006900F00F008DF8530000208DF8F6 +:102A40005200FFE79DF852109DF85320002091425C +:102A5000079008DAFFE79DF8521000200829B8BF58 +:102A600001200790FFE70798C007002846D0FFE73E +:102A700040F23060C2F200000068139022989DF886 +:102A80005210405C8DF84B002398007D012812D134 +:102A9000FFE79DF8520006280DDBFFE740F23050BB +:102AA000C2F2000040F23061C2F2000100220823AD +:102AB000FFF7CEFD0DE09DF84B2040F23050C2F202 +:102AC000000040F23061C2F200010823FFF7C0FDB0 +:102AD000FFE79DF894008009C00740B1FFE79DF82B +:102AE000520020B9FFE71398FFF770FEFFE7FFE7FA +:102AF0009DF8520001308DF85200A3E7FFE740F245 +:102B00003060C2F200000590016840F23050C2F21D +:102B100000000690FFF71EFE059902460698ADF8E4 +:102B200048200A681192BDF848200F23FFF790FD56 +:102B30009DF894100020B0EBD11F04D0FFE711984E +:102B4000FFF744FEFFE740F23050C2F2000002906F +:102B500040F23061C2F20001039101220492FFF7BA +:102B60005FFD0298039909689DF8952002F0010223 +:102B70006B461A6040F2F722C2F2000240F2F833CC +:102B8000C2F20003FFF784FD02980399049AFFF74D +:102B900047FD02980399049AFFF742FD0020109028 +:102BA000FFE71098062810DCFFE740F23050C2F231 +:102BB000000040F23061C2F200010122FFF730FD57 +:102BC000FFE7109801301090EBE726B080BD0000C1 +:102BD00080B586B000200590FDF704FEFFF708FBE6 +:102BE000FFF740F8FFF79AF8FFF7D8F8FFF718F962 +:102BF00040F20440C2F2000004904EF64801C0F2D8 +:102C00000101FDF747FB049940F223100860FFF72C +:102C100007F840F23040C2F2000040F2E801C2F290 +:102C20000001FFF75DFAFFE740F20040C2F200004A +:102C30000068002840F0B480FFE740F27400C2F260 +:102C400000004168C1F3800140F20442C2F2000278 +:102C500091604168C1F3C001D16001894FF47A737A +:102C600059431162828901200021B1EB024F039088 +:102C70000AD1FFE740F27400C2F20000C0890028C8 +:102C800018BF01200390FFE7039800F0010040F215 +:102C90000441C2F20001019148604868086040F2B6 +:102CA0007400C2F200000290027C02F00F020A617E +:102CB00090F82A200A7690F82C204A7690F82E2058 +:102CC0008A7690F83020CA7690F832200A7790F809 +:102CD00034204A7790F836208A7790F83820CA77DF +:102CE0004268C2F3404391F8282002F0FE021A44E1 +:102CF00081F828204268C2F3804391F8282002F02E +:102D0000FD0242EA430281F828204268C2F3C04330 +:102D100091F8282002F0FB0242EA830281F8282081 +:102D20004268C2F3005391F8282002F0F70242EA09 +:102D3000C30281F828204268C2F3405391F828204A +:102D400002F0EF0242EA031281F828204268C2F33F +:102D5000805391F8282002F0DF0242EA431281F802 +:102D600028204268C2F3C05391F8282002F0BF0225 +:102D700042EA831281F82820C37991F8282002F0D2 +:102D80007F0242EAC31281F828204068C0F3406203 +:102D900091F8290000F0FE00104481F82900FFE7B7 +:102DA00040F20440C2F200000090406AFDF73CFB94 +:102DB0000098FDF783FA37E783B0ADF80A0044F2D4 +:102DC0004020C0F20F00019000200090FFE7242077 +:102DD000C4F200000068BDF80A10401A00B2B0F159 +:102DE000FF3F0CDCFFE700980130009044F24121E6 +:102DF000C0F20F01884201D3FFE700E0E7E703B02C +:102E000070470000000000000000010203040607F4 +:102E1000080900000000010203040203040506077C +:102E200008090A0B0C0D0E0F101001025665722EC8 +:102E300020312E30004E494F2D31320053544D3346 +:102E40003246313033000000682E000800000020B8 +:102E50001000000028010008782E00081000002053 +:102E6000280C00004401000800127A000100000054 +:082E700010000000000000004A :04000005080000ED02 :00000001FF diff --git a/MDK-ARM/CANEmu/CANEmu.htm b/MDK-ARM/CANEmu/CANEmu.htm index 72d7fa5..3f292c6 100644 --- a/MDK-ARM/CANEmu/CANEmu.htm +++ b/MDK-ARM/CANEmu/CANEmu.htm @@ -3,9 +3,9 @@ Static Call Graph - [CANEmu\CANEmu.axf]


Static Call Graph for image CANEmu\CANEmu.axf


-

#<CALLGRAPH># ARM Linker, 6190004: Last Updated: Mon Aug 4 13:49:17 2025 +

#<CALLGRAPH># ARM Linker, 6190004: Last Updated: Mon Aug 4 16:26:50 2025

-

Maximum Stack Usage = 252 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

+

Maximum Stack Usage = 268 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

__rt_entry_main ⇒ main ⇒ CANEmu_SendFrame ⇒ form_CAN_bitstream_full ⇒ apply_bit_stuffing_with_error ⇒ append_bit

@@ -85,8 +85,8 @@ Function Pointers Global Symbols

__main (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main)) -

[Calls]

  • >>   __rt_entry -
  • >>   __scatterload +

    [Calls]
    • >>   __scatterload +
    • >>   __rt_entry

    [Address Reference Count : 1]
    • startup_stm32f103xb.o(.text)
    @@ -98,9 +98,9 @@ Global Symbols

    [Calls]
    • >>   __rt_entry
    -

    __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

    __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) -

    __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

    __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)

    __scatterload_copy (Thumb, 26 bytes, Stack size unknown bytes, __scatter_copy.o(!!handler_copy), UNUSED)

    [Calls]

    • >>   __scatterload_copy @@ -108,80 +108,80 @@ Global Symbols
      [Called By]
      • >>   __scatterload_copy
      -

      __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED) +

      __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED)

      __rt_lib_init (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000))

      [Called By]

      • >>   __rt_entry_li
      -

      __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) +

      __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) -

      __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) +

      __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) -

      __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) +

      __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) -

      __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) +

      __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) -

      __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000034)) +

      __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000034)) -

      __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) +

      __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) -

      __rt_lib_init_fp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002)) +

      __rt_lib_init_fp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002)) -

      __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) +

      __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) -

      __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) +

      __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) -

      __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C)) +

      __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C)) -

      __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) +

      __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) -

      __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) +

      __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) -

      __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) +

      __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) -

      __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) +

      __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) -

      __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) +

      __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) -

      __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000006)) +

      __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000006)) -

      __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000010)) +

      __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000010)) -

      __rt_lib_init_relocate_pie_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) +

      __rt_lib_init_relocate_pie_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) -

      __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000035)) +

      __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000035)) -

      __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) +

      __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) -

      __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000027)) +

      __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000027)) -

      __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) +

      __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E))

      __rt_lib_shutdown (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000))

      [Called By]

      • >>   __rt_exit_ls
      -

      __rt_lib_shutdown_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)) +

      __rt_lib_shutdown_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)) -

      __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000007)) +

      __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000007)) -

      __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)) +

      __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)) -

      __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000010)) +

      __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000010)) -

      __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A)) +

      __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A)) -

      __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)) +

      __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)) -

      __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)) +

      __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C))

      __rt_entry (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000)) -

      [Called By]

      • >>   __main -
      • >>   __scatterload_rt2 +

        [Called By]
        • >>   __scatterload_rt2 +
        • >>   __main
        -

        __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002)) +

        __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002))

        __rt_entry_sh (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004))

        [Stack]

        • Max Depth = 8 + Unknown Stack Size @@ -194,17 +194,17 @@ Global Symbols

          [Calls]
          • >>   __rt_lib_init
          -

          __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009)) +

          __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009))

          __rt_entry_main (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)) -

          [Stack]

          • Max Depth = 252 + Unknown Stack Size +

            [Stack]
            • Max Depth = 268 + Unknown Stack Size
            • Call Chain = __rt_entry_main ⇒ main ⇒ CANEmu_SendFrame ⇒ form_CAN_bitstream_full ⇒ apply_bit_stuffing_with_error ⇒ append_bit
            -
            [Calls]
            • >>   exit -
            • >>   main +
              [Calls]
              • >>   main +
              • >>   exit
              -

              __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)) +

              __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C))

              __rt_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000))

              [Called By]

              • >>   exit @@ -214,7 +214,7 @@ Global Symbols

                [Calls]
                • >>   __rt_lib_shutdown
                -

                __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002)) +

                __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002))

                __rt_exit_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004))

                [Calls]

                • >>   _sys_exit @@ -360,21 +360,21 @@ Global Symbols

                  [Called By]
                  • >>   __user_setup_stackheap
                  -

                  __aeabi_memclr4 (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text)) -

                  [Called By]

                  • >>   SystemClock_Config +

                    __aeabi_memclr4 (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text)) +

                    [Called By]

                    • >>   SystemClock_Config
                    -

                    __aeabi_memclr8 (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED) +

                    __aeabi_memclr8 (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED) -

                    __rt_memclr_w (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED) +

                    __rt_memclr_w (Thumb, 0 bytes, Stack size unknown bytes, rt_memclr_w.o(.text), UNUSED) -

                    _memset_w (Thumb, 74 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED) +

                    _memset_w (Thumb, 74 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED) -

                    __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                    __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                    __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                    __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                    __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                    __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)

                    __user_setup_stackheap (Thumb, 74 bytes, Stack size 8 bytes, sys_stackheap_outer.o(.text))

                    [Stack]

                    • Max Depth = 8 + Unknown Stack Size @@ -395,28 +395,28 @@ Global Symbols
                      [Called By]
                      • >>   __rt_entry_main
                      -

                      __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) +

                      __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)

                      __user_perproc_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text))

                      [Called By]

                      • >>   __user_setup_stackheap
                      -

                      __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) +

                      __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)

                      _sys_exit (Thumb, 8 bytes, Stack size 0 bytes, sys_exit.o(.text))

                      [Called By]

                      • >>   __rt_exit_exit
                      -

                      __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) +

                      __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) -

                      __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) +

                      __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) -

                      __semihosting_library_function (Thumb, 0 bytes, Stack size unknown bytes, indicate_semi.o(.text), UNUSED) +

                      __semihosting_library_function (Thumb, 0 bytes, Stack size unknown bytes, indicate_semi.o(.text), UNUSED)

                      BusFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.BusFault_Handler))
                      [Address Reference Count : 1]

                      • startup_stm32f103xb.o(RESET)
                      -

                      CANEmu_Init (Thumb, 40 bytes, Stack size 8 bytes, canemu.o(.text.CANEmu_Init)) +

                      CANEmu_Init (Thumb, 40 bytes, Stack size 8 bytes, canemu.o(.text.CANEmu_Init))

                      [Stack]

                      • Max Depth = 8
                      • Call Chain = CANEmu_Init

                      [Called By]
                      • >>   main @@ -434,11 +434,29 @@ Global Symbols

                        DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.DebugMon_Handler))
                        [Address Reference Count : 1]

                        • startup_stm32f103xb.o(RESET)
                        -

                        Error_Handler (Thumb, 14 bytes, Stack size 4 bytes, main.o(.text.Error_Handler)) +

                        Error_Handler (Thumb, 14 bytes, Stack size 4 bytes, main.o(.text.Error_Handler))

                        [Stack]

                        • Max Depth = 4
                        • Call Chain = Error_Handler
                        -
                        [Called By]
                        • >>   MX_TIM2_Init -
                        • >>   SystemClock_Config +
                          [Called By]
                          • >>   MX_USART1_UART_Init +
                          • >>   MX_TIM3_Init +
                          • >>   MX_TIM2_Init +
                          • >>   SystemClock_Config +
                          + +

                          HAL_DMA_Abort (Thumb, 124 bytes, Stack size 12 bytes, stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort)) +

                          [Stack]

                          • Max Depth = 12
                          • Call Chain = HAL_DMA_Abort +
                          +
                          [Called By]
                          • >>   HAL_UART_AbortReceive +
                          • >>   HAL_UART_AbortTransmit +
                          • >>   HAL_UART_Abort +
                          + +

                          HAL_DMA_GetError (Thumb, 12 bytes, Stack size 4 bytes, stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError)) +

                          [Stack]

                          • Max Depth = 4
                          • Call Chain = HAL_DMA_GetError +
                          +
                          [Called By]
                          • >>   HAL_UART_AbortReceive +
                          • >>   HAL_UART_AbortTransmit +
                          • >>   HAL_UART_Abort

                          HAL_Delay (Thumb, 66 bytes, Stack size 24 bytes, stm32f1xx_hal.o(.text.HAL_Delay)) @@ -449,25 +467,26 @@ Global Symbols
                          [Called By]

                          • >>   main
                          -

                          HAL_GPIO_Init (Thumb, 798 bytes, Stack size 64 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init)) +

                          HAL_GPIO_Init (Thumb, 798 bytes, Stack size 64 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init))

                          [Stack]

                          • Max Depth = 64
                          • Call Chain = HAL_GPIO_Init
                          -
                          [Called By]
                          • >>   MX_GPIO_Init +
                            [Called By]
                            • >>   HAL_UART_MspInit +
                            • >>   MX_GPIO_Init
                            -

                            HAL_GPIO_WritePin (Thumb, 46 bytes, Stack size 8 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin)) +

                            HAL_GPIO_WritePin (Thumb, 46 bytes, Stack size 8 bytes, stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin))

                            [Stack]

                            • Max Depth = 8
                            • Call Chain = HAL_GPIO_WritePin
                            -
                            [Called By]
                            • >>   MX_GPIO_Init +
                              [Called By]
                              • >>   MX_GPIO_Init

                              HAL_GetTick (Thumb, 12 bytes, Stack size 0 bytes, stm32f1xx_hal.o(.text.HAL_GetTick))

                              [Called By]

                              • >>   HAL_RCC_ClockConfig -
                              • >>   HAL_RCC_OscConfig +
                              • >>   HAL_RCC_OscConfig
                              • >>   HAL_Delay
                              -

                              HAL_IncTick (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal.o(.text.HAL_IncTick)) +

                              HAL_IncTick (Thumb, 26 bytes, Stack size 0 bytes, stm32f1xx_hal.o(.text.HAL_IncTick))

                              [Called By]

                              • >>   SysTick_Handler
                              @@ -522,7 +541,28 @@ Global Symbols
                            • >>   HAL_GetTick
                            • >>   HAL_InitTick
                            -
                            [Called By]
                            • >>   SystemClock_Config +
                              [Called By]
                              • >>   SystemClock_Config +
                              + +

                              HAL_RCC_GetHCLKFreq (Thumb, 12 bytes, Stack size 0 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq)) +

                              [Called By]

                              • >>   HAL_RCC_GetPCLK2Freq +
                              • >>   HAL_RCC_GetPCLK1Freq +
                              + +

                              HAL_RCC_GetPCLK1Freq (Thumb, 34 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq)) +

                              [Stack]

                              • Max Depth = 8
                              • Call Chain = HAL_RCC_GetPCLK1Freq +
                              +
                              [Calls]
                              • >>   HAL_RCC_GetHCLKFreq +
                              +
                              [Called By]
                              • >>   UART_SetConfig +
                              + +

                              HAL_RCC_GetPCLK2Freq (Thumb, 34 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq)) +

                              [Stack]

                              • Max Depth = 8
                              • Call Chain = HAL_RCC_GetPCLK2Freq +
                              +
                              [Calls]
                              • >>   HAL_RCC_GetHCLKFreq +
                              +
                              [Called By]
                              • >>   UART_SetConfig

                              HAL_RCC_GetSysClockFreq (Thumb, 188 bytes, Stack size 24 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq)) @@ -531,74 +571,168 @@ Global Symbols
                              [Called By]

                              • >>   HAL_RCC_ClockConfig
                              -

                              HAL_RCC_OscConfig (Thumb, 1658 bytes, Stack size 32 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig)) +

                              HAL_RCC_OscConfig (Thumb, 1658 bytes, Stack size 32 bytes, stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig))

                              [Stack]

                              • Max Depth = 40
                              • Call Chain = HAL_RCC_OscConfig ⇒ RCC_Delay
                              -
                              [Calls]
                              • >>   RCC_Delay +
                                [Calls]
                                • >>   RCC_Delay
                                • >>   HAL_GetTick
                                -
                                [Called By]
                                • >>   SystemClock_Config +
                                  [Called By]
                                  • >>   SystemClock_Config

                                  HAL_SYSTICK_Config (Thumb, 16 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config))

                                  [Stack]

                                  • Max Depth = 40
                                  • Call Chain = HAL_SYSTICK_Config ⇒ SysTick_Config ⇒ __NVIC_SetPriority
                                  -
                                  [Calls]
                                  • >>   SysTick_Config +
                                    [Calls]
                                    • >>   SysTick_Config

                                    [Called By]
                                    • >>   HAL_InitTick
                                    -

                                    HAL_TIMEx_MasterConfigSynchronization (Thumb, 220 bytes, Stack size 20 bytes, stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization)) +

                                    HAL_TIMEx_MasterConfigSynchronization (Thumb, 220 bytes, Stack size 20 bytes, stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization))

                                    [Stack]

                                    • Max Depth = 20
                                    • Call Chain = HAL_TIMEx_MasterConfigSynchronization
                                    -
                                    [Called By]
                                    • >>   MX_TIM2_Init +
                                      [Called By]
                                      • >>   MX_TIM3_Init +
                                      • >>   MX_TIM2_Init
                                      -

                                      HAL_TIM_Base_Init (Thumb, 156 bytes, Stack size 16 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init)) +

                                      HAL_TIM_Base_Init (Thumb, 156 bytes, Stack size 16 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init))

                                      [Stack]

                                      • Max Depth = 28
                                      • Call Chain = HAL_TIM_Base_Init ⇒ TIM_Base_SetConfig
                                      -
                                      [Calls]
                                      • >>   TIM_Base_SetConfig -
                                      • >>   HAL_TIM_Base_MspInit +
                                        [Calls]
                                        • >>   TIM_Base_SetConfig +
                                        • >>   HAL_TIM_Base_MspInit
                                        -
                                        [Called By]
                                        • >>   MX_TIM2_Init +
                                          [Called By]
                                          • >>   MX_TIM3_Init +
                                          • >>   MX_TIM2_Init
                                          -

                                          HAL_TIM_Base_MspInit (Thumb, 52 bytes, Stack size 8 bytes, tim.o(.text.HAL_TIM_Base_MspInit)) -

                                          [Stack]

                                          • Max Depth = 8
                                          • Call Chain = HAL_TIM_Base_MspInit +

                                            HAL_TIM_Base_MspInit (Thumb, 104 bytes, Stack size 12 bytes, tim.o(.text.HAL_TIM_Base_MspInit)) +

                                            [Stack]

                                            • Max Depth = 12
                                            • Call Chain = HAL_TIM_Base_MspInit
                                            -
                                            [Called By]
                                            • >>   HAL_TIM_Base_Init +
                                              [Called By]
                                              • >>   HAL_TIM_Base_Init
                                              -

                                              HAL_TIM_ConfigClockSource (Thumb, 388 bytes, Stack size 32 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource)) +

                                              HAL_TIM_Base_Stop_IT (Thumb, 82 bytes, Stack size 4 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT)) +

                                              [Stack]

                                              • Max Depth = 4
                                              • Call Chain = HAL_TIM_Base_Stop_IT +
                                              +
                                              [Called By]
                                              • >>   RS_Abort +
                                              + +

                                              HAL_TIM_ConfigClockSource (Thumb, 388 bytes, Stack size 32 bytes, stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource))

                                              [Stack]

                                              • Max Depth = 52
                                              • Call Chain = HAL_TIM_ConfigClockSource ⇒ TIM_ETR_SetConfig
                                              -
                                              [Calls]
                                              • >>   TIM_ETR_SetConfig -
                                              • >>   TIM_TI2_ConfigInputStage -
                                              • >>   TIM_ITRx_SetConfig -
                                              • >>   TIM_TI1_ConfigInputStage +
                                                [Calls]
                                                • >>   TIM_ETR_SetConfig +
                                                • >>   TIM_TI2_ConfigInputStage +
                                                • >>   TIM_ITRx_SetConfig +
                                                • >>   TIM_TI1_ConfigInputStage
                                                -
                                                [Called By]
                                                • >>   MX_TIM2_Init +
                                                  [Called By]
                                                  • >>   MX_TIM3_Init +
                                                  • >>   MX_TIM2_Init +
                                                  + +

                                                  HAL_UART_Abort (Thumb, 406 bytes, Stack size 40 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_Abort)) +

                                                  [Stack]

                                                  • Max Depth = 52
                                                  • Call Chain = HAL_UART_Abort ⇒ HAL_DMA_Abort +
                                                  +
                                                  [Calls]
                                                  • >>   HAL_DMA_GetError +
                                                  • >>   HAL_DMA_Abort +
                                                  +
                                                  [Called By]
                                                  • >>   RS_Abort +
                                                  + +

                                                  HAL_UART_AbortReceive (Thumb, 278 bytes, Stack size 32 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive)) +

                                                  [Stack]

                                                  • Max Depth = 44
                                                  • Call Chain = HAL_UART_AbortReceive ⇒ HAL_DMA_Abort +
                                                  +
                                                  [Calls]
                                                  • >>   HAL_DMA_GetError +
                                                  • >>   HAL_DMA_Abort +
                                                  +
                                                  [Called By]
                                                  • >>   RS_Abort +
                                                  + +

                                                  HAL_UART_AbortTransmit (Thumb, 186 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit)) +

                                                  [Stack]

                                                  • Max Depth = 36
                                                  • Call Chain = HAL_UART_AbortTransmit ⇒ HAL_DMA_Abort +
                                                  +
                                                  [Calls]
                                                  • >>   HAL_DMA_GetError +
                                                  • >>   HAL_DMA_Abort +
                                                  +
                                                  [Called By]
                                                  • >>   RS_Abort +
                                                  + +

                                                  HAL_UART_Init (Thumb, 158 bytes, Stack size 16 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_Init)) +

                                                  [Stack]

                                                  • Max Depth = 128
                                                  • Call Chain = HAL_UART_Init ⇒ HAL_UART_MspInit ⇒ HAL_GPIO_Init +
                                                  +
                                                  [Calls]
                                                  • >>   UART_SetConfig +
                                                  • >>   HAL_UART_MspInit +
                                                  +
                                                  [Called By]
                                                  • >>   MX_USART1_UART_Init +
                                                  + +

                                                  HAL_UART_MspInit (Thumb, 152 bytes, Stack size 48 bytes, usart.o(.text.HAL_UART_MspInit)) +

                                                  [Stack]

                                                  • Max Depth = 112
                                                  • Call Chain = HAL_UART_MspInit ⇒ HAL_GPIO_Init +
                                                  +
                                                  [Calls]
                                                  • >>   HAL_GPIO_Init +
                                                  +
                                                  [Called By]
                                                  • >>   HAL_UART_Init +
                                                  + +

                                                  HAL_UART_Receive_IT (Thumb, 86 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT)) +

                                                  [Stack]

                                                  • Max Depth = 36
                                                  • Call Chain = HAL_UART_Receive_IT ⇒ UART_Start_Receive_IT +
                                                  +
                                                  [Calls]
                                                  • >>   UART_Start_Receive_IT +
                                                  +
                                                  [Called By]
                                                  • >>   RS_Receive_IT

                                                  HardFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.HardFault_Handler))
                                                  [Address Reference Count : 1]

                                                  • startup_stm32f103xb.o(RESET)
                                                  -

                                                  MX_GPIO_Init (Thumb, 182 bytes, Stack size 56 bytes, gpio.o(.text.MX_GPIO_Init)) -

                                                  [Stack]

                                                  • Max Depth = 120
                                                  • Call Chain = MX_GPIO_Init ⇒ HAL_GPIO_Init +

                                                    MB_DevoceInentificationInit (Thumb, 78 bytes, Stack size 0 bytes, modbus.o(.text.MB_DevoceInentificationInit)) +

                                                    [Called By]

                                                    • >>   MODBUS_FirstInit
                                                    -
                                                    [Calls]
                                                    • >>   HAL_GPIO_Init -
                                                    • >>   HAL_GPIO_WritePin + +

                                                      MODBUS_FirstInit (Thumb, 66 bytes, Stack size 16 bytes, modbus.o(.text.MODBUS_FirstInit)) +

                                                      [Stack]

                                                      • Max Depth = 36
                                                      • Call Chain = MODBUS_FirstInit ⇒ RS_Init +
                                                      +
                                                      [Calls]
                                                      • >>   RS_Init +
                                                      • >>   MB_DevoceInentificationInit

                                                      [Called By]
                                                      • >>   main
                                                      -

                                                      MX_TIM2_Init (Thumb, 126 bytes, Stack size 40 bytes, tim.o(.text.MX_TIM2_Init)) +

                                                      MX_GPIO_Init (Thumb, 182 bytes, Stack size 56 bytes, gpio.o(.text.MX_GPIO_Init)) +

                                                      [Stack]

                                                      • Max Depth = 120
                                                      • Call Chain = MX_GPIO_Init ⇒ HAL_GPIO_Init +
                                                      +
                                                      [Calls]
                                                      • >>   HAL_GPIO_Init +
                                                      • >>   HAL_GPIO_WritePin +
                                                      +
                                                      [Called By]
                                                      • >>   main +
                                                      + +

                                                      MX_TIM2_Init (Thumb, 126 bytes, Stack size 40 bytes, tim.o(.text.MX_TIM2_Init))

                                                      [Stack]

                                                      • Max Depth = 92
                                                      • Call Chain = MX_TIM2_Init ⇒ HAL_TIM_ConfigClockSource ⇒ TIM_ETR_SetConfig
                                                      -
                                                      [Calls]
                                                      • >>   HAL_TIMEx_MasterConfigSynchronization -
                                                      • >>   HAL_TIM_ConfigClockSource -
                                                      • >>   HAL_TIM_Base_Init -
                                                      • >>   Error_Handler +
                                                        [Calls]
                                                        • >>   HAL_TIMEx_MasterConfigSynchronization +
                                                        • >>   HAL_TIM_ConfigClockSource +
                                                        • >>   HAL_TIM_Base_Init +
                                                        • >>   Error_Handler +
                                                        +
                                                        [Called By]
                                                        • >>   main +
                                                        + +

                                                        MX_TIM3_Init (Thumb, 130 bytes, Stack size 40 bytes, tim.o(.text.MX_TIM3_Init)) +

                                                        [Stack]

                                                        • Max Depth = 92
                                                        • Call Chain = MX_TIM3_Init ⇒ HAL_TIM_ConfigClockSource ⇒ TIM_ETR_SetConfig +
                                                        +
                                                        [Calls]
                                                        • >>   HAL_TIMEx_MasterConfigSynchronization +
                                                        • >>   HAL_TIM_ConfigClockSource +
                                                        • >>   HAL_TIM_Base_Init +
                                                        • >>   Error_Handler +
                                                        +
                                                        [Called By]
                                                        • >>   main +
                                                        + +

                                                        MX_USART1_UART_Init (Thumb, 64 bytes, Stack size 16 bytes, usart.o(.text.MX_USART1_UART_Init)) +

                                                        [Stack]

                                                        • Max Depth = 144
                                                        • Call Chain = MX_USART1_UART_Init ⇒ HAL_UART_Init ⇒ HAL_UART_MspInit ⇒ HAL_GPIO_Init +
                                                        +
                                                        [Calls]
                                                        • >>   HAL_UART_Init +
                                                        • >>   Error_Handler

                                                        [Called By]
                                                        • >>   main
                                                        @@ -612,24 +746,50 @@ Global Symbols

                                                        PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.PendSV_Handler))
                                                        [Address Reference Count : 1]

                                                        • startup_stm32f103xb.o(RESET)
                                                        +

                                                        RS_Abort (Thumb, 348 bytes, Stack size 24 bytes, rs_message.o(.text.RS_Abort)) +

                                                        [Stack]

                                                        • Max Depth = 76
                                                        • Call Chain = RS_Abort ⇒ HAL_UART_Abort ⇒ HAL_DMA_Abort +
                                                        +
                                                        [Calls]
                                                        • >>   HAL_UART_AbortReceive +
                                                        • >>   HAL_UART_AbortTransmit +
                                                        • >>   HAL_UART_Abort +
                                                        • >>   HAL_TIM_Base_Stop_IT +
                                                        +
                                                        [Called By]
                                                        • >>   RS_Receive_IT +
                                                        + +

                                                        RS_Init (Thumb, 112 bytes, Stack size 20 bytes, rs_message.o(.text.RS_Init)) +

                                                        [Stack]

                                                        • Max Depth = 20
                                                        • Call Chain = RS_Init +
                                                        +
                                                        [Called By]
                                                        • >>   MODBUS_FirstInit +
                                                        + +

                                                        RS_Receive_IT (Thumb, 176 bytes, Stack size 24 bytes, rs_message.o(.text.RS_Receive_IT)) +

                                                        [Stack]

                                                        • Max Depth = 100
                                                        • Call Chain = RS_Receive_IT ⇒ RS_Abort ⇒ HAL_UART_Abort ⇒ HAL_DMA_Abort +
                                                        +
                                                        [Calls]
                                                        • >>   HAL_UART_Receive_IT +
                                                        • >>   RS_Abort +
                                                        +
                                                        [Called By]
                                                        • >>   main +
                                                        +

                                                        SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.SVC_Handler))
                                                        [Address Reference Count : 1]

                                                        • startup_stm32f103xb.o(RESET)

                                                        SysTick_Handler (Thumb, 8 bytes, Stack size 8 bytes, stm32f1xx_it.o(.text.SysTick_Handler))

                                                        [Stack]

                                                        • Max Depth = 8
                                                        • Call Chain = SysTick_Handler
                                                        -
                                                        [Calls]
                                                        • >>   HAL_IncTick +
                                                          [Calls]
                                                          • >>   HAL_IncTick

                                                          [Address Reference Count : 1]
                                                          • startup_stm32f103xb.o(RESET)
                                                          -

                                                          SystemClock_Config (Thumb, 108 bytes, Stack size 72 bytes, main.o(.text.SystemClock_Config)) +

                                                          SystemClock_Config (Thumb, 108 bytes, Stack size 72 bytes, main.o(.text.SystemClock_Config))

                                                          [Stack]

                                                          • Max Depth = 176 + Unknown Stack Size
                                                          • Call Chain = SystemClock_Config ⇒ HAL_RCC_ClockConfig ⇒ HAL_InitTick ⇒ HAL_NVIC_SetPriority ⇒ NVIC_EncodePriority
                                                          -
                                                          [Calls]
                                                          • >>   __aeabi_memclr4 -
                                                          • >>   HAL_RCC_ClockConfig -
                                                          • >>   Error_Handler -
                                                          • >>   HAL_RCC_OscConfig +
                                                            [Calls]
                                                            • >>   HAL_RCC_ClockConfig +
                                                            • >>   Error_Handler +
                                                            • >>   HAL_RCC_OscConfig +
                                                            • >>   __aeabi_memclr4

                                                            [Called By]
                                                            • >>   main
                                                            @@ -637,52 +797,58 @@ Global Symbols

                                                            SystemInit (Thumb, 2 bytes, Stack size 0 bytes, system_stm32f1xx.o(.text.SystemInit))
                                                            [Address Reference Count : 1]

                                                            • startup_stm32f103xb.o(.text)
                                                            -

                                                            TIM_Base_SetConfig (Thumb, 262 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig)) +

                                                            TIM_Base_SetConfig (Thumb, 262 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig))

                                                            [Stack]

                                                            • Max Depth = 12
                                                            • Call Chain = TIM_Base_SetConfig
                                                            -
                                                            [Called By]
                                                            • >>   HAL_TIM_Base_Init +
                                                              [Called By]
                                                              • >>   HAL_TIM_Base_Init
                                                              -

                                                              TIM_ETR_SetConfig (Thumb, 52 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig)) +

                                                              TIM_ETR_SetConfig (Thumb, 52 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig))

                                                              [Stack]

                                                              • Max Depth = 20
                                                              • Call Chain = TIM_ETR_SetConfig
                                                              -
                                                              [Called By]
                                                              • >>   HAL_TIM_ConfigClockSource +
                                                                [Called By]
                                                                • >>   HAL_TIM_ConfigClockSource +
                                                                + +

                                                                UART_Start_Receive_IT (Thumb, 98 bytes, Stack size 12 bytes, stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT)) +

                                                                [Stack]

                                                                • Max Depth = 12
                                                                • Call Chain = UART_Start_Receive_IT +
                                                                +
                                                                [Called By]
                                                                • >>   HAL_UART_Receive_IT

                                                                UsageFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f1xx_it.o(.text.UsageFault_Handler))
                                                                [Address Reference Count : 1]

                                                                • startup_stm32f103xb.o(RESET)
                                                                -

                                                                append_bit (Thumb, 48 bytes, Stack size 12 bytes, canform.o(.text.append_bit)) +

                                                                append_bit (Thumb, 48 bytes, Stack size 12 bytes, canform.o(.text.append_bit))

                                                                [Stack]

                                                                • Max Depth = 12
                                                                • Call Chain = append_bit
                                                                -
                                                                [Called By]
                                                                • >>   apply_bit_stuffing_with_error -
                                                                • >>   append_bits +
                                                                  [Called By]
                                                                  • >>   apply_bit_stuffing_with_error +
                                                                  • >>   append_bits
                                                                  • >>   form_CAN_bitstream_full
                                                                  -

                                                                  append_bits (Thumb, 64 bytes, Stack size 32 bytes, canform.o(.text.append_bits)) +

                                                                  append_bits (Thumb, 64 bytes, Stack size 32 bytes, canform.o(.text.append_bits))

                                                                  [Stack]

                                                                  • Max Depth = 44
                                                                  • Call Chain = append_bits ⇒ append_bit
                                                                  -
                                                                  [Calls]
                                                                  • >>   append_bit +
                                                                    [Calls]
                                                                    • >>   append_bit

                                                                    [Called By]
                                                                    • >>   form_CAN_bitstream_full
                                                                    -

                                                                    apply_bit_stuffing_with_error (Thumb, 196 bytes, Stack size 40 bytes, canform.o(.text.apply_bit_stuffing_with_error)) +

                                                                    apply_bit_stuffing_with_error (Thumb, 196 bytes, Stack size 40 bytes, canform.o(.text.apply_bit_stuffing_with_error))

                                                                    [Stack]

                                                                    • Max Depth = 52
                                                                    • Call Chain = apply_bit_stuffing_with_error ⇒ append_bit
                                                                    -
                                                                    [Calls]
                                                                    • >>   append_bit +
                                                                      [Calls]
                                                                      • >>   append_bit

                                                                      [Called By]
                                                                      • >>   form_CAN_bitstream_full
                                                                      -

                                                                      compute_crc15 (Thumb, 118 bytes, Stack size 20 bytes, canform.o(.text.compute_crc15)) +

                                                                      compute_crc15 (Thumb, 118 bytes, Stack size 20 bytes, canform.o(.text.compute_crc15))

                                                                      [Stack]

                                                                      • Max Depth = 20
                                                                      • Call Chain = compute_crc15

                                                                      [Called By]
                                                                      • >>   form_CAN_bitstream_full
                                                                      -

                                                                      flip_bit (Thumb, 48 bytes, Stack size 4 bytes, canform.o(.text.flip_bit)) +

                                                                      flip_bit (Thumb, 48 bytes, Stack size 4 bytes, canform.o(.text.flip_bit))

                                                                      [Stack]

                                                                      • Max Depth = 4
                                                                      • Call Chain = flip_bit

                                                                      [Called By]
                                                                      • >>   form_CAN_bitstream_full @@ -691,25 +857,29 @@ Global Symbols

                                                                        form_CAN_bitstream_full (Thumb, 978 bytes, Stack size 160 bytes, canform.o(.text.form_CAN_bitstream_full))

                                                                        [Stack]

                                                                        • Max Depth = 212
                                                                        • Call Chain = form_CAN_bitstream_full ⇒ apply_bit_stuffing_with_error ⇒ append_bit
                                                                        -
                                                                        [Calls]
                                                                        • >>   flip_bit -
                                                                        • >>   apply_bit_stuffing_with_error -
                                                                        • >>   compute_crc15 -
                                                                        • >>   append_bits -
                                                                        • >>   append_bit +
                                                                          [Calls]
                                                                          • >>   flip_bit +
                                                                          • >>   apply_bit_stuffing_with_error +
                                                                          • >>   compute_crc15 +
                                                                          • >>   append_bits +
                                                                          • >>   append_bit

                                                                          [Called By]
                                                                          • >>   CANEmu_SendFrame
                                                                          -

                                                                          main (Thumb, 76 bytes, Stack size 16 bytes, main.o(.text.main)) -

                                                                          [Stack]

                                                                          • Max Depth = 252 + Unknown Stack Size +

                                                                            main (Thumb, 488 bytes, Stack size 32 bytes, main.o(.text.main)) +

                                                                            [Stack]

                                                                            • Max Depth = 268 + Unknown Stack Size
                                                                            • Call Chain = main ⇒ CANEmu_SendFrame ⇒ form_CAN_bitstream_full ⇒ apply_bit_stuffing_with_error ⇒ append_bit

                                                                            [Calls]
                                                                            • >>   CANEmu_SendFrame
                                                                            • >>   HAL_Delay -
                                                                            • >>   CANEmu_Init -
                                                                            • >>   MX_TIM2_Init -
                                                                            • >>   MX_GPIO_Init -
                                                                            • >>   SystemClock_Config +
                                                                            • >>   RS_Receive_IT +
                                                                            • >>   MODBUS_FirstInit +
                                                                            • >>   CANEmu_Init +
                                                                            • >>   MX_USART1_UART_Init +
                                                                            • >>   MX_TIM3_Init +
                                                                            • >>   MX_TIM2_Init +
                                                                            • >>   MX_GPIO_Init +
                                                                            • >>   SystemClock_Config
                                                                            • >>   HAL_Init

                                                                            [Called By]
                                                                            • >>   __rt_entry_main @@ -724,28 +894,28 @@ Global Symbols

                                                                              Local Symbols

                                                                              -

                                                                              TIM_TI1_ConfigInputStage (Thumb, 80 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage)) +

                                                                              TIM_TI1_ConfigInputStage (Thumb, 80 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage))

                                                                              [Stack]

                                                                              • Max Depth = 20
                                                                              • Call Chain = TIM_TI1_ConfigInputStage
                                                                              -
                                                                              [Called By]
                                                                              • >>   HAL_TIM_ConfigClockSource +
                                                                                [Called By]
                                                                                • >>   HAL_TIM_ConfigClockSource
                                                                                -

                                                                                TIM_ITRx_SetConfig (Thumb, 42 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig)) +

                                                                                TIM_ITRx_SetConfig (Thumb, 42 bytes, Stack size 12 bytes, stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig))

                                                                                [Stack]

                                                                                • Max Depth = 12
                                                                                • Call Chain = TIM_ITRx_SetConfig
                                                                                -
                                                                                [Called By]
                                                                                • >>   HAL_TIM_ConfigClockSource +
                                                                                  [Called By]
                                                                                  • >>   HAL_TIM_ConfigClockSource
                                                                                  -

                                                                                  TIM_TI2_ConfigInputStage (Thumb, 82 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage)) +

                                                                                  TIM_TI2_ConfigInputStage (Thumb, 82 bytes, Stack size 20 bytes, stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage))

                                                                                  [Stack]

                                                                                  • Max Depth = 20
                                                                                  • Call Chain = TIM_TI2_ConfigInputStage
                                                                                  -
                                                                                  [Called By]
                                                                                  • >>   HAL_TIM_ConfigClockSource +
                                                                                    [Called By]
                                                                                    • >>   HAL_TIM_ConfigClockSource
                                                                                    -

                                                                                    RCC_Delay (Thumb, 58 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.RCC_Delay)) +

                                                                                    RCC_Delay (Thumb, 58 bytes, Stack size 8 bytes, stm32f1xx_hal_rcc.o(.text.RCC_Delay))

                                                                                    [Stack]

                                                                                    • Max Depth = 8
                                                                                    • Call Chain = RCC_Delay
                                                                                    -
                                                                                    [Called By]
                                                                                    • >>   HAL_RCC_OscConfig +
                                                                                      [Called By]
                                                                                      • >>   HAL_RCC_OscConfig

                                                                                      __NVIC_SetPriorityGrouping (Thumb, 60 bytes, Stack size 12 bytes, stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping)) @@ -767,17 +937,26 @@ Local Symbols

                                                                                      __NVIC_SetPriority (Thumb, 66 bytes, Stack size 8 bytes, stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority))

                                                                                      [Stack]

                                                                                      • Max Depth = 8
                                                                                      • Call Chain = __NVIC_SetPriority
                                                                                      -
                                                                                      [Called By]
                                                                                      • >>   SysTick_Config +
                                                                                        [Called By]
                                                                                        • >>   SysTick_Config
                                                                                        • >>   HAL_NVIC_SetPriority
                                                                                        -

                                                                                        SysTick_Config (Thumb, 82 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(.text.SysTick_Config)) +

                                                                                        SysTick_Config (Thumb, 82 bytes, Stack size 16 bytes, stm32f1xx_hal_cortex.o(.text.SysTick_Config))

                                                                                        [Stack]

                                                                                        • Max Depth = 24
                                                                                        • Call Chain = SysTick_Config ⇒ __NVIC_SetPriority

                                                                                        [Calls]
                                                                                        • >>   __NVIC_SetPriority

                                                                                        [Called By]
                                                                                        • >>   HAL_SYSTICK_Config
                                                                                        + +

                                                                                        UART_SetConfig (Thumb, 186 bytes, Stack size 24 bytes, stm32f1xx_hal_uart.o(.text.UART_SetConfig)) +

                                                                                        [Stack]

                                                                                        • Max Depth = 32
                                                                                        • Call Chain = UART_SetConfig ⇒ HAL_RCC_GetPCLK2Freq +
                                                                                        +
                                                                                        [Calls]
                                                                                        • >>   HAL_RCC_GetPCLK2Freq +
                                                                                        • >>   HAL_RCC_GetPCLK1Freq +
                                                                                        +
                                                                                        [Called By]
                                                                                        • >>   HAL_UART_Init +

                                                                                        Undefined Global Symbols diff --git a/MDK-ARM/CANEmu/CANEmu.lnp b/MDK-ARM/CANEmu/CANEmu.lnp index ec2a770..db636be 100644 --- a/MDK-ARM/CANEmu/CANEmu.lnp +++ b/MDK-ARM/CANEmu/CANEmu.lnp @@ -3,6 +3,7 @@ "canemu\main.o" "canemu\gpio.o" "canemu\tim.o" +"canemu\usart.o" "canemu\stm32f1xx_it.o" "canemu\stm32f1xx_hal_msp.o" "canemu\stm32f1xx_hal_gpio_ex.o" @@ -18,9 +19,13 @@ "canemu\stm32f1xx_hal_flash.o" "canemu\stm32f1xx_hal_flash_ex.o" "canemu\stm32f1xx_hal_exti.o" +"canemu\stm32f1xx_hal_uart.o" "canemu\system_stm32f1xx.o" "canemu\canemu.o" "canemu\canform.o" +"canemu\crc_algs.o" +"canemu\modbus.o" +"canemu\rs_message.o" --strict --scatter "CANEmu\CANEmu.sct" --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers diff --git a/MDK-ARM/CANEmu/CANEmu.map b/MDK-ARM/CANEmu/CANEmu.map index 4de6b23..a571c2e 100644 --- a/MDK-ARM/CANEmu/CANEmu.map +++ b/MDK-ARM/CANEmu/CANEmu.map @@ -27,8 +27,16 @@ Section Cross References main.o(.text.main) refers to main.o(.text.SystemClock_Config) for SystemClock_Config main.o(.text.main) refers to gpio.o(.text.MX_GPIO_Init) for MX_GPIO_Init main.o(.text.main) refers to tim.o(.text.MX_TIM2_Init) for MX_TIM2_Init + main.o(.text.main) refers to tim.o(.text.MX_TIM3_Init) for MX_TIM3_Init + main.o(.text.main) refers to usart.o(.text.MX_USART1_UART_Init) for MX_USART1_UART_Init main.o(.text.main) refers to main.o(.bss.hcanemu) for hcanemu main.o(.text.main) refers to canemu.o(.text.CANEmu_Init) for CANEmu_Init + main.o(.text.main) refers to modbus.o(.text.MODBUS_FirstInit) for MODBUS_FirstInit + main.o(.text.main) refers to modbus.o(.bss.hmodbus1) for hmodbus1 + main.o(.text.main) refers to modbus.o(.bss.MODBUS_MSG) for MODBUS_MSG + main.o(.text.main) refers to rs_message.o(.text.RS_Receive_IT) for RS_Receive_IT + main.o(.text.main) refers to main.o(.bss.flag_manual) for flag_manual + main.o(.text.main) refers to modbus.o(.bss.MB_DATA) for MB_DATA main.o(.text.main) refers to stm32f1xx_hal.o(.text.HAL_Delay) for HAL_Delay main.o(.text.main) refers to canemu.o(.text.CANEmu_SendFrame) for CANEmu_SendFrame main.o(.ARM.exidx.text.main) refers to main.o(.text.main) for [Anonymous Symbol] @@ -47,8 +55,22 @@ Section Cross References tim.o(.text.MX_TIM2_Init) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource tim.o(.text.MX_TIM2_Init) refers to stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization tim.o(.ARM.exidx.text.MX_TIM2_Init) refers to tim.o(.text.MX_TIM2_Init) for [Anonymous Symbol] + tim.o(.text.MX_TIM3_Init) refers to tim.o(.bss.htim3) for htim3 + tim.o(.text.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init) for HAL_TIM_Base_Init + tim.o(.text.MX_TIM3_Init) refers to main.o(.text.Error_Handler) for Error_Handler + tim.o(.text.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource + tim.o(.text.MX_TIM3_Init) refers to stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization + tim.o(.ARM.exidx.text.MX_TIM3_Init) refers to tim.o(.text.MX_TIM3_Init) for [Anonymous Symbol] tim.o(.ARM.exidx.text.HAL_TIM_Base_MspInit) refers to tim.o(.text.HAL_TIM_Base_MspInit) for [Anonymous Symbol] tim.o(.ARM.exidx.text.HAL_TIM_Base_MspDeInit) refers to tim.o(.text.HAL_TIM_Base_MspDeInit) for [Anonymous Symbol] + usart.o(.text.MX_USART1_UART_Init) refers to usart.o(.bss.huart1) for huart1 + usart.o(.text.MX_USART1_UART_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Init) for HAL_UART_Init + usart.o(.text.MX_USART1_UART_Init) refers to main.o(.text.Error_Handler) for Error_Handler + usart.o(.ARM.exidx.text.MX_USART1_UART_Init) refers to usart.o(.text.MX_USART1_UART_Init) for [Anonymous Symbol] + usart.o(.text.HAL_UART_MspInit) refers to stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init) for HAL_GPIO_Init + usart.o(.ARM.exidx.text.HAL_UART_MspInit) refers to usart.o(.text.HAL_UART_MspInit) for [Anonymous Symbol] + usart.o(.text.HAL_UART_MspDeInit) refers to stm32f1xx_hal_gpio.o(.text.HAL_GPIO_DeInit) for HAL_GPIO_DeInit + usart.o(.ARM.exidx.text.HAL_UART_MspDeInit) refers to usart.o(.text.HAL_UART_MspDeInit) for [Anonymous Symbol] stm32f1xx_it.o(.ARM.exidx.text.NMI_Handler) refers to stm32f1xx_it.o(.text.NMI_Handler) for [Anonymous Symbol] stm32f1xx_it.o(.ARM.exidx.text.HardFault_Handler) refers to stm32f1xx_it.o(.text.HardFault_Handler) for [Anonymous Symbol] stm32f1xx_it.o(.ARM.exidx.text.MemManage_Handler) refers to stm32f1xx_it.o(.text.MemManage_Handler) for [Anonymous Symbol] @@ -685,6 +707,143 @@ Section Cross References stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_GetPending) refers to stm32f1xx_hal_exti.o(.text.HAL_EXTI_GetPending) for [Anonymous Symbol] stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_ClearPending) refers to stm32f1xx_hal_exti.o(.text.HAL_EXTI_ClearPending) for [Anonymous Symbol] stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_GenerateSWI) refers to stm32f1xx_hal_exti.o(.text.HAL_EXTI_GenerateSWI) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(.text.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Init) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspInit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_MspInit) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq + stm32f1xx_hal_uart.o(.text.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq) for HAL_RCC_GetPCLK1Freq + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_SetConfig) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_LIN_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(.text.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_LIN_Init) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init) refers to usart.o(.text.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(.text.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_DeInit) refers to usart.o(.text.HAL_UART_MspDeInit) for HAL_UART_MspDeInit + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DeInit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DeInit) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspDeInit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_MspDeInit) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Receive) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(.text.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) for UART_Start_Receive_IT + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt) for UART_DMATransmitCplt + stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt) for UART_DMATxHalfCplt + stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMAError) for UART_DMAError + stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATransmitCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxHalfCpltCallback) for HAL_UART_TxHalfCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer) for UART_EndTxTransfer + stm32f1xx_hal_uart.o(.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAError) refers to stm32f1xx_hal_uart.o(.text.UART_DMAError) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) for UART_Start_Receive_DMA + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_DMA) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) for UART_DMAReceiveCplt + stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) for UART_DMARxHalfCplt + stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_DMAError) for UART_DMAError + stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAPause) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DMAPause) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAResume) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DMAResume) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer) for UART_EndTxTransfer + stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTxTransfer) refers to stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndRxTransfer) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal.o(.text.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) for UART_Start_Receive_IT + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA) for UART_Start_Receive_DMA + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_DMA) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_GetRxEventType) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_GetRxEventType) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback) for UART_DMATxAbortCallback + stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback) for UART_DMARxAbortCallback + stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback) for UART_DMATxOnlyAbortCallback + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmitCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback) for UART_DMARxOnlyAbortCallback + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceiveCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_Receive_IT) for UART_Receive_IT + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError) for UART_DMAAbortOnError + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_Transmit_IT) for UART_Transmit_IT + stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT) for UART_EndTransmit_IT + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(.text.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Receive_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_ErrorCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_RxEventCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Transmit_IT) refers to stm32f1xx_hal_uart.o(.text.UART_Transmit_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTransmit_IT) refers to stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxHalfCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_TxHalfCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxHalfCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxHalfCpltCallback) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_SendBreak) refers to stm32f1xx_hal_uart.o(.text.HAL_LIN_SendBreak) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_EnterMuteMode) refers to stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_EnterMuteMode) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_ExitMuteMode) refers to stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_ExitMuteMode) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableTransmitter) refers to stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableTransmitter) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableReceiver) refers to stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableReceiver) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetState) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_GetState) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetError) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_GetError) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt) for [Anonymous Symbol] + stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_RxHalfCpltCallback) for HAL_UART_RxHalfCpltCallback + stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt) for [Anonymous Symbol] system_stm32f1xx.o(.ARM.exidx.text.SystemInit) refers to system_stm32f1xx.o(.text.SystemInit) for [Anonymous Symbol] system_stm32f1xx.o(.text.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.data.SystemCoreClock) for SystemCoreClock system_stm32f1xx.o(.text.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.rodata.AHBPrescTable) for AHBPrescTable @@ -717,6 +876,117 @@ Section Cross References canform.o(.text.form_CAN_bitstream_full) refers to canform.o(.bss.can_bits_len) for can_bits_len canform.o(.text.form_CAN_bitstream_full) refers to canform.o(.text.apply_bit_stuffing_with_error) for apply_bit_stuffing_with_error canform.o(.ARM.exidx.text.form_CAN_bitstream_full) refers to canform.o(.text.form_CAN_bitstream_full) for [Anonymous Symbol] + crc_algs.o(.text.crc32) refers to crc_algs.o(.rodata.crc32.crc32_table) for crc32.crc32_table + crc_algs.o(.ARM.exidx.text.crc32) refers to crc_algs.o(.text.crc32) for [Anonymous Symbol] + crc_algs.o(.text.crc16) refers to crc_algs.o(.data.uchCRCHi) for uchCRCHi + crc_algs.o(.text.crc16) refers to crc_algs.o(.data.uchCRCLo) for uchCRCLo + crc_algs.o(.text.crc16) refers to crc_algs.o(.bss.uIndex) for uIndex + crc_algs.o(.text.crc16) refers to crc_algs.o(.data.crc16.auchCRCHi) for crc16.auchCRCHi + crc_algs.o(.text.crc16) refers to crc_algs.o(.data.crc16.auchCRCLo) for crc16.auchCRCLo + crc_algs.o(.ARM.exidx.text.crc16) refers to crc_algs.o(.text.crc16) for [Anonymous Symbol] + modbus.o(.text.MODBUS_FirstInit) refers to modbus.o(.text.MB_DevoceInentificationInit) for MB_DevoceInentificationInit + modbus.o(.text.MODBUS_FirstInit) refers to modbus.o(.bss.hmodbus1) for hmodbus1 + modbus.o(.text.MODBUS_FirstInit) refers to usart.o(.bss.huart1) for huart1 + modbus.o(.text.MODBUS_FirstInit) refers to tim.o(.bss.htim3) for htim3 + modbus.o(.text.MODBUS_FirstInit) refers to rs_message.o(.text.RS_Init) for RS_Init + modbus.o(.ARM.exidx.text.MODBUS_FirstInit) refers to modbus.o(.text.MODBUS_FirstInit) for [Anonymous Symbol] + modbus.o(.text.MB_DevoceInentificationInit) refers to modbus.o(.bss.MB_INFO) for MB_INFO + modbus.o(.text.MB_DevoceInentificationInit) refers to modbus.o(.rodata.str1.1) for .L.str + modbus.o(.ARM.exidx.text.MB_DevoceInentificationInit) refers to modbus.o(.text.MB_DevoceInentificationInit) for [Anonymous Symbol] + modbus.o(.text.MB_Write_Coil_Global) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress + modbus.o(.ARM.exidx.text.MB_Write_Coil_Global) refers to modbus.o(.text.MB_Write_Coil_Global) for [Anonymous Symbol] + modbus.o(.text.MB_DefineCoilsAddress) refers to modbus.o(.text.MB_Check_Address_For_Arr) for MB_Check_Address_For_Arr + modbus.o(.text.MB_DefineCoilsAddress) refers to modbus.o(.bss.MB_DATA) for MB_DATA + modbus.o(.ARM.exidx.text.MB_DefineCoilsAddress) refers to modbus.o(.text.MB_DefineCoilsAddress) for [Anonymous Symbol] + modbus.o(.text.MB_Read_Coil_Global) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress + modbus.o(.ARM.exidx.text.MB_Read_Coil_Global) refers to modbus.o(.text.MB_Read_Coil_Global) for [Anonymous Symbol] + modbus.o(.ARM.exidx.text.MB_Check_Address_For_Arr) refers to modbus.o(.text.MB_Check_Address_For_Arr) for [Anonymous Symbol] + modbus.o(.text.MB_DefineRegistersAddress) refers to modbus.o(.text.MB_Check_Address_For_Arr) for MB_Check_Address_For_Arr + modbus.o(.text.MB_DefineRegistersAddress) refers to modbus.o(.bss.MB_DATA) for MB_DATA + modbus.o(.ARM.exidx.text.MB_DefineRegistersAddress) refers to modbus.o(.text.MB_DefineRegistersAddress) for [Anonymous Symbol] + modbus.o(.text.MB_Read_Coils) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress + modbus.o(.ARM.exidx.text.MB_Read_Coils) refers to modbus.o(.text.MB_Read_Coils) for [Anonymous Symbol] + modbus.o(.text.MB_Read_Hold_Regs) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress + modbus.o(.ARM.exidx.text.MB_Read_Hold_Regs) refers to modbus.o(.text.MB_Read_Hold_Regs) for [Anonymous Symbol] + modbus.o(.text.MB_Read_Input_Regs) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress + modbus.o(.ARM.exidx.text.MB_Read_Input_Regs) refers to modbus.o(.text.MB_Read_Input_Regs) for [Anonymous Symbol] + modbus.o(.text.MB_Write_Single_Coil) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress + modbus.o(.ARM.exidx.text.MB_Write_Single_Coil) refers to modbus.o(.text.MB_Write_Single_Coil) for [Anonymous Symbol] + modbus.o(.text.MB_Write_Single_Reg) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress + modbus.o(.ARM.exidx.text.MB_Write_Single_Reg) refers to modbus.o(.text.MB_Write_Single_Reg) for [Anonymous Symbol] + modbus.o(.text.MB_Write_Miltuple_Coils) refers to modbus.o(.text.MB_DefineCoilsAddress) for MB_DefineCoilsAddress + modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Coils) refers to modbus.o(.text.MB_Write_Miltuple_Coils) for [Anonymous Symbol] + modbus.o(.text.MB_Write_Miltuple_Regs) refers to modbus.o(.text.MB_DefineRegistersAddress) for MB_DefineRegistersAddress + modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Regs) refers to modbus.o(.text.MB_Write_Miltuple_Regs) for [Anonymous Symbol] + modbus.o(.ARM.exidx.text.MB_WriteObjectToMessage) refers to modbus.o(.text.MB_WriteObjectToMessage) for [Anonymous Symbol] + modbus.o(.text.MB_Read_Device_Identification) refers to modbus.o(.bss.MB_INFO) for MB_INFO + modbus.o(.text.MB_Read_Device_Identification) refers to modbus.o(.text.MB_WriteObjectToMessage) for MB_WriteObjectToMessage + modbus.o(.ARM.exidx.text.MB_Read_Device_Identification) refers to modbus.o(.text.MB_Read_Device_Identification) for [Anonymous Symbol] + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Coils) for MB_Read_Coils + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Hold_Regs) for MB_Read_Hold_Regs + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Input_Regs) for MB_Read_Input_Regs + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Single_Coil) for MB_Write_Single_Coil + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Single_Reg) for MB_Write_Single_Reg + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Miltuple_Coils) for MB_Write_Miltuple_Coils + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Write_Miltuple_Regs) for MB_Write_Miltuple_Regs + modbus.o(.text.RS_Response) refers to modbus.o(.text.MB_Read_Device_Identification) for MB_Read_Device_Identification + modbus.o(.text.RS_Response) refers to rs_message.o(.text.RS_Abort) for RS_Abort + modbus.o(.text.RS_Response) refers to rs_message.o(.text.RS_Handle_Transmit_Start) for RS_Handle_Transmit_Start + modbus.o(.ARM.exidx.text.RS_Response) refers to modbus.o(.text.RS_Response) for [Anonymous Symbol] + modbus.o(.text.RS_Collect_Message) refers to crc_algs.o(.text.crc16) for crc16 + modbus.o(.ARM.exidx.text.RS_Collect_Message) refers to modbus.o(.text.RS_Collect_Message) for [Anonymous Symbol] + modbus.o(.text.RS_Parse_Message) refers to crc_algs.o(.text.crc16) for crc16 + modbus.o(.ARM.exidx.text.RS_Parse_Message) refers to modbus.o(.text.RS_Parse_Message) for [Anonymous Symbol] + modbus.o(.text.RS_Define_Size_of_RX_Message) refers to modbus.o(.text.RS_Parse_Message) for RS_Parse_Message + modbus.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message) refers to modbus.o(.text.RS_Define_Size_of_RX_Message) for [Anonymous Symbol] + rs_message.o(.text.RS_Receive_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) for HAL_UART_Receive_IT + rs_message.o(.text.RS_Receive_IT) refers to rs_message.o(.text.RS_Abort) for RS_Abort + rs_message.o(.ARM.exidx.text.RS_Receive_IT) refers to rs_message.o(.text.RS_Receive_IT) for [Anonymous Symbol] + rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT + rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) for HAL_UART_AbortReceive + rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) for HAL_UART_AbortTransmit + rs_message.o(.text.RS_Abort) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) for HAL_UART_Abort + rs_message.o(.ARM.exidx.text.RS_Abort) refers to rs_message.o(.text.RS_Abort) for [Anonymous Symbol] + rs_message.o(.text.RS_Transmit_IT) refers to modbus.o(.text.RS_Collect_Message) for RS_Collect_Message + rs_message.o(.text.RS_Transmit_IT) refers to rs_message.o(.text.RS_Abort) for RS_Abort + rs_message.o(.text.RS_Transmit_IT) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start + rs_message.o(.text.RS_Transmit_IT) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_IT) for HAL_UART_Transmit_IT + rs_message.o(.ARM.exidx.text.RS_Transmit_IT) refers to rs_message.o(.text.RS_Transmit_IT) for [Anonymous Symbol] + rs_message.o(.ARM.exidx.text.RS_Collect_Message) refers to rs_message.o(.text.RS_Collect_Message) for [Anonymous Symbol] + rs_message.o(.text.RS_Handle_Receive_Start) refers to rs_message.o(.text.RS_Receive_IT) for RS_Receive_IT + rs_message.o(.ARM.exidx.text.RS_Handle_Receive_Start) refers to rs_message.o(.text.RS_Handle_Receive_Start) for [Anonymous Symbol] + rs_message.o(.text.RS_Init) refers to rs_message.o(.bss.RS_Buffer) for RS_Buffer + rs_message.o(.ARM.exidx.text.RS_Init) refers to rs_message.o(.text.RS_Init) for [Anonymous Symbol] + rs_message.o(.text.RS_ReInit_UART) refers to rs_message.o(.text.RS_Abort) for RS_Abort + rs_message.o(.text.RS_ReInit_UART) refers to usart.o(.text.HAL_UART_MspDeInit) for HAL_UART_MspDeInit + rs_message.o(.text.RS_ReInit_UART) refers to usart.o(.text.MX_USART1_UART_Init) for MX_USART1_UART_Init + rs_message.o(.text.RS_ReInit_UART) refers to rs_message.o(.text.RS_Receive_IT) for RS_Receive_IT + rs_message.o(.ARM.exidx.text.RS_ReInit_UART) refers to rs_message.o(.text.RS_ReInit_UART) for [Anonymous Symbol] + rs_message.o(.text.RS_Handle_Transmit_Start) refers to rs_message.o(.text.RS_Transmit_IT) for RS_Transmit_IT + rs_message.o(.ARM.exidx.text.RS_Handle_Transmit_Start) refers to rs_message.o(.text.RS_Handle_Transmit_Start) for [Anonymous Symbol] + rs_message.o(.text.RS_UART_RxCpltCallback) refers to modbus.o(.text.RS_Define_Size_of_RX_Message) for RS_Define_Size_of_RX_Message + rs_message.o(.text.RS_UART_RxCpltCallback) refers to rs_message.o(.text.RS_Abort) for RS_Abort + rs_message.o(.text.RS_UART_RxCpltCallback) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start + rs_message.o(.text.RS_UART_RxCpltCallback) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT + rs_message.o(.text.RS_UART_RxCpltCallback) refers to modbus.o(.text.RS_Parse_Message) for RS_Parse_Message + rs_message.o(.text.RS_UART_RxCpltCallback) refers to modbus.o(.text.RS_Response) for RS_Response + rs_message.o(.text.RS_UART_RxCpltCallback) refers to stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) for HAL_UART_Receive_IT + rs_message.o(.ARM.exidx.text.RS_UART_RxCpltCallback) refers to rs_message.o(.text.RS_UART_RxCpltCallback) for [Anonymous Symbol] + rs_message.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message) refers to rs_message.o(.text.RS_Define_Size_of_RX_Message) for [Anonymous Symbol] + rs_message.o(.ARM.exidx.text.RS_Parse_Message) refers to rs_message.o(.text.RS_Parse_Message) for [Anonymous Symbol] + rs_message.o(.ARM.exidx.text.RS_Response) refers to rs_message.o(.text.RS_Response) for [Anonymous Symbol] + rs_message.o(.text.RS_UART_TxCpltCallback) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start + rs_message.o(.ARM.exidx.text.RS_UART_TxCpltCallback) refers to rs_message.o(.text.RS_UART_TxCpltCallback) for [Anonymous Symbol] + rs_message.o(.text.RS_UART_Handler) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Start_IT) for HAL_TIM_Base_Start_IT + rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_UART_RxCpltCallback) for RS_UART_RxCpltCallback + rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_UART_TxCpltCallback) for RS_UART_TxCpltCallback + rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_Abort) for RS_Abort + rs_message.o(.text.RS_UART_Handler) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start + rs_message.o(.ARM.exidx.text.RS_UART_Handler) refers to rs_message.o(.text.RS_UART_Handler) for [Anonymous Symbol] + rs_message.o(.text.RS_TIM_Handler) refers to stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) for HAL_TIM_Base_Stop_IT + rs_message.o(.text.RS_TIM_Handler) refers to rs_message.o(.text.RS_Abort) for RS_Abort + rs_message.o(.text.RS_TIM_Handler) refers to rs_message.o(.text.RS_Handle_Receive_Start) for RS_Handle_Receive_Start + rs_message.o(.ARM.exidx.text.RS_TIM_Handler) refers to rs_message.o(.text.RS_TIM_Handler) for [Anonymous Symbol] __main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main @@ -837,9 +1107,15 @@ Removing Unused input sections from the image. Removing gpio.o(.ARM.exidx.text.MX_GPIO_Init), (8 bytes). Removing tim.o(.text), (0 bytes). Removing tim.o(.ARM.exidx.text.MX_TIM2_Init), (8 bytes). + Removing tim.o(.ARM.exidx.text.MX_TIM3_Init), (8 bytes). Removing tim.o(.ARM.exidx.text.HAL_TIM_Base_MspInit), (8 bytes). - Removing tim.o(.text.HAL_TIM_Base_MspDeInit), (38 bytes). + Removing tim.o(.text.HAL_TIM_Base_MspDeInit), (76 bytes). Removing tim.o(.ARM.exidx.text.HAL_TIM_Base_MspDeInit), (8 bytes). + Removing usart.o(.text), (0 bytes). + Removing usart.o(.ARM.exidx.text.MX_USART1_UART_Init), (8 bytes). + Removing usart.o(.ARM.exidx.text.HAL_UART_MspInit), (8 bytes). + Removing usart.o(.text.HAL_UART_MspDeInit), (62 bytes). + Removing usart.o(.ARM.exidx.text.HAL_UART_MspDeInit), (8 bytes). Removing stm32f1xx_it.o(.text), (0 bytes). Removing stm32f1xx_it.o(.ARM.exidx.text.NMI_Handler), (8 bytes). Removing stm32f1xx_it.o(.ARM.exidx.text.HardFault_Handler), (8 bytes). @@ -874,7 +1150,6 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Stop), (8 bytes). Removing stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Start_IT), (176 bytes). Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Start_IT), (8 bytes). - Removing stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT), (82 bytes). Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Stop_IT), (8 bytes). Removing stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Start_DMA), (304 bytes). Removing stm32f1xx_hal_tim.o(.ARM.exidx.text.HAL_TIM_Base_Start_DMA), (8 bytes). @@ -1234,11 +1509,8 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_EnableCSS), (8 bytes). Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_DisableCSS), (12 bytes). Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_DisableCSS), (8 bytes). - Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq), (12 bytes). Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetHCLKFreq), (8 bytes). - Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq), (34 bytes). Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetPCLK1Freq), (8 bytes). - Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq), (34 bytes). Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetPCLK2Freq), (8 bytes). Removing stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetOscConfig), (302 bytes). Removing stm32f1xx_hal_rcc.o(.ARM.exidx.text.HAL_RCC_GetOscConfig), (8 bytes). @@ -1283,7 +1555,6 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.DMA_SetConfig), (8 bytes). Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_Start_IT), (202 bytes). Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_Start_IT), (8 bytes). - Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort), (124 bytes). Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_Abort), (8 bytes). Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort_IT), (284 bytes). Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_Abort_IT), (8 bytes). @@ -1297,7 +1568,6 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_UnRegisterCallback), (8 bytes). Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_GetState), (14 bytes). Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_GetState), (8 bytes). - Removing stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError), (12 bytes). Removing stm32f1xx_hal_dma.o(.ARM.exidx.text.HAL_DMA_GetError), (8 bytes). Removing stm32f1xx_hal_cortex.o(.text), (0 bytes). Removing stm32f1xx_hal_cortex.o(.ARM.exidx.text.HAL_NVIC_SetPriorityGrouping), (8 bytes). @@ -1469,11 +1739,128 @@ Removing Unused input sections from the image. Removing stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_ClearPending), (8 bytes). Removing stm32f1xx_hal_exti.o(.text.HAL_EXTI_GenerateSWI), (34 bytes). Removing stm32f1xx_hal_exti.o(.ARM.exidx.text.HAL_EXTI_GenerateSWI), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text), (0 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Init), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_MspInit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspInit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_SetConfig), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_Init), (158 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_Init), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_LIN_Init), (184 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_Init), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_Init), (202 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_Init), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DeInit), (100 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DeInit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_MspDeInit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_MspDeInit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit), (304 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_WaitOnFlagUntilTimeout), (218 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_WaitOnFlagUntilTimeout), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Receive), (318 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_IT), (114 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Transmit_DMA), (226 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Transmit_DMA), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMATransmitCplt), (122 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATransmitCplt), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMATxHalfCplt), (22 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxHalfCplt), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMAError), (124 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAError), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_DMA), (86 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Receive_DMA), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_Start_Receive_DMA), (268 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Start_Receive_DMA), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DMAPause), (230 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAPause), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DMAResume), (226 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAResume), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_DMAStop), (204 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_DMAStop), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_EndTxTransfer), (54 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTxTransfer), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_EndRxTransfer), (148 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndRxTransfer), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle), (448 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_IT), (194 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_ReceiveToIdle_DMA), (184 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_ReceiveToIdle_DMA), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_GetRxEventType), (12 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_GetRxEventType), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_Abort_IT), (478 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_Abort_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMATxAbortCallback), (86 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxAbortCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMARxAbortCallback), (86 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxAbortCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit_IT), (194 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmit_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMATxOnlyAbortCallback), (36 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMATxOnlyAbortCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmitCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortTransmitCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive_IT), (290 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceive_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMARxOnlyAbortCallback), (40 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxOnlyAbortCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceiveCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_AbortReceiveCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_IRQHandler), (1066 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_IRQHandler), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_Receive_IT), (362 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Receive_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMAAbortOnError), (32 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAAbortOnError), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_ErrorCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_ErrorCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UARTEx_RxEventCallback), (12 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UARTEx_RxEventCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_Transmit_IT), (148 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_Transmit_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_EndTransmit_IT), (38 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_EndTransmit_IT), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_TxCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_TxHalfCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_TxHalfCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_RxCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_RxHalfCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_RxHalfCpltCallback), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_LIN_SendBreak), (120 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_LIN_SendBreak), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_EnterMuteMode), (126 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_EnterMuteMode), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_MultiProcessor_ExitMuteMode), (126 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_MultiProcessor_ExitMuteMode), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableTransmitter), (118 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableTransmitter), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_HalfDuplex_EnableReceiver), (118 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_HalfDuplex_EnableReceiver), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_GetState), (40 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetState), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.HAL_UART_GetError), (12 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.HAL_UART_GetError), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMAReceiveCplt), (244 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMAReceiveCplt), (8 bytes). + Removing stm32f1xx_hal_uart.o(.text.UART_DMARxHalfCplt), (52 bytes). + Removing stm32f1xx_hal_uart.o(.ARM.exidx.text.UART_DMARxHalfCplt), (8 bytes). Removing system_stm32f1xx.o(.text), (0 bytes). Removing system_stm32f1xx.o(.ARM.exidx.text.SystemInit), (8 bytes). Removing system_stm32f1xx.o(.text.SystemCoreClockUpdate), (290 bytes). Removing system_stm32f1xx.o(.ARM.exidx.text.SystemCoreClockUpdate), (8 bytes). - Removing system_stm32f1xx.o(.rodata.APBPrescTable), (8 bytes). Removing canemu.o(.text), (0 bytes). Removing canemu.o(.ARM.exidx.text.CANEmu_Init), (8 bytes). Removing canemu.o(.ARM.exidx.text.wait_exact_ticks), (8 bytes). @@ -1486,8 +1873,91 @@ Removing Unused input sections from the image. Removing canform.o(.ARM.exidx.text.flip_bit), (8 bytes). Removing canform.o(.ARM.exidx.text.form_CAN_bitstream_full), (8 bytes). Removing canform.o(.bss.err_indices), (128 bytes). + Removing crc_algs.o(.text), (0 bytes). + Removing crc_algs.o(.text.crc32), (68 bytes). + Removing crc_algs.o(.ARM.exidx.text.crc32), (8 bytes). + Removing crc_algs.o(.text.crc16), (148 bytes). + Removing crc_algs.o(.ARM.exidx.text.crc16), (8 bytes). + Removing crc_algs.o(.data.uchCRCHi), (1 bytes). + Removing crc_algs.o(.data.uchCRCLo), (1 bytes). + Removing crc_algs.o(.rodata.crc32.crc32_table), (1024 bytes). + Removing crc_algs.o(.data.crc16.auchCRCHi), (256 bytes). + Removing crc_algs.o(.data.crc16.auchCRCLo), (256 bytes). + Removing crc_algs.o(.bss.uIndex), (4 bytes). + Removing crc_algs.o(.bss.CRC_calc), (4 bytes). + Removing crc_algs.o(.bss.CRC_ref), (4 bytes). + Removing modbus.o(.text), (0 bytes). + Removing modbus.o(.ARM.exidx.text.MODBUS_FirstInit), (8 bytes). + Removing modbus.o(.ARM.exidx.text.MB_DevoceInentificationInit), (8 bytes). + Removing modbus.o(.text.MB_Write_Coil_Global), (152 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Write_Coil_Global), (8 bytes). + Removing modbus.o(.text.MB_DefineCoilsAddress), (130 bytes). + Removing modbus.o(.ARM.exidx.text.MB_DefineCoilsAddress), (8 bytes). + Removing modbus.o(.text.MB_Read_Coil_Global), (98 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Read_Coil_Global), (8 bytes). + Removing modbus.o(.text.MB_Check_Address_For_Arr), (90 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Check_Address_For_Arr), (8 bytes). + Removing modbus.o(.text.MB_DefineRegistersAddress), (186 bytes). + Removing modbus.o(.ARM.exidx.text.MB_DefineRegistersAddress), (8 bytes). + Removing modbus.o(.text.MB_Read_Coils), (342 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Read_Coils), (8 bytes). + Removing modbus.o(.text.MB_Read_Hold_Regs), (114 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Read_Hold_Regs), (8 bytes). + Removing modbus.o(.text.MB_Read_Input_Regs), (148 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Read_Input_Regs), (8 bytes). + Removing modbus.o(.text.MB_Write_Single_Coil), (160 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Write_Single_Coil), (8 bytes). + Removing modbus.o(.text.MB_Write_Single_Reg), (68 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Write_Single_Reg), (8 bytes). + Removing modbus.o(.text.MB_Write_Miltuple_Coils), (380 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Coils), (8 bytes). + Removing modbus.o(.text.MB_Write_Miltuple_Regs), (136 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Write_Miltuple_Regs), (8 bytes). + Removing modbus.o(.text.MB_WriteObjectToMessage), (88 bytes). + Removing modbus.o(.ARM.exidx.text.MB_WriteObjectToMessage), (8 bytes). + Removing modbus.o(.text.MB_Read_Device_Identification), (304 bytes). + Removing modbus.o(.ARM.exidx.text.MB_Read_Device_Identification), (8 bytes). + Removing modbus.o(.text.RS_Response), (682 bytes). + Removing modbus.o(.ARM.exidx.text.RS_Response), (8 bytes). + Removing modbus.o(.text.RS_Collect_Message), (478 bytes). + Removing modbus.o(.ARM.exidx.text.RS_Collect_Message), (8 bytes). + Removing modbus.o(.text.RS_Parse_Message), (484 bytes). + Removing modbus.o(.ARM.exidx.text.RS_Parse_Message), (8 bytes). + Removing modbus.o(.text.RS_Define_Size_of_RX_Message), (150 bytes). + Removing modbus.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message), (8 bytes). + Removing modbus.o(.bss.dbg_temp), (4 bytes). + Removing modbus.o(.bss.dbg_temp2), (4 bytes). + Removing modbus.o(.bss.dbg_temp3), (4 bytes). + Removing rs_message.o(.text), (0 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Receive_IT), (8 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Abort), (8 bytes). + Removing rs_message.o(.text.RS_Transmit_IT), (206 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Transmit_IT), (8 bytes). + Removing rs_message.o(.text.RS_Collect_Message), (14 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Collect_Message), (8 bytes). + Removing rs_message.o(.text.RS_Handle_Receive_Start), (92 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Handle_Receive_Start), (8 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Init), (8 bytes). + Removing rs_message.o(.text.RS_ReInit_UART), (56 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_ReInit_UART), (8 bytes). + Removing rs_message.o(.text.RS_Handle_Transmit_Start), (60 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Handle_Transmit_Start), (8 bytes). + Removing rs_message.o(.text.RS_UART_RxCpltCallback), (474 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_UART_RxCpltCallback), (8 bytes). + Removing rs_message.o(.text.RS_Define_Size_of_RX_Message), (12 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Define_Size_of_RX_Message), (8 bytes). + Removing rs_message.o(.text.RS_Parse_Message), (14 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Parse_Message), (8 bytes). + Removing rs_message.o(.text.RS_Response), (12 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_Response), (8 bytes). + Removing rs_message.o(.text.RS_UART_TxCpltCallback), (80 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_UART_TxCpltCallback), (8 bytes). + Removing rs_message.o(.text.RS_UART_Handler), (222 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_UART_Handler), (8 bytes). + Removing rs_message.o(.text.RS_TIM_Handler), (34 bytes). + Removing rs_message.o(.ARM.exidx.text.RS_TIM_Handler), (8 bytes). -658 unused section(s) (total 47162 bytes) removed from the image. +858 unused section(s) (total 63074 bytes) removed from the image. ============================================================================== @@ -1552,9 +2022,12 @@ Image Symbol Table ../fplib/fpinit_empty.s 0x00000000 Number 0 fpinit_empty.o ABSOLUTE canEmu.c 0x00000000 Number 0 canemu.o ABSOLUTE canform.c 0x00000000 Number 0 canform.o ABSOLUTE + crc_algs.c 0x00000000 Number 0 crc_algs.o ABSOLUTE dc.s 0x00000000 Number 0 dc.o ABSOLUTE gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE main.c 0x00000000 Number 0 main.o ABSOLUTE + modbus.c 0x00000000 Number 0 modbus.o ABSOLUTE + rs_message.c 0x00000000 Number 0 rs_message.o ABSOLUTE startup_stm32f103xb.s 0x00000000 Number 0 startup_stm32f103xb.o ABSOLUTE stm32f1xx_hal.c 0x00000000 Number 0 stm32f1xx_hal.o ABSOLUTE stm32f1xx_hal_cortex.c 0x00000000 Number 0 stm32f1xx_hal_cortex.o ABSOLUTE @@ -1570,9 +2043,11 @@ Image Symbol Table stm32f1xx_hal_rcc_ex.c 0x00000000 Number 0 stm32f1xx_hal_rcc_ex.o ABSOLUTE stm32f1xx_hal_tim.c 0x00000000 Number 0 stm32f1xx_hal_tim.o ABSOLUTE stm32f1xx_hal_tim_ex.c 0x00000000 Number 0 stm32f1xx_hal_tim_ex.o ABSOLUTE + stm32f1xx_hal_uart.c 0x00000000 Number 0 stm32f1xx_hal_uart.o ABSOLUTE stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE system_stm32f1xx.c 0x00000000 Number 0 system_stm32f1xx.o ABSOLUTE tim.c 0x00000000 Number 0 tim.o ABSOLUTE + usart.c 0x00000000 Number 0 usart.o ABSOLUTE RESET 0x08000000 Section 236 startup_stm32f103xb.o(RESET) !!!main 0x080000ec Section 8 __main.o(!!!main) !!!scatter 0x080000f4 Section 52 __scatter.o(!!!scatter) @@ -1634,73 +2109,100 @@ Image Symbol Table [Anonymous Symbol] 0x080002bc Section 0 canemu.o(.text.CANEmu_SendFrame) [Anonymous Symbol] 0x0800038c Section 0 stm32f1xx_it.o(.text.DebugMon_Handler) [Anonymous Symbol] 0x08000390 Section 0 main.o(.text.Error_Handler) - [Anonymous Symbol] 0x080003a0 Section 0 stm32f1xx_hal.o(.text.HAL_Delay) - [Anonymous Symbol] 0x080003e4 Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init) - [Anonymous Symbol] 0x08000704 Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin) - [Anonymous Symbol] 0x08000734 Section 0 stm32f1xx_hal.o(.text.HAL_GetTick) - [Anonymous Symbol] 0x08000740 Section 0 stm32f1xx_hal.o(.text.HAL_IncTick) - [Anonymous Symbol] 0x0800075c Section 0 stm32f1xx_hal.o(.text.HAL_Init) - [Anonymous Symbol] 0x08000784 Section 0 stm32f1xx_hal.o(.text.HAL_InitTick) - [Anonymous Symbol] 0x080007f4 Section 0 stm32f1xx_hal_msp.o(.text.HAL_MspInit) - [Anonymous Symbol] 0x08000858 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority) - [Anonymous Symbol] 0x0800088c Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping) - [Anonymous Symbol] 0x0800089c Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig) - [Anonymous Symbol] 0x08000af4 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq) - [Anonymous Symbol] 0x08000bb0 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig) - [Anonymous Symbol] 0x0800122c Section 0 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config) - [Anonymous Symbol] 0x0800123c Section 0 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) - [Anonymous Symbol] 0x08001318 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init) - [Anonymous Symbol] 0x080013b4 Section 0 tim.o(.text.HAL_TIM_Base_MspInit) - [Anonymous Symbol] 0x080013e8 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) - [Anonymous Symbol] 0x0800156c Section 0 stm32f1xx_it.o(.text.HardFault_Handler) - [Anonymous Symbol] 0x08001570 Section 0 gpio.o(.text.MX_GPIO_Init) - [Anonymous Symbol] 0x08001628 Section 0 tim.o(.text.MX_TIM2_Init) - [Anonymous Symbol] 0x080016a8 Section 0 stm32f1xx_it.o(.text.MemManage_Handler) - [Anonymous Symbol] 0x080016ac Section 0 stm32f1xx_it.o(.text.NMI_Handler) - NVIC_EncodePriority 0x080016b1 Thumb Code 108 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority) - [Anonymous Symbol] 0x080016b0 Section 0 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority) - [Anonymous Symbol] 0x0800171c Section 0 stm32f1xx_it.o(.text.PendSV_Handler) - RCC_Delay 0x08001721 Thumb Code 58 stm32f1xx_hal_rcc.o(.text.RCC_Delay) - [Anonymous Symbol] 0x08001720 Section 0 stm32f1xx_hal_rcc.o(.text.RCC_Delay) - [Anonymous Symbol] 0x0800175c Section 0 stm32f1xx_it.o(.text.SVC_Handler) - SysTick_Config 0x08001761 Thumb Code 82 stm32f1xx_hal_cortex.o(.text.SysTick_Config) - [Anonymous Symbol] 0x08001760 Section 0 stm32f1xx_hal_cortex.o(.text.SysTick_Config) - [Anonymous Symbol] 0x080017b4 Section 0 stm32f1xx_it.o(.text.SysTick_Handler) - [Anonymous Symbol] 0x080017bc Section 0 main.o(.text.SystemClock_Config) - [Anonymous Symbol] 0x08001828 Section 0 system_stm32f1xx.o(.text.SystemInit) - [Anonymous Symbol] 0x0800182c Section 0 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig) - [Anonymous Symbol] 0x08001934 Section 0 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig) - TIM_ITRx_SetConfig 0x08001969 Thumb Code 42 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig) - [Anonymous Symbol] 0x08001968 Section 0 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig) - TIM_TI1_ConfigInputStage 0x08001995 Thumb Code 80 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage) - [Anonymous Symbol] 0x08001994 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage) - TIM_TI2_ConfigInputStage 0x080019e5 Thumb Code 82 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage) - [Anonymous Symbol] 0x080019e4 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage) - [Anonymous Symbol] 0x08001a38 Section 0 stm32f1xx_it.o(.text.UsageFault_Handler) - __NVIC_GetPriorityGrouping 0x08001a3d Thumb Code 16 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping) - [Anonymous Symbol] 0x08001a3c Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping) - __NVIC_SetPriority 0x08001a4d Thumb Code 66 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority) - [Anonymous Symbol] 0x08001a4c Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority) - __NVIC_SetPriorityGrouping 0x08001a91 Thumb Code 60 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping) - [Anonymous Symbol] 0x08001a90 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping) - [Anonymous Symbol] 0x08001acc Section 0 canform.o(.text.append_bit) - [Anonymous Symbol] 0x08001afc Section 0 canform.o(.text.append_bits) - [Anonymous Symbol] 0x08001b3c Section 0 canform.o(.text.apply_bit_stuffing_with_error) - [Anonymous Symbol] 0x08001c00 Section 0 canform.o(.text.compute_crc15) - [Anonymous Symbol] 0x08001c78 Section 0 canform.o(.text.flip_bit) - [Anonymous Symbol] 0x08001ca8 Section 0 canform.o(.text.form_CAN_bitstream_full) - [Anonymous Symbol] 0x0800207c Section 0 main.o(.text.main) - [Anonymous Symbol] 0x080020c8 Section 0 canemu.o(.text.wait_exact_ticks) - HAL_RCC_GetSysClockFreq.aPLLMULFactorTable 0x08002122 Data 16 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable) - [Anonymous Symbol] 0x08002122 Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable) - HAL_RCC_GetSysClockFreq.aPredivFactorTable 0x08002132 Data 2 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable) - [Anonymous Symbol] 0x08002132 Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable) + [Anonymous Symbol] 0x080003a0 Section 0 stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) + [Anonymous Symbol] 0x0800041c Section 0 stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) + [Anonymous Symbol] 0x08000428 Section 0 stm32f1xx_hal.o(.text.HAL_Delay) + [Anonymous Symbol] 0x0800046c Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init) + [Anonymous Symbol] 0x0800078c Section 0 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin) + [Anonymous Symbol] 0x080007bc Section 0 stm32f1xx_hal.o(.text.HAL_GetTick) + [Anonymous Symbol] 0x080007c8 Section 0 stm32f1xx_hal.o(.text.HAL_IncTick) + [Anonymous Symbol] 0x080007e4 Section 0 stm32f1xx_hal.o(.text.HAL_Init) + [Anonymous Symbol] 0x0800080c Section 0 stm32f1xx_hal.o(.text.HAL_InitTick) + [Anonymous Symbol] 0x0800087c Section 0 stm32f1xx_hal_msp.o(.text.HAL_MspInit) + [Anonymous Symbol] 0x080008e0 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority) + [Anonymous Symbol] 0x08000914 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping) + [Anonymous Symbol] 0x08000924 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig) + [Anonymous Symbol] 0x08000b7c Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq) + [Anonymous Symbol] 0x08000b88 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq) + [Anonymous Symbol] 0x08000bac Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq) + [Anonymous Symbol] 0x08000bd0 Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq) + [Anonymous Symbol] 0x08000c8c Section 0 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig) + [Anonymous Symbol] 0x08001308 Section 0 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config) + [Anonymous Symbol] 0x08001318 Section 0 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) + [Anonymous Symbol] 0x080013f4 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init) + [Anonymous Symbol] 0x08001490 Section 0 tim.o(.text.HAL_TIM_Base_MspInit) + [Anonymous Symbol] 0x080014f8 Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) + [Anonymous Symbol] 0x0800154c Section 0 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) + [Anonymous Symbol] 0x080016d0 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) + [Anonymous Symbol] 0x08001868 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) + [Anonymous Symbol] 0x08001980 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) + [Anonymous Symbol] 0x08001a3c Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_Init) + [Anonymous Symbol] 0x08001adc Section 0 usart.o(.text.HAL_UART_MspInit) + [Anonymous Symbol] 0x08001b74 Section 0 stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) + [Anonymous Symbol] 0x08001bcc Section 0 stm32f1xx_it.o(.text.HardFault_Handler) + [Anonymous Symbol] 0x08001bd0 Section 0 modbus.o(.text.MB_DevoceInentificationInit) + [Anonymous Symbol] 0x08001c20 Section 0 modbus.o(.text.MODBUS_FirstInit) + [Anonymous Symbol] 0x08001c64 Section 0 gpio.o(.text.MX_GPIO_Init) + [Anonymous Symbol] 0x08001d1c Section 0 tim.o(.text.MX_TIM2_Init) + [Anonymous Symbol] 0x08001d9c Section 0 tim.o(.text.MX_TIM3_Init) + [Anonymous Symbol] 0x08001e20 Section 0 usart.o(.text.MX_USART1_UART_Init) + [Anonymous Symbol] 0x08001e60 Section 0 stm32f1xx_it.o(.text.MemManage_Handler) + [Anonymous Symbol] 0x08001e64 Section 0 stm32f1xx_it.o(.text.NMI_Handler) + NVIC_EncodePriority 0x08001e69 Thumb Code 108 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority) + [Anonymous Symbol] 0x08001e68 Section 0 stm32f1xx_hal_cortex.o(.text.NVIC_EncodePriority) + [Anonymous Symbol] 0x08001ed4 Section 0 stm32f1xx_it.o(.text.PendSV_Handler) + RCC_Delay 0x08001ed9 Thumb Code 58 stm32f1xx_hal_rcc.o(.text.RCC_Delay) + [Anonymous Symbol] 0x08001ed8 Section 0 stm32f1xx_hal_rcc.o(.text.RCC_Delay) + [Anonymous Symbol] 0x08001f14 Section 0 rs_message.o(.text.RS_Abort) + [Anonymous Symbol] 0x08002070 Section 0 rs_message.o(.text.RS_Init) + [Anonymous Symbol] 0x080020e0 Section 0 rs_message.o(.text.RS_Receive_IT) + [Anonymous Symbol] 0x08002190 Section 0 stm32f1xx_it.o(.text.SVC_Handler) + SysTick_Config 0x08002195 Thumb Code 82 stm32f1xx_hal_cortex.o(.text.SysTick_Config) + [Anonymous Symbol] 0x08002194 Section 0 stm32f1xx_hal_cortex.o(.text.SysTick_Config) + [Anonymous Symbol] 0x080021e8 Section 0 stm32f1xx_it.o(.text.SysTick_Handler) + [Anonymous Symbol] 0x080021f0 Section 0 main.o(.text.SystemClock_Config) + [Anonymous Symbol] 0x0800225c Section 0 system_stm32f1xx.o(.text.SystemInit) + [Anonymous Symbol] 0x08002260 Section 0 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig) + [Anonymous Symbol] 0x08002368 Section 0 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig) + TIM_ITRx_SetConfig 0x0800239d Thumb Code 42 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig) + [Anonymous Symbol] 0x0800239c Section 0 stm32f1xx_hal_tim.o(.text.TIM_ITRx_SetConfig) + TIM_TI1_ConfigInputStage 0x080023c9 Thumb Code 80 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage) + [Anonymous Symbol] 0x080023c8 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI1_ConfigInputStage) + TIM_TI2_ConfigInputStage 0x08002419 Thumb Code 82 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage) + [Anonymous Symbol] 0x08002418 Section 0 stm32f1xx_hal_tim.o(.text.TIM_TI2_ConfigInputStage) + UART_SetConfig 0x0800246d Thumb Code 186 stm32f1xx_hal_uart.o(.text.UART_SetConfig) + [Anonymous Symbol] 0x0800246c Section 0 stm32f1xx_hal_uart.o(.text.UART_SetConfig) + [Anonymous Symbol] 0x08002528 Section 0 stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) + [Anonymous Symbol] 0x0800258c Section 0 stm32f1xx_it.o(.text.UsageFault_Handler) + __NVIC_GetPriorityGrouping 0x08002591 Thumb Code 16 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping) + [Anonymous Symbol] 0x08002590 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_GetPriorityGrouping) + __NVIC_SetPriority 0x080025a1 Thumb Code 66 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority) + [Anonymous Symbol] 0x080025a0 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriority) + __NVIC_SetPriorityGrouping 0x080025e5 Thumb Code 60 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping) + [Anonymous Symbol] 0x080025e4 Section 0 stm32f1xx_hal_cortex.o(.text.__NVIC_SetPriorityGrouping) + [Anonymous Symbol] 0x08002620 Section 0 canform.o(.text.append_bit) + [Anonymous Symbol] 0x08002650 Section 0 canform.o(.text.append_bits) + [Anonymous Symbol] 0x08002690 Section 0 canform.o(.text.apply_bit_stuffing_with_error) + [Anonymous Symbol] 0x08002754 Section 0 canform.o(.text.compute_crc15) + [Anonymous Symbol] 0x080027cc Section 0 canform.o(.text.flip_bit) + [Anonymous Symbol] 0x080027fc Section 0 canform.o(.text.form_CAN_bitstream_full) + [Anonymous Symbol] 0x08002bd0 Section 0 main.o(.text.main) + [Anonymous Symbol] 0x08002db8 Section 0 canemu.o(.text.wait_exact_ticks) + HAL_RCC_GetSysClockFreq.aPLLMULFactorTable 0x08002e1a Data 16 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable) + [Anonymous Symbol] 0x08002e1a Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable) + HAL_RCC_GetSysClockFreq.aPredivFactorTable 0x08002e2a Data 2 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable) + [Anonymous Symbol] 0x08002e2a Section 0 stm32f1xx_hal_rcc.o(.rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable) + .L.str.2 0x08002e2c Data 9 modbus.o(.rodata.str1.1) + [Anonymous Symbol] 0x08002e2c Section 0 modbus.o(.rodata.str1.1) + .L.str 0x08002e35 Data 7 modbus.o(.rodata.str1.1) + .L.str.3 0x08002e3c Data 10 modbus.o(.rodata.str1.1) + .L.str.1 0x08002e45 Data 1 modbus.o(.rodata.str1.1) .bss 0x20000010 Section 96 libspace.o(.bss) - Heap_Mem 0x200002f8 Data 512 startup_stm32f103xb.o(HEAP) - HEAP 0x200002f8 Section 512 startup_stm32f103xb.o(HEAP) - Stack_Mem 0x200004f8 Data 1024 startup_stm32f103xb.o(STACK) - STACK 0x200004f8 Section 1024 startup_stm32f103xb.o(STACK) - __initial_sp 0x200008f8 Data 0 startup_stm32f103xb.o(STACK) + Heap_Mem 0x20000638 Data 512 startup_stm32f103xb.o(HEAP) + HEAP 0x20000638 Section 512 startup_stm32f103xb.o(HEAP) + Stack_Mem 0x20000838 Data 1024 startup_stm32f103xb.o(STACK) + STACK 0x20000838 Section 1024 startup_stm32f103xb.o(STACK) + __initial_sp 0x20000c38 Data 0 startup_stm32f103xb.o(STACK) Global Symbols @@ -1855,62 +2357,91 @@ Image Symbol Table CANEmu_SendFrame 0x080002bd Thumb Code 208 canemu.o(.text.CANEmu_SendFrame) DebugMon_Handler 0x0800038d Thumb Code 2 stm32f1xx_it.o(.text.DebugMon_Handler) Error_Handler 0x08000391 Thumb Code 14 main.o(.text.Error_Handler) - HAL_Delay 0x080003a1 Thumb Code 66 stm32f1xx_hal.o(.text.HAL_Delay) - HAL_GPIO_Init 0x080003e5 Thumb Code 798 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init) - HAL_GPIO_WritePin 0x08000705 Thumb Code 46 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin) - HAL_GetTick 0x08000735 Thumb Code 12 stm32f1xx_hal.o(.text.HAL_GetTick) - HAL_IncTick 0x08000741 Thumb Code 26 stm32f1xx_hal.o(.text.HAL_IncTick) - HAL_Init 0x0800075d Thumb Code 38 stm32f1xx_hal.o(.text.HAL_Init) - HAL_InitTick 0x08000785 Thumb Code 112 stm32f1xx_hal.o(.text.HAL_InitTick) - HAL_MspInit 0x080007f5 Thumb Code 100 stm32f1xx_hal_msp.o(.text.HAL_MspInit) - HAL_NVIC_SetPriority 0x08000859 Thumb Code 50 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority) - HAL_NVIC_SetPriorityGrouping 0x0800088d Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping) - HAL_RCC_ClockConfig 0x0800089d Thumb Code 598 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig) - HAL_RCC_GetSysClockFreq 0x08000af5 Thumb Code 188 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq) - HAL_RCC_OscConfig 0x08000bb1 Thumb Code 1658 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig) - HAL_SYSTICK_Config 0x0800122d Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config) - HAL_TIMEx_MasterConfigSynchronization 0x0800123d Thumb Code 220 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) - HAL_TIM_Base_Init 0x08001319 Thumb Code 156 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init) - HAL_TIM_Base_MspInit 0x080013b5 Thumb Code 52 tim.o(.text.HAL_TIM_Base_MspInit) - HAL_TIM_ConfigClockSource 0x080013e9 Thumb Code 388 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) - HardFault_Handler 0x0800156d Thumb Code 4 stm32f1xx_it.o(.text.HardFault_Handler) - MX_GPIO_Init 0x08001571 Thumb Code 182 gpio.o(.text.MX_GPIO_Init) - MX_TIM2_Init 0x08001629 Thumb Code 126 tim.o(.text.MX_TIM2_Init) - MemManage_Handler 0x080016a9 Thumb Code 4 stm32f1xx_it.o(.text.MemManage_Handler) - NMI_Handler 0x080016ad Thumb Code 4 stm32f1xx_it.o(.text.NMI_Handler) - PendSV_Handler 0x0800171d Thumb Code 2 stm32f1xx_it.o(.text.PendSV_Handler) - SVC_Handler 0x0800175d Thumb Code 2 stm32f1xx_it.o(.text.SVC_Handler) - SysTick_Handler 0x080017b5 Thumb Code 8 stm32f1xx_it.o(.text.SysTick_Handler) - SystemClock_Config 0x080017bd Thumb Code 108 main.o(.text.SystemClock_Config) - SystemInit 0x08001829 Thumb Code 2 system_stm32f1xx.o(.text.SystemInit) - TIM_Base_SetConfig 0x0800182d Thumb Code 262 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig) - TIM_ETR_SetConfig 0x08001935 Thumb Code 52 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig) - UsageFault_Handler 0x08001a39 Thumb Code 4 stm32f1xx_it.o(.text.UsageFault_Handler) - append_bit 0x08001acd Thumb Code 48 canform.o(.text.append_bit) - append_bits 0x08001afd Thumb Code 64 canform.o(.text.append_bits) - apply_bit_stuffing_with_error 0x08001b3d Thumb Code 196 canform.o(.text.apply_bit_stuffing_with_error) - compute_crc15 0x08001c01 Thumb Code 118 canform.o(.text.compute_crc15) - flip_bit 0x08001c79 Thumb Code 48 canform.o(.text.flip_bit) - form_CAN_bitstream_full 0x08001ca9 Thumb Code 978 canform.o(.text.form_CAN_bitstream_full) - main 0x0800207d Thumb Code 76 main.o(.text.main) - wait_exact_ticks 0x080020c9 Thumb Code 74 canemu.o(.text.wait_exact_ticks) - AHBPrescTable 0x08002112 Data 16 system_stm32f1xx.o(.rodata.AHBPrescTable) - Region$$Table$$Base 0x08002134 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x08002154 Number 0 anon$$obj.o(Region$$Table) + HAL_DMA_Abort 0x080003a1 Thumb Code 124 stm32f1xx_hal_dma.o(.text.HAL_DMA_Abort) + HAL_DMA_GetError 0x0800041d Thumb Code 12 stm32f1xx_hal_dma.o(.text.HAL_DMA_GetError) + HAL_Delay 0x08000429 Thumb Code 66 stm32f1xx_hal.o(.text.HAL_Delay) + HAL_GPIO_Init 0x0800046d Thumb Code 798 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_Init) + HAL_GPIO_WritePin 0x0800078d Thumb Code 46 stm32f1xx_hal_gpio.o(.text.HAL_GPIO_WritePin) + HAL_GetTick 0x080007bd Thumb Code 12 stm32f1xx_hal.o(.text.HAL_GetTick) + HAL_IncTick 0x080007c9 Thumb Code 26 stm32f1xx_hal.o(.text.HAL_IncTick) + HAL_Init 0x080007e5 Thumb Code 38 stm32f1xx_hal.o(.text.HAL_Init) + HAL_InitTick 0x0800080d Thumb Code 112 stm32f1xx_hal.o(.text.HAL_InitTick) + HAL_MspInit 0x0800087d Thumb Code 100 stm32f1xx_hal_msp.o(.text.HAL_MspInit) + HAL_NVIC_SetPriority 0x080008e1 Thumb Code 50 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriority) + HAL_NVIC_SetPriorityGrouping 0x08000915 Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_NVIC_SetPriorityGrouping) + HAL_RCC_ClockConfig 0x08000925 Thumb Code 598 stm32f1xx_hal_rcc.o(.text.HAL_RCC_ClockConfig) + HAL_RCC_GetHCLKFreq 0x08000b7d Thumb Code 12 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetHCLKFreq) + HAL_RCC_GetPCLK1Freq 0x08000b89 Thumb Code 34 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK1Freq) + HAL_RCC_GetPCLK2Freq 0x08000bad Thumb Code 34 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetPCLK2Freq) + HAL_RCC_GetSysClockFreq 0x08000bd1 Thumb Code 188 stm32f1xx_hal_rcc.o(.text.HAL_RCC_GetSysClockFreq) + HAL_RCC_OscConfig 0x08000c8d Thumb Code 1658 stm32f1xx_hal_rcc.o(.text.HAL_RCC_OscConfig) + HAL_SYSTICK_Config 0x08001309 Thumb Code 16 stm32f1xx_hal_cortex.o(.text.HAL_SYSTICK_Config) + HAL_TIMEx_MasterConfigSynchronization 0x08001319 Thumb Code 220 stm32f1xx_hal_tim_ex.o(.text.HAL_TIMEx_MasterConfigSynchronization) + HAL_TIM_Base_Init 0x080013f5 Thumb Code 156 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Init) + HAL_TIM_Base_MspInit 0x08001491 Thumb Code 104 tim.o(.text.HAL_TIM_Base_MspInit) + HAL_TIM_Base_Stop_IT 0x080014f9 Thumb Code 82 stm32f1xx_hal_tim.o(.text.HAL_TIM_Base_Stop_IT) + HAL_TIM_ConfigClockSource 0x0800154d Thumb Code 388 stm32f1xx_hal_tim.o(.text.HAL_TIM_ConfigClockSource) + HAL_UART_Abort 0x080016d1 Thumb Code 406 stm32f1xx_hal_uart.o(.text.HAL_UART_Abort) + HAL_UART_AbortReceive 0x08001869 Thumb Code 278 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortReceive) + HAL_UART_AbortTransmit 0x08001981 Thumb Code 186 stm32f1xx_hal_uart.o(.text.HAL_UART_AbortTransmit) + HAL_UART_Init 0x08001a3d Thumb Code 158 stm32f1xx_hal_uart.o(.text.HAL_UART_Init) + HAL_UART_MspInit 0x08001add Thumb Code 152 usart.o(.text.HAL_UART_MspInit) + HAL_UART_Receive_IT 0x08001b75 Thumb Code 86 stm32f1xx_hal_uart.o(.text.HAL_UART_Receive_IT) + HardFault_Handler 0x08001bcd Thumb Code 4 stm32f1xx_it.o(.text.HardFault_Handler) + MB_DevoceInentificationInit 0x08001bd1 Thumb Code 78 modbus.o(.text.MB_DevoceInentificationInit) + MODBUS_FirstInit 0x08001c21 Thumb Code 66 modbus.o(.text.MODBUS_FirstInit) + MX_GPIO_Init 0x08001c65 Thumb Code 182 gpio.o(.text.MX_GPIO_Init) + MX_TIM2_Init 0x08001d1d Thumb Code 126 tim.o(.text.MX_TIM2_Init) + MX_TIM3_Init 0x08001d9d Thumb Code 130 tim.o(.text.MX_TIM3_Init) + MX_USART1_UART_Init 0x08001e21 Thumb Code 64 usart.o(.text.MX_USART1_UART_Init) + MemManage_Handler 0x08001e61 Thumb Code 4 stm32f1xx_it.o(.text.MemManage_Handler) + NMI_Handler 0x08001e65 Thumb Code 4 stm32f1xx_it.o(.text.NMI_Handler) + PendSV_Handler 0x08001ed5 Thumb Code 2 stm32f1xx_it.o(.text.PendSV_Handler) + RS_Abort 0x08001f15 Thumb Code 348 rs_message.o(.text.RS_Abort) + RS_Init 0x08002071 Thumb Code 112 rs_message.o(.text.RS_Init) + RS_Receive_IT 0x080020e1 Thumb Code 176 rs_message.o(.text.RS_Receive_IT) + SVC_Handler 0x08002191 Thumb Code 2 stm32f1xx_it.o(.text.SVC_Handler) + SysTick_Handler 0x080021e9 Thumb Code 8 stm32f1xx_it.o(.text.SysTick_Handler) + SystemClock_Config 0x080021f1 Thumb Code 108 main.o(.text.SystemClock_Config) + SystemInit 0x0800225d Thumb Code 2 system_stm32f1xx.o(.text.SystemInit) + TIM_Base_SetConfig 0x08002261 Thumb Code 262 stm32f1xx_hal_tim.o(.text.TIM_Base_SetConfig) + TIM_ETR_SetConfig 0x08002369 Thumb Code 52 stm32f1xx_hal_tim.o(.text.TIM_ETR_SetConfig) + UART_Start_Receive_IT 0x08002529 Thumb Code 98 stm32f1xx_hal_uart.o(.text.UART_Start_Receive_IT) + UsageFault_Handler 0x0800258d Thumb Code 4 stm32f1xx_it.o(.text.UsageFault_Handler) + append_bit 0x08002621 Thumb Code 48 canform.o(.text.append_bit) + append_bits 0x08002651 Thumb Code 64 canform.o(.text.append_bits) + apply_bit_stuffing_with_error 0x08002691 Thumb Code 196 canform.o(.text.apply_bit_stuffing_with_error) + compute_crc15 0x08002755 Thumb Code 118 canform.o(.text.compute_crc15) + flip_bit 0x080027cd Thumb Code 48 canform.o(.text.flip_bit) + form_CAN_bitstream_full 0x080027fd Thumb Code 978 canform.o(.text.form_CAN_bitstream_full) + main 0x08002bd1 Thumb Code 488 main.o(.text.main) + wait_exact_ticks 0x08002db9 Thumb Code 74 canemu.o(.text.wait_exact_ticks) + AHBPrescTable 0x08002e02 Data 16 system_stm32f1xx.o(.rodata.AHBPrescTable) + APBPrescTable 0x08002e12 Data 8 system_stm32f1xx.o(.rodata.APBPrescTable) + Region$$Table$$Base 0x08002e48 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08002e68 Number 0 anon$$obj.o(Region$$Table) SystemCoreClock 0x20000000 Data 4 system_stm32f1xx.o(.data.SystemCoreClock) uwTickFreq 0x20000004 Data 1 stm32f1xx_hal.o(.data.uwTickFreq) uwTickPrio 0x20000008 Data 4 stm32f1xx_hal.o(.data.uwTickPrio) __libspace_start 0x20000010 Data 96 libspace.o(.bss) CANEMU_BIT_TICKS 0x20000070 Data 4 canemu.o(.bss.CANEMU_BIT_TICKS) __temporary_stack_top$libspace 0x20000070 Data 0 libspace.o(.bss) - can_bits 0x20000074 Data 256 canform.o(.bss.can_bits) - can_bits_len 0x20000174 Data 4 canform.o(.bss.can_bits_len) - err_indices_count 0x20000178 Data 1 canform.o(.bss.err_indices_count) - hcanemu 0x2000017c Data 40 main.o(.bss.hcanemu) - htim2 0x200001a4 Data 72 tim.o(.bss.htim2) - raw_bits 0x200001ec Data 256 canform.o(.bss.raw_bits) - raw_len 0x200002ec Data 4 canform.o(.bss.raw_len) - uwTick 0x200002f0 Data 4 stm32f1xx_hal.o(.bss.uwTick) + MB_DATA 0x20000074 Data 60 modbus.o(.bss.MB_DATA) + MB_INFO 0x200000b0 Data 56 modbus.o(.bss.MB_INFO) + MODBUS_MSG 0x200000e8 Data 268 modbus.o(.bss.MODBUS_MSG) + RS_Buffer 0x200001f4 Data 259 rs_message.o(.bss.RS_Buffer) + can_bits 0x200002f7 Data 256 canform.o(.bss.can_bits) + can_bits_len 0x200003f8 Data 4 canform.o(.bss.can_bits_len) + err_indices_count 0x200003fc Data 1 canform.o(.bss.err_indices_count) + flag_manual 0x20000400 Data 4 main.o(.bss.flag_manual) + hcanemu 0x20000404 Data 44 main.o(.bss.hcanemu) + hmodbus1 0x20000430 Data 40 modbus.o(.bss.hmodbus1) + htim2 0x20000458 Data 72 tim.o(.bss.htim2) + htim3 0x200004a0 Data 72 tim.o(.bss.htim3) + huart1 0x200004e8 Data 72 usart.o(.bss.huart1) + raw_bits 0x20000530 Data 256 canform.o(.bss.raw_bits) + raw_len 0x20000630 Data 4 canform.o(.bss.raw_len) + uwTick 0x20000634 Data 4 stm32f1xx_hal.o(.bss.uwTick) @@ -1920,176 +2451,221 @@ Memory Map of the image Image Entry point : 0x080000ed - Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002168, Max: 0x00010000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002e78, Max: 0x00010000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002154, Max: 0x00010000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002e68, Max: 0x00010000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x08000000 0x08000000 0x000000ec Data RO 3 RESET startup_stm32f103xb.o - 0x080000ec 0x080000ec 0x00000008 Code RO 866 * !!!main c_w.l(__main.o) - 0x080000f4 0x080000f4 0x00000034 Code RO 1031 !!!scatter c_w.l(__scatter.o) - 0x08000128 0x08000128 0x0000001a Code RO 1033 !!handler_copy c_w.l(__scatter_copy.o) + 0x080000ec 0x080000ec 0x00000008 Code RO 1127 * !!!main c_w.l(__main.o) + 0x080000f4 0x080000f4 0x00000034 Code RO 1292 !!!scatter c_w.l(__scatter.o) + 0x08000128 0x08000128 0x0000001a Code RO 1294 !!handler_copy c_w.l(__scatter_copy.o) 0x08000142 0x08000142 0x00000002 PAD - 0x08000144 0x08000144 0x0000001c Code RO 1035 !!handler_zi c_w.l(__scatter_zi.o) - 0x08000160 0x08000160 0x00000002 Code RO 893 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) - 0x08000162 0x08000162 0x00000000 Code RO 900 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 902 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 904 .ARM.Collect$$libinit$$00000006 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 907 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 909 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 911 .ARM.Collect$$libinit$$00000010 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 914 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 916 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 918 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 920 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 922 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 924 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 926 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 928 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 930 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 932 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 934 .ARM.Collect$$libinit$$00000027 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 938 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 940 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 942 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000000 Code RO 944 .ARM.Collect$$libinit$$00000034 c_w.l(libinit2.o) - 0x08000162 0x08000162 0x00000002 Code RO 945 .ARM.Collect$$libinit$$00000035 c_w.l(libinit2.o) - 0x08000164 0x08000164 0x00000002 Code RO 967 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) - 0x08000166 0x08000166 0x00000000 Code RO 982 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 984 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 987 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 990 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 992 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000000 Code RO 995 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o) - 0x08000166 0x08000166 0x00000002 Code RO 996 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o) - 0x08000168 0x08000168 0x00000000 Code RO 868 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) - 0x08000168 0x08000168 0x00000000 Code RO 870 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) - 0x08000168 0x08000168 0x00000006 Code RO 882 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) - 0x0800016e 0x0800016e 0x00000000 Code RO 872 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) - 0x0800016e 0x0800016e 0x00000004 Code RO 873 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) - 0x08000172 0x08000172 0x00000000 Code RO 875 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) - 0x08000172 0x08000172 0x00000008 Code RO 876 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) - 0x0800017a 0x0800017a 0x00000002 Code RO 897 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) - 0x0800017c 0x0800017c 0x00000000 Code RO 947 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) - 0x0800017c 0x0800017c 0x00000004 Code RO 948 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) - 0x08000180 0x08000180 0x00000006 Code RO 949 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x08000144 0x08000144 0x0000001c Code RO 1296 !!handler_zi c_w.l(__scatter_zi.o) + 0x08000160 0x08000160 0x00000002 Code RO 1154 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x08000162 0x08000162 0x00000000 Code RO 1161 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1163 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1165 .ARM.Collect$$libinit$$00000006 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1168 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1170 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1172 .ARM.Collect$$libinit$$00000010 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1175 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1177 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1179 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1181 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1183 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1185 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1187 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1189 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1191 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1193 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1195 .ARM.Collect$$libinit$$00000027 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1199 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1201 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1203 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000000 Code RO 1205 .ARM.Collect$$libinit$$00000034 c_w.l(libinit2.o) + 0x08000162 0x08000162 0x00000002 Code RO 1206 .ARM.Collect$$libinit$$00000035 c_w.l(libinit2.o) + 0x08000164 0x08000164 0x00000002 Code RO 1228 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x08000166 0x08000166 0x00000000 Code RO 1243 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1245 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1248 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1251 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1253 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000000 Code RO 1256 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o) + 0x08000166 0x08000166 0x00000002 Code RO 1257 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o) + 0x08000168 0x08000168 0x00000000 Code RO 1129 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x08000168 0x08000168 0x00000000 Code RO 1131 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x08000168 0x08000168 0x00000006 Code RO 1143 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x0800016e 0x0800016e 0x00000000 Code RO 1133 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x0800016e 0x0800016e 0x00000004 Code RO 1134 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x08000172 0x08000172 0x00000000 Code RO 1136 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x08000172 0x08000172 0x00000008 Code RO 1137 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x0800017a 0x0800017a 0x00000002 Code RO 1158 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x0800017c 0x0800017c 0x00000000 Code RO 1208 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x0800017c 0x0800017c 0x00000004 Code RO 1209 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x08000180 0x08000180 0x00000006 Code RO 1210 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) 0x08000186 0x08000186 0x00000002 PAD 0x08000188 0x08000188 0x00000040 Code RO 4 .text startup_stm32f103xb.o - 0x080001c8 0x080001c8 0x0000004e Code RO 862 .text c_w.l(rt_memclr_w.o) - 0x08000216 0x08000216 0x00000006 Code RO 864 .text c_w.l(heapauxi.o) - 0x0800021c 0x0800021c 0x0000004a Code RO 884 .text c_w.l(sys_stackheap_outer.o) - 0x08000266 0x08000266 0x00000012 Code RO 886 .text c_w.l(exit.o) - 0x08000278 0x08000278 0x00000008 Code RO 894 .text c_w.l(libspace.o) - 0x08000280 0x08000280 0x0000000c Code RO 957 .text c_w.l(sys_exit.o) - 0x0800028c 0x0800028c 0x00000002 Code RO 972 .text c_w.l(use_no_semi.o) - 0x0800028e 0x0800028e 0x00000000 Code RO 974 .text c_w.l(indicate_semi.o) + 0x080001c8 0x080001c8 0x0000004e Code RO 1123 .text c_w.l(rt_memclr_w.o) + 0x08000216 0x08000216 0x00000006 Code RO 1125 .text c_w.l(heapauxi.o) + 0x0800021c 0x0800021c 0x0000004a Code RO 1145 .text c_w.l(sys_stackheap_outer.o) + 0x08000266 0x08000266 0x00000012 Code RO 1147 .text c_w.l(exit.o) + 0x08000278 0x08000278 0x00000008 Code RO 1155 .text c_w.l(libspace.o) + 0x08000280 0x08000280 0x0000000c Code RO 1218 .text c_w.l(sys_exit.o) + 0x0800028c 0x0800028c 0x00000002 Code RO 1233 .text c_w.l(use_no_semi.o) + 0x0800028e 0x0800028e 0x00000000 Code RO 1235 .text c_w.l(indicate_semi.o) 0x0800028e 0x0800028e 0x00000002 PAD - 0x08000290 0x08000290 0x00000004 Code RO 54 .text.BusFault_Handler stm32f1xx_it.o - 0x08000294 0x08000294 0x00000028 Code RO 822 .text.CANEmu_Init canemu.o - 0x080002bc 0x080002bc 0x000000d0 Code RO 826 .text.CANEmu_SendFrame canemu.o - 0x0800038c 0x0800038c 0x00000002 Code RO 60 .text.DebugMon_Handler stm32f1xx_it.o + 0x08000290 0x08000290 0x00000004 Code RO 72 .text.BusFault_Handler stm32f1xx_it.o + 0x08000294 0x08000294 0x00000028 Code RO 971 .text.CANEmu_Init canemu.o + 0x080002bc 0x080002bc 0x000000d0 Code RO 975 .text.CANEmu_SendFrame canemu.o + 0x0800038c 0x0800038c 0x00000002 Code RO 78 .text.DebugMon_Handler stm32f1xx_it.o 0x0800038e 0x0800038e 0x00000002 PAD 0x08000390 0x08000390 0x0000000e Code RO 15 .text.Error_Handler main.o 0x0800039e 0x0800039e 0x00000002 PAD - 0x080003a0 0x080003a0 0x00000042 Code RO 450 .text.HAL_Delay stm32f1xx_hal.o - 0x080003e2 0x080003e2 0x00000002 PAD - 0x080003e4 0x080003e4 0x0000031e Code RO 544 .text.HAL_GPIO_Init stm32f1xx_hal_gpio.o - 0x08000702 0x08000702 0x00000002 PAD - 0x08000704 0x08000704 0x0000002e Code RO 550 .text.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o - 0x08000732 0x08000732 0x00000002 PAD - 0x08000734 0x08000734 0x0000000c Code RO 442 .text.HAL_GetTick stm32f1xx_hal.o - 0x08000740 0x08000740 0x0000001a Code RO 440 .text.HAL_IncTick stm32f1xx_hal.o - 0x0800075a 0x0800075a 0x00000002 PAD - 0x0800075c 0x0800075c 0x00000026 Code RO 430 .text.HAL_Init stm32f1xx_hal.o - 0x08000782 0x08000782 0x00000002 PAD - 0x08000784 0x08000784 0x00000070 Code RO 432 .text.HAL_InitTick stm32f1xx_hal.o - 0x080007f4 0x080007f4 0x00000064 Code RO 73 .text.HAL_MspInit stm32f1xx_hal_msp.o - 0x08000858 0x08000858 0x00000032 Code RO 604 .text.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o - 0x0800088a 0x0800088a 0x00000002 PAD - 0x0800088c 0x0800088c 0x00000010 Code RO 600 .text.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o - 0x0800089c 0x0800089c 0x00000256 Code RO 496 .text.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o - 0x08000af2 0x08000af2 0x00000002 PAD - 0x08000af4 0x08000af4 0x000000bc Code RO 498 .text.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o - 0x08000bb0 0x08000bb0 0x0000067a Code RO 492 .text.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o - 0x0800122a 0x0800122a 0x00000002 PAD - 0x0800122c 0x0800122c 0x00000010 Code RO 624 .text.HAL_SYSTICK_Config stm32f1xx_hal_cortex.o - 0x0800123c 0x0800123c 0x000000dc Code RO 407 .text.HAL_TIMEx_MasterConfigSynchronization stm32f1xx_hal_tim_ex.o - 0x08001318 0x08001318 0x0000009c Code RO 94 .text.HAL_TIM_Base_Init stm32f1xx_hal_tim.o - 0x080013b4 0x080013b4 0x00000034 Code RO 36 .text.HAL_TIM_Base_MspInit tim.o - 0x080013e8 0x080013e8 0x00000184 Code RO 286 .text.HAL_TIM_ConfigClockSource stm32f1xx_hal_tim.o - 0x0800156c 0x0800156c 0x00000004 Code RO 50 .text.HardFault_Handler stm32f1xx_it.o - 0x08001570 0x08001570 0x000000b6 Code RO 26 .text.MX_GPIO_Init gpio.o - 0x08001626 0x08001626 0x00000002 PAD - 0x08001628 0x08001628 0x0000007e Code RO 34 .text.MX_TIM2_Init tim.o - 0x080016a6 0x080016a6 0x00000002 PAD - 0x080016a8 0x080016a8 0x00000004 Code RO 52 .text.MemManage_Handler stm32f1xx_it.o - 0x080016ac 0x080016ac 0x00000004 Code RO 48 .text.NMI_Handler stm32f1xx_it.o - 0x080016b0 0x080016b0 0x0000006c Code RO 610 .text.NVIC_EncodePriority stm32f1xx_hal_cortex.o - 0x0800171c 0x0800171c 0x00000002 Code RO 62 .text.PendSV_Handler stm32f1xx_it.o - 0x0800171e 0x0800171e 0x00000002 PAD - 0x08001720 0x08001720 0x0000003a Code RO 494 .text.RCC_Delay stm32f1xx_hal_rcc.o - 0x0800175a 0x0800175a 0x00000002 PAD - 0x0800175c 0x0800175c 0x00000002 Code RO 58 .text.SVC_Handler stm32f1xx_it.o - 0x0800175e 0x0800175e 0x00000002 PAD - 0x08001760 0x08001760 0x00000052 Code RO 626 .text.SysTick_Config stm32f1xx_hal_cortex.o - 0x080017b2 0x080017b2 0x00000002 PAD - 0x080017b4 0x080017b4 0x00000008 Code RO 64 .text.SysTick_Handler stm32f1xx_it.o - 0x080017bc 0x080017bc 0x0000006c Code RO 13 .text.SystemClock_Config main.o - 0x08001828 0x08001828 0x00000002 Code RO 808 .text.SystemInit system_stm32f1xx.o - 0x0800182a 0x0800182a 0x00000002 PAD - 0x0800182c 0x0800182c 0x00000106 Code RO 98 .text.TIM_Base_SetConfig stm32f1xx_hal_tim.o - 0x08001932 0x08001932 0x00000002 PAD - 0x08001934 0x08001934 0x00000034 Code RO 284 .text.TIM_ETR_SetConfig stm32f1xx_hal_tim.o - 0x08001968 0x08001968 0x0000002a Code RO 290 .text.TIM_ITRx_SetConfig stm32f1xx_hal_tim.o - 0x08001992 0x08001992 0x00000002 PAD - 0x08001994 0x08001994 0x00000050 Code RO 288 .text.TIM_TI1_ConfigInputStage stm32f1xx_hal_tim.o - 0x080019e4 0x080019e4 0x00000052 Code RO 292 .text.TIM_TI2_ConfigInputStage stm32f1xx_hal_tim.o - 0x08001a36 0x08001a36 0x00000002 PAD - 0x08001a38 0x08001a38 0x00000004 Code RO 56 .text.UsageFault_Handler stm32f1xx_it.o - 0x08001a3c 0x08001a3c 0x00000010 Code RO 606 .text.__NVIC_GetPriorityGrouping stm32f1xx_hal_cortex.o - 0x08001a4c 0x08001a4c 0x00000042 Code RO 608 .text.__NVIC_SetPriority stm32f1xx_hal_cortex.o - 0x08001a8e 0x08001a8e 0x00000002 PAD - 0x08001a90 0x08001a90 0x0000003c Code RO 602 .text.__NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o - 0x08001acc 0x08001acc 0x00000030 Code RO 836 .text.append_bit canform.o - 0x08001afc 0x08001afc 0x00000040 Code RO 838 .text.append_bits canform.o - 0x08001b3c 0x08001b3c 0x000000c4 Code RO 842 .text.apply_bit_stuffing_with_error canform.o - 0x08001c00 0x08001c00 0x00000076 Code RO 840 .text.compute_crc15 canform.o - 0x08001c76 0x08001c76 0x00000002 PAD - 0x08001c78 0x08001c78 0x00000030 Code RO 844 .text.flip_bit canform.o - 0x08001ca8 0x08001ca8 0x000003d2 Code RO 846 .text.form_CAN_bitstream_full canform.o - 0x0800207a 0x0800207a 0x00000002 PAD - 0x0800207c 0x0800207c 0x0000004c Code RO 11 .text.main main.o - 0x080020c8 0x080020c8 0x0000004a Code RO 824 .text.wait_exact_ticks canemu.o - 0x08002112 0x08002112 0x00000010 Data RO 813 .rodata.AHBPrescTable system_stm32f1xx.o - 0x08002122 0x08002122 0x00000010 Data RO 520 .rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable stm32f1xx_hal_rcc.o - 0x08002132 0x08002132 0x00000002 Data RO 521 .rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable stm32f1xx_hal_rcc.o - 0x08002134 0x08002134 0x00000020 Data RO 1030 Region$$Table anon$$obj.o + 0x080003a0 0x080003a0 0x0000007c Code RO 595 .text.HAL_DMA_Abort stm32f1xx_hal_dma.o + 0x0800041c 0x0800041c 0x0000000c Code RO 609 .text.HAL_DMA_GetError stm32f1xx_hal_dma.o + 0x08000428 0x08000428 0x00000042 Code RO 468 .text.HAL_Delay stm32f1xx_hal.o + 0x0800046a 0x0800046a 0x00000002 PAD + 0x0800046c 0x0800046c 0x0000031e Code RO 562 .text.HAL_GPIO_Init stm32f1xx_hal_gpio.o + 0x0800078a 0x0800078a 0x00000002 PAD + 0x0800078c 0x0800078c 0x0000002e Code RO 568 .text.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o + 0x080007ba 0x080007ba 0x00000002 PAD + 0x080007bc 0x080007bc 0x0000000c Code RO 460 .text.HAL_GetTick stm32f1xx_hal.o + 0x080007c8 0x080007c8 0x0000001a Code RO 458 .text.HAL_IncTick stm32f1xx_hal.o + 0x080007e2 0x080007e2 0x00000002 PAD + 0x080007e4 0x080007e4 0x00000026 Code RO 448 .text.HAL_Init stm32f1xx_hal.o + 0x0800080a 0x0800080a 0x00000002 PAD + 0x0800080c 0x0800080c 0x00000070 Code RO 450 .text.HAL_InitTick stm32f1xx_hal.o + 0x0800087c 0x0800087c 0x00000064 Code RO 91 .text.HAL_MspInit stm32f1xx_hal_msp.o + 0x080008e0 0x080008e0 0x00000032 Code RO 622 .text.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o + 0x08000912 0x08000912 0x00000002 PAD + 0x08000914 0x08000914 0x00000010 Code RO 618 .text.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o + 0x08000924 0x08000924 0x00000256 Code RO 514 .text.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o + 0x08000b7a 0x08000b7a 0x00000002 PAD + 0x08000b7c 0x08000b7c 0x0000000c Code RO 524 .text.HAL_RCC_GetHCLKFreq stm32f1xx_hal_rcc.o + 0x08000b88 0x08000b88 0x00000022 Code RO 526 .text.HAL_RCC_GetPCLK1Freq stm32f1xx_hal_rcc.o + 0x08000baa 0x08000baa 0x00000002 PAD + 0x08000bac 0x08000bac 0x00000022 Code RO 528 .text.HAL_RCC_GetPCLK2Freq stm32f1xx_hal_rcc.o + 0x08000bce 0x08000bce 0x00000002 PAD + 0x08000bd0 0x08000bd0 0x000000bc Code RO 516 .text.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o + 0x08000c8c 0x08000c8c 0x0000067a Code RO 510 .text.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o + 0x08001306 0x08001306 0x00000002 PAD + 0x08001308 0x08001308 0x00000010 Code RO 642 .text.HAL_SYSTICK_Config stm32f1xx_hal_cortex.o + 0x08001318 0x08001318 0x000000dc Code RO 425 .text.HAL_TIMEx_MasterConfigSynchronization stm32f1xx_hal_tim_ex.o + 0x080013f4 0x080013f4 0x0000009c Code RO 112 .text.HAL_TIM_Base_Init stm32f1xx_hal_tim.o + 0x08001490 0x08001490 0x00000068 Code RO 39 .text.HAL_TIM_Base_MspInit tim.o + 0x080014f8 0x080014f8 0x00000052 Code RO 128 .text.HAL_TIM_Base_Stop_IT stm32f1xx_hal_tim.o + 0x0800154a 0x0800154a 0x00000002 PAD + 0x0800154c 0x0800154c 0x00000184 Code RO 304 .text.HAL_TIM_ConfigClockSource stm32f1xx_hal_tim.o + 0x080016d0 0x080016d0 0x00000196 Code RO 884 .text.HAL_UART_Abort stm32f1xx_hal_uart.o + 0x08001866 0x08001866 0x00000002 PAD + 0x08001868 0x08001868 0x00000116 Code RO 888 .text.HAL_UART_AbortReceive stm32f1xx_hal_uart.o + 0x0800197e 0x0800197e 0x00000002 PAD + 0x08001980 0x08001980 0x000000ba Code RO 886 .text.HAL_UART_AbortTransmit stm32f1xx_hal_uart.o + 0x08001a3a 0x08001a3a 0x00000002 PAD + 0x08001a3c 0x08001a3c 0x0000009e Code RO 826 .text.HAL_UART_Init stm32f1xx_hal_uart.o + 0x08001ada 0x08001ada 0x00000002 PAD + 0x08001adc 0x08001adc 0x00000098 Code RO 54 .text.HAL_UART_MspInit usart.o + 0x08001b74 0x08001b74 0x00000056 Code RO 850 .text.HAL_UART_Receive_IT stm32f1xx_hal_uart.o + 0x08001bca 0x08001bca 0x00000002 PAD + 0x08001bcc 0x08001bcc 0x00000004 Code RO 68 .text.HardFault_Handler stm32f1xx_it.o + 0x08001bd0 0x08001bd0 0x0000004e Code RO 1031 .text.MB_DevoceInentificationInit modbus.o + 0x08001c1e 0x08001c1e 0x00000002 PAD + 0x08001c20 0x08001c20 0x00000042 Code RO 1029 .text.MODBUS_FirstInit modbus.o + 0x08001c62 0x08001c62 0x00000002 PAD + 0x08001c64 0x08001c64 0x000000b6 Code RO 27 .text.MX_GPIO_Init gpio.o + 0x08001d1a 0x08001d1a 0x00000002 PAD + 0x08001d1c 0x08001d1c 0x0000007e Code RO 35 .text.MX_TIM2_Init tim.o + 0x08001d9a 0x08001d9a 0x00000002 PAD + 0x08001d9c 0x08001d9c 0x00000082 Code RO 37 .text.MX_TIM3_Init tim.o + 0x08001e1e 0x08001e1e 0x00000002 PAD + 0x08001e20 0x08001e20 0x00000040 Code RO 52 .text.MX_USART1_UART_Init usart.o + 0x08001e60 0x08001e60 0x00000004 Code RO 70 .text.MemManage_Handler stm32f1xx_it.o + 0x08001e64 0x08001e64 0x00000004 Code RO 66 .text.NMI_Handler stm32f1xx_it.o + 0x08001e68 0x08001e68 0x0000006c Code RO 628 .text.NVIC_EncodePriority stm32f1xx_hal_cortex.o + 0x08001ed4 0x08001ed4 0x00000002 Code RO 80 .text.PendSV_Handler stm32f1xx_it.o + 0x08001ed6 0x08001ed6 0x00000002 PAD + 0x08001ed8 0x08001ed8 0x0000003a Code RO 512 .text.RCC_Delay stm32f1xx_hal_rcc.o + 0x08001f12 0x08001f12 0x00000002 PAD + 0x08001f14 0x08001f14 0x0000015c Code RO 1086 .text.RS_Abort rs_message.o + 0x08002070 0x08002070 0x00000070 Code RO 1094 .text.RS_Init rs_message.o + 0x080020e0 0x080020e0 0x000000b0 Code RO 1084 .text.RS_Receive_IT rs_message.o + 0x08002190 0x08002190 0x00000002 Code RO 76 .text.SVC_Handler stm32f1xx_it.o + 0x08002192 0x08002192 0x00000002 PAD + 0x08002194 0x08002194 0x00000052 Code RO 644 .text.SysTick_Config stm32f1xx_hal_cortex.o + 0x080021e6 0x080021e6 0x00000002 PAD + 0x080021e8 0x080021e8 0x00000008 Code RO 82 .text.SysTick_Handler stm32f1xx_it.o + 0x080021f0 0x080021f0 0x0000006c Code RO 13 .text.SystemClock_Config main.o + 0x0800225c 0x0800225c 0x00000002 Code RO 957 .text.SystemInit system_stm32f1xx.o + 0x0800225e 0x0800225e 0x00000002 PAD + 0x08002260 0x08002260 0x00000106 Code RO 116 .text.TIM_Base_SetConfig stm32f1xx_hal_tim.o + 0x08002366 0x08002366 0x00000002 PAD + 0x08002368 0x08002368 0x00000034 Code RO 302 .text.TIM_ETR_SetConfig stm32f1xx_hal_tim.o + 0x0800239c 0x0800239c 0x0000002a Code RO 308 .text.TIM_ITRx_SetConfig stm32f1xx_hal_tim.o + 0x080023c6 0x080023c6 0x00000002 PAD + 0x080023c8 0x080023c8 0x00000050 Code RO 306 .text.TIM_TI1_ConfigInputStage stm32f1xx_hal_tim.o + 0x08002418 0x08002418 0x00000052 Code RO 310 .text.TIM_TI2_ConfigInputStage stm32f1xx_hal_tim.o + 0x0800246a 0x0800246a 0x00000002 PAD + 0x0800246c 0x0800246c 0x000000ba Code RO 830 .text.UART_SetConfig stm32f1xx_hal_uart.o + 0x08002526 0x08002526 0x00000002 PAD + 0x08002528 0x08002528 0x00000062 Code RO 852 .text.UART_Start_Receive_IT stm32f1xx_hal_uart.o + 0x0800258a 0x0800258a 0x00000002 PAD + 0x0800258c 0x0800258c 0x00000004 Code RO 74 .text.UsageFault_Handler stm32f1xx_it.o + 0x08002590 0x08002590 0x00000010 Code RO 624 .text.__NVIC_GetPriorityGrouping stm32f1xx_hal_cortex.o + 0x080025a0 0x080025a0 0x00000042 Code RO 626 .text.__NVIC_SetPriority stm32f1xx_hal_cortex.o + 0x080025e2 0x080025e2 0x00000002 PAD + 0x080025e4 0x080025e4 0x0000003c Code RO 620 .text.__NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o + 0x08002620 0x08002620 0x00000030 Code RO 985 .text.append_bit canform.o + 0x08002650 0x08002650 0x00000040 Code RO 987 .text.append_bits canform.o + 0x08002690 0x08002690 0x000000c4 Code RO 991 .text.apply_bit_stuffing_with_error canform.o + 0x08002754 0x08002754 0x00000076 Code RO 989 .text.compute_crc15 canform.o + 0x080027ca 0x080027ca 0x00000002 PAD + 0x080027cc 0x080027cc 0x00000030 Code RO 993 .text.flip_bit canform.o + 0x080027fc 0x080027fc 0x000003d2 Code RO 995 .text.form_CAN_bitstream_full canform.o + 0x08002bce 0x08002bce 0x00000002 PAD + 0x08002bd0 0x08002bd0 0x000001e8 Code RO 11 .text.main main.o + 0x08002db8 0x08002db8 0x0000004a Code RO 973 .text.wait_exact_ticks canemu.o + 0x08002e02 0x08002e02 0x00000010 Data RO 962 .rodata.AHBPrescTable system_stm32f1xx.o + 0x08002e12 0x08002e12 0x00000008 Data RO 963 .rodata.APBPrescTable system_stm32f1xx.o + 0x08002e1a 0x08002e1a 0x00000010 Data RO 538 .rodata.HAL_RCC_GetSysClockFreq.aPLLMULFactorTable stm32f1xx_hal_rcc.o + 0x08002e2a 0x08002e2a 0x00000002 Data RO 539 .rodata.HAL_RCC_GetSysClockFreq.aPredivFactorTable stm32f1xx_hal_rcc.o + 0x08002e2c 0x08002e2c 0x0000001a Data RO 1072 .rodata.str1.1 modbus.o + 0x08002e46 0x08002e46 0x00000002 PAD + 0x08002e48 0x08002e48 0x00000020 Data RO 1291 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002158, Size: 0x000008f8, Max: 0x00005000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002e68, Size: 0x00000c38, Max: 0x00005000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x08002158 0x00000004 Data RW 812 .data.SystemCoreClock system_stm32f1xx.o - 0x20000004 0x0800215c 0x00000001 Data RW 481 .data.uwTickFreq stm32f1xx_hal.o - 0x20000005 0x0800215d 0x00000003 PAD - 0x20000008 0x08002160 0x00000004 Data RW 480 .data.uwTickPrio stm32f1xx_hal.o - 0x2000000c 0x08002164 0x00000004 PAD - 0x20000010 - 0x00000060 Zero RW 895 .bss c_w.l(libspace.o) - 0x20000070 - 0x00000004 Zero RW 828 .bss.CANEMU_BIT_TICKS canemu.o - 0x20000074 - 0x00000100 Zero RW 852 .bss.can_bits canform.o - 0x20000174 - 0x00000004 Zero RW 849 .bss.can_bits_len canform.o - 0x20000178 - 0x00000001 Zero RW 850 .bss.err_indices_count canform.o - 0x20000179 0x08002164 0x00000003 PAD - 0x2000017c - 0x00000028 Zero RW 17 .bss.hcanemu main.o - 0x200001a4 - 0x00000048 Zero RW 40 .bss.htim2 tim.o - 0x200001ec - 0x00000100 Zero RW 851 .bss.raw_bits canform.o - 0x200002ec - 0x00000004 Zero RW 848 .bss.raw_len canform.o - 0x200002f0 - 0x00000004 Zero RW 482 .bss.uwTick stm32f1xx_hal.o - 0x200002f4 0x08002164 0x00000004 PAD - 0x200002f8 - 0x00000200 Zero RW 2 HEAP startup_stm32f103xb.o - 0x200004f8 - 0x00000400 Zero RW 1 STACK startup_stm32f103xb.o + 0x20000000 0x08002e68 0x00000004 Data RW 961 .data.SystemCoreClock system_stm32f1xx.o + 0x20000004 0x08002e6c 0x00000001 Data RW 499 .data.uwTickFreq stm32f1xx_hal.o + 0x20000005 0x08002e6d 0x00000003 PAD + 0x20000008 0x08002e70 0x00000004 Data RW 498 .data.uwTickPrio stm32f1xx_hal.o + 0x2000000c 0x08002e74 0x00000004 PAD + 0x20000010 - 0x00000060 Zero RW 1156 .bss c_w.l(libspace.o) + 0x20000070 - 0x00000004 Zero RW 977 .bss.CANEMU_BIT_TICKS canemu.o + 0x20000074 - 0x0000003c Zero RW 1070 .bss.MB_DATA modbus.o + 0x200000b0 - 0x00000038 Zero RW 1071 .bss.MB_INFO modbus.o + 0x200000e8 - 0x0000010c Zero RW 1076 .bss.MODBUS_MSG modbus.o + 0x200001f4 - 0x00000103 Zero RW 1114 .bss.RS_Buffer rs_message.o + 0x200002f7 - 0x00000100 Zero RW 1001 .bss.can_bits canform.o + 0x200003f7 0x08002e74 0x00000001 PAD + 0x200003f8 - 0x00000004 Zero RW 998 .bss.can_bits_len canform.o + 0x200003fc - 0x00000001 Zero RW 999 .bss.err_indices_count canform.o + 0x200003fd 0x08002e74 0x00000003 PAD + 0x20000400 - 0x00000004 Zero RW 17 .bss.flag_manual main.o + 0x20000404 - 0x0000002c Zero RW 18 .bss.hcanemu main.o + 0x20000430 - 0x00000028 Zero RW 1069 .bss.hmodbus1 modbus.o + 0x20000458 - 0x00000048 Zero RW 43 .bss.htim2 tim.o + 0x200004a0 - 0x00000048 Zero RW 44 .bss.htim3 tim.o + 0x200004e8 - 0x00000048 Zero RW 58 .bss.huart1 usart.o + 0x20000530 - 0x00000100 Zero RW 1000 .bss.raw_bits canform.o + 0x20000630 - 0x00000004 Zero RW 997 .bss.raw_len canform.o + 0x20000634 - 0x00000004 Zero RW 500 .bss.uwTick stm32f1xx_hal.o + 0x20000638 - 0x00000200 Zero RW 2 HEAP startup_stm32f103xb.o + 0x20000838 - 0x00000400 Zero RW 1 STACK startup_stm32f103xb.o ============================================================================== @@ -2099,26 +2675,31 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name - 322 0 0 0 4 2724 canemu.o + 322 0 0 0 4 2746 canemu.o 1452 0 0 0 521 4078 canform.o 182 0 0 0 0 1516 gpio.o - 198 0 0 0 40 2510 main.o + 610 0 0 0 48 2785 main.o + 144 0 26 0 424 15875 modbus.o + 636 0 0 0 259 10566 rs_message.o 64 26 236 0 1536 780 startup_stm32f103xb.o 254 0 0 5 4 5537 stm32f1xx_hal.o 414 0 0 0 0 7488 stm32f1xx_hal_cortex.o + 136 0 0 0 0 6248 stm32f1xx_hal_dma.o 844 0 0 0 0 4192 stm32f1xx_hal_gpio.o 100 0 0 0 0 1176 stm32f1xx_hal_msp.o - 2502 0 18 0 0 7388 stm32f1xx_hal_rcc.o - 1062 0 0 0 0 35467 stm32f1xx_hal_tim.o + 2582 0 18 0 0 7388 stm32f1xx_hal_rcc.o + 1144 0 0 0 0 35467 stm32f1xx_hal_tim.o 220 0 0 0 0 15009 stm32f1xx_hal_tim_ex.o + 1398 0 0 0 0 19913 stm32f1xx_hal_uart.o 34 0 0 0 0 1003 stm32f1xx_it.o - 2 0 16 4 0 1547 system_stm32f1xx.o - 178 0 0 0 72 4433 tim.o + 2 0 24 4 0 1547 system_stm32f1xx.o + 360 0 0 0 144 4755 tim.o + 216 0 0 0 72 4069 usart.o ---------------------------------------------------------------------- - 7874 26 302 12 2188 94848 Object Totals + 11186 26 338 12 3020 152138 Object Totals 0 0 32 0 0 0 (incl. Generated) - 46 0 0 3 11 0 (incl. Padding) + 72 0 2 3 8 0 (incl. Padding) ---------------------------------------------------------------------- @@ -2166,15 +2747,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 8230 42 302 12 2284 95092 Grand Totals - 8230 42 302 12 2284 95092 ELF Image Totals - 8230 42 302 12 0 0 ROM Totals + 11542 42 338 12 3116 152282 Grand Totals + 11542 42 338 12 3116 152282 ELF Image Totals + 11542 42 338 12 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 8532 ( 8.33kB) - Total RW Size (RW Data + ZI Data) 2296 ( 2.24kB) - Total ROM Size (Code + RO Data + RW Data) 8544 ( 8.34kB) + Total RO Size (Code + RO Data) 11880 ( 11.60kB) + Total RW Size (RW Data + ZI Data) 3128 ( 3.05kB) + Total ROM Size (Code + RO Data + RW Data) 11892 ( 11.61kB) ============================================================================== diff --git a/MDK-ARM/CANEmu/CANEmu_CANEmu.dep b/MDK-ARM/CANEmu/CANEmu_CANEmu.dep index 48df403..62d4ff9 100644 --- a/MDK-ARM/CANEmu/CANEmu_CANEmu.dep +++ b/MDK-ARM/CANEmu/CANEmu_CANEmu.dep @@ -1,10 +1,10 @@ Dependencies for Project 'CANEmu', Target 'CANEmu': (DO NOT MODIFY !) CompilerVersion: 6190000::V6.19::ARMCLANG -F (startup_stm32f103xb.s)(0x68908B02)(--target=arm-arm-none-eabi -mcpu=cortex-m3 -masm=auto -Wa,armasm,--diag_suppress=A1950W -c -gdwarf-4 -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -Wa,armasm,--pd,"__UVISION_VERSION SETA 538" -Wa,armasm,--pd,"_RTE_ SETA 1" -Wa,armasm,--pd,"STM32F10X_MD SETA 1" -Wa,armasm,--pd,"_RTE_ SETA 1" -o canemu/startup_stm32f103xb.o) -F (../Core/Src/main.c)(0x68908B00)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/main.o -MD) +F (startup_stm32f103xb.s)(0x6890A5F1)(--target=arm-arm-none-eabi -mcpu=cortex-m3 -masm=auto -Wa,armasm,--diag_suppress=A1950W -c -gdwarf-4 -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -Wa,armasm,--pd,"__UVISION_VERSION SETA 538" -Wa,armasm,--pd,"_RTE_ SETA 1" -Wa,armasm,--pd,"STM32F10X_MD SETA 1" -Wa,armasm,--pd,"_RTE_ SETA 1" -o canemu/startup_stm32f103xb.o) +F (../Core/Src/main.c)(0x6890B104)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/main.o -MD) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -31,17 +31,24 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -I (..\Core\Inc\tim.h)(0x68908AFE) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +I (..\Core\Inc\tim.h)(0x6890A5EE) +I (..\Core\Inc\usart.h)(0x6890A5EE) I (..\Core\Inc\gpio.h)(0x68908AFE) -I (..\Core\CANEmu\canEmu.h)(0x68908ADB) +I (..\Core\CANEmu\canEmu.h)(0x6890B0F0) I (..\Core\CANEmu\canform.h)(0x68908AC8) I (C:\Keil_v5\ARM\ARMCLANG\include\string.h)(0x67909638) I (C:\Keil_v5\ARM\ARMCLANG\include\stdbool.h)(0x63888F58) -F (../Core/Src/gpio.c)(0x68908AFE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/gpio.o -MD) +I (..\Core\Modbus\rs_message.h)(0x683DA8A8) +I (..\Core\Modbus\modbus.h)(0x683DA8A8) +I (..\Core\Modbus\modbus_config.h)(0x6890A819) +I (..\Core\Modbus\modbus_data.h)(0x6890B15E) +I (..\Core\Modbus\crc_algs.h)(0x683DA8A8) +F (../Core/Src/gpio.c)(0x68908AFE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/gpio.o -MD) I (..\Core\Inc\gpio.h)(0x68908AFE) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -68,11 +75,12 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Core/Src/tim.c)(0x68908AFE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/tim.o -MD) -I (..\Core\Inc\tim.h)(0x68908AFE) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Core/Src/tim.c)(0x6890A5EE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/tim.o -MD) +I (..\Core\Inc\tim.h)(0x6890A5EE) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -99,10 +107,12 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Core/Src/stm32f1xx_it.c)(0x68908AFF)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_it.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Core/Src/usart.c)(0x6890A5EE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/usart.o -MD) +I (..\Core\Inc\usart.h)(0x6890A5EE) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -129,11 +139,43 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Core/Src/stm32f1xx_it.c)(0x68908AFF)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_it.o -MD) +I (..\Core\Inc\main.h)(0x68908AFF) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h)(0x675FD78C) +I (..\Drivers\CMSIS\Include\core_cm3.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x662759F5) +I (..\Drivers\CMSIS\Include\cmsis_version.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_compiler.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_armclang.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_compat.h)(0x63888F58) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_acle.h)(0x63888F58) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h)(0x675FD78C) +I (C:\Keil_v5\ARM\ARMCLANG\include\stddef.h)(0x63888F58) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) I (..\Core\Inc\stm32f1xx_it.h)(0x68908AFF) -F (../Core/Src/stm32f1xx_hal_msp.c)(0x68908AFF)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_msp.o -MD) +F (../Core/Src/stm32f1xx_hal_msp.c)(0x68908AFF)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_msp.o -MD) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -160,9 +202,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_gpio_ex.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_gpio_ex.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -189,9 +232,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_tim.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_tim.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -218,9 +262,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_tim_ex.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_tim_ex.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -247,9 +292,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -276,9 +322,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_rcc.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_rcc.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -305,9 +352,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_rcc_ex.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_rcc_ex.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -334,9 +382,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_gpio.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_gpio.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -363,9 +412,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_dma.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_dma.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -392,9 +442,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_cortex.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_cortex.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -421,9 +472,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_pwr.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_pwr.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -450,9 +502,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_flash.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_flash.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -479,9 +532,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_flash_ex.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_flash_ex.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -508,9 +562,10 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_exti.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_exti.o -MD) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -537,7 +592,38 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (../Core/Src/system_stm32f1xx.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/system_stm32f1xx.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/stm32f1xx_hal_uart.o -MD) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h)(0x675FD78C) +I (..\Drivers\CMSIS\Include\core_cm3.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x662759F5) +I (..\Drivers\CMSIS\Include\cmsis_version.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_compiler.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_armclang.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_compat.h)(0x63888F58) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_acle.h)(0x63888F58) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h)(0x675FD78C) +I (C:\Keil_v5\ARM\ARMCLANG\include\stddef.h)(0x63888F58) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (../Core/Src/system_stm32f1xx.c)(0x675FD78C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/system_stm32f1xx.o -MD) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h)(0x675FD78C) I (..\Drivers\CMSIS\Include\core_cm3.h)(0x675FD756) @@ -549,7 +635,7 @@ I (C:\Keil_v5\ARM\ARMCLANG\include\arm_compat.h)(0x63888F58) I (C:\Keil_v5\ARM\ARMCLANG\include\arm_acle.h)(0x63888F58) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h)(0x675FD78C) @@ -566,12 +652,13 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) -F (..\Core\CANEmu\canEmu.c)(0x68908AE2)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/canemu.o -MD) -I (..\Core\CANEmu\canEmu.h)(0x68908ADB) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (..\Core\CANEmu\canEmu.c)(0x68908AE2)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/canemu.o -MD) +I (..\Core\CANEmu\canEmu.h)(0x6890B0F0) I (..\Core\CANEmu\canform.h)(0x68908AC8) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -598,15 +685,16 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) I (C:\Keil_v5\ARM\ARMCLANG\include\string.h)(0x67909638) I (C:\Keil_v5\ARM\ARMCLANG\include\stdbool.h)(0x63888F58) -I (..\Core\Inc\tim.h)(0x68908AFE) -F (..\Core\CANEmu\canEmu.h)(0x68908ADB)() -F (..\Core\CANEmu\canform.c)(0x68909028)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/canform.o -MD) +I (..\Core\Inc\tim.h)(0x6890A5EE) +F (..\Core\CANEmu\canEmu.h)(0x6890B0F0)() +F (..\Core\CANEmu\canform.c)(0x68909028)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/canform.o -MD) I (..\Core\CANEmu\canform.h)(0x68908AC8) I (..\Core\Inc\main.h)(0x68908AFF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) -I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x68908AFF) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) @@ -633,6 +721,114 @@ I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) I (C:\Keil_v5\ARM\ARMCLANG\include\string.h)(0x67909638) I (C:\Keil_v5\ARM\ARMCLANG\include\stdbool.h)(0x63888F58) F (..\Core\CANEmu\canform.h)(0x68908AC8)() +F (..\Core\Modbus\crc_algs.c)(0x683DA8A8)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/crc_algs.o -MD) +I (..\Core\Modbus\crc_algs.h)(0x683DA8A8) +I (..\Core\Modbus\modbus_config.h)(0x6890A819) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h)(0x675FD78C) +I (..\Drivers\CMSIS\Include\core_cm3.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x662759F5) +I (..\Drivers\CMSIS\Include\cmsis_version.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_compiler.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_armclang.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_compat.h)(0x63888F58) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_acle.h)(0x63888F58) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h)(0x675FD78C) +I (C:\Keil_v5\ARM\ARMCLANG\include\stddef.h)(0x63888F58) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +F (..\Core\Modbus\crc_algs.h)(0x683DA8A8)() +F (..\Core\Modbus\modbus.c)(0x683DA8A8)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/modbus.o -MD) +I (..\Core\Modbus\rs_message.h)(0x683DA8A8) +I (..\Core\Modbus\modbus.h)(0x683DA8A8) +I (..\Core\Modbus\modbus_config.h)(0x6890A819) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h)(0x675FD78C) +I (..\Drivers\CMSIS\Include\core_cm3.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x662759F5) +I (..\Drivers\CMSIS\Include\cmsis_version.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_compiler.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_armclang.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_compat.h)(0x63888F58) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_acle.h)(0x63888F58) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h)(0x675FD78C) +I (C:\Keil_v5\ARM\ARMCLANG\include\stddef.h)(0x63888F58) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +I (..\Core\Modbus\modbus_data.h)(0x6890B15E) +I (..\Core\Modbus\crc_algs.h)(0x683DA8A8) +F (..\Core\Modbus\modbus.h)(0x683DA8A8)() +F (..\Core\Modbus\modbus_config.h)(0x6890A819)() +F (..\Core\Modbus\modbus_data.h)(0x6890B15E)() +F (..\Core\Modbus\rs_message.c)(0x683DA8A8)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -gdwarf-4 -O0 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../Core/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc -I ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I ../Drivers/CMSIS/Include -I ../Core/CANEmu -I ../Core/Modbus -I./RTE/_CANEmu -IC:/Users/I/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/I/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103xB -o canemu/rs_message.o -MD) +I (..\Core\Modbus\rs_message.h)(0x683DA8A8) +I (..\Core\Modbus\modbus.h)(0x683DA8A8) +I (..\Core\Modbus\modbus_config.h)(0x6890A819) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h)(0x675FD78C) +I (..\Core\Inc\stm32f1xx_hal_conf.h)(0x6890A5EF) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h)(0x675FD78C) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h)(0x675FD78C) +I (..\Drivers\CMSIS\Include\core_cm3.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x662759F5) +I (..\Drivers\CMSIS\Include\cmsis_version.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_compiler.h)(0x675FD756) +I (..\Drivers\CMSIS\Include\cmsis_armclang.h)(0x675FD756) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_compat.h)(0x63888F58) +I (C:\Keil_v5\ARM\ARMCLANG\include\arm_acle.h)(0x63888F58) +I (..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h)(0x675FD78C) +I (C:\Keil_v5\ARM\ARMCLANG\include\stddef.h)(0x63888F58) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h)(0x675FD78C) +I (..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h)(0x675FD78C) +I (..\Core\Modbus\modbus_data.h)(0x6890B15E) +I (..\Core\Modbus\crc_algs.h)(0x683DA8A8) +F (..\Core\Modbus\rs_message.h)(0x683DA8A8)() diff --git a/MDK-ARM/CANEmu/canemu.d b/MDK-ARM/CANEmu/canemu.d index 68c7f87..9f777d2 100644 --- a/MDK-ARM/CANEmu/canemu.d +++ b/MDK-ARM/CANEmu/canemu.d @@ -28,5 +28,6 @@ canemu/canemu.o: ..\Core\CANEmu\canEmu.c ..\Core\CANEmu\canEmu.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \ C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h \ C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h ..\Core\Inc\tim.h diff --git a/MDK-ARM/CANEmu/canemu.o b/MDK-ARM/CANEmu/canemu.o index 20b7d35259171e0be122c0aeaf7ff562a3666c26..61f3bf5b56f4690e866183b0171e9578d14b136b 100644 GIT binary patch delta 654 zcmXw$J!lkB5XWc6eS6<`yV-lYBGKG=$z6iR)56#U(O9Wq4kT(7g}Xo^h6F(@BqSih zH9?O_C5RtI8WB8KF^yQ*D5N-qAP9msLK-1xdS~@*vGaSs|IAy4-L?A5`hyZSI^`Ec ztKHrf;O6)|(tlLykSt7TfN_50)R*rXTQhua_{#8|;YY(ShCdB=4K4XU(OW&kgNDZp zPZ>@c%69}J2+z19ggu`39%G4f#oIW{_llEvl((d=@Q}WPEq zK_odYBm#Aj5F|7_#f@!R3AV6B1TAV6A+1~pwg@^;?t^#!zxzA)oy&#$p|V*Fa~-$)Er?H^i%&dQX_vV zeghGF-#%6G9=R#m09U#0R35!Fwr;p(SU21^JT&}ncx-rP7?r09PW22s4f_m-{ae{9 zggd;LTgN1KxwGiCEP8zJzc1alYL2ISDW*?Nc{(?nqZj# diff --git a/MDK-ARM/CANEmu/canform.d b/MDK-ARM/CANEmu/canform.d index f954f12..8eeb6c0 100644 --- a/MDK-ARM/CANEmu/canform.d +++ b/MDK-ARM/CANEmu/canform.d @@ -27,5 +27,6 @@ canemu/canform.o: ..\Core\CANEmu\canform.c ..\Core\CANEmu\canform.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \ C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h \ C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h diff --git a/MDK-ARM/CANEmu/crc_algs.d b/MDK-ARM/CANEmu/crc_algs.d new file mode 100644 index 0000000..bae8ad7 --- /dev/null +++ b/MDK-ARM/CANEmu/crc_algs.d @@ -0,0 +1,31 @@ +canemu/crc_algs.o: ..\Core\Modbus\crc_algs.c ..\Core\Modbus\crc_algs.h \ + ..\Core\Modbus\modbus_config.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \ + ..\Core\Inc\stm32f1xx_hal_conf.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h \ + ..\Drivers\CMSIS\Include\core_cm3.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + ..\Drivers\CMSIS\Include\cmsis_version.h \ + ..\Drivers\CMSIS\Include\cmsis_compiler.h \ + ..\Drivers\CMSIS\Include\cmsis_armclang.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_compat.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_acle.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stddef.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h diff --git a/MDK-ARM/CANEmu/crc_algs.o b/MDK-ARM/CANEmu/crc_algs.o new file mode 100644 index 0000000000000000000000000000000000000000..9a99e557973b53b9e684e14335edb790e7c8f68e GIT binary patch literal 5928 zcmb_fd0bRw_kZr4xx>ILEGnR=jizWQmr)QEQyCFa1jCiYF&JhB7?=fzL5Zjc(k#os zrLc@Fv&_m6L=hFyY_Uy6TyR6pa%s`bO56CIbLT!V^1koq(;vU{;knKHKT}z;t>X$=$5xS| zsj&xYV{Z}C3?t>vKvH_$UqdR`Dn`pzT)jf7n&Tuj`3V>f^OV+?)i4#L5@s+kgXz%7 z^C>UShnNtZRF0|ZxB^-Ucu0ban01MLnN{9Jx>(Q&d6*13$EWDX9dZFACHN})-cdJ~ zU01Sw^4T2fTdJ4mAH!(EOi~1#klDK^_Bx|sYfAUh+B!OrBjhEm*OK7|^-qm6z1Q_V zX!CmUc5eQtO~z{**P5zFEGj8ONQAvfn&a*jzu# zT2(vg#G&11V(;#G{~PP6k%jv9_`|9bXXlSU`riB6w$K=IerD;+lb;0|j_j+yy?wy_ z2kYjoTibZpchla6>IQbGd^wk1+ot?v&^5)jXG$Cq{z*9xzt_*Oe|&h>jtbq`#j-_b zm_3@7sxZIfH=bR(ZP9)8J7k+K?|VJ6wc+ZUhrEiS?h@aXo4sEOu2Nszt;&5ee7sHm zvei_{=#Agqo|%`IX|VP^r8O^|K{9XsxK?I;Y!ef*|F*m=^`P&spS0DOQ?Bg{xZcpT zqGb85zuNnq%bXT|y4Noy$DTJQwf_0Ap*H#Jne{O)vS;HZ?e13HruM{>Yfp{09X$Hh zpSMpO%e`ia`>V|!HD!7B2S*w*P8WnrCx6>d5}BUlv*l2U>fD2ixRfnAc8H&!qG_2% zd1!EbPHNp!hsL`#YuD?S4PUG8o`0n3P}>6otB%xc-+c1Zpz(F{pHgk-$LaU({J`4S ztSN8!aYx<0SCp4_NM32#<{F!D{Q8GWT3+iFdPZ6vc(x!wVf^Olai%pBa&4;3X}QIU z!|Kbgb$G8HvX%I3tM+<)@@n6kEgR*}UM$^i;rkz2@SJq@)-FV`}6RVHDaqz&YF|%&9KlF3< z?xWeMd)_`LtDiVMx_0X6VX9L}AwD1emMDqND3^9Fjg|Hhk2YDRJYQ${ zqEC6&o((OI!O@p;X02VK{8Eyj*u5)|9T*YH&21Xj`0-H1-r7}Z+lNVW>-6t*oIEh% z@R9lz)osK3Z9TuB=78zd&|AhI)^E%$^jU3V-<5ft2mkte ze8D~8Q`E5Q(cO;~H#R--2XE|F*CZiNBG*|Bi@b@{0vlya4m2?L@yrjyH0OYVEKx<$y z3xjZ0>=W>modm^wD8{)H$}WOpI4V**E078m#EKOVp@LW}mw4kkX-@C4prV5Gd$7Q= zZvvnzD|LsHU}1M*FtIEPdcnrIZLAL{(9Wtw=Vw8I#V`}4{Q$gJ6>gzG^c-+Sl;Rw= ze23j^cg1LQPMZcri`DGZWI3Fgcw45~WHOsH(fo+9nmG=KHAZ7_+Kg6%JzKM2lzDWd zF;lBuNO(RX&fzpiBs)x*g#~(})0l3sW*6{AG9^Zz>Tu@iQ=E=mv(Z(cpFJm8AE%oU zZ!6R%Po5sGo0UuojX80%;-*?ip}oM8ZHIKm9D|b-TI{Yd=`PWna%8&8kZCn{ zxq=f(PuI28)hNWrc!I`h&LV}=>?U)O zI}JWZM0cer$ZGE`#t$FR&Dw(V39{kB!vD!m$|4hD-}#qJfPY$!o_F z&IrlPMd7wcBJ=S|mJ@GQP2h!Qd$PSq5EIPwX8JJwWdoT|#up~xo-$s*_`&fLKNuZA zQg|ns617q#>Hq}7J26SEB=Gs@B)lJ!)bf?gGwdWa1i-s5B_`0qFZ4gvDg=xTgNcjL zPd8hv>5E6{Au*1)B;AYz{UnQB&+~eV-DoW|nY&#PLJC|a*i1eLV|d&b7NSa7!XXlg zKf|egB!j9sNd(tJ#&eP^PAyB~cwobMZWzx+@mwFC3vT2TiLwYzV&r@xITbqcEUcF4 ziquRPPT?bYpo~-Q<|G?DqxF|nbG@^;Af8k5oS*D1oUQu4F-%iXP!5D8h~VTUD>-@BY)FYt7_NJ6~GvU~i! z$eYv*dWNWp?H(D=zl$XQ5l`J^1WrP_`@{$*ZPQhTo()1VTdS4B0}5; zMLAByL=mw*7V<1Wg!P+6eZGiT7wb*P)1tge#0?@giTJUIUm`-iCq((8h(99w5CZ?U z3ibbk2;E->=Y;F%DWcHvK-P(JG9oMz?*sZR6w!hh1p6q;#fY%~<)ZwYh>%8D7alRL z56>6t6ZR1h&y|Jij5iYP!$nyu`W1+Jp;v-G;WG;gc=4Oho6MPo+3AMNOs9D<;o)QJ zBD~RIvq4`ZJbcr5gUjW#WEQ&21%!8+t>OeHG(yz4rx&=Ko<@s3%K;{66}-?*_^wXm z*1B61G$!8eaGCjp8FRx6Tn1y_f13pD(Q^`tSU+|%>|Gu;SuJ+>+;-KNd7 zj>LL8TWMz;p(}cPi+NZNbX&p~JZcjVW8z+zi!7!hVUyeob7#X%^OXP7Gjim;o*)l$ z@gwkor}Xb=AlwIuhig8(Gx#fu5@ka`fjqu%NKtO+e2Sk6g7>Yv-{ej&_jd=y#oz?5 z4~azqXbjw8NKG^_upW$ucQV5rFTV_UB>XO*p4LqB>bu383h~fS0|T!ojhEt%*SU^T zu&seXiN;In7B2HqU!{70zu8 z7&V~BHbl=2`yHJFEXjaL_zk5*Z84zmjHiK1uK^tn>{&Ek67V=j3j?VLCQYS5Kt>kF z01>HQGxU;p&{3j(&w~PaN*weUPolOkP{JL^r#AFUp#mWFyX3*6`C;&zjEqS1tj~k& zx!zbmLNuVmfxU&Uw*`0_8(6X);)Qr9DEl?oJmY0RJopph^#`Q!!e9cu^PnaT(AY{r LhjIKxKb-e}MD6@Z literal 0 HcmV?d00001 diff --git a/MDK-ARM/CANEmu/gpio.d b/MDK-ARM/CANEmu/gpio.d index 64992ce..59550e4 100644 --- a/MDK-ARM/CANEmu/gpio.d +++ b/MDK-ARM/CANEmu/gpio.d @@ -26,4 +26,5 @@ canemu/gpio.o: ..\Core\Src\gpio.c ..\Core\Inc\gpio.h ..\Core\Inc\main.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ - ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h diff --git a/MDK-ARM/CANEmu/main.d b/MDK-ARM/CANEmu/main.d index 61fb2e8..df8faae 100644 --- a/MDK-ARM/CANEmu/main.d +++ b/MDK-ARM/CANEmu/main.d @@ -27,7 +27,11 @@ canemu/main.o: ..\Core\Src\main.c ..\Core\Inc\main.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ - ..\Core\Inc\tim.h ..\Core\Inc\gpio.h ..\Core\CANEmu\canEmu.h \ - ..\Core\CANEmu\canform.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \ + ..\Core\Inc\tim.h ..\Core\Inc\usart.h ..\Core\Inc\gpio.h \ + ..\Core\CANEmu\canEmu.h ..\Core\CANEmu\canform.h \ C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h \ - C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdbool.h \ + ..\Core\Modbus\rs_message.h ..\Core\Modbus\modbus.h \ + ..\Core\Modbus\modbus_config.h ..\Core\Modbus\modbus_data.h \ + ..\Core\Modbus\crc_algs.h diff --git a/MDK-ARM/CANEmu/main.o b/MDK-ARM/CANEmu/main.o index 047bba6f66ee0cdb2d05146530c0c32fafdd04ee..f80398c4a67133032297fb3e73fd40ef9954c874 100644 GIT binary patch literal 7076 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 bO|19}pl(%l+JZ&j0Rj8r-yXQ#M&$njQ6soI literal 5928 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 diff --git a/MDK-ARM/CANEmu/modbus.d b/MDK-ARM/CANEmu/modbus.d new file mode 100644 index 0000000..d941870 --- /dev/null +++ b/MDK-ARM/CANEmu/modbus.d @@ -0,0 +1,32 @@ +canemu/modbus.o: ..\Core\Modbus\modbus.c ..\Core\Modbus\rs_message.h \ + ..\Core\Modbus\modbus.h ..\Core\Modbus\modbus_config.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \ + ..\Core\Inc\stm32f1xx_hal_conf.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h \ + ..\Drivers\CMSIS\Include\core_cm3.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + ..\Drivers\CMSIS\Include\cmsis_version.h \ + ..\Drivers\CMSIS\Include\cmsis_compiler.h \ + ..\Drivers\CMSIS\Include\cmsis_armclang.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_compat.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_acle.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stddef.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \ + ..\Core\Modbus\modbus_data.h ..\Core\Modbus\crc_algs.h diff --git a/MDK-ARM/CANEmu/modbus.o b/MDK-ARM/CANEmu/modbus.o new file mode 100644 index 0000000000000000000000000000000000000000..c587f2805af28f2c33ce10f4091333060035c6e7 GIT binary patch literal 33132 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 literal 0 HcmV?d00001 diff --git a/MDK-ARM/CANEmu/stm32f1xx_it.d b/MDK-ARM/CANEmu/stm32f1xx_it.d index 72fd62d..cb57dfb 100644 --- a/MDK-ARM/CANEmu/stm32f1xx_it.d +++ b/MDK-ARM/CANEmu/stm32f1xx_it.d @@ -27,4 +27,5 @@ canemu/stm32f1xx_it.o: ..\Core\Src\stm32f1xx_it.c ..\Core\Inc\main.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \ ..\Core\Inc\stm32f1xx_it.h diff --git a/MDK-ARM/CANEmu/system_stm32f1xx.d b/MDK-ARM/CANEmu/system_stm32f1xx.d index 93d8cc9..435a605 100644 --- a/MDK-ARM/CANEmu/system_stm32f1xx.d +++ b/MDK-ARM/CANEmu/system_stm32f1xx.d @@ -26,4 +26,5 @@ canemu/system_stm32f1xx.o: ..\Core\Src\system_stm32f1xx.c \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ - ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h diff --git a/MDK-ARM/CANEmu/tim.d b/MDK-ARM/CANEmu/tim.d index 5d48035..99a6503 100644 --- a/MDK-ARM/CANEmu/tim.d +++ b/MDK-ARM/CANEmu/tim.d @@ -26,4 +26,5 @@ canemu/tim.o: ..\Core\Src\tim.c ..\Core\Inc\tim.h ..\Core\Inc\main.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ - ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h diff --git a/MDK-ARM/CANEmu/tim.o b/MDK-ARM/CANEmu/tim.o index 9b451f919e83bf67c29d8881372273669a95ea2e..2676224dc803e4c054f6f248552fc5b30618c029 100644 GIT binary patch delta 3880 zcmZ{ne{dA#8ONV@_ukE2E;;TlUQD>VJXz&rPik3XYbj| zB{O}K-Ou~{e4lsseRucXZ8^|Bln8y+K-}~-4pNjXT>Vh`hllr$P*N2t3RXcEJO#60 z6k4ZN1t(p=ag6f(G?D=D*cYmOVINws6TK` zFR07(1y^`c)#;C2VMN9B=dN%_B{ZP~XVjO}6;#Xh_u)|A3_@=;UTzeE8@PAn>o`O5 z9%gBgu7H!{o!{fQ$60+-$$jlC_jNPwImdf3dw;hM>873D5~Qo257T8hki-*!!rIMs zQGLgZo*aF@qc0BMf%&7_7EUvWgybX~os3+*rt^K50%Jn7$t?ggYYPmzC@+keC3 z?|1vBz5buN{WDeM4I;}p6y{W=*Btl%#s;@) z?_}-w1AX2#w{Kd%YE5>N-7_yT+B2_5*&hU(Z>%eNJ7-SO7Vtizeqyu*QbfTr8>ejx zRL#=yRcQ-&=s{!jYoUlzjrRI*Dt>cXFR;w7tkxA7>n*LV4sG6SnK!2OLd(3?-XC7j z@mnm-`IX%|`U@Rir|Y~)JwKx(ck5V2Co&wix)kw{|JvGXnS1kT^E29`P0QP={TUsF!9NUJw`G3Omp1!V(Po*K`qEkro{bK?av(@gTy7_YWc^Ot(uF)2WA&awyQ*lXs<&gLlTOseCBI@3&w%?Rk3)Ij4P zkHH%-Y?$4iWQ1rZ=r&#+$+Ci2esqr9GE2tzFT#m+yw<`-1^r$eiUWjcsn~hF zg$+O5Au_MEun}-}X9gqjx@`uV!O9TPGG>_QdXVj$kL_z&j|;PbnTNv`akxtyy4ip| z-^+xZ+hW{*ehg%A1)YJwYasJL*D>M81F)S7YX)y+JqFq+cFxcC?P9+N%=19I#Q~tj z9zKKE$_~AFhM;3q5>+vA;+mMqMYsUO&nT7`FtJ1yiJWC(##|uVR|z)=zlHG~16RTh z_X`Jwj|qPzJS03NJSY6C@S^ZPLLY9WQ>d^>*eqP3aR1q1wJ2^AZWZFc(rhaaFuYQ@Y}*3;eEpUh5f=o;giDWg@=Xt zo=gK3(q;QFFxp1BE8^UeEdxiZ)=ILjmI3PSIJR&?HJS%)x zI3c_w^kU(1VR-sGY!EIHW`)azEe>)2H;ZD2@CU*H;eO$>!V%%i!lT01gy)49g`WyP z7y9v`!G*?{d2|+tA|=cSuVrG7wTrw~xL&wXxLtUk@JGUea9H@9@QCnrFwd3n#}o4} z!hZ_?&BT3oKFDAX;6dP2E=(~otED1eCtNM$ZzKapr^wrd{F%Y}2Q1nD4~t^II6TS3 zgJ(qKSA=f}&k4tb9||uCEAbxVLLimpl znIGmn)mubf&%|h3Mb0r1ALb2?xbHLJKf#1w3vVCTDZRC8%dWdOZQinFXV<-y?(N#$ zYfsb<#78BOjxz0j96@bQ*4NtI^QWyWUD2D)+MA1axg*`G!ied*7z`f#+0*C{NfPV^HvI2QF0*L2LjA+~7YQS{2aQJ@dCS>g73^gR+h!<+9954Lb z7|zj!w`j^%jWsJgb28+x0$bscz`^fTcS5z2p&2@E4$bGQ7@v`4Z(Hgk{#O%4$NlRMYq7WH^Wn{PWIj pFgtD6oO}~Vl7NK|{;BKE@m2UCJPB2?EsNlnD3tgo_wEMK{~y+Bzf=GK delta 3027 zcmZ9Od2AI$9LImN`)2zN9=_L$R(ia);n5UYS^*16!=*s6fF!1hf-gZ&-wc zaHye~sNf$4ypX$C@koe@RzgTYNB~8fni#PXG=PR6BI572{Z4&$@^(JIYkoWP+u5DB zbz0Z>O{wJbgGrhm6`+!eTI)9I)op5%GBZ>~gf`LUn>{ys9J5Ca3*YQfZ7oxY+Cxr_ za=!K2N4dkbpIq+{DV>hLt~p738}}-{i+d;j0rxI>_X*~6_m5Z)s8FS|UFpwR`B|}H zha&x@Rd%Y7K4O(!Dy%!LvRe(%r>(L_C3JV7)N+QsDp#Mgu6?RN|7MjoRiv+2Wxq=4 zzqCn3^8Khs-gpou^obl`n+ItC#6WTiJ_XH6o@XFc6t-$tmq8 zqs`h>Cswq7lz2fYGWFSYRf)ck-YQHQ7^X~Hn*EaohUlbf-*DUbIQ)do`MW+FR$j`~4dCYg(;cFFZl3 z5l)Dd3VEb?WAQ4_{BMN2-Cxb4+#e)+OYk`C zGNM)p=+eM`deVH8SLzSyXDy_CY>`A#!)(VTgRIk7PdagWoN1fX=e$*zqCcE53(>Rs z>9?^>OtRCmeJ6_^fn;HiBncz!9s8dSm#4%02{#v!AHSm;8WlVa1FQt zd>7mU9sm!4$H23oe-6TB@CF!hduN^pmVwpaSa23N7hD2939bQO0k?v?d+F21Fm!+? zz%K9?@EREA4J#$(FHyh}uo@f*js?eqkAO?T=K}KcUk}3;a3|OXeh3}}zW}?zi{KUT zIvC?qNG4hYmV=dGz0l`?1{fxTjo=(`F}NID1-=BzF)TOQ4$2`c`XTT*_&s=D$dCCC zrZ0gv;E3@DKy*3%_>)X!(1(Gy!#)Z6EFoWWpf3cMgDb%e;H#jVxpJR&k8%RxQy7j0 zG>ePsC&svN@^l}&#n((v$=E!3 zuX+FUwNr&e@0ro1cd8v`S?N$SCY2~$#Ao|_j*ve{63dy0KZdl<9O8&|9MQoMVvz_g zSzp9(lT78PQRb^uMdT9OB__*UPL;+xGe(3>aoJ$~C;QT-p{yd3;yFoV)GR40tvZzv z$!qJ&{W7BL>?@V|t}N|WvN_F{ZC1R_1}lqiCfB8lYh;`CU1fv(Czt?77vFvruUMAG zM@`@DPq1vqNN5!gO7$K&qWHi6a+O-FPvY*i3e(2T?w9W;j(b2(BHQG_OPj%gnM-;x zV@dM2!ETU={SuDj^`5qO<2WnIDU_M-Am=M!zm%wu_-}ztxRwL?x%IW&99{|ABvG6% IiQ`Grzi|c~1^@s6 diff --git a/MDK-ARM/CANEmu/usart.d b/MDK-ARM/CANEmu/usart.d new file mode 100644 index 0000000..7b2b87b --- /dev/null +++ b/MDK-ARM/CANEmu/usart.d @@ -0,0 +1,30 @@ +canemu/usart.o: ..\Core\Src\usart.c ..\Core\Inc\usart.h \ + ..\Core\Inc\main.h ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \ + ..\Core\Inc\stm32f1xx_hal_conf.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h \ + ..\Drivers\CMSIS\Include\core_cm3.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + ..\Drivers\CMSIS\Include\cmsis_version.h \ + ..\Drivers\CMSIS\Include\cmsis_compiler.h \ + ..\Drivers\CMSIS\Include\cmsis_armclang.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_compat.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\arm_acle.h \ + ..\Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stddef.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \ + ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h diff --git a/MDK-ARM/CANEmu/usart.o b/MDK-ARM/CANEmu/usart.o new file mode 100644 index 0000000000000000000000000000000000000000..8238b73459ad1d274cf5a128ce6e600779049f00 GIT binary patch literal 7872 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