From 2057b27d554f4941251de7e4ad490139ac089aa6 Mon Sep 17 00:00:00 2001 From: Kaiser <706598421@qq.com> Date: Tue, 17 Mar 2026 10:42:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Modbus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mxproject | 33 + Core/Inc/main.h | 71 + Core/Inc/stm32f1xx_hal_conf.h | 391 ++ Core/Inc/stm32f1xx_it.h | 69 + Core/Src/Delay.c | 83 + Core/Src/Modbus/MODBUS-Port-STM32.C | 225 ++ Core/Src/Modbus/ascii/mbascii.c | 486 +++ Core/Src/Modbus/ascii/mbascii.h | 56 + Core/Src/Modbus/functions/mbfunccoils.c | 270 ++ Core/Src/Modbus/functions/mbfuncdiag.c | 29 + Core/Src/Modbus/functions/mbfuncdisc.c | 125 + Core/Src/Modbus/functions/mbfuncholding.c | 308 ++ Core/Src/Modbus/functions/mbfuncinput.c | 122 + Core/Src/Modbus/functions/mbfuncother.c | 88 + Core/Src/Modbus/functions/mbutils.c | 141 + Core/Src/Modbus/include/mb.h | 417 ++ Core/Src/Modbus/include/mbconfig.h | 132 + Core/Src/Modbus/include/mbframe.h | 87 + Core/Src/Modbus/include/mbfunc.h | 80 + Core/Src/Modbus/include/mbport.h | 129 + Core/Src/Modbus/include/mbproto.h | 83 + Core/Src/Modbus/include/mbutils.h | 108 + Core/Src/Modbus/mb.c | 414 ++ Core/Src/Modbus/port-stm32/port.h | 58 + Core/Src/Modbus/port-stm32/portEvent.c | 81 + Core/Src/Modbus/port-stm32/portSerial.c | 224 ++ Core/Src/Modbus/port-stm32/portTimer.c | 93 + Core/Src/Modbus/port.h | 58 + Core/Src/Modbus/rtu/mbcrc.c | 98 + Core/Src/Modbus/rtu/mbcrc.h | 36 + Core/Src/Modbus/rtu/mbrtu.c | 357 ++ Core/Src/Modbus/rtu/mbrtu.h | 51 + Core/Src/Modbus/tcp/mbtcp.c | 158 + Core/Src/Modbus/tcp/mbtcp.h | 53 + Core/Src/YouSuan.c | 341 ++ MDK-ARM/OutPut/YouSuan.axf | Bin 0 -> 1238956 bytes MDK-ARM/OutPut/YouSuan.hex | 2520 ++++++++++++ MDK-ARM/OutPut/YouSuan.map | 4291 +++++++++++++++++++++ YouSuan.ioc | 329 ++ 39 files changed, 12695 insertions(+) create mode 100644 .mxproject create mode 100644 Core/Inc/main.h create mode 100644 Core/Inc/stm32f1xx_hal_conf.h create mode 100644 Core/Inc/stm32f1xx_it.h create mode 100644 Core/Src/Delay.c create mode 100644 Core/Src/Modbus/MODBUS-Port-STM32.C create mode 100644 Core/Src/Modbus/ascii/mbascii.c create mode 100644 Core/Src/Modbus/ascii/mbascii.h create mode 100644 Core/Src/Modbus/functions/mbfunccoils.c create mode 100644 Core/Src/Modbus/functions/mbfuncdiag.c create mode 100644 Core/Src/Modbus/functions/mbfuncdisc.c create mode 100644 Core/Src/Modbus/functions/mbfuncholding.c create mode 100644 Core/Src/Modbus/functions/mbfuncinput.c create mode 100644 Core/Src/Modbus/functions/mbfuncother.c create mode 100644 Core/Src/Modbus/functions/mbutils.c create mode 100644 Core/Src/Modbus/include/mb.h create mode 100644 Core/Src/Modbus/include/mbconfig.h create mode 100644 Core/Src/Modbus/include/mbframe.h create mode 100644 Core/Src/Modbus/include/mbfunc.h create mode 100644 Core/Src/Modbus/include/mbport.h create mode 100644 Core/Src/Modbus/include/mbproto.h create mode 100644 Core/Src/Modbus/include/mbutils.h create mode 100644 Core/Src/Modbus/mb.c create mode 100644 Core/Src/Modbus/port-stm32/port.h create mode 100644 Core/Src/Modbus/port-stm32/portEvent.c create mode 100644 Core/Src/Modbus/port-stm32/portSerial.c create mode 100644 Core/Src/Modbus/port-stm32/portTimer.c create mode 100644 Core/Src/Modbus/port.h create mode 100644 Core/Src/Modbus/rtu/mbcrc.c create mode 100644 Core/Src/Modbus/rtu/mbcrc.h create mode 100644 Core/Src/Modbus/rtu/mbrtu.c create mode 100644 Core/Src/Modbus/rtu/mbrtu.h create mode 100644 Core/Src/Modbus/tcp/mbtcp.c create mode 100644 Core/Src/Modbus/tcp/mbtcp.h create mode 100644 Core/Src/YouSuan.c create mode 100644 MDK-ARM/OutPut/YouSuan.axf create mode 100644 MDK-ARM/OutPut/YouSuan.hex create mode 100644 MDK-ARM/OutPut/YouSuan.map create mode 100644 YouSuan.ioc diff --git a/.mxproject b/.mxproject new file mode 100644 index 0000000..2293c8e --- /dev/null +++ b/.mxproject @@ -0,0 +1,33 @@ +[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_hal_adc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_adc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_adc_ex.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_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_mpool.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_os2.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\portmacro.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_adc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_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;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\port.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_hal_adc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_adc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_adc_ex.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_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_mpool.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_os2.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\portmacro.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xe.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; + +[PreviousUsedIarFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\freertos.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_adc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_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_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3\port.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3\portasm.s;..\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_adc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_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_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3\port.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3\portasm.s;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3\port.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3\portasm.s; +HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Middlewares\Third_Party\FreeRTOS\Source\include;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2;..\Middlewares\Third_Party\FreeRTOS\Source\portable\IAR\ARM_CM3;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=USE_HAL_DRIVER;STM32F103xE;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousUsedKeilFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\freertos.c;..\Core\Src\stm32f1xx_it.c;..\Core\Src\stm32f1xx_hal_msp.c;..\Core\Src\stm32f1xx_hal_timebase_tim.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_adc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_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;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\port.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_adc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_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;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\port.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;;..\Middlewares\Third_Party\FreeRTOS\Source\croutine.c;..\Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;..\Middlewares\Third_Party\FreeRTOS\Source\list.c;..\Middlewares\Third_Party\FreeRTOS\Source\queue.c;..\Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;..\Middlewares\Third_Party\FreeRTOS\Source\tasks.c;..\Middlewares\Third_Party\FreeRTOS\Source\timers.c;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\port.c; +HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Middlewares\Third_Party\FreeRTOS\Source\include;..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2;..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=USE_HAL_DRIVER;STM32F103xE;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=4 +HeaderFiles#0=..\Core\Inc\FreeRTOSConfig.h +HeaderFiles#1=..\Core\Inc\stm32f1xx_it.h +HeaderFiles#2=..\Core\Inc\stm32f1xx_hal_conf.h +HeaderFiles#3=..\Core\Inc\main.h +HeaderFolderListSize=1 +HeaderPath#0=..\Core\Inc +HeaderFiles=; +SourceFileListSize=5 +SourceFiles#0=..\Core\Src\freertos.c +SourceFiles#1=..\Core\Src\stm32f1xx_it.c +SourceFiles#2=..\Core\Src\stm32f1xx_hal_msp.c +SourceFiles#3=..\Core\Src\stm32f1xx_hal_timebase_tim.c +SourceFiles#4=..\Core\Src\main.c +SourceFolderListSize=1 +SourcePath#0=..\Core\Src +SourceFiles=; + diff --git a/Core/Inc/main.h b/Core/Inc/main.h new file mode 100644 index 0000000..67d5a23 --- /dev/null +++ b/Core/Inc/main.h @@ -0,0 +1,71 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @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 __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Core/Inc/stm32f1xx_hal_conf.h b/Core/Inc/stm32f1xx_hal_conf.h new file mode 100644 index 0000000..3f78a90 --- /dev/null +++ b/Core/Inc/stm32f1xx_hal_conf.h @@ -0,0 +1,391 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CONF_H +#define __STM32F1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED + #define HAL_ADC_MODULE_ENABLED +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CAN_LEGACY_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_CORTEX_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +#define HAL_DMA_MODULE_ENABLED +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FLASH_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_PWR_MODULE_ENABLED */ +/*#define HAL_RCC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_SDRAM_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ + +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature. */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 15U /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB 8U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY 0x000000FFU +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY 0x00000FFFU + +#define PHY_READ_TO 0x0000FFFFU +#define PHY_WRITE_TO 0x0000FFFFU + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32f1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32f1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32f1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32f1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED +#include "stm32f1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED +#include "stm32f1xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "Legacy/stm32f1xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +#include "stm32f1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32f1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32f1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32f1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +#include "stm32f1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32f1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED +#include "stm32f1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED +#include "stm32f1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32f1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED +#include "stm32f1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32f1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32f1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32f1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED +#include "stm32f1xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED +#include "stm32f1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED +#include "stm32f1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32f1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32f1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32f1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32f1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32f1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32f1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32f1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED +#include "stm32f1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED +#include "stm32f1xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED +#include "stm32f1xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ +#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +void assert_failed(uint8_t* file, uint32_t line); +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CONF_H */ + diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h new file mode 100644 index 0000000..69153bd --- /dev/null +++ b/Core/Inc/stm32f1xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @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 __STM32F1xx_IT_H +#define __STM32F1xx_IT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void DebugMon_Handler(void); +void EXTI0_IRQHandler(void); +void DMA1_Channel1_IRQHandler(void); +void TIM1_UP_IRQHandler(void); +void TIM2_IRQHandler(void); +void TIM3_IRQHandler(void); +void TIM5_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_IT_H */ diff --git a/Core/Src/Delay.c b/Core/Src/Delay.c new file mode 100644 index 0000000..26db7c4 --- /dev/null +++ b/Core/Src/Delay.c @@ -0,0 +1,83 @@ +/**************** (C) COPYRIGHT 2023 山东云唐智能科技有限公司 ******************* + * 文 件 名: + * 创 建 者: Kaiser + * 描 述 : + * 最后修改: + *********************************** 修订记录 ************************************ + * 版 本: + * 修订人: + ********************************************************************************/ + +/******************************** 功能说明 ************************************* + * + *******************************************************************************/ +#include "stm32f10x.h" +void delay_us(uint32_t us) +{ + while (us--) // 一个NOP一个指令周期 72Mhz下72个指令周期为1us 去掉us--的指令周期 去掉while判断和循环的指令周期 还需要约61个NOP + { + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + __NOP(); + } +} + +/******** (C) COPYRIGHT 2023 山东云唐智能科技有限公司 **** End Of File ********/ diff --git a/Core/Src/Modbus/MODBUS-Port-STM32.C b/Core/Src/Modbus/MODBUS-Port-STM32.C new file mode 100644 index 0000000..48a4946 --- /dev/null +++ b/Core/Src/Modbus/MODBUS-Port-STM32.C @@ -0,0 +1,225 @@ +#include "mb.h" +#include "mbport.h" +#include "mbutils.h" +#include "cmsis_os2.h" +#define MB_USART USART1 +#define MB_TIMER TIM7 + +#include "portEvent.c" +#include "portSerial.c" +#include "portTimer.c" + +/* ----------------------- Defines ------------------------------------------*/ +#define REG_INPUT_START 1 +#define REG_INPUT_NREGS 80 +USHORT usRegInputBuf[REG_INPUT_NREGS]; + +#define REG_HOLDING_START 1 +#define REG_HOLDING_NREGS 80 +USHORT usRegHoldingBuf[REG_HOLDING_NREGS]; + +#define REG_DISC_START 1 +#define REG_DISC_SIZE 80 +UCHAR ucRegDiscBuf[(REG_DISC_SIZE+7U)/8U]; + +#define REG_COILS_START 1 +#define REG_COILS_SIZE 80 +UCHAR ucRegCoilsBuf[(REG_COILS_SIZE+7U)/8U]; + +#define REG_NVRAM_START 1001 +#define REG_NVRAM_NREGS 1000 +extern void delay_us(uint32_t us); + +/* ----------------------- Static variables ---------------------------------*/ + +// 璇绘暟瀛楀瘎瀛樺櫒 鍔熻兘鐮0x04 +eMBErrorCode +eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int16_t iRegIndex; + delay_us( 50u ); + if( ( usAddress >= REG_INPUT_START ) + && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) + { + iRegIndex = (int16_t)( usAddress - REG_INPUT_START ); + while( usNRegs > 0 ) + { + *pucRegBuffer++ = (uint8_t)( usRegInputBuf[iRegIndex] >> 8 ); + *pucRegBuffer++ = (uint8_t)( usRegInputBuf[iRegIndex] & 0xFF ); + iRegIndex++; + usNRegs--; + } + } + else + { + eStatus = MB_ENOREG; + } + + return eStatus; +} + +// 瀵勫瓨鍣ㄧ殑璇诲啓鍑芥暟 鏀寔鐨勫懡浠や负璇 0x03 鍜屽啓0x06 +eMBErrorCode +eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int16_t iRegIndex; + delay_us( 50u ); + if( ( usAddress >= REG_HOLDING_START ) && ( usAddress + usNRegs <= REG_HOLDING_START + REG_HOLDING_NREGS ) ) + { // 璁块棶鐨勫湴鍧绌洪棿鏄疪AM鏄犲儚鍖 + iRegIndex = (int16_t)( usAddress - REG_HOLDING_START ); + switch ( eMode ) + { + case MB_REG_READ: + while( usNRegs > 0 ) + { + *pucRegBuffer++ = (uint8_t)( usRegHoldingBuf[iRegIndex] >> 8 ); + *pucRegBuffer++ = (uint8_t)( usRegHoldingBuf[iRegIndex] & 0xFF ); + iRegIndex++; + usNRegs--; + } + break; + + case MB_REG_WRITE: + while( usNRegs > 0 ) + { + usRegHoldingBuf[iRegIndex] = *pucRegBuffer++ << 8; + usRegHoldingBuf[iRegIndex] |= *pucRegBuffer++; + iRegIndex++; + usNRegs--; + } + } + } + else if( ( usAddress >= REG_NVRAM_START ) && ( usAddress + usNRegs <= REG_NVRAM_START + REG_NVRAM_NREGS ) ) + { // 璁块棶鐨勫湴鍧绌洪棿鏄 NVRAM 鍖 + iRegIndex = ( int )( usAddress - REG_NVRAM_START ); + switch ( eMode ) + { + case MB_REG_READ: +// while( usNRegs > 0 ) +// { +// *pucRegBuffer++ = ( unsigned char )( usRegHoldingBuf[iRegIndex] >> 8 ); +// *pucRegBuffer++ = ( unsigned char )( usRegHoldingBuf[iRegIndex] & 0xFF ); +// iRegIndex++; +// usNRegs--; +// } +// NVRAM_Load( iRegIndex * 2u, pucRegBuffer, usNRegs * 2u ); + break; + + case MB_REG_WRITE: +// NVRAM_Save( iRegIndex * 2u, pucRegBuffer, usNRegs * 2u ); +// while( usNRegs > 0 ) +// { +// usRegHoldingBuf[iRegIndex] = *pucRegBuffer++ << 8; +// usRegHoldingBuf[iRegIndex] |= *pucRegBuffer++; +// iRegIndex++; +// usNRegs--; +// } + break; + } + } + else + { + eStatus = MB_ENOREG; + } + return eStatus; +} + +// 璇/鍐欏紑鍏冲瘎瀛樺櫒 0x01 0x05 +eMBErrorCode +eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int16_t iNCoils = (int16_t)usNCoils; + uint16_t usBitOffset; + + delay_us( 50u ); + /* Check if we have registers mapped at this block. */ + if( ( usAddress >= REG_COILS_START ) && + ( usAddress + usNCoils <= REG_COILS_START + REG_COILS_SIZE ) ) + { + usBitOffset = (uint16_t)( usAddress - REG_COILS_START ); + switch ( eMode ) + { + /* Read current values and pass to protocol stack. */ + case MB_REG_READ: + while( iNCoils > 0 ) + { + *pucRegBuffer++ = xMBUtilGetBits( ucRegCoilsBuf, usBitOffset, (uint8_t)( iNCoils > 8 ? 8 : iNCoils )); + iNCoils -= 8; + usBitOffset += 8; + } + break; + + /* Update current register values. */ + case MB_REG_WRITE: + while( iNCoils > 0 ) + { + xMBUtilSetBits( ucRegCoilsBuf, usBitOffset, (uint8_t)( iNCoils > 8 ? 8 : iNCoils ), *pucRegBuffer++ ); + iNCoils -= 8; + } + break; + } + + } + else + { + eStatus = MB_ENOREG; + } + return eStatus; +} + +// 璇诲紑鍏冲瘎瀛樺櫒 0x02 +eMBErrorCode +eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int16_t iNDiscrete = ( int16_t )usNDiscrete; + uint16_t usBitOffset; + + delay_us( 50u ); + /* Check if we have registers mapped at this block. */ + if( ( usAddress >= REG_DISC_START ) && + ( usAddress + usNDiscrete <= REG_DISC_START + REG_DISC_SIZE ) ) + { + usBitOffset = ( uint16_t )( usAddress - REG_DISC_START ); + while( iNDiscrete > 0 ) + { + *pucRegBuffer++ = xMBUtilGetBits( ucRegDiscBuf, usBitOffset, (uint8_t)( iNDiscrete > 8 ? 8 : iNDiscrete ) ); + iNDiscrete -= 8; + usBitOffset += 8; + } + } + else + { + eStatus = MB_ENOREG; + } + return eStatus; +} + +osThreadId_t MBRunTaskHandle; +const osThreadAttr_t MBRunTask_attributes = { + .name = "MBRunTask", + .stack_size = 128 * 10, + .priority = (osPriority_t) osPriorityHigh, +}; + +// 鍒濆鍖朚ODBUS +void MODBUS_Init( uint8_t MBAddress ) +{ +// osThreadDef( ModbusPoll, osPriorityHigh, 1u, 0u ); +// osThreadCreate( osThread( ModbusPoll ), NULL ); + MBRunTaskHandle = osThreadNew( ModbusPoll, NULL, &MBRunTask_attributes); + + eMBInit( MB_RTU, MBAddress, 1, 115200u, MB_PAR_NONE ); // 鍒濆鍖 FreeModbus 涓篟TU妯″紡 浠庢満鍦板潃涓1 Uart1 9600 鏃犳牎楠 + eMBEnable(); // 鍚姩 FreeModbus + + +} + + + + + +/******** (C) COPYRIGHT 2020 闈掑矝椤烘槙鐢靛瓙绉戞妧鏈夐檺鍏徃 **** End Of File ********/ diff --git a/Core/Src/Modbus/ascii/mbascii.c b/Core/Src/Modbus/ascii/mbascii.c new file mode 100644 index 0000000..c513457 --- /dev/null +++ b/Core/Src/Modbus/ascii/mbascii.c @@ -0,0 +1,486 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbascii.c,v 1.17 2010/06/06 13:47:07 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbconfig.h" +#include "mbascii.h" +#include "mbframe.h" + +#include "mbcrc.h" +#include "mbport.h" + +#if MB_ASCII_ENABLED > 0 + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_ASCII_DEFAULT_CR '\r' /*!< Default CR character for Modbus ASCII. */ +#define MB_ASCII_DEFAULT_LF '\n' /*!< Default LF character for Modbus ASCII. */ +#define MB_SER_PDU_SIZE_MIN 3 /*!< Minimum size of a Modbus ASCII frame. */ +#define MB_SER_PDU_SIZE_MAX 256 /*!< Maximum size of a Modbus ASCII frame. */ +#define MB_SER_PDU_SIZE_LRC 1 /*!< Size of LRC field in PDU. */ +#define MB_SER_PDU_ADDR_OFF 0 /*!< Offset of slave address in Ser-PDU. */ +#define MB_SER_PDU_PDU_OFF 1 /*!< Offset of Modbus-PDU in Ser-PDU. */ + +/* ----------------------- Type definitions ---------------------------------*/ +typedef enum +{ + STATE_RX_IDLE, /*!< Receiver is in idle state. */ + STATE_RX_RCV, /*!< Frame is beeing received. */ + STATE_RX_WAIT_EOF /*!< Wait for End of Frame. */ +} eMBRcvState; + +typedef enum +{ + STATE_TX_IDLE, /*!< Transmitter is in idle state. */ + STATE_TX_START, /*!< Starting transmission (':' sent). */ + STATE_TX_DATA, /*!< Sending of data (Address, Data, LRC). */ + STATE_TX_END, /*!< End of transmission. */ + STATE_TX_NOTIFY /*!< Notify sender that the frame has been sent. */ +} eMBSndState; + +typedef enum +{ + BYTE_HIGH_NIBBLE, /*!< Character for high nibble of byte. */ + BYTE_LOW_NIBBLE /*!< Character for low nibble of byte. */ +} eMBBytePos; + +/* ----------------------- Static functions ---------------------------------*/ +static UCHAR prvucMBCHAR2BIN( UCHAR ucCharacter ); + +static UCHAR prvucMBBIN2CHAR( UCHAR ucByte ); + +static UCHAR prvucMBLRC( UCHAR * pucFrame, USHORT usLen ); + +/* ----------------------- Static variables ---------------------------------*/ +static volatile eMBSndState eSndState; +static volatile eMBRcvState eRcvState; + +/* We reuse the Modbus RTU buffer because only one buffer is needed and the + * RTU buffer is bigger. */ +extern volatile UCHAR ucRTUBuf[]; +static volatile UCHAR *ucASCIIBuf = ucRTUBuf; + +static volatile USHORT usRcvBufferPos; +static volatile eMBBytePos eBytePos; + +static volatile UCHAR *pucSndBufferCur; +static volatile USHORT usSndBufferCount; + +static volatile UCHAR ucLRC; +static volatile UCHAR ucMBLFCharacter; + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBASCIIInit( UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ) +{ + eMBErrorCode eStatus = MB_ENOERR; + ( void )ucSlaveAddress; + + ENTER_CRITICAL_SECTION( ); + ucMBLFCharacter = MB_ASCII_DEFAULT_LF; + + if( xMBPortSerialInit( ucPort, ulBaudRate, 7, eParity ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + else if( xMBPortTimersInit( MB_ASCII_TIMEOUT_SEC * 20000UL ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + + EXIT_CRITICAL_SECTION( ); + + return eStatus; +} + +void +eMBASCIIStart( void ) +{ + ENTER_CRITICAL_SECTION( ); + vMBPortSerialEnable( TRUE, FALSE ); + eRcvState = STATE_RX_IDLE; + EXIT_CRITICAL_SECTION( ); + + /* No special startup required for ASCII. */ + ( void )xMBPortEventPost( EV_READY ); +} + +void +eMBASCIIStop( void ) +{ + ENTER_CRITICAL_SECTION( ); + vMBPortSerialEnable( FALSE, FALSE ); + vMBPortTimersDisable( ); + EXIT_CRITICAL_SECTION( ); +} + +eMBErrorCode +eMBASCIIReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + ENTER_CRITICAL_SECTION( ); + assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ); + + /* Length and CRC check */ + if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN ) + && ( prvucMBLRC( ( UCHAR * ) ucASCIIBuf, usRcvBufferPos ) == 0 ) ) + { + /* Save the address field. All frames are passed to the upper layed + * and the decision if a frame is used is done there. + */ + *pucRcvAddress = ucASCIIBuf[MB_SER_PDU_ADDR_OFF]; + + /* Total length of Modbus-PDU is Modbus-Serial-Line-PDU minus + * size of address field and CRC checksum. + */ + *pusLength = ( USHORT )( usRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_LRC ); + + /* Return the start of the Modbus PDU to the caller. */ + *pucFrame = ( UCHAR * ) & ucASCIIBuf[MB_SER_PDU_PDU_OFF]; + } + else + { + eStatus = MB_EIO; + } + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +eMBErrorCode +eMBASCIISend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + UCHAR usLRC; + + ENTER_CRITICAL_SECTION( ); + /* Check if the receiver is still in idle state. If not we where too + * slow with processing the received frame and the master sent another + * frame on the network. We have to abort sending the frame. + */ + if( eRcvState == STATE_RX_IDLE ) + { + /* First byte before the Modbus-PDU is the slave address. */ + pucSndBufferCur = ( UCHAR * ) pucFrame - 1; + usSndBufferCount = 1; + + /* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */ + pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress; + usSndBufferCount += usLength; + + /* Calculate LRC checksum for Modbus-Serial-Line-PDU. */ + usLRC = prvucMBLRC( ( UCHAR * ) pucSndBufferCur, usSndBufferCount ); + ucASCIIBuf[usSndBufferCount++] = usLRC; + + /* Activate the transmitter. */ + eSndState = STATE_TX_START; + vMBPortSerialEnable( FALSE, TRUE ); + } + else + { + eStatus = MB_EIO; + } + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +BOOL +xMBASCIIReceiveFSM( void ) +{ + BOOL xNeedPoll = FALSE; + UCHAR ucByte; + UCHAR ucResult; + + assert( eSndState == STATE_TX_IDLE ); + + ( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte ); + switch ( eRcvState ) + { + /* A new character is received. If the character is a ':' the input + * buffer is cleared. A CR-character signals the end of the data + * block. Other characters are part of the data block and their + * ASCII value is converted back to a binary representation. + */ + case STATE_RX_RCV: + /* Enable timer for character timeout. */ + vMBPortTimersEnable( ); + if( ucByte == ':' ) + { + /* Empty receive buffer. */ + eBytePos = BYTE_HIGH_NIBBLE; + usRcvBufferPos = 0; + } + else if( ucByte == MB_ASCII_DEFAULT_CR ) + { + eRcvState = STATE_RX_WAIT_EOF; + } + else + { + ucResult = prvucMBCHAR2BIN( ucByte ); + switch ( eBytePos ) + { + /* High nibble of the byte comes first. We check for + * a buffer overflow here. */ + case BYTE_HIGH_NIBBLE: + if( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ) + { + ucASCIIBuf[usRcvBufferPos] = ( UCHAR )( ucResult << 4 ); + eBytePos = BYTE_LOW_NIBBLE; + break; + } + else + { + /* not handled in Modbus specification but seems + * a resonable implementation. */ + eRcvState = STATE_RX_IDLE; + /* Disable previously activated timer because of error state. */ + vMBPortTimersDisable( ); + } + break; + + case BYTE_LOW_NIBBLE: + ucASCIIBuf[usRcvBufferPos] |= ucResult; + usRcvBufferPos++; + eBytePos = BYTE_HIGH_NIBBLE; + break; + } + } + break; + + case STATE_RX_WAIT_EOF: + if( ucByte == ucMBLFCharacter ) + { + /* Disable character timeout timer because all characters are + * received. */ + vMBPortTimersDisable( ); + /* Receiver is again in idle state. */ + eRcvState = STATE_RX_IDLE; + + /* Notify the caller of eMBASCIIReceive that a new frame + * was received. */ + xNeedPoll = xMBPortEventPost( EV_FRAME_RECEIVED ); + } + else if( ucByte == ':' ) + { + /* Empty receive buffer and back to receive state. */ + eBytePos = BYTE_HIGH_NIBBLE; + usRcvBufferPos = 0; + eRcvState = STATE_RX_RCV; + + /* Enable timer for character timeout. */ + vMBPortTimersEnable( ); + } + else + { + /* Frame is not okay. Delete entire frame. */ + eRcvState = STATE_RX_IDLE; + } + break; + + case STATE_RX_IDLE: + if( ucByte == ':' ) + { + /* Enable timer for character timeout. */ + vMBPortTimersEnable( ); + /* Reset the input buffers to store the frame. */ + usRcvBufferPos = 0;; + eBytePos = BYTE_HIGH_NIBBLE; + eRcvState = STATE_RX_RCV; + } + break; + } + + return xNeedPoll; +} + +BOOL +xMBASCIITransmitFSM( void ) +{ + BOOL xNeedPoll = FALSE; + UCHAR ucByte; + + assert( eRcvState == STATE_RX_IDLE ); + switch ( eSndState ) + { + /* Start of transmission. The start of a frame is defined by sending + * the character ':'. */ + case STATE_TX_START: + ucByte = ':'; + xMBPortSerialPutByte( ( CHAR )ucByte ); + eSndState = STATE_TX_DATA; + eBytePos = BYTE_HIGH_NIBBLE; + break; + + /* Send the data block. Each data byte is encoded as a character hex + * stream with the high nibble sent first and the low nibble sent + * last. If all data bytes are exhausted we send a '\r' character + * to end the transmission. */ + case STATE_TX_DATA: + if( usSndBufferCount > 0 ) + { + switch ( eBytePos ) + { + case BYTE_HIGH_NIBBLE: + ucByte = prvucMBBIN2CHAR( ( UCHAR )( *pucSndBufferCur >> 4 ) ); + xMBPortSerialPutByte( ( CHAR ) ucByte ); + eBytePos = BYTE_LOW_NIBBLE; + break; + + case BYTE_LOW_NIBBLE: + ucByte = prvucMBBIN2CHAR( ( UCHAR )( *pucSndBufferCur & 0x0F ) ); + xMBPortSerialPutByte( ( CHAR )ucByte ); + pucSndBufferCur++; + eBytePos = BYTE_HIGH_NIBBLE; + usSndBufferCount--; + break; + } + } + else + { + xMBPortSerialPutByte( MB_ASCII_DEFAULT_CR ); + eSndState = STATE_TX_END; + } + break; + + /* Finish the frame by sending a LF character. */ + case STATE_TX_END: + xMBPortSerialPutByte( ( CHAR )ucMBLFCharacter ); + /* We need another state to make sure that the CR character has + * been sent. */ + eSndState = STATE_TX_NOTIFY; + break; + + /* Notify the task which called eMBASCIISend that the frame has + * been sent. */ + case STATE_TX_NOTIFY: + eSndState = STATE_TX_IDLE; + xNeedPoll = xMBPortEventPost( EV_FRAME_SENT ); + + /* Disable transmitter. This prevents another transmit buffer + * empty interrupt. */ + vMBPortSerialEnable( TRUE, FALSE ); + eSndState = STATE_TX_IDLE; + break; + + /* We should not get a transmitter event if the transmitter is in + * idle state. */ + case STATE_TX_IDLE: + /* enable receiver/disable transmitter. */ + vMBPortSerialEnable( TRUE, FALSE ); + break; + } + + return xNeedPoll; +} + +BOOL +xMBASCIITimerT1SExpired( void ) +{ + switch ( eRcvState ) + { + /* If we have a timeout we go back to the idle state and wait for + * the next frame. + */ + case STATE_RX_RCV: + case STATE_RX_WAIT_EOF: + eRcvState = STATE_RX_IDLE; + break; + + default: + assert( ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_WAIT_EOF ) ); + break; + } + vMBPortTimersDisable( ); + + /* no context switch required. */ + return FALSE; +} + + +static UCHAR +prvucMBCHAR2BIN( UCHAR ucCharacter ) +{ + if( ( ucCharacter >= '0' ) && ( ucCharacter <= '9' ) ) + { + return ( UCHAR )( ucCharacter - '0' ); + } + else if( ( ucCharacter >= 'A' ) && ( ucCharacter <= 'F' ) ) + { + return ( UCHAR )( ucCharacter - 'A' + 0x0A ); + } + else + { + return 0xFF; + } +} + +static UCHAR +prvucMBBIN2CHAR( UCHAR ucByte ) +{ + if( ucByte <= 0x09 ) + { + return ( UCHAR )( '0' + ucByte ); + } + else if( ( ucByte >= 0x0A ) && ( ucByte <= 0x0F ) ) + { + return ( UCHAR )( ucByte - 0x0A + 'A' ); + } + else + { + /* Programming error. */ + assert( 0 ); + } + return '0'; +} + + +static UCHAR +prvucMBLRC( UCHAR * pucFrame, USHORT usLen ) +{ + UCHAR ucLRC = 0; /* LRC char initialized */ + + while( usLen-- ) + { + ucLRC += *pucFrame++; /* Add buffer byte without carry */ + } + + /* Return twos complement */ + ucLRC = ( UCHAR ) ( -( ( CHAR ) ucLRC ) ); + return ucLRC; +} + +#endif diff --git a/Core/Src/Modbus/ascii/mbascii.h b/Core/Src/Modbus/ascii/mbascii.h new file mode 100644 index 0000000..47846dd --- /dev/null +++ b/Core/Src/Modbus/ascii/mbascii.h @@ -0,0 +1,56 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbascii.h,v 1.8 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_ASCII_H +#define _MB_ASCII_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +#if MB_ASCII_ENABLED > 0 +eMBErrorCode eMBASCIIInit( UCHAR slaveAddress, UCHAR ucPort, + ULONG ulBaudRate, eMBParity eParity ); +void eMBASCIIStart( void ); +void eMBASCIIStop( void ); + +eMBErrorCode eMBASCIIReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, + USHORT * pusLength ); +eMBErrorCode eMBASCIISend( UCHAR slaveAddress, const UCHAR * pucFrame, + USHORT usLength ); +BOOL xMBASCIIReceiveFSM( void ); +BOOL xMBASCIITransmitFSM( void ); +BOOL xMBASCIITimerT1SExpired( void ); +#endif + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/functions/mbfunccoils.c b/Core/Src/Modbus/functions/mbfunccoils.c new file mode 100644 index 0000000..54227b3 --- /dev/null +++ b/Core/Src/Modbus/functions/mbfunccoils.c @@ -0,0 +1,270 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfunccoils.c,v 1.8 2007/02/18 23:47:16 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_READ_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_COILCNT_MAX ( 0x07D0 ) + +#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_SIZE ( 4 ) + +#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 ) +#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 ) +#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 ) +#define MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ( 0x07B0 ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ + +#if MB_FUNC_READ_COILS_ENABLED > 0 + +eMBException +eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usCoilCount; + UCHAR ucNBytes; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usCoilCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_COILCNT_OFF] << 8 ); + usCoilCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_COILCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usCoilCount >= 1 ) && + ( usCoilCount < MB_PDU_FUNC_READ_COILCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_COILS; + *usLen += 1; + + /* Test if the quantity of coils is a multiple of 8. If not last + * byte is only partially field with unused coils set to zero. */ + if( ( usCoilCount & 0x0007 ) != 0 ) + { + ucNBytes = ( UCHAR )( usCoilCount / 8 + 1 ); + } + else + { + ucNBytes = ( UCHAR )( usCoilCount / 8 ); + } + *pucFrameCur++ = ucNBytes; + *usLen += 1; + + eRegStatus = + eMBRegCoilsCB( pucFrameCur, usRegAddress, usCoilCount, + MB_REG_READ ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting address + * and the quantity of registers. We reuse the old values in the + * buffer because they are still valid. */ + *usLen += ucNBytes;; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid read coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#if MB_FUNC_WRITE_COIL_ENABLED > 0 +eMBException +eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + UCHAR ucBuf[2]; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] ); + usRegAddress++; + + if( ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF + 1] == 0x00 ) && + ( ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0xFF ) || + ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0x00 ) ) ) + { + ucBuf[1] = 0; + if( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0xFF ) + { + ucBuf[0] = 1; + } + else + { + ucBuf[0] = 0; + } + eRegStatus = + eMBRegCoilsCB( &ucBuf[0], usRegAddress, 1, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid write coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif + +#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0 +eMBException +eMBFuncWriteMultipleCoils( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usCoilCnt; + UCHAR ucByteCount; + UCHAR ucByteCountVerify; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen > ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF + 1] ); + usRegAddress++; + + usCoilCnt = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF] << 8 ); + usCoilCnt |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF + 1] ); + + ucByteCount = pucFrame[MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF]; + + /* Compute the number of expected bytes in the request. */ + if( ( usCoilCnt & 0x0007 ) != 0 ) + { + ucByteCountVerify = ( UCHAR )( usCoilCnt / 8 + 1 ); + } + else + { + ucByteCountVerify = ( UCHAR )( usCoilCnt / 8 ); + } + + if( ( usCoilCnt >= 1 ) && + ( usCoilCnt <= MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ) && + ( ucByteCountVerify == ucByteCount ) ) + { + eRegStatus = + eMBRegCoilsCB( &pucFrame[MB_PDU_FUNC_WRITE_MUL_VALUES_OFF], + usRegAddress, usCoilCnt, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting address + * and the quantity of registers. We reuse the old values in the + * buffer because they are still valid. */ + *usLen = MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid write coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif + +#endif diff --git a/Core/Src/Modbus/functions/mbfuncdiag.c b/Core/Src/Modbus/functions/mbfuncdiag.c new file mode 100644 index 0000000..d75ffc0 --- /dev/null +++ b/Core/Src/Modbus/functions/mbfuncdiag.c @@ -0,0 +1,29 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncdiag.c,v 1.3 2006/12/07 22:10:34 wolti Exp $ + */ diff --git a/Core/Src/Modbus/functions/mbfuncdisc.c b/Core/Src/Modbus/functions/mbfuncdisc.c new file mode 100644 index 0000000..fb37844 --- /dev/null +++ b/Core/Src/Modbus/functions/mbfuncdisc.c @@ -0,0 +1,125 @@ + /* + * FreeRTOS Modbus Libary: A Modbus serial implementation for FreeRTOS + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_READ_DISCCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_DISCCNT_MAX ( 0x07D0 ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ + +#if MB_FUNC_READ_COILS_ENABLED > 0 + +eMBException +eMBFuncReadDiscreteInputs( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usDiscreteCnt; + UCHAR ucNBytes; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usDiscreteCnt = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF] << 8 ); + usDiscreteCnt |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usDiscreteCnt >= 1 ) && + ( usDiscreteCnt < MB_PDU_FUNC_READ_DISCCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_DISCRETE_INPUTS; + *usLen += 1; + + /* Test if the quantity of coils is a multiple of 8. If not last + * byte is only partially field with unused coils set to zero. */ + if( ( usDiscreteCnt & 0x0007 ) != 0 ) + { + ucNBytes = ( UCHAR ) ( usDiscreteCnt / 8 + 1 ); + } + else + { + ucNBytes = ( UCHAR ) ( usDiscreteCnt / 8 ); + } + *pucFrameCur++ = ucNBytes; + *usLen += 1; + + eRegStatus = + eMBRegDiscreteCB( pucFrameCur, usRegAddress, usDiscreteCnt ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting address + * and the quantity of registers. We reuse the old values in the + * buffer because they are still valid. */ + *usLen += ucNBytes;; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid read coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif diff --git a/Core/Src/Modbus/functions/mbfuncholding.c b/Core/Src/Modbus/functions/mbfuncholding.c new file mode 100644 index 0000000..e74a062 --- /dev/null +++ b/Core/Src/Modbus/functions/mbfuncholding.c @@ -0,0 +1,308 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncholding.c,v 1.12 2007/02/18 23:48:22 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF + 0) +#define MB_PDU_FUNC_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_REGCNT_MAX ( 0x007D ) + +#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF + 0) +#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_SIZE ( 4 ) + +#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF + 0 ) +#define MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 ) +#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 ) +#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 ) +#define MB_PDU_FUNC_WRITE_MUL_REGCNT_MAX ( 0x0078 ) + +#define MB_PDU_FUNC_READWRITE_READ_ADDR_OFF ( MB_PDU_DATA_OFF + 0 ) +#define MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF + 4 ) +#define MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF ( MB_PDU_DATA_OFF + 6 ) +#define MB_PDU_FUNC_READWRITE_BYTECNT_OFF ( MB_PDU_DATA_OFF + 8 ) +#define MB_PDU_FUNC_READWRITE_WRITE_VALUES_OFF ( MB_PDU_DATA_OFF + 9 ) +#define MB_PDU_FUNC_READWRITE_SIZE_MIN ( 9 ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ + +#if MB_FUNC_WRITE_HOLDING_ENABLED > 0 + +eMBException +eMBFuncWriteHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] ); + usRegAddress++; + + /* Make callback to update the value. */ + eRegStatus = eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF], + usRegAddress, 1, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + } + else + { + /* Can't be a valid request because the length is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} +#endif + +#if MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED > 0 +eMBException +eMBFuncWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usRegCount; + UCHAR ucRegByteCount; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen >= ( MB_PDU_FUNC_WRITE_MUL_SIZE_MIN + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF + 1] ); + usRegAddress++; + + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF] << 8 ); + usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF + 1] ); + + ucRegByteCount = pucFrame[MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF]; + + if( ( usRegCount >= 1 ) && + ( usRegCount <= MB_PDU_FUNC_WRITE_MUL_REGCNT_MAX ) && + ( ucRegByteCount == ( UCHAR ) ( 2 * usRegCount ) ) ) + { + /* Make callback to update the register values. */ + eRegStatus = + eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_WRITE_MUL_VALUES_OFF], + usRegAddress, usRegCount, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting + * address and the quantity of registers. We reuse the + * old values in the buffer because they are still valid. + */ + *usLen = MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid request because the length is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} +#endif + +#if MB_FUNC_READ_HOLDING_ENABLED > 0 + +eMBException +eMBFuncReadHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usRegCount; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 ); + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usRegCount >= 1 ) && ( usRegCount <= MB_PDU_FUNC_READ_REGCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_HOLDING_REGISTER; + *usLen += 1; + + /* Second byte in the response contain the number of bytes. */ + *pucFrameCur++ = ( UCHAR ) ( usRegCount * 2 ); + *usLen += 1; + + /* Make callback to fill the buffer. */ + eRegStatus = eMBRegHoldingCB( pucFrameCur, usRegAddress, usRegCount, MB_REG_READ ); + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + *usLen += usRegCount * 2; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid request because the length is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif + +#if MB_FUNC_READWRITE_HOLDING_ENABLED > 0 + +eMBException +eMBFuncReadWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegReadAddress; + USHORT usRegReadCount; + USHORT usRegWriteAddress; + USHORT usRegWriteCount; + UCHAR ucRegWriteByteCount; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen >= ( MB_PDU_FUNC_READWRITE_SIZE_MIN + MB_PDU_SIZE_MIN ) ) + { + usRegReadAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_ADDR_OFF] << 8U ); + usRegReadAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_ADDR_OFF + 1] ); + usRegReadAddress++; + + usRegReadCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF] << 8U ); + usRegReadCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF + 1] ); + + usRegWriteAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF] << 8U ); + usRegWriteAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF + 1] ); + usRegWriteAddress++; + + usRegWriteCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF] << 8U ); + usRegWriteCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF + 1] ); + + ucRegWriteByteCount = pucFrame[MB_PDU_FUNC_READWRITE_BYTECNT_OFF]; + + if( ( usRegReadCount >= 1 ) && ( usRegReadCount <= 0x7D ) && + ( usRegWriteCount >= 1 ) && ( usRegWriteCount <= 0x79 ) && + ( ( 2 * usRegWriteCount ) == ucRegWriteByteCount ) ) + { + /* Make callback to update the register values. */ + eRegStatus = eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_READWRITE_WRITE_VALUES_OFF], + usRegWriteAddress, usRegWriteCount, MB_REG_WRITE ); + + if( eRegStatus == MB_ENOERR ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READWRITE_MULTIPLE_REGISTERS; + *usLen += 1; + + /* Second byte in the response contain the number of bytes. */ + *pucFrameCur++ = ( UCHAR ) ( usRegReadCount * 2 ); + *usLen += 1; + + /* Make the read callback. */ + eRegStatus = + eMBRegHoldingCB( pucFrameCur, usRegReadAddress, usRegReadCount, MB_REG_READ ); + if( eRegStatus == MB_ENOERR ) + { + *usLen += 2 * usRegReadCount; + } + } + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + return eStatus; +} + +#endif diff --git a/Core/Src/Modbus/functions/mbfuncinput.c b/Core/Src/Modbus/functions/mbfuncinput.c new file mode 100644 index 0000000..cceedba --- /dev/null +++ b/Core/Src/Modbus/functions/mbfuncinput.c @@ -0,0 +1,122 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncinput.c,v 1.10 2007/09/12 10:15:56 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_REGCNT_MAX ( 0x007D ) + +#define MB_PDU_FUNC_READ_RSP_BYTECNT_OFF ( MB_PDU_DATA_OFF ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ +#if MB_FUNC_READ_INPUT_ENABLED > 0 + +eMBException +eMBFuncReadInputRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usRegCount; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 ); + usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usRegCount >= 1 ) + && ( usRegCount < MB_PDU_FUNC_READ_REGCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_INPUT_REGISTER; + *usLen += 1; + + /* Second byte in the response contain the number of bytes. */ + *pucFrameCur++ = ( UCHAR )( usRegCount * 2 ); + *usLen += 1; + + eRegStatus = + eMBRegInputCB( pucFrameCur, usRegAddress, usRegCount ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + *usLen += usRegCount * 2; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid read input register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif diff --git a/Core/Src/Modbus/functions/mbfuncother.c b/Core/Src/Modbus/functions/mbfuncother.c new file mode 100644 index 0000000..2bcc664 --- /dev/null +++ b/Core/Src/Modbus/functions/mbfuncother.c @@ -0,0 +1,88 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncother.c,v 1.8 2006/12/07 22:10:34 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +#if MB_FUNC_OTHER_REP_SLAVEID_ENABLED > 0 + +/* ----------------------- Static variables ---------------------------------*/ +static UCHAR ucMBSlaveID[MB_FUNC_OTHER_REP_SLAVEID_BUF]; +static USHORT usMBSlaveIDLen; + +/* ----------------------- Start implementation -----------------------------*/ + +eMBErrorCode +eMBSetSlaveID( UCHAR ucSlaveID, _Bool xIsRunning, + UCHAR const *pucAdditional, USHORT usAdditionalLen ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + /* the first byte and second byte in the buffer is reserved for + * the parameter ucSlaveID and the running flag. The rest of + * the buffer is available for additional data. */ + if( usAdditionalLen + 2 < MB_FUNC_OTHER_REP_SLAVEID_BUF ) + { + usMBSlaveIDLen = 0; + ucMBSlaveID[usMBSlaveIDLen++] = ucSlaveID; + ucMBSlaveID[usMBSlaveIDLen++] = ( UCHAR )( xIsRunning ? 0xFF : 0x00 ); + if( usAdditionalLen > 0 ) + { + memcpy( &ucMBSlaveID[usMBSlaveIDLen], pucAdditional, + ( size_t )usAdditionalLen ); + usMBSlaveIDLen += usAdditionalLen; + } + } + else + { + eStatus = MB_ENORES; + } + return eStatus; +} + +eMBException +eMBFuncReportSlaveID( UCHAR * pucFrame, USHORT * usLen ) +{ + memcpy( &pucFrame[MB_PDU_DATA_OFF], &ucMBSlaveID[0], ( size_t )usMBSlaveIDLen ); + *usLen = ( USHORT )( MB_PDU_DATA_OFF + usMBSlaveIDLen ); + return MB_EX_NONE; +} + +#endif diff --git a/Core/Src/Modbus/functions/mbutils.c b/Core/Src/Modbus/functions/mbutils.c new file mode 100644 index 0000000..6a72570 --- /dev/null +++ b/Core/Src/Modbus/functions/mbutils.c @@ -0,0 +1,141 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbutils.c,v 1.6 2007/02/18 23:49:07 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbproto.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define BITS_UCHAR 8U + +/* ----------------------- Start implementation -----------------------------*/ +void +xMBUtilSetBits( UCHAR * ucByteBuf, USHORT usBitOffset, UCHAR ucNBits, + UCHAR ucValue ) +{ + USHORT usWordBuf; + USHORT usMask; + USHORT usByteOffset; + USHORT usNPreBits; + USHORT usValue = ucValue; + + assert( ucNBits <= 8 ); + assert( ( size_t )BITS_UCHAR == sizeof( UCHAR ) * 8 ); + + /* Calculate byte offset for first byte containing the bit values starting + * at usBitOffset. */ + usByteOffset = ( USHORT )( ( usBitOffset ) / BITS_UCHAR ); + + /* How many bits precede our bits to set. */ + usNPreBits = ( USHORT )( usBitOffset - usByteOffset * BITS_UCHAR ); + + /* Move bit field into position over bits to set */ + usValue <<= usNPreBits; + + /* Prepare a mask for setting the new bits. */ + usMask = ( USHORT )( ( 1 << ( USHORT ) ucNBits ) - 1 ); + usMask <<= usBitOffset - usByteOffset * BITS_UCHAR; + + /* copy bits into temporary storage. */ + usWordBuf = ucByteBuf[usByteOffset]; + usWordBuf |= ucByteBuf[usByteOffset + 1] << BITS_UCHAR; + + /* Zero out bit field bits and then or value bits into them. */ + usWordBuf = ( USHORT )( ( usWordBuf & ( ~usMask ) ) | usValue ); + + /* move bits back into storage */ + ucByteBuf[usByteOffset] = ( UCHAR )( usWordBuf & 0xFF ); + ucByteBuf[usByteOffset + 1] = ( UCHAR )( usWordBuf >> BITS_UCHAR ); +} + +UCHAR +xMBUtilGetBits( UCHAR * ucByteBuf, USHORT usBitOffset, UCHAR ucNBits ) +{ + USHORT usWordBuf; + USHORT usMask; + USHORT usByteOffset; + USHORT usNPreBits; + + /* Calculate byte offset for first byte containing the bit values starting + * at usBitOffset. */ + usByteOffset = ( USHORT )( ( usBitOffset ) / BITS_UCHAR ); + + /* How many bits precede our bits to set. */ + usNPreBits = ( USHORT )( usBitOffset - usByteOffset * BITS_UCHAR ); + + /* Prepare a mask for setting the new bits. */ + usMask = ( USHORT )( ( 1 << ( USHORT ) ucNBits ) - 1 ); + + /* copy bits into temporary storage. */ + usWordBuf = ucByteBuf[usByteOffset]; + usWordBuf |= ucByteBuf[usByteOffset + 1] << BITS_UCHAR; + + /* throw away unneeded bits. */ + usWordBuf >>= usNPreBits; + + /* mask away bits above the requested bitfield. */ + usWordBuf &= usMask; + + return ( UCHAR ) usWordBuf; +} + +eMBException +prveMBError2Exception( eMBErrorCode eErrorCode ) +{ + eMBException eStatus; + + switch ( eErrorCode ) + { + case MB_ENOERR: + eStatus = MB_EX_NONE; + break; + + case MB_ENOREG: + eStatus = MB_EX_ILLEGAL_DATA_ADDRESS; + break; + + case MB_ETIMEDOUT: + eStatus = MB_EX_SLAVE_BUSY; + break; + + default: + eStatus = MB_EX_SLAVE_DEVICE_FAILURE; + break; + } + + return eStatus; +} diff --git a/Core/Src/Modbus/include/mb.h b/Core/Src/Modbus/include/mb.h new file mode 100644 index 0000000..ea5719e --- /dev/null +++ b/Core/Src/Modbus/include/mb.h @@ -0,0 +1,417 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mb.h,v 1.17 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_H +#define _MB_H + +#include "port.h" + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +#include "mbport.h" +#include "mbproto.h" + +/*! \defgroup modbus Modbus + * \code #include "mb.h" \endcode + * + * This module defines the interface for the application. It contains + * the basic functions and types required to use the Modbus protocol stack. + * A typical application will want to call eMBInit() first. If the device + * is ready to answer network requests it must then call eMBEnable() to activate + * the protocol stack. In the main loop the function eMBPoll() must be called + * periodically. The time interval between pooling depends on the configured + * Modbus timeout. If an RTOS is available a separate task should be created + * and the task should always call the function eMBPoll(). + * + * \code + * // Initialize protocol stack in RTU mode for a slave with address 10 = 0x0A + * eMBInit( MB_RTU, 0x0A, 38400, MB_PAR_EVEN ); + * // Enable the Modbus Protocol Stack. + * eMBEnable( ); + * for( ;; ) + * { + * // Call the main polling loop of the Modbus protocol stack. + * eMBPoll( ); + * ... + * } + * \endcode + */ + +/* ----------------------- Defines ------------------------------------------*/ + +/*! \ingroup modbus + * \brief Use the default Modbus TCP port (502) + */ +#define MB_TCP_PORT_USE_DEFAULT 0 + +/* ----------------------- Type definitions ---------------------------------*/ + +/*! \ingroup modbus + * \brief Modbus serial transmission modes (RTU/ASCII). + * + * Modbus serial supports two transmission modes. Either ASCII or RTU. RTU + * is faster but has more hardware requirements and requires a network with + * a low jitter. ASCII is slower and more reliable on slower links (E.g. modems) + */ + typedef enum +{ + MB_RTU, /*!< RTU transmission mode. */ + MB_ASCII, /*!< ASCII transmission mode. */ + MB_TCP /*!< TCP mode. */ +} eMBMode; + +/*! \ingroup modbus + * \brief If register should be written or read. + * + * This value is passed to the callback functions which support either + * reading or writing register values. Writing means that the application + * registers should be updated and reading means that the modbus protocol + * stack needs to know the current register values. + * + * \see eMBRegHoldingCB( ), eMBRegCoilsCB( ), eMBRegDiscreteCB( ) and + * eMBRegInputCB( ). + */ +typedef enum +{ + MB_REG_READ, /*!< Read register values and pass to protocol stack. */ + MB_REG_WRITE /*!< Update register values. */ +} eMBRegisterMode; + +/*! \ingroup modbus + * \brief Errorcodes used by all function in the protocol stack. + */ +typedef enum +{ + MB_ENOERR, /*!< no error. */ + MB_ENOREG, /*!< illegal register address. */ + MB_EINVAL, /*!< illegal argument. */ + MB_EPORTERR, /*!< porting layer error. */ + MB_ENORES, /*!< insufficient resources. */ + MB_EIO, /*!< I/O error. */ + MB_EILLSTATE, /*!< protocol stack in illegal state. */ + MB_ETIMEDOUT /*!< timeout error occurred. */ +} eMBErrorCode; + + +/* ----------------------- Function prototypes ------------------------------*/ +/*! \ingroup modbus + * \brief Initialize the Modbus protocol stack. + * + * This functions initializes the ASCII or RTU module and calls the + * init functions of the porting layer to prepare the hardware. Please + * note that the receiver is still disabled and no Modbus frames are + * processed until eMBEnable( ) has been called. + * + * \param eMode If ASCII or RTU mode should be used. + * \param ucSlaveAddress The slave address. Only frames sent to this + * address or to the broadcast address are processed. + * \param ucPort The port to use. E.g. 1 for COM1 on windows. This value + * is platform dependent and some ports simply choose to ignore it. + * \param ulBaudRate The baudrate. E.g. 19200. Supported baudrates depend + * on the porting layer. + * \param eParity Parity used for serial transmission. + * + * \return If no error occurs the function returns eMBErrorCode::MB_ENOERR. + * The protocol is then in the disabled state and ready for activation + * by calling eMBEnable( ). Otherwise one of the following error codes + * is returned: + * - eMBErrorCode::MB_EINVAL If the slave address was not valid. Valid + * slave addresses are in the range 1 - 247. + * - eMBErrorCode::MB_EPORTERR IF the porting layer returned an error. + */ +eMBErrorCode eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, + UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ); + +/*! \ingroup modbus + * \brief Initialize the Modbus protocol stack for Modbus TCP. + * + * This function initializes the Modbus TCP Module. Please note that + * frame processing is still disabled until eMBEnable( ) is called. + * + * \param usTCPPort The TCP port to listen on. + * \return If the protocol stack has been initialized correctly the function + * returns eMBErrorCode::MB_ENOERR. Otherwise one of the following error + * codes is returned: + * - eMBErrorCode::MB_EINVAL If the slave address was not valid. Valid + * slave addresses are in the range 1 - 247. + * - eMBErrorCode::MB_EPORTERR IF the porting layer returned an error. + */ +eMBErrorCode eMBTCPInit( USHORT usTCPPort ); + +/*! \ingroup modbus + * \brief Release resources used by the protocol stack. + * + * This function disables the Modbus protocol stack and release all + * hardware resources. It must only be called when the protocol stack + * is disabled. + * + * \note Note all ports implement this function. A port which wants to + * get an callback must define the macro MB_PORT_HAS_CLOSE to 1. + * + * \return If the resources where released it return eMBErrorCode::MB_ENOERR. + * If the protocol stack is not in the disabled state it returns + * eMBErrorCode::MB_EILLSTATE. + */ +eMBErrorCode eMBClose( void ); + +/*! \ingroup modbus + * \brief Enable the Modbus protocol stack. + * + * This function enables processing of Modbus frames. Enabling the protocol + * stack is only possible if it is in the disabled state. + * + * \return If the protocol stack is now in the state enabled it returns + * eMBErrorCode::MB_ENOERR. If it was not in the disabled state it + * return eMBErrorCode::MB_EILLSTATE. + */ +eMBErrorCode eMBEnable( void ); + +/*! \ingroup modbus + * \brief Disable the Modbus protocol stack. + * + * This function disables processing of Modbus frames. + * + * \return If the protocol stack has been disabled it returns + * eMBErrorCode::MB_ENOERR. If it was not in the enabled state it returns + * eMBErrorCode::MB_EILLSTATE. + */ +eMBErrorCode eMBDisable( void ); + +/*! \ingroup modbus + * \brief The main pooling loop of the Modbus protocol stack. + * + * This function must be called periodically. The timer interval required + * is given by the application dependent Modbus slave timeout. Internally the + * function calls xMBPortEventGet() and waits for an event from the receiver or + * transmitter state machines. + * + * \return If the protocol stack is not in the enabled state the function + * returns eMBErrorCode::MB_EILLSTATE. Otherwise it returns + * eMBErrorCode::MB_ENOERR. + */ +eMBErrorCode eMBPoll( void ); + +/*! \ingroup modbus + * \brief Configure the slave id of the device. + * + * This function should be called when the Modbus function Report Slave ID + * is enabled ( By defining MB_FUNC_OTHER_REP_SLAVEID_ENABLED in mbconfig.h ). + * + * \param ucSlaveID Values is returned in the Slave ID byte of the + * Report Slave ID response. + * \param xIsRunning If TRUE the Run Indicator Status byte is set to 0xFF. + * otherwise the Run Indicator Status is 0x00. + * \param pucAdditional Values which should be returned in the Additional + * bytes of the Report Slave ID response. + * \param usAdditionalLen Length of the buffer pucAdditonal. + * + * \return If the static buffer defined by MB_FUNC_OTHER_REP_SLAVEID_BUF in + * mbconfig.h is to small it returns eMBErrorCode::MB_ENORES. Otherwise + * it returns eMBErrorCode::MB_ENOERR. + */ +eMBErrorCode eMBSetSlaveID( UCHAR ucSlaveID, _Bool xIsRunning, + UCHAR const *pucAdditional, + USHORT usAdditionalLen ); + +/*! \ingroup modbus + * \brief Registers a callback handler for a given function code. + * + * This function registers a new callback handler for a given function code. + * The callback handler supplied is responsible for interpreting the Modbus PDU and + * the creation of an appropriate response. In case of an error it should return + * one of the possible Modbus exceptions which results in a Modbus exception frame + * sent by the protocol stack. + * + * \param ucFunctionCode The Modbus function code for which this handler should + * be registers. Valid function codes are in the range 1 to 127. + * \param pxHandler The function handler which should be called in case + * such a frame is received. If \c NULL a previously registered function handler + * for this function code is removed. + * + * \return eMBErrorCode::MB_ENOERR if the handler has been installed. If no + * more resources are available it returns eMBErrorCode::MB_ENORES. In this + * case the values in mbconfig.h should be adjusted. If the argument was not + * valid it returns eMBErrorCode::MB_EINVAL. + */ +eMBErrorCode eMBRegisterCB( UCHAR ucFunctionCode, + pxMBFunctionHandler pxHandler ); + +/* ----------------------- Callback -----------------------------------------*/ + +/*! \defgroup modbus_registers Modbus Registers + * \code #include "mb.h" \endcode + * The protocol stack does not internally allocate any memory for the + * registers. This makes the protocol stack very small and also usable on + * low end targets. In addition the values don't have to be in the memory + * and could for example be stored in a flash.
+ * Whenever the protocol stack requires a value it calls one of the callback + * function with the register address and the number of registers to read + * as an argument. The application should then read the actual register values + * (for example the ADC voltage) and should store the result in the supplied + * buffer.
+ * If the protocol stack wants to update a register value because a write + * register function was received a buffer with the new register values is + * passed to the callback function. The function should then use these values + * to update the application register values. + */ + +/*! \ingroup modbus_registers + * \brief Callback function used if the value of a Input Register + * is required by the protocol stack. The starting register address is given + * by \c usAddress and the last register is given by usAddress + + * usNRegs - 1. + * + * \param pucRegBuffer A buffer where the callback function should write + * the current value of the modbus registers to. + * \param usAddress The starting address of the register. Input registers + * are in the range 1 - 65535. + * \param usNRegs Number of registers the callback function must supply. + * + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If the application can not supply values + * for registers within this range. In this case a + * ILLEGAL DATA ADDRESS exception frame is sent as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNRegs ); + +/*! \ingroup modbus_registers + * \brief Callback function used if a Holding Register value is + * read or written by the protocol stack. The starting register address + * is given by \c usAddress and the last register is given by + * usAddress + usNRegs - 1. + * + * \param pucRegBuffer If the application registers values should be updated the + * buffer points to the new registers values. If the protocol stack needs + * to now the current values the callback function should write them into + * this buffer. + * \param usAddress The starting address of the register. + * \param usNRegs Number of registers to read or write. + * \param eMode If eMBRegisterMode::MB_REG_WRITE the application register + * values should be updated from the values in the buffer. For example + * this would be the case when the Modbus master has issued an + * WRITE SINGLE REGISTER command. + * If the value eMBRegisterMode::MB_REG_READ the application should copy + * the current values into the buffer \c pucRegBuffer. + * + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If the application can not supply values + * for registers within this range. In this case a + * ILLEGAL DATA ADDRESS exception frame is sent as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNRegs, eMBRegisterMode eMode ); + +/*! \ingroup modbus_registers + * \brief Callback function used if a Coil Register value is + * read or written by the protocol stack. If you are going to use + * this function you might use the functions xMBUtilSetBits( ) and + * xMBUtilGetBits( ) for working with bitfields. + * + * \param pucRegBuffer The bits are packed in bytes where the first coil + * starting at address \c usAddress is stored in the LSB of the + * first byte in the buffer pucRegBuffer. + * If the buffer should be written by the callback function unused + * coil values (I.e. if not a multiple of eight coils is used) should be set + * to zero. + * \param usAddress The first coil number. + * \param usNCoils Number of coil values requested. + * \param eMode If eMBRegisterMode::MB_REG_WRITE the application values should + * be updated from the values supplied in the buffer \c pucRegBuffer. + * If eMBRegisterMode::MB_REG_READ the application should store the current + * values in the buffer \c pucRegBuffer. + * + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If the application does not map an coils + * within the requested address range. In this case a + * ILLEGAL DATA ADDRESS is sent as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNCoils, eMBRegisterMode eMode ); + +/*! \ingroup modbus_registers + * \brief Callback function used if a Input Discrete Register value is + * read by the protocol stack. + * + * If you are going to use his function you might use the functions + * xMBUtilSetBits( ) and xMBUtilGetBits( ) for working with bitfields. + * + * \param pucRegBuffer The buffer should be updated with the current + * coil values. The first discrete input starting at \c usAddress must be + * stored at the LSB of the first byte in the buffer. If the requested number + * is not a multiple of eight the remaining bits should be set to zero. + * \param usAddress The starting address of the first discrete input. + * \param usNDiscrete Number of discrete input values. + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If no such discrete inputs exists. + * In this case a ILLEGAL DATA ADDRESS exception frame is sent + * as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNDiscrete ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/include/mbconfig.h b/Core/Src/Modbus/include/mbconfig.h new file mode 100644 index 0000000..493b0e7 --- /dev/null +++ b/Core/Src/Modbus/include/mbconfig.h @@ -0,0 +1,132 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbconfig.h,v 1.15 2010/06/06 13:54:40 wolti Exp $ + */ + +#ifndef _MB_CONFIG_H +#define _MB_CONFIG_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/* ----------------------- Defines ------------------------------------------*/ +/*! \defgroup modbus_cfg Modbus Configuration + * + * Most modules in the protocol stack are completly optional and can be + * excluded. This is specially important if target resources are very small + * and program memory space should be saved.
+ * + * All of these settings are available in the file mbconfig.h + */ +/*! \addtogroup modbus_cfg + * @{ + */ +/*! \brief If Modbus ASCII support is enabled. */ +#define MB_ASCII_ENABLED ( 0 ) + +/*! \brief If Modbus RTU support is enabled. */ +#define MB_RTU_ENABLED ( 1 ) + +/*! \brief If Modbus TCP support is enabled. */ +#define MB_TCP_ENABLED ( 0 ) + +/*! \brief The character timeout value for Modbus ASCII. + * + * The character timeout value is not fixed for Modbus ASCII and is therefore + * a configuration option. It should be set to the maximum expected delay + * time of the network. + */ +#define MB_ASCII_TIMEOUT_SEC ( 1 ) + +/*! \brief Timeout to wait in ASCII prior to enabling transmitter. + * + * If defined the function calls vMBPortSerialDelay with the argument + * MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS to allow for a delay before + * the serial transmitter is enabled. This is required because some + * targets are so fast that there is no time between receiving and + * transmitting the frame. If the master is to slow with enabling its + * receiver then he will not receive the response correctly. + */ +#ifndef MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS +#define MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS ( 0 ) +#endif + +/*! \brief Maximum number of Modbus functions codes the protocol stack + * should support. + * + * The maximum number of supported Modbus functions must be greater than + * the sum of all enabled functions in this file and custom function + * handlers. If set to small adding more functions will fail. + */ +#define MB_FUNC_HANDLERS_MAX ( 16 ) + +/*! \brief Number of bytes which should be allocated for the Report Slave ID + * command. + * + * This number limits the maximum size of the additional segment in the + * report slave id function. See eMBSetSlaveID( ) for more information on + * how to set this value. It is only used if MB_FUNC_OTHER_REP_SLAVEID_ENABLED + * is set to 1. + */ +#define MB_FUNC_OTHER_REP_SLAVEID_BUF ( 32 ) + +/*! \brief If the Report Slave ID function should be enabled. */ +#define MB_FUNC_OTHER_REP_SLAVEID_ENABLED ( 1 ) + +/*! \brief If the Read Input Registers function should be enabled. */ +#define MB_FUNC_READ_INPUT_ENABLED ( 1 ) + +/*! \brief If the Read Holding Registers function should be enabled. */ +#define MB_FUNC_READ_HOLDING_ENABLED ( 1 ) + +/*! \brief If the Write Single Register function should be enabled. */ +#define MB_FUNC_WRITE_HOLDING_ENABLED ( 1 ) + +/*! \brief If the Write Multiple registers function should be enabled. */ +#define MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED ( 1 ) + +/*! \brief If the Read Coils function should be enabled. */ +#define MB_FUNC_READ_COILS_ENABLED ( 1 ) + +/*! \brief If the Write Coils function should be enabled. */ +#define MB_FUNC_WRITE_COIL_ENABLED ( 1 ) + +/*! \brief If the Write Multiple Coils function should be enabled. */ +#define MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED ( 1 ) + +/*! \brief If the Read Discrete Inputs function should be enabled. */ +#define MB_FUNC_READ_DISCRETE_INPUTS_ENABLED ( 1 ) + +/*! \brief If the Read/Write Multiple Registers function should be enabled. */ +#define MB_FUNC_READWRITE_HOLDING_ENABLED ( 1 ) + +/*! @} */ +#ifdef __cplusplus + PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/include/mbframe.h b/Core/Src/Modbus/include/mbframe.h new file mode 100644 index 0000000..99d59c6 --- /dev/null +++ b/Core/Src/Modbus/include/mbframe.h @@ -0,0 +1,87 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbframe.h,v 1.9 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_FRAME_H +#define _MB_FRAME_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +/*! + * Constants which defines the format of a modbus frame. The example is + * shown for a Modbus RTU/ASCII frame. Note that the Modbus PDU is not + * dependent on the underlying transport. + * + * + * <------------------------ MODBUS SERIAL LINE PDU (1) -------------------> + * <----------- MODBUS PDU (1') ----------------> + * +-----------+---------------+----------------------------+-------------+ + * | Address | Function Code | Data | CRC/LRC | + * +-----------+---------------+----------------------------+-------------+ + * | | | | + * (2) (3/2') (3') (4) + * + * (1) ... MB_SER_PDU_SIZE_MAX = 256 + * (2) ... MB_SER_PDU_ADDR_OFF = 0 + * (3) ... MB_SER_PDU_PDU_OFF = 1 + * (4) ... MB_SER_PDU_SIZE_CRC = 2 + * + * (1') ... MB_PDU_SIZE_MAX = 253 + * (2') ... MB_PDU_FUNC_OFF = 0 + * (3') ... MB_PDU_DATA_OFF = 1 + * + */ + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_SIZE_MAX 253 /*!< Maximum size of a PDU. */ +#define MB_PDU_SIZE_MIN 1 /*!< Function Code */ +#define MB_PDU_FUNC_OFF 0 /*!< Offset of function code in PDU. */ +#define MB_PDU_DATA_OFF 1 /*!< Offset for response data in PDU. */ + +/* ----------------------- Prototypes 0-------------------------------------*/ +typedef void ( *pvMBFrameStart ) ( void ); + +typedef void ( *pvMBFrameStop ) ( void ); + +typedef eMBErrorCode( *peMBFrameReceive ) ( UCHAR * pucRcvAddress, + UCHAR ** pucFrame, + USHORT * pusLength ); + +typedef eMBErrorCode( *peMBFrameSend ) ( UCHAR slaveAddress, + const UCHAR * pucFrame, + USHORT usLength ); + +typedef void( *pvMBFrameClose ) ( void ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/include/mbfunc.h b/Core/Src/Modbus/include/mbfunc.h new file mode 100644 index 0000000..aea14f7 --- /dev/null +++ b/Core/Src/Modbus/include/mbfunc.h @@ -0,0 +1,80 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfunc.h,v 1.12 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_FUNC_H +#define _MB_FUNC_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +#if MB_FUNC_OTHER_REP_SLAVEID_BUF > 0 + eMBException eMBFuncReportSlaveID( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_INPUT_ENABLED > 0 +eMBException eMBFuncReadInputRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_HOLDING_ENABLED > 0 +eMBException eMBFuncReadHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_HOLDING_ENABLED > 0 +eMBException eMBFuncWriteHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED > 0 +eMBException eMBFuncWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_COILS_ENABLED > 0 +eMBException eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_COIL_ENABLED > 0 +eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0 +eMBException eMBFuncWriteMultipleCoils( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_DISCRETE_INPUTS_ENABLED > 0 +eMBException eMBFuncReadDiscreteInputs( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READWRITE_HOLDING_ENABLED > 0 +eMBException eMBFuncReadWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/include/mbport.h b/Core/Src/Modbus/include/mbport.h new file mode 100644 index 0000000..448f329 --- /dev/null +++ b/Core/Src/Modbus/include/mbport.h @@ -0,0 +1,129 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbport.h,v 1.19 2010/06/06 13:54:40 wolti Exp $ + */ + +#ifndef _MB_PORT_H +#define _MB_PORT_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +/* ----------------------- Type definitions ---------------------------------*/ + +typedef enum +{ + EV_READY, /*!< Startup finished. */ + EV_FRAME_RECEIVED, /*!< Frame received. */ + EV_EXECUTE, /*!< Execute function. */ + EV_FRAME_SENT /*!< Frame sent. */ +} eMBEventType; + +/*! \ingroup modbus + * \brief Parity used for characters in serial mode. + * + * The parity which should be applied to the characters sent over the serial + * link. Please note that this values are actually passed to the porting + * layer and therefore not all parity modes might be available. + */ +typedef enum +{ + MB_PAR_NONE, /*!< No parity. */ + MB_PAR_ODD, /*!< Odd parity. */ + MB_PAR_EVEN /*!< Even parity. */ +} eMBParity; + +/* ----------------------- Supporting functions -----------------------------*/ +_Bool xMBPortEventInit( void ); + +_Bool xMBPortEventPost( eMBEventType eEvent ); + +_Bool xMBPortEventGet( /*@out@ */ eMBEventType * eEvent ); + +/* ----------------------- Serial port functions ----------------------------*/ + +_Bool xMBPortSerialInit( UCHAR ucPort, ULONG ulBaudRate, + UCHAR ucDataBits, eMBParity eParity ); + +void vMBPortClose( void ); + +void xMBPortSerialClose( void ); + +void vMBPortSerialEnable( _Bool xRxEnable, _Bool xTxEnable ); + +_Bool xMBPortSerialGetByte( CHAR * pucByte ); + +_Bool xMBPortSerialPutByte( CHAR ucByte ); + +/* ----------------------- Timers functions ---------------------------------*/ +_Bool xMBPortTimersInit( USHORT usTimeOut50us ); + +void xMBPortTimersClose( void ); + +void vMBPortTimersEnable( void ); + +void vMBPortTimersDisable( void ); + +void vMBPortTimersDelay( USHORT usTimeOutMS ); + +/* ----------------------- Callback for the protocol stack ------------------*/ + +/*! + * \brief Callback function for the porting layer when a new byte is + * available. + * + * Depending upon the mode this callback function is used by the RTU or + * ASCII transmission layers. In any case a call to xMBPortSerialGetByte() + * must immediately return a new character. + * + * \return TRUE if a event was posted to the queue because + * a new byte was received. The port implementation should wake up the + * tasks which are currently blocked on the eventqueue. + */ +extern _Bool( *pxMBFrameCBByteReceived ) ( void ); + +extern _Bool( *pxMBFrameCBTransmitterEmpty ) ( void ); + +extern _Bool( *pxMBPortCBTimerExpired ) ( void ); + +/* ----------------------- TCP port functions -------------------------------*/ +_Bool xMBTCPPortInit( USHORT usTCPPort ); + +void vMBTCPPortClose( void ); + +void vMBTCPPortDisable( void ); + +_Bool xMBTCPPortGetRequest( UCHAR **ppucMBTCPFrame, USHORT * usTCPLength ); + +_Bool xMBTCPPortSendResponse( const UCHAR *pucMBTCPFrame, USHORT usTCPLength ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/include/mbproto.h b/Core/Src/Modbus/include/mbproto.h new file mode 100644 index 0000000..786aaf4 --- /dev/null +++ b/Core/Src/Modbus/include/mbproto.h @@ -0,0 +1,83 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbproto.h,v 1.14 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_PROTO_H +#define _MB_PROTO_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/* ----------------------- Defines ------------------------------------------*/ +#define MB_ADDRESS_BROADCAST ( 0 ) /*! Modbus broadcast address. */ +#define MB_ADDRESS_MIN ( 1 ) /*! Smallest possible slave address. */ +#define MB_ADDRESS_MAX ( 247 ) /*! Biggest possible slave address. */ +#define MB_FUNC_NONE ( 0 ) +#define MB_FUNC_READ_COILS ( 1 ) +#define MB_FUNC_READ_DISCRETE_INPUTS ( 2 ) +#define MB_FUNC_WRITE_SINGLE_COIL ( 5 ) +#define MB_FUNC_WRITE_MULTIPLE_COILS ( 15 ) +#define MB_FUNC_READ_HOLDING_REGISTER ( 3 ) +#define MB_FUNC_READ_INPUT_REGISTER ( 4 ) +#define MB_FUNC_WRITE_REGISTER ( 6 ) +#define MB_FUNC_WRITE_MULTIPLE_REGISTERS ( 16 ) +#define MB_FUNC_READWRITE_MULTIPLE_REGISTERS ( 23 ) +#define MB_FUNC_DIAG_READ_EXCEPTION ( 7 ) +#define MB_FUNC_DIAG_DIAGNOSTIC ( 8 ) +#define MB_FUNC_DIAG_GET_COM_EVENT_CNT ( 11 ) +#define MB_FUNC_DIAG_GET_COM_EVENT_LOG ( 12 ) +#define MB_FUNC_OTHER_REPORT_SLAVEID ( 17 ) +#define MB_FUNC_ERROR ( 128 ) +/* ----------------------- Type definitions ---------------------------------*/ + typedef enum +{ + MB_EX_NONE = 0x00, + MB_EX_ILLEGAL_FUNCTION = 0x01, + MB_EX_ILLEGAL_DATA_ADDRESS = 0x02, + MB_EX_ILLEGAL_DATA_VALUE = 0x03, + MB_EX_SLAVE_DEVICE_FAILURE = 0x04, + MB_EX_ACKNOWLEDGE = 0x05, + MB_EX_SLAVE_BUSY = 0x06, + MB_EX_MEMORY_PARITY_ERROR = 0x08, + MB_EX_GATEWAY_PATH_FAILED = 0x0A, + MB_EX_GATEWAY_TGT_FAILED = 0x0B +} eMBException; + +typedef eMBException( *pxMBFunctionHandler ) ( UCHAR * pucFrame, USHORT * pusLength ); + +typedef struct +{ + UCHAR ucFunctionCode; + pxMBFunctionHandler pxHandler; +} xMBFunctionHandler; + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/include/mbutils.h b/Core/Src/Modbus/include/mbutils.h new file mode 100644 index 0000000..6149575 --- /dev/null +++ b/Core/Src/Modbus/include/mbutils.h @@ -0,0 +1,108 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbutils.h,v 1.5 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_UTILS_H +#define _MB_UTILS_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/*! \defgroup modbus_utils Utilities + * + * This module contains some utility functions which can be used by + * the application. It includes some special functions for working with + * bitfields backed by a character array buffer. + * + */ +/*! \addtogroup modbus_utils + * @{ + */ +/*! \brief Function to set bits in a byte buffer. + * + * This function allows the efficient use of an array to implement bitfields. + * The array used for storing the bits must always be a multiple of two + * bytes. Up to eight bits can be set or cleared in one operation. + * + * \param ucByteBuf A buffer where the bit values are stored. Must be a + * multiple of 2 bytes. No length checking is performed and if + * usBitOffset / 8 is greater than the size of the buffer memory contents + * is overwritten. + * \param usBitOffset The starting address of the bits to set. The first + * bit has the offset 0. + * \param ucNBits Number of bits to modify. The value must always be smaller + * than 8. + * \param ucValues Thew new values for the bits. The value for the first bit + * starting at usBitOffset is the LSB of the value + * ucValues + * + * \code + * ucBits[2] = {0, 0}; + * + * // Set bit 4 to 1 (read: set 1 bit starting at bit offset 4 to value 1) + * xMBUtilSetBits( ucBits, 4, 1, 1 ); + * + * // Set bit 7 to 1 and bit 8 to 0. + * xMBUtilSetBits( ucBits, 7, 2, 0x01 ); + * + * // Set bits 8 - 11 to 0x05 and bits 12 - 15 to 0x0A; + * xMBUtilSetBits( ucBits, 8, 8, 0x5A); + * \endcode + */ +void xMBUtilSetBits( UCHAR * ucByteBuf, USHORT usBitOffset, + UCHAR ucNBits, UCHAR ucValues ); + +/*! \brief Function to read bits in a byte buffer. + * + * This function is used to extract up bit values from an array. Up to eight + * bit values can be extracted in one step. + * + * \param ucByteBuf A buffer where the bit values are stored. + * \param usBitOffset The starting address of the bits to set. The first + * bit has the offset 0. + * \param ucNBits Number of bits to modify. The value must always be smaller + * than 8. + * + * \code + * UCHAR ucBits[2] = {0, 0}; + * UCHAR ucResult; + * + * // Extract the bits 3 - 10. + * ucResult = xMBUtilGetBits( ucBits, 3, 8 ); + * \endcode + */ +UCHAR xMBUtilGetBits( UCHAR * ucByteBuf, USHORT usBitOffset, + UCHAR ucNBits ); + +/*! @} */ + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/mb.c b/Core/Src/Modbus/mb.c new file mode 100644 index 0000000..9b7678a --- /dev/null +++ b/Core/Src/Modbus/mb.c @@ -0,0 +1,414 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mb.c,v 1.28 2010/06/06 13:54:40 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbconfig.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbfunc.h" + +#include "mbport.h" +#if MB_RTU_ENABLED == 1 +#include "mbrtu.h" +#endif +#if MB_ASCII_ENABLED == 1 +#include "mbascii.h" +#endif +#if MB_TCP_ENABLED == 1 +#include "mbtcp.h" +#endif + +#ifndef MB_PORT_HAS_CLOSE +#define MB_PORT_HAS_CLOSE 0 +#endif + +/* ----------------------- Static variables ---------------------------------*/ + +static UCHAR ucMBAddress; +static eMBMode eMBCurrentMode; + +static enum +{ + STATE_ENABLED, + STATE_DISABLED, + STATE_NOT_INITIALIZED +} eMBState = STATE_NOT_INITIALIZED; + +/* Functions pointer which are initialized in eMBInit( ). Depending on the + * mode (RTU or ASCII) the are set to the correct implementations. + */ +static peMBFrameSend peMBFrameSendCur; +static pvMBFrameStart pvMBFrameStartCur; +static pvMBFrameStop pvMBFrameStopCur; +static peMBFrameReceive peMBFrameReceiveCur; +static pvMBFrameClose pvMBFrameCloseCur; + +/* Callback functions required by the porting layer. They are called when + * an external event has happend which includes a timeout or the reception + * or transmission of a character. + */ +_Bool( *pxMBFrameCBByteReceived ) ( void ); +_Bool( *pxMBFrameCBTransmitterEmpty ) ( void ); +_Bool( *pxMBPortCBTimerExpired ) ( void ); + +_Bool( *pxMBFrameCBReceiveFSMCur ) ( void ); +_Bool( *pxMBFrameCBTransmitFSMCur ) ( void ); + +/* An array of Modbus functions handlers which associates Modbus function + * codes with implementing functions. + */ +static xMBFunctionHandler xFuncHandlers[MB_FUNC_HANDLERS_MAX] = { +#if MB_FUNC_OTHER_REP_SLAVEID_ENABLED > 0 + {MB_FUNC_OTHER_REPORT_SLAVEID, eMBFuncReportSlaveID}, +#endif +#if MB_FUNC_READ_INPUT_ENABLED > 0 + {MB_FUNC_READ_INPUT_REGISTER, eMBFuncReadInputRegister}, +#endif +#if MB_FUNC_READ_HOLDING_ENABLED > 0 + {MB_FUNC_READ_HOLDING_REGISTER, eMBFuncReadHoldingRegister}, +#endif +#if MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED > 0 + {MB_FUNC_WRITE_MULTIPLE_REGISTERS, eMBFuncWriteMultipleHoldingRegister}, +#endif +#if MB_FUNC_WRITE_HOLDING_ENABLED > 0 + {MB_FUNC_WRITE_REGISTER, eMBFuncWriteHoldingRegister}, +#endif +#if MB_FUNC_READWRITE_HOLDING_ENABLED > 0 + {MB_FUNC_READWRITE_MULTIPLE_REGISTERS, eMBFuncReadWriteMultipleHoldingRegister}, +#endif +#if MB_FUNC_READ_COILS_ENABLED > 0 + {MB_FUNC_READ_COILS, eMBFuncReadCoils}, +#endif +#if MB_FUNC_WRITE_COIL_ENABLED > 0 + {MB_FUNC_WRITE_SINGLE_COIL, eMBFuncWriteCoil}, +#endif +#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0 + {MB_FUNC_WRITE_MULTIPLE_COILS, eMBFuncWriteMultipleCoils}, +#endif +#if MB_FUNC_READ_DISCRETE_INPUTS_ENABLED > 0 + {MB_FUNC_READ_DISCRETE_INPUTS, eMBFuncReadDiscreteInputs}, +#endif +}; + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + /* check preconditions */ + if( ( ucSlaveAddress == MB_ADDRESS_BROADCAST ) || + ( ucSlaveAddress < MB_ADDRESS_MIN ) || ( ucSlaveAddress > MB_ADDRESS_MAX ) ) + { + eStatus = MB_EINVAL; + } + else + { + ucMBAddress = ucSlaveAddress; + + switch ( eMode ) + { +#if MB_RTU_ENABLED > 0 + case MB_RTU: + pvMBFrameStartCur = eMBRTUStart; + pvMBFrameStopCur = eMBRTUStop; + peMBFrameSendCur = eMBRTUSend; + peMBFrameReceiveCur = eMBRTUReceive; + pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL; + pxMBFrameCBByteReceived = xMBRTUReceiveFSM; + pxMBFrameCBTransmitterEmpty = xMBRTUTransmitFSM; + pxMBPortCBTimerExpired = xMBRTUTimerT35Expired; + + eStatus = eMBRTUInit( ucMBAddress, ucPort, ulBaudRate, eParity ); + break; +#endif +#if MB_ASCII_ENABLED > 0 + case MB_ASCII: + pvMBFrameStartCur = eMBASCIIStart; + pvMBFrameStopCur = eMBASCIIStop; + peMBFrameSendCur = eMBASCIISend; + peMBFrameReceiveCur = eMBASCIIReceive; + pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL; + pxMBFrameCBByteReceived = xMBASCIIReceiveFSM; + pxMBFrameCBTransmitterEmpty = xMBASCIITransmitFSM; + pxMBPortCBTimerExpired = xMBASCIITimerT1SExpired; + + eStatus = eMBASCIIInit( ucMBAddress, ucPort, ulBaudRate, eParity ); + break; +#endif + default: + eStatus = MB_EINVAL; + } + + if( eStatus == MB_ENOERR ) + { + if( !xMBPortEventInit( ) ) + { + /* port dependent event module initalization failed. */ + eStatus = MB_EPORTERR; + } + else + { + eMBCurrentMode = eMode; + eMBState = STATE_DISABLED; + } + } + } + return eStatus; +} + +#if MB_TCP_ENABLED > 0 +eMBErrorCode +eMBTCPInit( USHORT ucTCPPort ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( ( eStatus = eMBTCPDoInit( ucTCPPort ) ) != MB_ENOERR ) + { + eMBState = STATE_DISABLED; + } + else if( !xMBPortEventInit( ) ) + { + /* Port dependent event module initalization failed. */ + eStatus = MB_EPORTERR; + } + else + { + pvMBFrameStartCur = eMBTCPStart; + pvMBFrameStopCur = eMBTCPStop; + peMBFrameReceiveCur = eMBTCPReceive; + peMBFrameSendCur = eMBTCPSend; + pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBTCPPortClose : NULL; + ucMBAddress = MB_TCP_PSEUDO_ADDRESS; + eMBCurrentMode = MB_TCP; + eMBState = STATE_DISABLED; + } + return eStatus; +} +#endif + +eMBErrorCode +eMBRegisterCB( UCHAR ucFunctionCode, pxMBFunctionHandler pxHandler ) +{ + int i; + eMBErrorCode eStatus; + + if( ( 0 < ucFunctionCode ) && ( ucFunctionCode <= 127 ) ) + { + ENTER_CRITICAL_SECTION( ); + if( pxHandler != NULL ) + { + for( i = 0; i < MB_FUNC_HANDLERS_MAX; i++ ) + { + if( ( xFuncHandlers[i].pxHandler == NULL ) || + ( xFuncHandlers[i].pxHandler == pxHandler ) ) + { + xFuncHandlers[i].ucFunctionCode = ucFunctionCode; + xFuncHandlers[i].pxHandler = pxHandler; + break; + } + } + eStatus = ( i != MB_FUNC_HANDLERS_MAX ) ? MB_ENOERR : MB_ENORES; + } + else + { + for( i = 0; i < MB_FUNC_HANDLERS_MAX; i++ ) + { + if( xFuncHandlers[i].ucFunctionCode == ucFunctionCode ) + { + xFuncHandlers[i].ucFunctionCode = 0; + xFuncHandlers[i].pxHandler = NULL; + break; + } + } + /* Remove can't fail. */ + eStatus = MB_ENOERR; + } + EXIT_CRITICAL_SECTION( ); + } + else + { + eStatus = MB_EINVAL; + } + return eStatus; +} + + +eMBErrorCode +eMBClose( void ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( eMBState == STATE_DISABLED ) + { + if( pvMBFrameCloseCur != NULL ) + { + pvMBFrameCloseCur( ); + } + } + else + { + eStatus = MB_EILLSTATE; + } + return eStatus; +} + +eMBErrorCode +eMBEnable( void ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( eMBState == STATE_DISABLED ) + { + /* Activate the protocol stack. */ + pvMBFrameStartCur( ); + eMBState = STATE_ENABLED; + } + else + { + eStatus = MB_EILLSTATE; + } + return eStatus; +} + +eMBErrorCode +eMBDisable( void ) +{ + eMBErrorCode eStatus; + + if( eMBState == STATE_ENABLED ) + { + pvMBFrameStopCur( ); + eMBState = STATE_DISABLED; + eStatus = MB_ENOERR; + } + else if( eMBState == STATE_DISABLED ) + { + eStatus = MB_ENOERR; + } + else + { + eStatus = MB_EILLSTATE; + } + return eStatus; +} +extern void delay_us ( uint32_t us ); + +eMBErrorCode +eMBPoll( void ) +{ + static UCHAR *ucMBFrame; + static UCHAR ucRcvAddress; + static UCHAR ucFunctionCode; + static USHORT usLength; + static eMBException eException; + + int i; + eMBErrorCode eStatus = MB_ENOERR; + eMBEventType eEvent; + + /* Check if the protocol stack is ready. */ + if( eMBState != STATE_ENABLED ) + { + return MB_EILLSTATE; + } + + /* Check if there is a event available. If not return control to caller. + * Otherwise we will handle the event. */ + if( xMBPortEventGet( &eEvent ) == TRUE ) + { + switch ( eEvent ) + { + case EV_READY: + break; + + case EV_FRAME_RECEIVED: + eStatus = peMBFrameReceiveCur( &ucRcvAddress, &ucMBFrame, &usLength ); + if( eStatus == MB_ENOERR ) + { + /* Check if the frame is for us. If not ignore the frame. */ + if( ( ucRcvAddress == ucMBAddress ) || ( ucRcvAddress == MB_ADDRESS_BROADCAST ) ) + { + ( void )xMBPortEventPost( EV_EXECUTE ); + } + } + break; + + case EV_EXECUTE: + ucFunctionCode = ucMBFrame[MB_PDU_FUNC_OFF]; + eException = MB_EX_ILLEGAL_FUNCTION; + for( i = 0; i < MB_FUNC_HANDLERS_MAX; i++ ) + { + /* No more function handlers registered. Abort. */ + if( xFuncHandlers[i].ucFunctionCode == 0 ) + { + break; + } + else if( xFuncHandlers[i].ucFunctionCode == ucFunctionCode ) + { + eException = xFuncHandlers[i].pxHandler( ucMBFrame, &usLength ); + break; + } + } + + /* If the request was not sent to the broadcast address we + * return a reply. */ + if( ucRcvAddress != MB_ADDRESS_BROADCAST ) + { + if( eException != MB_EX_NONE ) + { + /* An exception occured. Build an error frame. */ + usLength = 0; + ucMBFrame[usLength++] = ( UCHAR )( ucFunctionCode | MB_FUNC_ERROR ); + ucMBFrame[usLength++] = eException; + } + if( ( eMBCurrentMode == MB_ASCII ) && MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS ) + { +// vMBPortTimersDelay( MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS ); + } + + eStatus = peMBFrameSendCur( ucMBAddress, ucMBFrame, usLength ); + } + break; + + case EV_FRAME_SENT: + break; + } + } + return MB_ENOERR; +} diff --git a/Core/Src/Modbus/port-stm32/port.h b/Core/Src/Modbus/port-stm32/port.h new file mode 100644 index 0000000..ef64a61 --- /dev/null +++ b/Core/Src/Modbus/port-stm32/port.h @@ -0,0 +1,58 @@ +/* + * FreeModbus Libary: BARE Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: port.h,v 1.1 2006/08/22 21:35:13 wolti Exp $ + */ + +#ifndef _PORT_H +#define _PORT_H + +// #include +// #include + +#include + +#include + +// #define INLINE __inline +#define PR_BEGIN_EXTERN_C extern "C" { +#define PR_END_EXTERN_C } + +#define ENTER_CRITICAL_SECTION( ) +// __disable_irq() +#define EXIT_CRITICAL_SECTION( ) +// __enable_irq() + +typedef unsigned char UCHAR; +typedef char CHAR; + +typedef uint16_t USHORT; +typedef int16_t SHORT; + +typedef uint32_t ULONG; +typedef int32_t LONG; + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#endif diff --git a/Core/Src/Modbus/port-stm32/portEvent.c b/Core/Src/Modbus/port-stm32/portEvent.c new file mode 100644 index 0000000..fe9708c --- /dev/null +++ b/Core/Src/Modbus/port-stm32/portEvent.c @@ -0,0 +1,81 @@ +/* + * FreeModbus Libary: BARE Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: portevent.c,v 1.1 2006/08/22 21:35:13 wolti Exp $ + */ + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +/* ----------------------- Variables ----------------------------------------*/ +static eMBEventType eQueuedEvent; +static _Bool xEventInQueue; + +/* ----------------------- Start implementation -----------------------------*/ +_Bool +xMBPortEventInit( void ) +{ + xEventInQueue = FALSE; + + return TRUE; +} + +_Bool +xMBPortEventPost( eMBEventType eEvent ) +{ + xEventInQueue = TRUE; + eQueuedEvent = eEvent; + + // 悬起PendSV,使用PendSV解析协议栈 +// SCB->ICSR = SCB_ICSR_PENDSVSET; + + return TRUE; +} + +_Bool +xMBPortEventGet( eMBEventType * eEvent ) +{ + _Bool xEventHappened = FALSE; + + if( xEventInQueue ) + { + *eEvent = eQueuedEvent; + xEventInQueue = FALSE; + xEventHappened = TRUE; + } + return xEventHappened; +} + + +// PendSV中断 +//__irq +//void +//PendSV_Handler ( void ) +//{ +// eMBPoll(); +//} +void ModbusPoll( void * parg ) +{ + for( ;; ) + { + eMBPoll(); + osDelay( 10u ); + } +} + diff --git a/Core/Src/Modbus/port-stm32/portSerial.c b/Core/Src/Modbus/port-stm32/portSerial.c new file mode 100644 index 0000000..0467b1a --- /dev/null +++ b/Core/Src/Modbus/port-stm32/portSerial.c @@ -0,0 +1,224 @@ +/* + * FreeModbus Libary: BARE Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: portserial.c,v 1.1 2006/08/22 21:35:13 wolti Exp $ + */ +#include +#include +#include "cmsis_os.h" +#include "port.h" +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" +#include "stm32f10x.h" + + +/* ----------------------- static functions ---------------------------------*/ +extern void delay_us ( uint32_t us ); +static void prvvUARTTxReadyISR( void ); +static void prvvUARTRxISR( void ); +int Errcount = 0; +// 控制485总线方向 +void MB_485_Direct_Transmit( void ) +{ +// if( !READ_BIT( GPIOA->ODR, GPIO_ODR_ODR8) ) +// { + SET_BIT( GPIOA->BSRR, GPIO_BSRR_BS8 ); +// delay_us(100u); +// } +} + +void MB_485_Direct_Receive( void ) +{ + if( READ_BIT( GPIOA->ODR, GPIO_ODR_ODR8) ) + { + delay_us(400u); + SET_BIT( GPIOA->BSRR, GPIO_BSRR_BR8 ); +// delay_us(10u); + } +} +/* ----------------------- Start implementation -----------------------------*/ +void +vMBPortSerialEnable( _Bool xRxEnable, _Bool xTxEnable ) +{ + /* If xRxEnable enable serial receive interrupts. + * If xTxENable enable transmitter empty interrupts. + */ + + if ( xRxEnable ) + { + SET_BIT( MB_USART->CR1, USART_CR1_RXNEIE ); + } + else + { + CLEAR_BIT( MB_USART->CR1, USART_CR1_RXNEIE ); + } + + if ( xTxEnable ) + { + // 允许发送,将总线切换到发送状态 + + MB_485_Direct_Transmit(); + SET_BIT( MB_USART->CR1, USART_CR1_TXEIE ); + } + else + { + CLEAR_BIT( MB_USART->CR1, USART_CR1_TXEIE ); + // 禁止发送,通过发送结束中断切换总线方向 + SET_BIT( MB_USART->CR1, USART_CR1_TCIE ); + } +} + +_Bool +xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity ) +{ + ( void )ucPORT; + + SET_BIT( RCC->APB2ENR, RCC_APB2ENR_IOPAEN ); + MODIFY_REG( GPIOA->CRH, 0x00000FFFu, 0x000004B3u ); + + + SET_BIT( RCC->APB2ENR, RCC_APB2ENR_USART1EN ); + + MB_485_Direct_Receive(); + MB_USART->CR1 = 0u; + MB_USART->CR2 = 0u; + MB_USART->CR3 = 0u; + MB_USART->CR1 = USART_CR1_RE | USART_CR1_TE; + MB_USART->BRR = ( SystemCoreClock / ulBaudRate ); + + switch ( ucDataBits ) + { + case 8: + CLEAR_BIT( MB_USART->CR1, USART_CR1_M ); + break; + case 9: + SET_BIT( MB_USART->CR1, USART_CR1_M ); + break; + } + + switch ( eParity ) + { + case MB_PAR_NONE: /*!< No parity. */ + CLEAR_BIT( MB_USART->CR1, USART_CR1_PCE ); + break; + case MB_PAR_ODD: /*!< Odd parity. */ + SET_BIT( MB_USART->CR1, USART_CR1_PS ); + SET_BIT( MB_USART->CR1, USART_CR1_PCE ); + break; + case MB_PAR_EVEN: /*!< Even parity. */ + CLEAR_BIT( MB_USART->CR1, USART_CR1_PS ); + SET_BIT( MB_USART->CR1, USART_CR1_PCE ); + break; + } + + SET_BIT( MB_USART->CR1, USART_CR1_UE ); // Enable MB_USART + + NVIC_EnableIRQ( USART1_IRQn ); + + return TRUE; +} + +_Bool +xMBPortSerialPutByte( CHAR ucByte ) +{ + /* Put a byte in the UARTs transmit buffer. This function is called + * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been + * called. */ + MB_485_Direct_Transmit(); + MB_USART->DR = ucByte; + + return TRUE; +} + +_Bool +xMBPortSerialGetByte( CHAR * pucByte ) +{ + /* Return the byte in the UARTs receive buffer. This function is called + * by the protocol stack after pxMBFrameCBByteReceived( ) has been called. + */ + MB_485_Direct_Receive(); + * pucByte = MB_USART->DR; + + return TRUE; +} + +/* Create an interrupt handler for the transmit buffer empty interrupt + * (or an equivalent) for your target processor. This function should then + * call pxMBFrameCBTransmitterEmpty( ) which tells the protocol stack that + * a new character can be sent. The protocol stack will then call + * xMBPortSerialPutByte( ) to send the character. + */ +static void prvvUARTTxReadyISR( void ) +{ + pxMBFrameCBTransmitterEmpty( ); +} + +/* Create an interrupt handler for the receive interrupt for your target + * processor. This function should then call pxMBFrameCBByteReceived( ). The + * protocol stack will then call xMBPortSerialGetByte( ) to retrieve the + * character. + */ +static void prvvUARTRxISR( void ) +{ + pxMBFrameCBByteReceived( ); +} + +// 串口中断 +USHORT ucByte; +void +USART1_IRQHandler( void ) +{ + if( USART1->SR & USART_SR_ORE == USART_SR_ORE ) + { + ucByte = (unsigned char)(USART1->SR); + ucByte = (unsigned char)(USART1->DR); + } + if(ucByte != 0) + { + ucByte = 0; + Errcount ++; + } + if ( READ_BIT( MB_USART->CR1, USART_CR1_RXNEIE )) + { + if ( READ_BIT( MB_USART->SR, USART_SR_RXNE )) + { + // 接收数据处理 + prvvUARTRxISR(); + } + } + + if ( READ_BIT( MB_USART->CR1, USART_CR1_TXEIE )) + { + if ( READ_BIT( MB_USART->SR, USART_SR_TXE )) + { + // 发送数据处理 + prvvUARTTxReadyISR(); + } + } + + // 发送完成,将总线切换到接收状态 + if ( READ_BIT( MB_USART->CR1, USART_CR1_TCIE ) || READ_BIT( MB_USART->SR, USART_SR_TC )) + { +// if ( READ_BIT( MB_USART->SR, USART_SR_TC )) + { + CLEAR_BIT( MB_USART->CR1, USART_CR1_TCIE ); + MB_485_Direct_Receive(); + } + } +} diff --git a/Core/Src/Modbus/port-stm32/portTimer.c b/Core/Src/Modbus/port-stm32/portTimer.c new file mode 100644 index 0000000..76fde97 --- /dev/null +++ b/Core/Src/Modbus/port-stm32/portTimer.c @@ -0,0 +1,93 @@ +/* + * FreeModbus Libary: BARE Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: porttimer.c,v 1.1 2006/08/22 21:35:13 wolti Exp $ + */ + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +/* ----------------------- static functions ---------------------------------*/ +static void prvvTIMERExpiredISR( void ); + +/* ----------------------- Start implementation -----------------------------*/ +_Bool +xMBPortTimersInit( USHORT usTim1Timerout50us ) +{ + // 模块使能 + SET_BIT( RCC->APB1ENR, RCC_APB1ENR_TIM7EN ); +// // 时基初始化 + MB_TIMER->CR1 = 0u; /* Counter Up, Division: 1 */ + MB_TIMER->PSC = ( SystemCoreClock / 50000 ) - 1u; /* Set the Prescaler value */ /*50us*/ + MB_TIMER->ARR = usTim1Timerout50us; /* Set the Autoreload value */ + MB_TIMER->EGR = TIM_EGR_UG; // 生成更新事件,立即更新 PSC + MB_TIMER->DIER = TIM_DIER_UIE; // 使能中断 +// SET_BIT( TIM1->BDTR, TIM_BDTR_MOE ); + // 配置中断 +// NVIC_SetPriority( TIM4_IRQn, 255u ); + NVIC_EnableIRQ( TIM7_IRQn ); + + return TRUE; +} + +void +vMBPortTimersEnable( ) +{ + /* Enable the timer with the timeout passed to xMBPortTimersInit( ) */ + CLEAR_BIT( MB_TIMER->SR, TIM_SR_UIF ); + SET_BIT( MB_TIMER->DIER, TIM_DIER_UIE ); + MB_TIMER->CNT = 0u; + SET_BIT( MB_TIMER->CR1, TIM_CR1_CEN ); +} + +void +vMBPortTimersDisable( ) +{ + /* Disable any pending timers. */ + CLEAR_BIT( MB_TIMER->CR1, TIM_CR1_CEN ); + MB_TIMER->CNT = 0u; + CLEAR_BIT( MB_TIMER->DIER, TIM_DIER_UIE ); + CLEAR_BIT( MB_TIMER->SR, TIM_SR_UIF ); + +} + +/* Create an ISR which is called whenever the timer has expired. This function + * must then call pxMBPortCBTimerExpired( ) to notify the protocol stack that + * the timer has expired. + */ +static void prvvTIMERExpiredISR( void ) +{ + ( void )pxMBPortCBTimerExpired( ); +} + +// 定时器中断 + +void +TIM7_IRQHandler( void ) +{ + if ( READ_BIT( MB_TIMER->SR, TIM_SR_UIF )) + { + /* Clear TIM Capture Compare1 interrupt pending bit*/ + CLEAR_BIT( MB_TIMER->SR, TIM_SR_UIF ); + prvvTIMERExpiredISR( ); + } +} diff --git a/Core/Src/Modbus/port.h b/Core/Src/Modbus/port.h new file mode 100644 index 0000000..ef64a61 --- /dev/null +++ b/Core/Src/Modbus/port.h @@ -0,0 +1,58 @@ +/* + * FreeModbus Libary: BARE Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: port.h,v 1.1 2006/08/22 21:35:13 wolti Exp $ + */ + +#ifndef _PORT_H +#define _PORT_H + +// #include +// #include + +#include + +#include + +// #define INLINE __inline +#define PR_BEGIN_EXTERN_C extern "C" { +#define PR_END_EXTERN_C } + +#define ENTER_CRITICAL_SECTION( ) +// __disable_irq() +#define EXIT_CRITICAL_SECTION( ) +// __enable_irq() + +typedef unsigned char UCHAR; +typedef char CHAR; + +typedef uint16_t USHORT; +typedef int16_t SHORT; + +typedef uint32_t ULONG; +typedef int32_t LONG; + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#endif diff --git a/Core/Src/Modbus/rtu/mbcrc.c b/Core/Src/Modbus/rtu/mbcrc.c new file mode 100644 index 0000000..29b9ea7 --- /dev/null +++ b/Core/Src/Modbus/rtu/mbcrc.c @@ -0,0 +1,98 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbcrc.c,v 1.7 2007/02/18 23:50:27 wolti Exp $ + */ + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +static const UCHAR aucCRCHi[] = { + 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 +}; + +static const UCHAR aucCRCLo[] = { + 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 +}; + +USHORT +usMBCRC16( UCHAR * pucFrame, USHORT usLen ) +{ + UCHAR ucCRCHi = 0xFF; + UCHAR ucCRCLo = 0xFF; + int iIndex; + + while( usLen-- ) + { + iIndex = ucCRCLo ^ *( pucFrame++ ); + ucCRCLo = ( UCHAR )( ucCRCHi ^ aucCRCHi[iIndex] ); + ucCRCHi = aucCRCLo[iIndex]; + } + return ( USHORT )( ucCRCHi << 8 | ucCRCLo ); +} diff --git a/Core/Src/Modbus/rtu/mbcrc.h b/Core/Src/Modbus/rtu/mbcrc.h new file mode 100644 index 0000000..db22776 --- /dev/null +++ b/Core/Src/Modbus/rtu/mbcrc.h @@ -0,0 +1,36 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbcrc.h,v 1.5 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_CRC_H +#define _MB_CRC_H + +USHORT usMBCRC16( UCHAR * pucFrame, USHORT usLen ); + +#endif diff --git a/Core/Src/Modbus/rtu/mbrtu.c b/Core/Src/Modbus/rtu/mbrtu.c new file mode 100644 index 0000000..8d41148 --- /dev/null +++ b/Core/Src/Modbus/rtu/mbrtu.c @@ -0,0 +1,357 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbrtu.c,v 1.18 2007/09/12 10:15:56 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbrtu.h" +#include "mbframe.h" + +#include "mbcrc.h" +#include "mbport.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_SER_PDU_SIZE_MIN 4 /*!< Minimum size of a Modbus RTU frame. */ +#define MB_SER_PDU_SIZE_MAX 256 /*!< Maximum size of a Modbus RTU frame. */ +#define MB_SER_PDU_SIZE_CRC 2 /*!< Size of CRC field in PDU. */ +#define MB_SER_PDU_ADDR_OFF 0 /*!< Offset of slave address in Ser-PDU. */ +#define MB_SER_PDU_PDU_OFF 1 /*!< Offset of Modbus-PDU in Ser-PDU. */ + +/* ----------------------- Type definitions ---------------------------------*/ +typedef enum +{ + STATE_RX_INIT, /*!< Receiver is in initial state. */ + STATE_RX_IDLE, /*!< Receiver is in idle state. */ + STATE_RX_RCV, /*!< Frame is beeing received. */ + STATE_RX_ERROR /*!< If the frame is invalid. */ +} eMBRcvState; + +typedef enum +{ + STATE_TX_IDLE, /*!< Transmitter is in idle state. */ + STATE_TX_XMIT /*!< Transmitter is in transfer state. */ +} eMBSndState; + +/* ----------------------- Static variables ---------------------------------*/ +static volatile eMBSndState eSndState; +static volatile eMBRcvState eRcvState; + +volatile UCHAR ucRTUBuf[MB_SER_PDU_SIZE_MAX]; + +static volatile UCHAR *pucSndBufferCur; +static volatile USHORT usSndBufferCount; + +static volatile USHORT usRcvBufferPos; + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBRTUInit( UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ) +{ + eMBErrorCode eStatus = MB_ENOERR; + ULONG usTimerT35_50us; + + ( void )ucSlaveAddress; + ENTER_CRITICAL_SECTION( ); + + /* Modbus RTU uses 8 Databits. */ + if( xMBPortSerialInit( ucPort, ulBaudRate, 8, eParity ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + else + { + /* If baudrate > 19200 then we should use the fixed timer values + * t35 = 1750us. Otherwise t35 must be 3.5 times the character time. + */ + if( ulBaudRate > 19200 ) + { + usTimerT35_50us = 35; /* 1800us. */ + } + else + { + /* The timer reload value for a character is given by: + * + * ChTimeValue = Ticks_per_1s / ( Baudrate / 11 ) + * = 11 * Ticks_per_1s / Baudrate + * = 220000 / Baudrate + * The reload for t3.5 is 1.5 times this value and similary + * for t3.5. + */ + usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate ); + } + if( xMBPortTimersInit( ( USHORT ) usTimerT35_50us ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + } + EXIT_CRITICAL_SECTION( ); + + return eStatus; +} + +void +eMBRTUStart( void ) +{ + ENTER_CRITICAL_SECTION( ); + /* Initially the receiver is in the state STATE_RX_INIT. we start + * the timer and if no character is received within t3.5 we change + * to STATE_RX_IDLE. This makes sure that we delay startup of the + * modbus protocol stack until the bus is free. + */ + eRcvState = STATE_RX_INIT; + vMBPortSerialEnable( TRUE, FALSE ); + vMBPortTimersEnable( ); + + EXIT_CRITICAL_SECTION( ); +} + +void +eMBRTUStop( void ) +{ + ENTER_CRITICAL_SECTION( ); + vMBPortSerialEnable( FALSE, FALSE ); + vMBPortTimersDisable( ); + EXIT_CRITICAL_SECTION( ); +} + +eMBErrorCode +eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ) +{ +// _Bool xFrameReceived = FALSE; + eMBErrorCode eStatus = MB_ENOERR; + + ENTER_CRITICAL_SECTION( ); + assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ); + + /* Length and CRC check */ + if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN ) + && ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) ) + { + /* Save the address field. All frames are passed to the upper layed + * and the decision if a frame is used is done there. + */ + *pucRcvAddress = ucRTUBuf[MB_SER_PDU_ADDR_OFF]; + + /* Total length of Modbus-PDU is Modbus-Serial-Line-PDU minus + * size of address field and CRC checksum. + */ + *pusLength = ( USHORT )( usRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_CRC ); + + /* Return the start of the Modbus PDU to the caller. */ + *pucFrame = ( UCHAR * ) & ucRTUBuf[MB_SER_PDU_PDU_OFF]; +// xFrameReceived = TRUE; + } + else + { + eStatus = MB_EIO; + } + + EXIT_CRITICAL_SECTION( ); + return eStatus; +} +extern void delay_us ( uint32_t us ); +#include "cmsis_os.h" + +eMBErrorCode +eMBRTUSend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + USHORT usCRC16; + + ENTER_CRITICAL_SECTION( ); + + /* Check if the receiver is still in idle state. If not we where to + * slow with processing the received frame and the master sent another + * frame on the network. We have to abort sending the frame. + */ + if( eRcvState == STATE_RX_IDLE ) + { + /* First byte before the Modbus-PDU is the slave address. */ + pucSndBufferCur = ( UCHAR * ) pucFrame - 1; + usSndBufferCount = 1; + + /* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */ + pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress; + usSndBufferCount += usLength; + + /* Calculate CRC16 checksum for Modbus-Serial-Line-PDU. */ + usCRC16 = usMBCRC16( ( UCHAR * ) pucSndBufferCur, usSndBufferCount ); + ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 & 0xFF ); + ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 >> 8 ); + /* Activate the transmitter. */ + osDelay(30); + eSndState = STATE_TX_XMIT; + vMBPortSerialEnable( FALSE, TRUE ); + } + else + { + eStatus = MB_EIO; + } + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +_Bool +xMBRTUReceiveFSM( void ) +{ + _Bool xTaskNeedSwitch = FALSE; + UCHAR ucByte; + + assert( eSndState == STATE_TX_IDLE ); + + /* Always read the character. */ + ( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte ); + + switch ( eRcvState ) + { + /* If we have received a character in the init state we have to + * wait until the frame is finished. + */ + case STATE_RX_INIT: + vMBPortTimersEnable( ); + break; + + /* In the error state we wait until all characters in the + * damaged frame are transmitted. + */ + case STATE_RX_ERROR: + vMBPortTimersEnable( ); + break; + + /* In the idle state we wait for a new character. If a character + * is received the t1.5 and t3.5 timers are started and the + * receiver is in the state STATE_RX_RECEIVCE. + */ + case STATE_RX_IDLE: + usRcvBufferPos = 0; + ucRTUBuf[usRcvBufferPos++] = ucByte; + eRcvState = STATE_RX_RCV; + + /* Enable t3.5 timers. */ + vMBPortTimersEnable( ); + break; + + /* We are currently receiving a frame. Reset the timer after + * every character received. If more than the maximum possible + * number of bytes in a modbus frame is received the frame is + * ignored. + */ + case STATE_RX_RCV: + if( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ) + { + ucRTUBuf[usRcvBufferPos++] = ucByte; + } + else + { + eRcvState = STATE_RX_ERROR; + } + vMBPortTimersEnable( ); + break; + } + return xTaskNeedSwitch; +} + +_Bool +xMBRTUTransmitFSM( void ) +{ + _Bool xNeedPoll = FALSE; + + assert( eRcvState == STATE_RX_IDLE ); + + switch ( eSndState ) + { + /* We should not get a transmitter event if the transmitter is in + * idle state. */ + case STATE_TX_IDLE: + /* enable receiver/disable transmitter. */ + vMBPortSerialEnable( TRUE, FALSE ); + break; + + case STATE_TX_XMIT: + /* check if we are finished. */ + if( usSndBufferCount != 0 ) + { + xMBPortSerialPutByte( ( CHAR )*pucSndBufferCur ); + pucSndBufferCur++; /* next byte in sendbuffer. */ + usSndBufferCount--; + } + else + { + xNeedPoll = xMBPortEventPost( EV_FRAME_SENT ); + /* Disable transmitter. This prevents another transmit buffer + * empty interrupt. */ + vMBPortSerialEnable( TRUE, FALSE ); + eSndState = STATE_TX_IDLE; + } + break; + } + + return xNeedPoll; +} + +_Bool +xMBRTUTimerT35Expired( void ) +{ + _Bool xNeedPoll = FALSE; + + switch ( eRcvState ) + { + /* Timer t35 expired. Startup phase is finished. */ + case STATE_RX_INIT: + xNeedPoll = xMBPortEventPost( EV_READY ); + break; + + /* A frame was received and t35 expired. Notify the listener that + * a new frame was received. */ + case STATE_RX_RCV: + xNeedPoll = xMBPortEventPost( EV_FRAME_RECEIVED ); + break; + + /* An error occured while receiving the frame. */ + case STATE_RX_ERROR: + break; + + /* Function called in an illegal state. */ + default: + assert( ( eRcvState == STATE_RX_INIT ) || + ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) ); + } + + vMBPortTimersDisable( ); + eRcvState = STATE_RX_IDLE; + + return xNeedPoll; +} diff --git a/Core/Src/Modbus/rtu/mbrtu.h b/Core/Src/Modbus/rtu/mbrtu.h new file mode 100644 index 0000000..90e0241 --- /dev/null +++ b/Core/Src/Modbus/rtu/mbrtu.h @@ -0,0 +1,51 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbrtu.h,v 1.9 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_RTU_H +#define _MB_RTU_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + eMBErrorCode eMBRTUInit( UCHAR slaveAddress, UCHAR ucPort, ULONG ulBaudRate, + eMBParity eParity ); +void eMBRTUStart( void ); +void eMBRTUStop( void ); +eMBErrorCode eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ); +eMBErrorCode eMBRTUSend( UCHAR slaveAddress, const UCHAR * pucFrame, USHORT usLength ); +_Bool xMBRTUReceiveFSM( void ); +_Bool xMBRTUTransmitFSM( void ); +_Bool xMBRTUTimerT15Expired( void ); +_Bool xMBRTUTimerT35Expired( void ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/Modbus/tcp/mbtcp.c b/Core/Src/Modbus/tcp/mbtcp.c new file mode 100644 index 0000000..fb06144 --- /dev/null +++ b/Core/Src/Modbus/tcp/mbtcp.c @@ -0,0 +1,158 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbtcp.c,v 1.3 2006/12/07 22:10:34 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbconfig.h" +#include "mbtcp.h" +#include "mbframe.h" +#include "mbport.h" + +#if MB_TCP_ENABLED > 0 + +/* ----------------------- Defines ------------------------------------------*/ + +/* ----------------------- MBAP Header --------------------------------------*/ +/* + * + * <------------------------ MODBUS TCP/IP ADU(1) -------------------------> + * <----------- MODBUS PDU (1') ----------------> + * +-----------+---------------+------------------------------------------+ + * | TID | PID | Length | UID |Code | Data | + * +-----------+---------------+------------------------------------------+ + * | | | | | + * (2) (3) (4) (5) (6) + * + * (2) ... MB_TCP_TID = 0 (Transaction Identifier - 2 Byte) + * (3) ... MB_TCP_PID = 2 (Protocol Identifier - 2 Byte) + * (4) ... MB_TCP_LEN = 4 (Number of bytes - 2 Byte) + * (5) ... MB_TCP_UID = 6 (Unit Identifier - 1 Byte) + * (6) ... MB_TCP_FUNC = 7 (Modbus Function Code) + * + * (1) ... Modbus TCP/IP Application Data Unit + * (1') ... Modbus Protocol Data Unit + */ + +#define MB_TCP_TID 0 +#define MB_TCP_PID 2 +#define MB_TCP_LEN 4 +#define MB_TCP_UID 6 +#define MB_TCP_FUNC 7 + +#define MB_TCP_PROTOCOL_ID 0 /* 0 = Modbus Protocol */ + + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBTCPDoInit( USHORT ucTCPPort ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( xMBTCPPortInit( ucTCPPort ) == FALSE ) + { + eStatus = MB_EPORTERR; + } + return eStatus; +} + +void +eMBTCPStart( void ) +{ +} + +void +eMBTCPStop( void ) +{ + /* Make sure that no more clients are connected. */ + vMBTCPPortDisable( ); +} + +eMBErrorCode +eMBTCPReceive( UCHAR * pucRcvAddress, UCHAR ** ppucFrame, USHORT * pusLength ) +{ + eMBErrorCode eStatus = MB_EIO; + UCHAR *pucMBTCPFrame; + USHORT usLength; + USHORT usPID; + + if( xMBTCPPortGetRequest( &pucMBTCPFrame, &usLength ) != FALSE ) + { + usPID = pucMBTCPFrame[MB_TCP_PID] << 8U; + usPID |= pucMBTCPFrame[MB_TCP_PID + 1]; + + if( usPID == MB_TCP_PROTOCOL_ID ) + { + *ppucFrame = &pucMBTCPFrame[MB_TCP_FUNC]; + *pusLength = usLength - MB_TCP_FUNC; + eStatus = MB_ENOERR; + + /* Modbus TCP does not use any addresses. Fake the source address such + * that the processing part deals with this frame. + */ + *pucRcvAddress = MB_TCP_PSEUDO_ADDRESS; + } + } + else + { + eStatus = MB_EIO; + } + return eStatus; +} + +eMBErrorCode +eMBTCPSend( UCHAR _unused, const UCHAR * pucFrame, USHORT usLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + UCHAR *pucMBTCPFrame = ( UCHAR * ) pucFrame - MB_TCP_FUNC; + USHORT usTCPLength = usLength + MB_TCP_FUNC; + + /* The MBAP header is already initialized because the caller calls this + * function with the buffer returned by the previous call. Therefore we + * only have to update the length in the header. Note that the length + * header includes the size of the Modbus PDU and the UID Byte. Therefore + * the length is usLength plus one. + */ + pucMBTCPFrame[MB_TCP_LEN] = ( usLength + 1 ) >> 8U; + pucMBTCPFrame[MB_TCP_LEN + 1] = ( usLength + 1 ) & 0xFF; + if( xMBTCPPortSendResponse( pucMBTCPFrame, usTCPLength ) == FALSE ) + { + eStatus = MB_EIO; + } + return eStatus; +} + +#endif diff --git a/Core/Src/Modbus/tcp/mbtcp.h b/Core/Src/Modbus/tcp/mbtcp.h new file mode 100644 index 0000000..905d113 --- /dev/null +++ b/Core/Src/Modbus/tcp/mbtcp.h @@ -0,0 +1,53 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbtcp.h,v 1.2 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_TCP_H +#define _MB_TCP_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_TCP_PSEUDO_ADDRESS 255 + +/* ----------------------- Function prototypes ------------------------------*/ + eMBErrorCode eMBTCPDoInit( USHORT ucTCPPort ); +void eMBTCPStart( void ); +void eMBTCPStop( void ); +eMBErrorCode eMBTCPReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, + USHORT * pusLength ); +eMBErrorCode eMBTCPSend( UCHAR _unused, const UCHAR * pucFrame, + USHORT usLength ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/Core/Src/YouSuan.c b/Core/Src/YouSuan.c new file mode 100644 index 0000000..96e77b6 --- /dev/null +++ b/Core/Src/YouSuan.c @@ -0,0 +1,341 @@ +#include "APPDEF.H" +#include "main.h" +#include "cmsis_os.h" + +float ADCData; +float slope1,slope2; +float SetmL = 20; +float UseuL; +_Bool CuiQuFlag = false; +_Bool ZhongHeFlag = false; +uint16_t CCRV = 300; +float Blank = 0; +const uint8_t SampleCupMax = 8; +float ABSB; // 下吸光度 +struct RunSet +{ + uint16_t Speed_Stirrer; // 搅拌器速度 + _Bool SampleCup[SampleCupMax]; // 样品杯是否存在 + float AbsU; // 上吸光度 + float ABSB; // 下吸光度 + float SetmL; // 添加萃取液体积 + float UseuL; // 中和液体积 + float Sample_g; // 样品重量 + + _Bool RunFlag; // 启动标志位 +}; +float ABSBuf[200]; +float UseuLBuf[200]; +uint16_t BufIndex = 0; +uint32_t step = 100; +uint32_t ADCDataBuf[10]; +extern void StirrerCtrl( uint16_t CCRV ); +uint32_t AllStep = 51200; +float ADCRef = 0; +_Bool HasSample[8] = {false}; +_Bool SetSample[8] = {true,true,true,true,true,true,true,true}; +float WeigthSample[8]; +float UseduL[8] = {0}; +float mg_g[8] = {0}; +float uL_Blank = 50; +_Bool SampleRunFlag = false; + + +float AverageData() +{ + return ( + (ADCDataBuf[0] >> 16) + (uint16_t)ADCDataBuf[0] + + (ADCDataBuf[1] >> 16) + (uint16_t)ADCDataBuf[1] + + (ADCDataBuf[2] >> 16) + (uint16_t)ADCDataBuf[2] + + (ADCDataBuf[3] >> 16) + (uint16_t)ADCDataBuf[3] ) / 8.0f; + +} +const uint16_t SingelCupStep = 6400; + +void HasSampleCheck() +{ + + + SpeedSet[M3] = 10000; + CoordinateSet[M3] = - SingelCupStep /2; + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + + osDelay(100); + ADCData =AverageData(); + ADCRef = Blank = ADCData; + CoordinateSet[M3] = AllStep; + uint8_t j = 0; + while( CoordinateSet[M3] != CoordinatePosition[M3]) + { + ADCData =AverageData(); + if( j < 8 ) + { + + if( CoordinatePosition[M3] > (- SingelCupStep / 4 + j * SingelCupStep - 850 )) // 正负850 共1700 + { + if( CoordinatePosition[M3] < (- SingelCupStep / 4 + j * SingelCupStep + 850 )) + { + if( ADCRef - ADCData > 500 ) + { + HasSample[j] = true; + j++; + } + } + else + { + HasSample[j] = false; + j++; + } + } + } + printf( "%2f,%3f\n",CoordinatePosition[M3] / 100.0f,ADCData); + osDelay(10); + + } + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + + SpeedSet[M3] = 20000; + +} +osThreadId_t SampleRunTaskHandle; +const osThreadAttr_t SampleRunTask_attributes = { + .name = "SampleRunTask", + .stack_size = 128 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; +#define ZHF 0.30f +#define DDF 0.27f +int16_t j = 0; +float dlteamin = 0.3f; +int16_t dlteaminCount = 0;; +void SampleRunTask( void *arg) +{ + uint8_t i; + int count = 0; + if( !HasSample[0] ) + { + vTaskDelete( NULL ); + return; + } + for(i = 1; i < 8; i ++) + { + osDelay(1500); + if( HasSample[i] && SetSample[i]) + { + + CoordinateSet[M3] = i* SingelCupStep; + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + + osDelay(1500); + Typestr("%d号杯萃取",i); + CoordinateSet[M2] = SetmL *slope1; + CuiQuFlag = false; + StirrerCtrl(CCRV); + do { + osDelay(200); + } + while( (CoordinateSet[M2] != CoordinatePosition[M2]) ); + StirrerCtrl(0); + + osDelay(1500); + CoordinateSet[M3] = 0; + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + osDelay(1000); + SpeedSet[0] = 1000; + CoordinateSet[M1] = 1000/slope2; + do { + osDelay(200); + } + while( (CoordinateSet[M1] != CoordinatePosition[M1]) ); + SpeedSet[0] = 20; + + osDelay(1000); + CoordinateSet[M3] = i* SingelCupStep; + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + osDelay(1500); + BufIndex = 0; + UseuL = 0; + Typestr("%d号杯中和",i); + ADCData =AverageData(); + Blank = ADCData; + CoordinateSet[M1] = 6550000; + StirrerCtrl(CCRV); + do { + ADCData = AverageData(); + ABSB = (uint16_t)(log10(Blank/ADCData) *1000 ) / 1000.0f; + UseuL = (uint32_t)(PluseCount[M1] * slope2 * 1000) / 1000.0f; + ABSBuf[BufIndex] = ABSB; + UseuLBuf[BufIndex] = UseuL; + pfp( "%.3f,%3f\n",ABSB,ADCData); + if(ABSB > ZHF) + { + count ++; + if( count >= 5) + { + dlteamin = ZHF; + CoordinateSet[M1] = 0; + ZhongHeFlag = false; + StirrerCtrl(100); + osDelay(1000); + j = BufIndex; + while( j > 0) + { + j--; + if( fabs(ABSBuf[j] - DDF) < dlteamin ) + { + dlteamin = fabs(ABSBuf[j] - DDF); + dlteaminCount = j; + } + if( ABSBuf[j] < DDF ) + { + UseduL[i] = UseuLBuf[j]; + j = -1; + break; + } + } + if( j == 0 ) + { + for( j = 199; j > BufIndex; j -- ) + { + if( fabs(ABSBuf[j] - DDF) < dlteamin ) + { + dlteamin = fabs(ABSBuf[j] - DDF); + dlteaminCount = j; + } + if( ABSBuf[j] < DDF ) + { + UseduL[i] = UseuLBuf[j]; + j = -1; + break; + } + } + if( j == BufIndex ) + { + if( fabs(ABSBuf[j] - DDF) < dlteamin ) + { + dlteamin = fabs(ABSBuf[j] - DDF); + dlteaminCount = j; + } + UseduL[i] = UseuLBuf[dlteaminCount]; + //没有小于0.27的数则取最接近的数 + } + } + } + } + else + { + count = 0; + } + if(++BufIndex >=200) + BufIndex = 0; + osDelay(50); + } while( CoordinateSet[M1] != CoordinatePosition[M1] ); + if(WeigthSample[i]!= 0) + { + mg_g[i] = (int32_t)((UseduL[i] - uL_Blank)*0.02*56.1/WeigthSample[i] * 1000 ) /1000000.0f; + } + else + { + uL_Blank = UseduL[i]; + } + } + else + { + Typestr("空位"); + CoordinateSet[M1] = 0; + } + } + StirrerCtrl(0); + osDelay(1500); + CoordinateSet[M3] = 0; + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + osDelay(1000); + vTaskDelete( NULL ); +} + +_Bool FillFlag = false; +void YouSuanRun( void ) +{ + Typestr("进入系统" ); + MODBUS_Init(1); + Debuglog(""); + slope1 = 82700; + slope2 = 0.01166; + MotorCTRLInitiate(); + Debuglog(""); + + CoordinateSet[M1] = 0; + CoordinateSet[M2] = 0; + CoordinateSet[M3] = 0; + + MotorZero_Init(M3); + Debuglog(""); + HasSampleCheck(); + Debuglog("n"); + SpeedSet[0] = 20; + SpeedSet[0] = 1000; + SpeedSet[3] = 5000; + ADCData =AverageData(); + Blank = ADCData; + for(;;) + { + if(FillFlag) + { + FillFlag = 0; + CoordinateSet[M3] = 0; + do { + osDelay(200); + } + while( (CoordinateSet[M3] != CoordinatePosition[M3]) ); + CoordinateSet[M2] = 1 *slope1; + CuiQuFlag = false; + do { + osDelay(200); + } + while( (CoordinateSet[M2] != CoordinatePosition[M2]) ); + SpeedSet[0] = 1000; + CoordinateSet[M1] = 1000 / slope2; + do { + osDelay(200); + } + while( (CoordinateSet[M1] != CoordinatePosition[M1]) ); + SpeedSet[0] = 20; + } + + if(SampleRunFlag) + { + SampleRunTaskHandle = osThreadNew( SampleRunTask, NULL, &SampleRunTask_attributes); + SampleRunFlag = false; + } + else + { + if( FindZero[M3] ) + { + Typestr("找零") + Debuglog(""); + MotorZero_Init(M3); + Debuglog(""); + } + } + osDelay(200); + } +} + diff --git a/MDK-ARM/OutPut/YouSuan.axf b/MDK-ARM/OutPut/YouSuan.axf new file mode 100644 index 0000000000000000000000000000000000000000..7efbe01b9cd618670184783963c078eca3da93b9 GIT binary patch literal 1238956 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�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 EP5kvZ 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 X6dy#f;EAbZKMW62 z{lrurL;f1Adka?R6jA52YC`6r22`eJjgS5kn(0v-#e8j=6SUP@49!xhTgsaqPfX8h2i|q}#0aE3NP5S6Rp#B>ZJ(IFWk6;Fd1A`R zM4p&_p-0cF`H5*hRyw)<(Q(T2b2+&k2fA2!x0)wrP-wzy=bsos(XrAg4vr4vPO;3% zDGrHZ!4p%-9vU8``iZGL$guDr)lW?2L57D1seWQA4>BS=Nc9s_d5}@=Amz=DCuVfD z1Mj+fVgyniB)#KfD)a8`wolCXG9WXnJTc|OEKkgY(4*(o{KPaLE1lfL=s4y1xt!dN zlU=O5Tg?+QB{bo+^G}SR=ve6#r$&cyr X6sJY8;EAbZPY(}L{lrurWJY+9>L;f1 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
rT7iS=Th;+vSq3mzoGd2 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

iH@e;g3f6N8mp#cKQ1y*v^+T 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 QD9@XF@<2~immrS+2OYzu$N&HU literal 0 HcmV?d00001 diff --git a/MDK-ARM/OutPut/YouSuan.hex b/MDK-ARM/OutPut/YouSuan.hex new file mode 100644 index 0000000..802e1f1 --- /dev/null +++ b/MDK-ARM/OutPut/YouSuan.hex @@ -0,0 +1,2520 @@ +:020000040800F2 +:10000000D83E0020E1010008354400083F390008CF +:1000100011410008051300082558000800000000E1 +:10002000000000000000000000000000490100087E +:1000300045130008000000008D010008094F00086A +:10004000FB010008FB010008FB010008FB010008A0 +:10005000FB010008FB01000847130008FB01000832 +:10006000FB010008FB010008FB0100080913000860 +:10007000FB010008FB010008FB010008FB01000870 +:10008000FB010008FB010008FB010008FB01000860 +:10009000FB010008FB010008FB010008FB01000850 +:1000A000FB010008A54F0008FB010008FB01000848 +:1000B0003550000821510008FB010008FB01000831 +:1000C000FB010008FB010008FB010008FB01000820 +:1000D000FB01000881570008FB010008FB01000834 +:1000E000FB010008FB010008FB010008FB01000800 +:1000F000FB010008FB010008FB010008FB010008F0 +:10010000FB010008FB0100080D520008FB0100087C +:10011000FB010008FB010008FB0100086952000810 +:10012000FB010008FB010008FB010008FB010008BF +:10013000DFF810D000F03EFD004800477173000862 +:10014000AFF30080D83E0020224B19680868B0E861 +:10015000F00F80F30988BFF36F8F4FF0000080F33A +:1001600011884EF00D0E7047000000000648006830 +:10017000006880F3088862B661B6BFF34F8FBFF3A3 +:100180006F8F00DF00BF00BF08ED00E0EFF30980D4 +:10019000BFF36F8F0F4B1A6820E9F00F106008B59E +:1001A0004FF0500080F31188BFF34F8FBFF36F8F74 +:1001B00008F028FB4FF0000080F31188BDE80840EC +:1001C00019680868B0E8F00F80F30988BFF36F8FF3 +:1001D000704700BF8C010020EFF3058070470000DE +:1001E0000648804706480047FEE7FEE7FEE7FEE7D1 +:1001F000FEE7FEE7FEE7FEE7FEE7FEE7A14F0008A9 +:1002000031010008202A04DB203A21FA02F0002103 +:10021000704721FA02F3D040C2F120029140084316 +:100220001946704740EA01039B0703D009E008C95B +:10023000121F08C0042AFAD203E011F8013B00F8AB +:10024000013B521EF9D27047D2B201E000F8012BF7 +:10025000491EFBD270470022F6E710B513460A4646 +:1002600004461946FFF7F0FF204610BDF0B480EABF +:100270000102D40F4200B2EB410F02D202460846FF +:1002800011464A0042D0C30DDDB2C1F3C752AD1AC8 +:10029000202D35DAC1F3160141F4000204B15242B7 +:1002A000C5F1200602FA06F12A411044B3EBD05FF3 +:1002B00023D0C4B1012DA0EBC35009DCF0BC4FF03A +:1002C000004202EAC352DBB200F5000000F096BA29 +:1002D000400000F1807000EBC350A0F1807040EA54 +:1002E000D170490009E0490841EAC071A0EBC35050 +:1002F00000F50000400800EBC350F0BC00F075BAF8 +:100300006142012202EB4101001BF6E7F0BC70479D +:1003100081F00041AAE780F00040A7E780EA0102EF +:1003200010B502F00043400022D04A001FD0010E59 +:1003300001EB1261C0F35600C2F3560240F4000014 +:1003400042F40002A0FB022000047F39140400D014 +:10035000401C50EA124001D44000491EC2B20C06B3 +:1003600004EBD010401C4008802A02D003E000209B +:1003700010BD20F00100002900DA0020184310BD54 +:1003800030B480EA010202F0004530F0004221F072 +:10039000004013D090B1C30DD40DC2F31601C0F3C9 +:1003A0001600E41A41F4000140F400027D34914249 +:1003B00001D3641C00E04900002C02DA30BC0020AC +:1003C00070474FF400000023914201D3891A034380 +:1003D00040084FEA4101F7D151B1914202D14FF0AB +:1003E000004105E002D24FF0010101E06FF0010190 +:1003F00003EBC450284430BC00F0F7B92DE9FE4FA0 +:1004000081EA030404F0004421F0004100944FF01D +:10041000000B23F0004350EA01045ED052EA0304CB +:100420005BD0C3F30A54C1F30A552C44A4F2F3344D +:100430000194A0FB0254C1F3130141F48011C3F3F2 +:10044000130343F4801301FB024400FB034E840AB0 +:10045000970A44EA815447EA8357A4FB0768029548 +:100460008D0A05FB07854FEA932C04FB0C542705E6 +:10047000029D4FEA065847EA1637B5EB08056EEBC2 +:10048000070C870E920E47EA811742EA8312A7FBF8 +:100490000201B6EB0B0164EB00042B0D43EA0C33B5 +:1004A0005E1844EB1C50DA465146E7FB0201C5F3E7 +:1004B00013044FEA0B3343EA14534FEA0432019C0E +:1004C00043EA0603A4F10C040294009CCDE900B4B5 +:1004D00000F0D1F903B0BDE8F08F00200146F9E744 +:1004E0002DE9F04D81EA030404F0004B21F00045B2 +:1004F00014464FF0000A23F0004150EA050220D0D4 +:1005000054EA01021DD0C5F30A570246C5F313038E +:10051000C1F31300C1F30A5640F4801543F480136D +:10052000A7EB0608101BD64608F2FD3873EB050052 +:1005300002D308F1010801E092185B41B8F1000F05 +:1005400003DA00200146BDE8F08D00204FF4801151 +:10055000064684460EE0171B73EB050705D3121BF6 +:1005600063EB050306434CEA010C49084FEA3000EF +:1005700092185B4150EA0107EDD152EA030012D014 +:1005800082EA040083EA0501084305D0101BAB4151 +:1005900006D20122002306E000224FF0004302E0D1 +:1005A0006FF0010253101AEB06004CEB085110EBF0 +:1005B0000A0041EB0B01BDE8F04D00F04DB9C10F51 +:1005C00080EAE0700844CA079623002100F016B9BB +:1005D00096230022114600F011B900F0004220F0ED +:1005E0000040C10DC0F3160040F400007F2901DA7D +:1005F00000207047962903DCC1F19601C84001E054 +:1006000096398840002AF4D04042704720F00040DC +:10061000C10DC0F3160040F400007F2901DA00206C +:100620007047962903DCC1F19601C840704796399E +:100630008840704770B5C1F30A5201F000450024AC +:10064000C1F3130140F2FF3341F480119A4201DA01 +:10065000002070BD40F233439A42A2F2334203DCE1 +:100660005242FFF7CFFD00E090402C43F1D04042D2 +:1006700070BDC1F30A5210B5C1F3130140F2FF334C +:1006800041F480119A4201DA002010BD40F2334358 +:100690009A42A2F2334203DC5242FFF7B3FD10BD8F +:1006A000904010BD00F0004230F000400AD0C10D73 +:1006B00001F56071C0F3160042EA0151C20840071B +:1006C00011437047002001467047000030B5041EFA +:1006D00071F1000404DB4FF00044404264EB01017F +:1006E000141E73F1000405DB1C464FF00043524218 +:1006F00063EB04038B4208BF824230BD01F000432C +:1007000030B421F0004150EA010206D00A0DA2F5F2 +:100710006072C1F31301002A02DC30BC0020704774 +:10072000440F44EAC104C100E01830BC00EBC250E1 +:1007300000F05BB8002801DBC0F10040002901DBBC +:10074000C1F1004181427047002801DBC0F1004047 +:10075000002901DBC1F100418842704730B50B46EA +:10076000014600202022012409E021FA02F59D42E1 +:1007700005D303FA02F5491B04FA02F52844151EB5 +:10078000A2F10102F1DC30BD2DE9F05F0546002049 +:1007900092469B4688460646814640241BE02846F2 +:1007A000414647462246FFF72DFD53465A46C01A9A +:1007B000914110D311461846224600F00DFA2D1A29 +:1007C00067EB01084F4622460120002100F004FAA1 +:1007D00017EB00094E41201EA4F10104DFDC48465E +:1007E00031462A464346BDE8F09F0029A8BF70471E +:1007F000401C490008BF20F00100704710B4B0FA57 +:1008000080FC00FA0CF050EA010404BF10BC7047F1 +:1008100049B1CCF1200421FA04F411FA0CF118BF0B +:10082000012121430843A3EB0C01CB1D4FEA0061DA +:100830004FEA102042BF002010BC704700EBC350AD +:1008400010440029A4BF10BC7047401C490008BFD9 +:1008500020F0010010BC704710B5141E73F10004A5 +:1008600008DA401C41F1000192185B411A4301D1A2 +:1008700020F0010010BD2DE9F04D92469B4611B1CC +:10088000B1FA81F202E0B0FA80F22032904600F034 +:10089000A3F904460F4640EA0A0041EA0B01534619 +:1008A0005A46084313D0114653EA010019D0C8F143 +:1008B00040025046FFF7A6FC05460E4650465946F4 +:1008C000424600F089F9084305D0012004E02046A3 +:1008D0003946BDE8F08D0020054346EAE0762C431A +:1008E00037430A986305E40AA0EB08000022FD0ADA +:1008F00044EA47540A3002D500200146E9E70105E1 +:1009000010196941DDE9084500196941BDE8F04D5C +:10091000A2E72DE9FE4F804681EA0300C00F0C4696 +:10092000009021F0004123F00045B8EB0200A941FE +:1009300005D24046214690461C460B46024623F00F +:100940000040104347D0270DC7F30A00C3F30A51F4 +:100950000290401A019040286BDAC3F3130040F470 +:10096000801B0098924620B10023D2EB030A63EB70 +:100970000B0B01985946C0F14002504600F02CF98B +:1009800006460D4650465946019A00F034F910EBE0 +:1009900008006141002487EA115284EAE7731A4390 +:1009A00040D0009A62B3019A012A4FEA075215DC3F +:1009B000001B61EB02014FF0004202EA0752CDE951 +:1009C0000042001C41F5801132462B46FFF753FFD1 +:1009D00003B0BDE8F08F40462146F9E7001B61EB0C +:1009E0000201001C41F5801300185B412018A2F59C +:1009F000001747EB030140EAD570B6196D4111E0CD +:100A00006D084FEA360645EAC0754FEA0752001BEB +:100A100061EB0201001C41F5801149084FEA3000EA +:100A20000019514132462B4603B0BDE8F04FFFF7A5 +:100A300013BF0098012240000023D0EB020263EBB9 +:100A4000E073009821464FEAE074B8EB000061EBD8 +:100A50000401E9E783F000435BE781F0004158E7D8 +:100A600070B521F0004303430CD0C1F30A550024B4 +:100A7000D5EB040564EB0403D617AD1AB34102DBD2 +:100A80000020014670BD201841EB025170BD2DE9D8 +:100A9000F04D00231A461B1A8A4103DB0020014651 +:100AA000BDE8F08DC1F30A52C1F3130141F4801582 +:100AB0004FF0000BD10702D100186D41521E0027E4 +:100AC000044640F2FF11384601EB620A3E4680467A +:100AD000024600204FF48011FFF794FBC2197141C8 +:100AE000BB1846EB0100B4EB030C75EB000C04D310 +:100AF000E41A65EB000517460E46241908F10100BB +:100B00006D4180463428E3DDF91946EB0600091BE8 +:100B1000A84103D24FF0FF32134601E000221346F2 +:100B20001BEB070046EB0A51BDE8F04DFFF794BE02 +:100B30000EB5C10F80EAE0700844CA07002140F2F8 +:100B400033438DE80E000A460B46FFF794FE03B0D0 +:100B500000BDC1F30A52C1F3130140F2FF3341F467 +:100B600080119A4202DA00200146704740F2334376 +:100B70009A42A2F2334202DC5242FFF743BB00F03A +:100B80002BB8000030B5041E71F1000404DB4FF0F7 +:100B90000044404264EB0101141E73F1000405DBC4 +:100BA0001C464FF00043524263EB0403994208BFD6 +:100BB000904230BD064C074D06E0E06840F001036E +:100BC00094E8070098471034AC42F6D3FFF7B4FA24 +:100BD000A09C0008C09C0008202A04DB203A00FAF0 +:100BE00002F1002070479140C2F1200320FA03F384 +:100BF000194390407047202A06DBCB17203A41FA70 +:100C000002F043EAE07306E041FA02F3D040C2F199 +:100C10002002914008431946704770B58C1810F8AF +:100C2000015B15F0070301D110F8013B2A1106D131 +:100C300010F8012B03E010F8016B01F8016B5B1E4B +:100C4000F9D12B0705D40023521E0DD401F8013B26 +:100C5000FAE710F8013BCB1A921C03E013F8015B92 +:100C600001F8015B521EF9D5A142D8D3002070BD16 +:100C700070B5044600252068806800F0010018B3B4 +:100C80002068806820F001002168886001F016FB70 +:100C9000054613E001F012FB401B02280ED9206824 +:100CA000806800F0010048B1A06A40F01000A06226 +:100CB000E06A40F00100E062012070BD20688068B9 +:100CC00000F001000028E5D10020F6E770B50546E8 +:100CD0006C6AA06A00F05000E0B9A06A40F40070AD +:100CE000A0622068806800F46020B0F5602F0DD10C +:100CF000207B58B9A06A20F48070A062A06A00F43A +:100D0000805018B9A06A40F00100A062204600F0AF +:100D1000A9FC03E0206A016B2846884770BD70B5C6 +:100D200005466C6AA06A40F04000A062E06A40F0AC +:100D30000400E062204600F097FC70BD70B50446E8 +:100D4000656A284600F08FFC70BD000038B5044687 +:100D50000025002000902068806800F0010078BB2A +:100D60002068806840F001002168886019480068A8 +:100D70001949B0FBF1F0009002E00098401E00908D +:100D800000980028F9D101F099FA054619E001F020 +:100D900095FA401B022814D92068806800F00100F1 +:100DA00078B9A06A40F01000A062E06A40F001004B +:100DB000E06200BF002084F8240000BF012038BD9D +:100DC00005E02068806800F001000028DFD00020E6 +:100DD000F5E700008801002040420F002DE9FF5F89 +:100DE0000446F74850F82400F64951F82410884288 +:100DF0007DD0F548005D002879D1F448807800283E +:100E0000FAD1F34951F82400FFF700FC85B22946D6 +:100E1000204603F007FD0120EB4908550020ED496D +:100E200041F82400E64850F82400EB4951F824101A +:100E3000884208DDE34850F82400E14941F82400E5 +:100E40000F2006F0C9FA44F62060E44941F8240076 +:100E5000E348E44941F8240040F2DC50E24941F81B +:100E60002400D74850F82400D64941F82400002037 +:100E7000DE4941F82400DE490855D14850F82400E5 +:100E8000DC4951F82410401ADB4941F82400084697 +:100E900050F8240000287DD0084650F8240000288F +:100EA00002DD0120D5490855D34850F82400002818 +:100EB00002DA0020D1490855CF4951F82400002812 +:100EC00001DB014600E04142CD4A42F82410C94806 +:100ED00050F82400CB4941F824000121204603F0BA +:100EE00052FAC54850F82400C10F204600E0CCE17A +:100EF00003F00CFAB94830F8240081B2204603F020 +:100F00005AFA322006F068FABB4951F8240000284A +:100F100001DB014600E041424908B34A42F824108F +:100F2000114651F82400FFF753FB0546B64850F828 +:100F300024102846FFF708FC07D2B34951F82400D3 +:100F4000FFF764FBA84941F824000121204603F083 +:100F500059FA0121204603F011FA6BE1A64951F834 +:100F60002400002801DB014600E041429E4A52F87D +:100F70002420891A9D4A52F8242091427ED3A34905 +:100F800031F81400FFF724FB0546964850F824106A +:100F9000284600E06DE1FFF7D7FB70D29C4951F87D +:100FA00024004FF08041FFF7EBF982468F4951F85A +:100FB00024104800FFF70CFB83465146FFF7AEF9BB +:100FC0008146FFF76FFB074607F0ACF80546FFF7D1 +:100FD00095FB844941F824008C4931F81400FFF74F +:100FE000F7FA05467F4850F824102846FFF7A2FB81 +:100FF00007D2864931F81400FFF7EAFA794941F837 +:101000002400784A52F82410724A52F82400FFF75C +:1010100091FB05D2734850F824006E4941F8240032 +:101020007C4A52F824106F4A52F82400FFF78CFBD8 +:1010300005D2784850F824006A4941F82400764ADD +:1010400052F82410674A52F82400FFF773FB05D2C8 +:10105000714850F82400634941F82400614850F871 +:1010600024106E48FFF78CF90546FFF7CFFA5B496D +:1010700041F82400084630F8240001E005E08CE047 +:1010800081B2204603F097F987E05B4951F82400CC +:10109000002801DB014600E04142534A52F8242077 +:1010A000891A524A52F82420914275D8584951F869 +:1010B00024004FF08041FFF763F94C49039051F849 +:1010C0002400FFF785FA01904B4850F82490B9F1BD +:1010D000000F01DB494601E0C9F100010846FFF7B6 +:1010E0006EFA00900199FFF713F94FF080410290DA +:1010F000FFF714F983460399FFF710F98246FFF7CB +:10110000D1FA074607F00EF80546FFF7F7FA35491A +:1011100041F824000A4652F824102E4A52F82400BE +:10112000FFF708FB05D22F4850F82400294941F861 +:101130002400384A52F824102A4A52F82400FFF7B3 +:1011400003FB05D2334850F82400264941F8240017 +:10115000314A52F82410234A52F82400FFF7EAFAE1 +:1011600005D22D4850F824001E4941F824001D489E +:1011700050F824102948FFF703F90546FFF746FA0F +:10118000164941F82400084630F8240081B2204670 +:1011900003F011F901E0FFE700BF012006F01CF9A0 +:1011A000154850F8240000283ADB164850F824006F +:1011B0000E4951F8241008440E4941F8240039E042 +:1011C0005C030020B0030020340000200801002050 +:1011D00018000020B40000201C99000860000020C6 +:1011E0000000FA439800002044000020080300207B +:1011F000070000207803002094030020D000002086 +:10120000EC020020CC03002038990008E8030020FD +:101210007C0000205499000870990008002474494B +:101220001C4850F824001C4951F82410401A1B494E +:1012300041F824001A48005D00283FF48FAE194899 +:1012400050F8240000280ADB124850F82400124904 +:1012500051F824100844114941F8240009E00D48D0 +:1012600050F824000C4951F82410401A0B4941F859 +:10127000240000200C4941F824000C490855084975 +:101280000855052006F0A8F802E00F2006F0A4F8A3 +:10129000BDE8FF9FCC030020080300207803002056 +:1012A0000700002094030020980000203400002054 +:1012B00010B51349098889B2114A126801EB12412D +:1012C0000F4A526801EB12410D4A928892B21144C2 +:1012D0000B4A926801EB1241094A128992B21144F9 +:1012E000074AD26801EB1241054A928992B28818E6 +:1012F000FFF76EF904464FF08241FFF741F810BD49 +:10130000BC0C002000BFFEE710B5024800F074FBE3 +:1013100010BD00006004002030B590F8405001245A +:10132000AC40C56B6C60046863604468102C04D1E9 +:101330000468A2600468E16003E00468A1600468D6 +:10134000E26030BD704710B5012000F003FE10BD13 +:1013500008490968012282409143064A1160054903 +:1013600014310968012282401143024A143211608B +:1013700070470000000401400849096801228240CA +:101380001143064A11600549143909680122824057 +:101390001143024A143A11607047000014040140DE +:1013A00072B600BFFEE7000001460020022904D10A +:1013B000034A926802F0010000E000BF00BF7047DE +:1013C0000010014010B504460B46022C08D11BB199 +:1013D0000020FFF7D1FF02E00020FFF7B9FF00E097 +:1013E00000BF00BF10BD0000F8B504460026002075 +:1013F000009000BF94F82400012801D10220F8BD1C +:10140000012084F8240000BF2046FFF731FC064687 +:101410002046FFF79BFC0646002E69D1A06A20F407 +:10142000885040F00200A062022001F04FF83449D9 +:101430000968B1FBF0F04000009002E00098401E07 +:10144000009000980028F9D12068806840F00800DA +:101450002168886000F032FF054616E000F02EFF9C +:10146000401B0A2811D92068806800F0080060B18C +:10147000A06A20F0020040F01000A06200BF00202F +:1014800084F8240000BF0120B9E72068806800F0DC +:1014900008000028E2D12068806840F0040021683C +:1014A000886000F00BFF054616E000F007FF401BC8 +:1014B0000A2811D92068806800F0040060B1A06A91 +:1014C00020F0020040F01000A06200BF002084F86D +:1014D000240000BF012092E72068806800F004002B +:1014E0000028E2D1A06A20F0020040F00100A062D2 +:1014F00000BF002084F8240000BF30467FE70000D2 +:101500008801002038B5024600230020009000BF6B +:1015100092F82400012801D1022038BD012082F870 +:10152000240000BF4868072812D21068406B0C796D +:10153000641E04EB84051F24AC40A0430D796D1E8E +:1015400005EB85050C68AC4020431468606327E018 +:1015500048680D2812D21068006B0C79E41F04EB68 +:1015600084051F24AC40A0430D79ED1F05EB8505D4 +:101570000C68AC4020431468206311E01068C06A16 +:101580000C790D3C04EB84051F24AC40A0430D797D +:101590000D3D05EB85050C68AC4020431468E06206 +:1015A00008680A2812D31068C0680C780A3C04EB5B +:1015B00044050724AC40A0430D780A3D05EB4505E2 +:1015C0008C68AC4020431468E0600FE0106800694C +:1015D0000C7804EB44050724AC40A0430D7805EBE0 +:1015E00045058C68AC4020431468206108681028C9 +:1015F00002D00868112827D1174C1068A0421ED1CC +:101600001068806800F40000F0B91068806840F449 +:1016100000001468A0600868102815D10F48006801 +:101620000F4CB0FBF4F000EB80004000009002E0B3 +:101630000098401E009000980028F9D104E0906ABC +:1016400040F020009062012300BF002082F82400B7 +:1016500000BF184661E70000002401408801002017 +:1016600040420F0070477047704700002DE9F0417D +:101670000446002700250026A84614B90120BDE82D +:10168000F081A06810B1207D00B100BFA06A30B920 +:101690000020E06284F82400204600F097F82046FD +:1016A000FFF7E6FA0746A06A00F01000002873D1A1 +:1016B000002F7ED1A06A20F4885040F00200A06282 +:1016C0003F4AD4E90001904208D1E069B0F5402FCB +:1016D00002D14FF4002002E0E06900E0E06901433C +:1016E000207B41EA40000643A068B0F5807F02D02D +:1016F000A068012802D14FF4807000E0002005436B +:10170000207D012811D1207B38B9A069401E4FF4FB +:10171000006141EA4030054307E0A06A40F0200044 +:10172000A062E06A40F00100E0622068406820F4B6 +:101730006940284321684860206880682149084042 +:10174000304321688860A068B0F5807F02D0A0682F +:10175000012802D14FF4807000E00020B0F5807FB6 +:1017600003D1208A401E4FEA00582068C06A20F446 +:10177000700040EA08002168C86220688068124949 +:101780000840B04209D10020E062A06A20F00200C7 +:1017900040F00100A06211E00BE0A06A20F002001E +:1017A00040F01000A062E06A40F00100E062012712 +:1017B00004E0A06A40F01000A062012738465EE70E +:1017C000003C0140FDF7E1FFFE0E1FFF10B586B0A3 +:1017D000044600200290039004900590214920685F +:1017E00088423DD100BF2048806940F400701E4906 +:1017F00088610846806900F40070019000BF00BF56 +:1018000000BF0846806940F008008861084680698A +:1018100000F00800019000BF00BF03200290039079 +:1018200002A9124800F0A4FB1148124908600020E8 +:10183000486000210F4881608021C160490001613A +:1018400089004161202181610021C16100F0A0FA7D +:1018500008B1FFF7A5FD00BF06482062446200BF43 +:1018600006B010BD0024014000100240000C0140F1 +:1018700008000240600400202DE9F04104460D46B6 +:101880001646002757492068884203D056492068E9 +:10189000884205D15348001D006800F4702000E024 +:1018A000002000287ED100BF94F82400012802D136 +:1018B0000220BDE8F081012084F8240000BF20460A +:1018C000FFF744FA0746002F6DD1A06A40F6016188 +:1018D000884340F48070A06243492068884209D15F +:1018E0004048001D006800F4702008B9012002E0A3 +:1018F000002000E0012078B1A06A20F48010A062EE +:101900002068406800F4806000B3A06A20F40050B2 +:1019100040F48050A06219E0A06A40F48010A062F8 +:1019200030492068884203D02F492068884205D179 +:101930002C48001D006800F4806000E0002028B101 +:10194000A06A20F4005040F48050A062A06A00F425 +:10195000805020B1E06A20F00600E06201E0002043 +:10196000E06200BF002084F8240000BF1F48216A05 +:1019700088621F48216AC8621E48216A08636FF0A6 +:101980000200216808602068806840F48070216847 +:101990008860226802F14C0133462A46206A00F032 +:1019A0003DFA01E01AE014E02068806800F460204D +:1019B000B0F5602F06D12068806840F4A00021684F +:1019C00088600CE02068806840F48010216888609E +:1019D00005E000BF002084F8240000E0012738461D +:1019E00067E700000024014000280140CD0C0008FA +:1019F0003D0D00081F0D000870B50446E06B05683A +:101A00002068066894F84010042088402840002888 +:101A100075D006F004000028FAD02068006800F0B5 +:101A2000200028B92068006820F0040021680860C0 +:101A3000D5492068884254D9D349783920688842EA +:101A400001D1042049E0D04964392068884201D19D +:101A5000402042E0CC4950392068884201D100152D +:101A60003BE0C9493C392068884202D14FF48040AC +:101A700033E0C54928392068884202D14FF48020DC +:101A80002BE0C14914392068884202D14FF480000C +:101A900023E0BD492068884201D1C0041DE0BB4954 +:101AA0002068884201D1042017E0B8491431206829 +:101AB000884201D1402010E0B44928312068884292 +:101AC00001D1001509E0B1493C312068884202D1BA +:101AD0004FF4804001E04FF48020AC49091F0860BA +:101AE00054E0A94978392068884201D104204AE0AD +:101AF000A54964392068884202D1402043E04CE087 +:101B0000A14950392068884201D100153BE09E4927 +:101B10003C392068884202D14FF4804033E09A4932 +:101B200028392068884202D14FF480202BE0964962 +:101B300014392068884202D14FF4800023E0924992 +:101B40002068884201D1C0041DE090492068884285 +:101B500001D1042017E08D4914312068884201D159 +:101B6000402010E0894928312068884201D10015C1 +:101B700009E086493C312068884202D14FF4804018 +:101B800001E04FF48020804980394860E06A0028F5 +:101B900002D02046E16A8847F4E094F84010022021 +:101BA00088402840002871D006F002000028FAD0B2 +:101BB0002068006800F0200040B92068006820F02C +:101BC0000A0021680860012084F821006E4920681D +:101BD000884254D96C4978392068884201D1022062 +:101BE00049E0694964392068884201D1202042E0F7 +:101BF000654950392068884201D140153BE062496F +:101C00003C392068884202D14FF4005033E05E49ED +:101C100028392068884202D14FF400302BE05A491D +:101C200014392068884202D14FF4001023E056494D +:101C30002068884201D180041DE054492068884210 +:101C400001D1022017E0514914312068884201D1A6 +:101C5000202010E04D4928312068884201D14015EC +:101C600009E04A493C312068884202D14FF40050D3 +:101C700001E04FF400304549091F086054E0424933 +:101C800078392068884202D102204AE057E03E4974 +:101C900064392068884201D1202042E03A49503915 +:101CA0002068884201D140153BE037493C39206823 +:101CB000884202D14FF4005033E03349283920687C +:101CC000884202D14FF400302BE02F4914392068AC +:101CD000884202D14FF4001023E02B49206888424B +:101CE00001D180041DE029492068884201D10220E9 +:101CF00017E0264914312068884201D1202010E0E5 +:101D0000224928312068884201D1401509E01F4945 +:101D10003C312068884202D14FF4005001E04FF47A +:101D2000003019498039486000BF002084F8200045 +:101D300000BFA06A30B32046A16A884722E094F829 +:101D40004010082088402840E0B106F00800C8B1E3 +:101D50002068006820F00E002168086094F84010A8 +:101D600001208840E16B48600120A06384F82100D5 +:101D700000BF002084F8200000BF206B10B1204677 +:101D8000216B884770BD00008000024008040240BB +:101D90000146002209B9012070471E4B086898428D +:101DA0000BD21D4B0868C01A1423B0FBF3F080005F +:101DB000086419480838C8630AE0164B0868C01A56 +:101DC0001423B0FBF3F08000086412480838C8639D +:101DD000022081F821000868026843F6F07082430F +:101DE000D1E901031843CB6818430B6918434B69C9 +:101DF00018438B691843CB69184302430868026093 +:101E000000208863012081F82100002081F8200053 +:101E100000BFC1E708040240080002402DE9F0417C +:101E200004460D4616461F464FF0000800BF94F8C2 +:101E30002000012802D10220BDE8F081012084F8B1 +:101E4000200000BF94F8210001282CD1022084F842 +:101E500021000020A0632068006820F001002168B4 +:101E600008603B46324629462046FFF755FAE06AAD +:101E700030B12068006840F00E00216808600BE077 +:101E80002068006820F0040021680860206800686D +:101E900040F00A00216808602068006840F00100F6 +:101EA0002168086006E000BF002084F8200000BF21 +:101EB0004FF002084046BFE710B504461F480088AF +:101EC000401C1E4908801E48006840F002001C4962 +:101ED00008601C48807888B11B48806800F00100C9 +:101EE00058BB0020FFF734FA0021022002F08AFAE2 +:101EF000002016498860164988601EE012488068F4 +:101F000000F00100C8B10020FFF722FA4FF4C870BA +:101F100005F062FA0021022002F074FA0B48806892 +:101F2000002803DD01200A49886003E04FF0FF30FC +:101F30000749886000200549086010BD1001002095 +:101F40001404014008010020001001405C0300203F +:101F50007803002010B5044604480068204020B1F2 +:101F6000024804602046FFF7A7FF10BD140401409B +:101F70002DE9F847024600239C467BE14FF001081B +:101F800008FA03F4D1F8008008EA0400A0427DD1E9 +:101F9000DFF8F4A2D1F80480A8EB0A09D0453AD0C2 +:101FA00014DCB8F1030F50D009DCB8F1000F31D0C8 +:101FB000B8F1010F1CD0B8F1020F49D120E0B8F1FF +:101FC000110F18D0B8F1120F42D11EE0B9F5881FD9 +:101FD00025D006DCB9F5803F20D0B9F5801F37D178 +:101FE0001AE0B9F5001F18D0B9F5041F30D117E079 +:101FF000D1F80CC02DE0D1F80C8008F1040C28E0D9 +:10200000D1F80C8008F1080C23E0D1F80C8008F11D +:102010000C0C1EE000BF00BF00BF00BF00BF00BF30 +:10202000D1F80880B8F1000F02D14FF0040C0BE09A +:10203000D1F80880B8F1010F03D14FF0080C1461FA +:1020400002E04FF0080C546103E04FF0000C00E098 +:1020500000BF00BFFF2801D8904601E002F104084C +:102060004646FF2802D84FEA830803E0A3F1080898 +:102070004FEA88084746D6F800804FF00F0909FA62 +:1020800007F928EA09080CFA07F900E07AE048EABB +:102090000908C6F80080D1F8048008F08058B8F12B +:1020A000805F6FD100BFDFF8E481D8F8188048F076 +:1020B0000108DFF8D891C9F81880C846D8F8188008 +:1020C00008F00108CDF8008000BF00BF4FEAB93822 +:1020D0004FEA930958F829504FEA83784FEA187964 +:1020E0004FF00F0808FA09F825EA0805DFF8A08183 +:1020F000424502D14FF0000824E0DFF898814245C4 +:1021000002D14FF001081DE0DFF88C81424502D179 +:102110004FF0020816E0DFF88481424502D14FF00B +:1021200003080FE0DFF87881424502D14FF0040840 +:1021300008E0DFF87081424502D14FF0050801E068 +:102140004FF006084FEA83794FEA197908FA09F83F +:1021500048EA0505DFF850814FEA930948F829500D +:10216000D1F8048008F48018B8F5801F0BD1DFF88F +:102170003C81D8F8008048EA0008DFF83091C9F8BF +:1021800000800AE075E0DFF82481D8F8008028EAB2 +:102190000008DFF81891C9F80080D1F8048008F42D +:1021A0000018B8F5001F0ED1DFF8008108F104080F +:1021B000D8F8008048EA0008DFF8F09009F1040937 +:1021C000C9F800800DE0DFF8E48008F10408D8F8D1 +:1021D000008028EA0008DFF8D49009F10409C9F862 +:1021E0000080D1F8048008F40038B8F5003F0ED123 +:1021F000DFF8B880A8F10408D8F8008048EA0008A1 +:10220000DFF8A890A9F10409C9F800800DE0DFF813 +:102210009C80A8F10408D8F8008028EA0008DFF8BC +:102220008C90A9F10409C9F80080D1F8048008F461 +:102230008038B8F5803F0ED1DFF87080A8F108082B +:10224000D8F8008048EA0008DFF86090A9F1080992 +:10225000C9F800800DE0DFF85480A8F10808D8F82C +:10226000008028EA0008DFF84490A9F10809C9F8BD +:1022700000805B1CD1F8008028FA03F8B8F1000F49 +:102280007FF47CAEBDE8F88700001110001002401A +:1022900000080140000C0140001001400014014002 +:1022A00000180140001C01400800014008040140E2 +:1022B0000AB1016101E00B04036170470148006845 +:1022C000704700007C01002003480068034909783A +:1022D00008440149086070477C0100208401002007 +:1022E00010B50848006840F0100006490860032057 +:1022F00000F0D8F80F2000F007F800F055F80020A3 +:1023000010BD000000200240F0B587B00446002652 +:102310000027002500BF1F48806940F400601D4968 +:1023200088610846806900F40060009000BF00BF2B +:1023300001A902A800F0B4FA00F0EAFA064616482D +:10234000B6FBF0F0471E15481549086040F2E7312A +:102350001348C1604760002101618160816100F024 +:10236000DBFD054695B90E4800F05CFE05466DB9EB +:10237000192000F049F8102C07D20022214619201C +:1023800000F052F80748046000E00125284607B035 +:10239000F0BD00000010024040420F00002C014040 +:1023A000440D00208001002008B500BF144880695A +:1023B00040F00100124988610846806900F0010080 +:1023C000009000BF00BF00BF0846C06940F08050C9 +:1023D000C8610846C06900F08050009000BF00BF8F +:1023E00000220F21901E00F01FF800BF0549486829 +:1023F00020F0E06040F00070486000BF08BD0000C1 +:10240000001002400000014001460846002809DB98 +:1024100000F01F0301229A4043099B0003F1E023CF +:10242000C3F8002100BF70472DE9F05F80460D46DC +:102430001646002703F0E6FA074639462A46334691 +:1024400001F00700C0F1070ABAF1040F02D94FF0FA +:10245000040A01E0C0F1070AD14600F1040ABAF10A +:10246000070F02D24FF0000A01E0A0F1030AD446A0 +:102470004FF0010A0AFA09FAAAF1010A0AEA020A65 +:102480000AFA0CFA4FF0010B0BFA0CFBABF1010B43 +:102490000BEA030B4AEA0B042146404603F0BAFA62 +:1024A000BDE8F09F00BF00F00702064B19684FF629 +:1024B000FF031940044B0B4343EA0221014B19600F +:1024C00000BF70470CED00E00000FA052DE9F04771 +:1024D00006464FF00008002500270024A146042EE0 +:1024E00037D004DC012E3CD0022E6CD160E0082EE7 +:1024F00033D0102E67D136484468006800F08070F1 +:1025000008B33448C4F38341475C04F4803078B1A5 +:102510002F484068C0F340402F4911F8008004F470 +:10252000803040B12D48B0FBF8F000FB07F502E029 +:102530002B4807FB00F52648406800F48000B0F502 +:10254000800F01D1A94603E068000321B0FBF1F937 +:102550003AE000F0EDF9814636E000F0E9F9814615 +:1025600032E01B48046A04F44070B0F5807F05D166 +:1025700004F0020010B14FF4004918E004F4407078 +:10258000B0F5007F07D11248406A00F0020010B198 +:1025900049F640490BE004F44070B0F5407F06D1A5 +:1025A0000B48006800F4003008B14FF224490BE0FA +:1025B00000F0AEF906494968C1F38131491C490070 +:1025C000B0FBF1F900E000BF00BF4846BDE8F0876E +:1025D00000100240EA990008FA99000800127A00F7 +:1025E00000093D00F8B5044600260025207800F0DB +:1025F000010000286BD000274348C06900F08050DC +:1026000070B900BF4048C06940F080503E49C86181 +:102610000846C06900F08050009000BF00BF01274D +:102620003A48006800F48070B0B93848006840F457 +:10263000807036490860FFF741FE064606E0FFF766 +:102640003DFE801B642801D90320F8BD2F48006897 +:1026500000F480700028F2D02B48006A00F4407526 +:102660002DB3A08800F44070A84220D02648006A0C +:1026700020F44075012026490860002008602248A7 +:10268000056205F0010090B1FFF718FE064608E06C +:10269000FFF714FE801B41F28831884201D90320E4 +:1026A000D3E71948006A00F002000028F0D016486D +:1026B000006A20F440706168084313490862012FE2 +:1026C00004D10846C06920F08050C86100BF20785E +:1026D00000F00200022807D10B48406820F4404077 +:1026E000A168084308494860207800F010001028CD +:1026F00007D10548406820F4800061690843024919 +:1027000048600020A1E70000001002400070004077 +:102710004004424270B504460D460CB9012070BD1C +:102720005A48006800F00700A8420ED257480068D7 +:1027300020F007002843554908600846006800F06B +:102740000700A84201D00120E9E7207800F002004C +:1027500002281DD1207800F00400042805D14C483F +:10276000406840F4E0604A494860207800F0080082 +:10277000082805D14648406840F460504449486004 +:102780004348406820F0F000A16808434049486091 +:10279000207800F0010078B36068012806D13C4839 +:1027A000006800F4003090B90120B8E760680228A2 +:1027B00006D13748006800F0007040B90120AEE74C +:1027C0003348006800F0020008B90120A7E730484C +:1027D000406820F00300616808432D494860FFF716 +:1027E0006DFD064609E0FFF769FD801B41F2883167 +:1027F000884202D9032092E707E02548406800F0AC +:102800000C006168B0EB810FEDD12048006800F04A +:102810000700A8420ED91D48006820F00700284391 +:102820001A4908600846006800F00700A84201D075 +:10283000012074E7207800F00400042807D1144830 +:10284000406820F4E060E16808431149486020785E +:1028500000F00800082808D10D48406820F46050B6 +:10286000216940EAC1000A49486000F061F808495E +:102870004968C1F30311074A515CC8400649086022 +:1028800006480068FFF740FD002048E700200240AE +:1028900000100240FC9900088801002080010020FF +:1028A0000F2202600D4A526802F0030242600B4A96 +:1028B000526802F0F0028260084A526802F4E06254 +:1028C000C260064A526802F46052D2080261044AA9 +:1028D000126802F007020A60704700000010024010 +:1028E0000020024001480068704700008801002075 +:1028F00000B5FFF7F7FF04494968C1F30221034A15 +:10290000515CC84000BD0000001002400C9A000855 +:1029100000B5FFF7E7FF04494968C1F3C221034A44 +:10292000515CC84000BD0000001002400C9A000835 +:1029300070B500210022002400230020134D696897 +:1029400001F00C05F5B1042D02D0082D19D101E0DC +:102950000F4819E00F4DC1F38346AB5D01F480359C +:1029600055B10A4D6D68C5F340450B4E725D084D7B +:102970005D43B5FBF2F402E0084D03FB05F420468D +:1029800002E000BF024800BF00BF70BD001002405F +:1029900000127A00D8990008E899000800093D0063 +:1029A000F8B504460CB90120F8BD207800F001000C +:1029B000002878D0F848406800F00C0004280CD0BB +:1029C000F548406800F00C00082811D1F248406832 +:1029D00000F48030B0F5803F0AD1EF48006800F481 +:1029E000003000285FD0606800285CD10120DBE760 +:1029F00000BF6068B0F5803F06D1E748006840F44A +:102A00008030E549086028E0606858B9E24800680D +:102A100020F48030E04908600846006820F48020F7 +:102A200008601AE06068B0F5A02F0BD1DA480068A2 +:102A300040F48020D84908600846006840F480309F +:102A400008600AE0D448006820F48030D249086069 +:102A50000846006820F48020086000BF606888B1E4 +:102A6000FFF72CFC054606E0FFF728FC401B642816 +:102A700001D9032098E7C848006800F40030002816 +:102A8000F2D010E0FFF71AFC054606E0FFF716FC4F +:102A9000401B642801D9032086E7BF48006800F482 +:102AA00000300028F2D1207800F00200022857D12F +:102AB000B948406800F00C0050B1B748406800F0D9 +:102AC0000C00082818D1B448406800F4803098B948 +:102AD000B148006800F0020020B12069012801D04F +:102AE000012061E7AC48006820F0F800616940EA25 +:102AF000C100A949086033E02069E8B10120A74975 +:102B00000860FFF7DBFB054606E0FFF7D7FB401B3D +:102B1000022801D9032047E79F48006800F002001F +:102B20000028F2D09C48006820F0F800616940EA73 +:102B3000C1009949086013E0002098490860FFF738 +:102B4000BDFB054606E0FFF7B9FB401B022801D993 +:102B5000032029E79048006800F002000028F2D125 +:102B6000207800F0080008282DD1A069B8B1012014 +:102B70008B490860FFF7A2FB054606E0FFF79EFBC6 +:102B8000401B022801D903200EE78348406A00F069 +:102B900002000028F2D0012001F04EFC13E00020DA +:102BA0007F490860FFF78AFB054606E0FFF786FBD2 +:102BB000401B022801D90320F6E67748406A00F05E +:102BC00002000028F2D1207800F00400042873D11C +:102BD00000277148C06900F0805070B900BF6E488E +:102BE000C06940F080506C49C8610846C06900F077 +:102BF0008050009000BF00BF01276A48006800F4C1 +:102C00008070B0B96748006840F48070654908601A +:102C1000FFF754FB054606E0FFF750FB401B642816 +:102C200001D90320C0E65F48006800F480700028E6 +:102C3000F2D000BFE068012806D15748006A40F092 +:102C400001005549086227E0E06858B95248006A17 +:102C500020F00100504908620846006A20F0040094 +:102C6000086219E0E06805280BD14B48006A40F083 +:102C70000400494908620846006A40F00100086201 +:102C80000AE04548006A20F001004349086208460E +:102C9000006A20F00400086200BFE068A0B1FFF7FE +:102CA0000DFB054609E0FFF709FB401B41F28831A7 +:102CB000884202D9032077E622E03748006A00F014 +:102CC00002000028EFD012E0FFF7F8FA054608E00E +:102CD000FFF7F4FA401B41F28831884201D9032002 +:102CE00062E62D48006A00F002000028F0D1012FB2 +:102CF00005D12948C06920F080502749C86100BF2C +:102D0000E069C8B32448406800F00C00082860D08F +:102D1000E069022848D1002020490866FFF7CEFA72 +:102D2000054606E0FFF7CAFA401B022801D9032036 +:102D30003AE61948006800F000700028F2D1206AD5 +:102D4000B0F5803F07D11448406820F40030A168F6 +:102D5000084311494860D4E9080108430E4949680D +:102D600021F4741108430C49486001200B4908669E +:102D7000FFF7A4FA054607E03DE0FFF79FFA401B86 +:102D8000022801D903200FE60348006800F0007014 +:102D90000028F2D02FE00000001002400000424264 +:102DA0008004424200700040002014490866FFF78A +:102DB00085FA054606E0FFF781FA401B022801D993 +:102DC0000320F1E50E48006800F000700028F2D101 +:102DD00011E0E069012800D1E6E50948466806F4FB +:102DE0008031206A814204D106F47011606A814208 +:102DF00001D00120D8E50020D6E5000000004242C5 +:102E0000001002407047704710B50346002200BF13 +:102E100093F83C00012801D1022010BD012083F865 +:102E20003C0000BF22F0FF00CC6840EA040222F41C +:102E300040708C6840EA040222F480604C6840EAEA +:102E4000040222F400600C6840EA040222F480507C +:102E50000C6940EA040222F400504C6940EA040282 +:102E600022F48040CC6940EA04021868426400BF42 +:102E7000002083F83C0000BF00BFCEE730B502461B +:102E80000B4600BF92F83C00012801D1022030BD62 +:102E9000012082F83C0000BF022082F83D0010684B +:102EA00044681068816824F070041868044310684E +:102EB0004460144D1068A84213D0134D1068A84206 +:102EC0000FD01068B0F1804F0BD0104D1068A842A1 +:102ED00007D00F4D1068A84203D00E4D1068A842CD +:102EE00005D121F0800158680143106881600120FC +:102EF00082F83D0000BF002082F83C0000BF00BF08 +:102F0000C5E70000002C01400034014000040040EF +:102F100000080040000C004010B504460CB9012028 +:102F200010BD94F83D0028B9002084F83C002046EC +:102F300000F026F8022084F83D00211D206802F0F0 +:102F4000A5F9012084F8460000BF84F83E00012165 +:102F50003F200155402001554120015500BF00BFD1 +:102F6000012084F8420043200155442001554520AA +:102F7000015500BF012084F83D000020D0E700008B +:102F800038B504462068B0F1804F16D100BF224802 +:102F9000C06940F001002049C8610846C06900F0DE +:102FA0000100009000BF00BF002205211C20FFF798 +:102FB0003BFA1C20FFF728FA2CE0184920688842C9 +:102FC00016D100BF1448C06940F002001249C86120 +:102FD0000846C06900F00200009000BF00BF002258 +:102FE00005211D20FFF720FA1D20FFF70DFA11E043 +:102FF0000B49206888420DD100BF0748806940F422 +:103000000050054988610846806900F4005000902E +:1030100000BF00BF38BD00000010024000040040A7 +:1030200000340140014691F83D00012801D0012003 +:103030007047022081F83D000868C06840F0010038 +:103040000B68D860164B0868984213D0154B086877 +:1030500098420FD00868B0F1804F0BD0124B08682F +:10306000984207D0114B0868984203D0104B08686B +:1030700098420CD10868806800F00702062A0CD03C +:103080000868006840F001000B68186005E00868F7 +:10309000006840F001000B6818600020C8E70000DD +:1030A000002C0140003401400004004000080040B2 +:1030B000000C00402DE9F04104460D46002700BFFA +:1030C00094F83C00012802D10220BDE8F0810120E3 +:1030D00084F83C0000BF022084F83D002068866828 +:1030E00026F0770626F47F462068866028685028F8 +:1030F00033D00CDC202850D004DC00284BD0102822 +:1031000051D149E0302849D040284CD139E06028DD +:103110002DD0702807D0B0F5805F03D0B0F5005FE8 +:1031200041D10DE041E0D5E902136A68206802F060 +:1031300014F92068866846F077062068866034E0D7 +:10314000D5E902136A68206802F007F920688068F0 +:1031500040F480402168886027E0EA686968206858 +:1031600002F0ECF95021206802F002F91DE0EA6853 +:103170006968206802F0F5F96021206802F0F8F82B +:1031800013E0EA686968206802F0D8F940212068F5 +:1031900002F0EEF809E000BF00BF00BF2968206818 +:1031A00002F0E6F801E0012700BF00BF012084F82B +:1031B0003D0000BF002084F83C0000BF384684E793 +:1031C000704770B504462068C5682068066906F037 +:1031D0000200022819D105F00200022815D1401F73 +:1031E00021680861012020772068806900F00300D1 +:1031F00018B12046FFF7E4FF05E0204600F01CF977 +:10320000204600F0F1F90020207706F004000428A1 +:1032100019D105F00400042815D1C04321680861C4 +:10322000022020772068806900F4407018B12046A1 +:10323000FFF7C6FF05E0204600F0FEF8204600F04C +:10324000D3F90020207706F00800082819D105F0EE +:103250000800082815D1C0432168086104202077A0 +:103260002068C06900F0030018B12046FFF7A8FFEE +:1032700005E0204600F0E0F8204600F0B5F9002017 +:10328000207706F01000102819D105F01000102842 +:1032900015D1C04321680861082020772068C069E3 +:1032A00000F4407018B12046FFF78AFF05E0204681 +:1032B00000F0C2F8204600F097F90020207706F0D1 +:1032C000010048B105F0010030B16FF00100216844 +:1032D0000861204600F004FA06F08000802809D139 +:1032E00005F08000802805D1C04321680861204690 +:1032F000FFF788FD06F04000402809D105F04000A6 +:10330000402805D1C04321680861204600F0F4F947 +:1033100006F02000202809D105F02000202805D142 +:10332000C043216808612046FFF76DFD70BD0000B5 +:1033300010B586B0044600200290039004900590DA +:103340002068B0F1804F16D100BF3548806940F049 +:103350000400334988610846806900F00400019048 +:1033600000BF00BF022002900390059002A92D48E3 +:10337000FEF7FEFD52E02C492068884217D100BFBD +:103380002748806940F00400254988610846806923 +:1033900000F00400019000BF00BF40200290022016 +:1033A0000390059002A91F48FEF7E2FD36E01F4991 +:1033B0002068884217D100BF1948806940F0040096 +:1033C000174988610846806900F00400019000BF39 +:1033D00000BF0420029002200390059002A911482A +:1033E000FEF7C6FD1AE012492068884216D100BFD8 +:1033F0000B48806940F010000949886108468069DF +:1034000000F01000019000BF00BF40200290022099 +:103410000390059002A90748FEF7AAFD06B010BD6B +:10342000001002400008014000040040000C004071 +:10343000003401400010014070472DE9F04104467E +:103440000D461646002700BF94F83C00012802D123 +:103450000220BDE8F081012084F83C0000BF36B1B5 +:10346000042E1BD0082E31D00C2E5ED145E029460B +:10347000206801F087FF2068806940F0080021681B +:1034800088612068806920F00400216888612068D4 +:103490008069296908432168886148E029462068D5 +:1034A00001F0A8FF2068806940F40060216888610D +:1034B0002068806920F480602168886120688069C4 +:1034C000296940EA01202168886130E029462068A6 +:1034D00001F0CEFF2068C06940F008002168C86193 +:1034E0002068C06920F004002168C8612068C069B4 +:1034F000296908432168C86119E02946206801F05C +:10350000F3FF2068C06940F400602168C86120684A +:10351000C06920F480602168C8612068C069296999 +:1035200040EA01202168C86101E0012700BF00BF17 +:1035300000BF002084F83C0000BF384689E710B582 +:1035400004460CB9012010BD94F83D0028B90020B4 +:1035500084F83C00204600F025F8022084F83D0065 +:10356000211D206801F092FE012084F8460000BF72 +:1035700084F83E0001213F200155402001554120A3 +:10358000015500BF00BF012084F8420043200155CF +:10359000442001554520015500BF012084F83D001D +:1035A0000020D0E738B504460D492068884215D17F +:1035B00000BF0C48C06940F008000A49C8610846CD +:1035C000C06900F00800009000BF00BF0022052184 +:1035D0003220FEF729FF3220FEF716FF38BD00002B +:1035E000000C0040001002407047000070B5044617 +:1035F0000D4615B994F83E000BE0042D02D13F2092 +:10360000005D06E0082D02D14020005D01E0412070 +:10361000005D012801D0012070BD1DB9022084F891 +:103620003E000EE0042D03D102213F20015508E0A9 +:10363000082D03D102214020015502E00221412042 +:10364000015501222946206801F076FE1F492068B5 +:10365000884203D01E492068884201D1012000E041 +:10366000002028B12068406C40F400402168486484 +:1036700016492068884213D01549206888420FD027 +:103680002068B0F1804F0BD012492068884207D0E3 +:1036900011492068884203D01049206888420CD123 +:1036A0002068806800F00706062E0CD020680068AD +:1036B00040F001002168086005E02068006840F0E3 +:1036C0000100216808600020A6E70000002C0140EE +:1036D000003401400004004000080040000C00409D +:1036E00010B5044603492068884201D1FEF7ECFD7D +:1036F00010BD0000002C0140704710B504460CB905 +:10370000012010BDA06900B100E000BF94F84100A5 +:1037100028B9002084F84000204600F029F8242031 +:1037200084F841002068C06820F400502168C86017 +:10373000204601F061FF2068006920F49040216874 +:1037400008612068406920F02A00216848612068EB +:10375000C06840F400502168C860002060642020E8 +:1037600084F8410084F842000020606300BFC8E78D +:1037700010B586B004460020029003900490059096 +:103780003949206888422FD100BF3848806940F409 +:103790008040364988610846806900F48040019085 +:1037A00000BF00BF00BF0846806940F00400886188 +:1037B0000846806900F00400019000BF00BF481572 +:1037C0000290022003900320059002A92848FEF7EA +:1037D000CFFB4FF48060029000200390049002A978 +:1037E0002348FEF7C5FB3DE022492068884239D1D5 +:1037F00000BF1E48C06940F480201C49C8610846CB +:10380000C06900F48020019000BF00BF00BF0846DF +:10381000806940F0100088610846806900F010005F +:10382000019000BF00BF0815029002200390032002 +:10383000059002A91048FEF79BFB4FF40060029030 +:1038400000200390049002A90B48FEF791FB00BFF3 +:103850000A49486820F0300040F0E06040F0100075 +:10386000486000BF06B010BD0038014000100240A3 +:1038700000080140004800400010014000000140E5 +:103880002DE9F84F04460E46174699464FF0000AB8 +:1038900094F84100202850D106B117B90120BDE8A5 +:1038A000F88F00206064212084F84100FEF706FDB7 +:1038B0008246A784E784A068B0F5805F04D12069C0 +:1038C00010B90025B04602E035464FF000081EE072 +:1038D0005346002280212046CDF8009001F00AFFD7 +:1038E00020B1202084F841000320D8E745B9B8F87A +:1038F0000000C0F308002168486008F1020803E0F6 +:103900002878216848606D1CE08C401EE084E08CC3 +:103910000028DDD15346002240212046CDF80090FA +:1039200001F0E8FE20B1202084F841000320B6E732 +:10393000202084F841000020B1E70220AFE700BF5B +:10394000FEE700002DE9FC474448454988604548AA +:103950004549886000BFC82003F03EFD42488068AA +:10396000424989688842F6D1642003F035FDFDF7AD +:103970009FFC3F490860084600683E4908603E4990 +:1039800008603E48006838498860002450E0FDF730 +:103990008FFC37490860082C2EDA3448816804EB24 +:1039A000C40000EB0410364A02EB0020A0F25230B3 +:1039B000814221DD2D48816804EBC40000EB041036 +:1039C00002EB002000F25230814210DA28480168F0 +:1039D00029480068FCF79CFC05462A49FCF7B4FE20 +:1039E0000AD2012028490855601CC4B204E0002016 +:1039F00025490855601CC4B21D480068FCF752FEFA +:103A000005460E4619498868FCF7D9FD82461F49CC +:103A1000FCF7B6FC8146FCF745FE07463A460B46E6 +:103A20001BA0CDE9005601F0BBFF0A2003F0D4FC37 +:103A30000D4880680D4989688842A8D100BFC82018 +:103A400003F0CAFC08488068084989688842F6D1B2 +:103A5000124803498860BDE8FC87000000401C460E +:103A60001800002080F3FFFF5C0300207803002093 +:103A7000240100203C010020500100204C010020C6 +:103A8000C0F9FFFF0000FA43540100200000C842C3 +:103A90002532662C2533660A0000000000409C4653 +:103AA00010B50948006800F4807058B14FF4C87030 +:103AB00002F091FC0448001D006840F0807002494B +:103AC000091D086010BD00000C0801400348006893 +:103AD00040F4807001490860704700001008014000 +:103AE00038B50446084A0021084803F0CBFC0849D1 +:103AF000086000204FF4E13301222146009002F0DB +:103B000051FF02F0ABFC38BD149C000815410008C1 +:103B1000E00200200EB5002000900190029057486E +:103B200057490860811556488160012101730021C1 +:103B300001754FF46021C161002051494860102196 +:103B40004F480161FDF792FD08B1FDF729FC0820FF +:103B50000090012001900720029069464848FDF737 +:103B6000D1FC08B1FDF71CFC0220019069464448D5 +:103B7000FDF7C8FC08B1FDF713FC0320019069466E +:103B80003F48FDF7BFFC08B1FDF70AFC0420019097 +:103B900069463B48FDF7B6FC08B1FDF701FC05207E +:103BA000019069463648FDF7ADFC08B1FDF7F8FB1A +:103BB0000620019069463248FDF7A4FC08B1FDF7E4 +:103BC000EFFB0720019069462D48FDF79BFC08B1EB +:103BD000FDF7E6FB0820019069462948FDF792FCB5 +:103BE00008B1FDF7DDFB09200090019069462448EB +:103BF000FDF788FC08B1FDF7D3FB0A200190694668 +:103C00001F48FDF77FFC08B1FDF7CAFB0B200190B0 +:103C100069461B48FDF776FC08B1FDF7C1FB0C2097 +:103C2000019069461648FDF76DFC08B1FDF7B8FB39 +:103C30000D20019069461248FDF764FC08B1FDF7BC +:103C4000AFFB0E20019069460D48FDF75BFC08B103 +:103C5000FDF7A6FB0F20019069460948FDF752FCCD +:103C600008B1FDF79DFB1020019069460448FDF75F +:103C700049FC08B1FDF794FB0EBD00000024014093 +:103C80003004002008B500BF0A48406940F0010038 +:103C9000084948610846406900F00100009000BFF3 +:103CA00000BF002205210B20FEF7BEFB0B20FEF714 +:103CB000ABFB08BD0010024000B585B000200190AC +:103CC00002900390049000BF4348806940F02000B8 +:103CD000414988610846806900F02000009000BFDB +:103CE00000BF00BF0846806940F0100088610846A8 +:103CF000806900F01000009000BF00BF00BF0846C0 +:103D0000806940F0040088610846806900F0040082 +:103D1000009000BF00BF00BF0846806940F0080067 +:103D200088610846806900F00800009000BF00BF6D +:103D3000002240F2A9112948FEF7BAFA00223021E8 +:103D40002748FEF7B5FA00224FF4E0512548FEF768 +:103D5000AFFA01200190244802900020039001A9AD +:103D60001F48FEF705F906200190002002900390FD +:103D700001A91B48FEF7FCF840F2A91001900120B0 +:103D80000290002003900220049001A91348FEF73E +:103D9000EFF83020019001200290002003900220D3 +:103DA000049001A90E48FEF7E3F84FF4E0500190AB +:103DB00001200290002003900220049001A90948EC +:103DC000FEF7D6F8002205210620FEF72DFB06207F +:103DD000FEF71AFB05B000BD0010024000080140CC +:103DE00000100140000C01400000211000B58DB012 +:103DF000002009900A900B900C90079008901C21CD +:103E00006846FCF728FA4FF08040214908604820B6 +:103E1000486000211E48816040F2E731C160002106 +:103E2000016180218161FFF777F808B1FDF7B8FAE9 +:103E30004FF48050099009A91548FFF73BF908B1E4 +:103E4000FDF7AEFA1248FFF77AFB08B1FDF7A8FAC2 +:103E5000202007900020089007A90D48FFF70EF8D2 +:103E600008B1FDF79DFA6020009040F2F310019038 +:103E7000002002900490042269460548FFF7DDFA0D +:103E800008B1FDF78DFA0248FFF752FA0DB000BDF8 +:103E9000A404002000B58DB0002009900A900B907A +:103EA0000C90079008901C216846FCF7D4F9224832 +:103EB000224908604820486000212048816040F283 +:103EC000E731C1600021016180218161FFF724F8A1 +:103ED00008B1FDF765FA4FF48050099009A9174819 +:103EE000FFF7E8F808B1FDF75BFA1448FFF727FB86 +:103EF00008B1FDF755FA202007900020089007A987 +:103F00000E48FEF7BBFF08B1FDF74AFA60200090AB +:103F100040F2F310019000200290049000226946C4 +:103F20000648FFF78AFA08B1FDF73AFA0348FFF7A7 +:103F3000FFF90DB000BD000000040040EC040020BB +:103F400000B589B00020079008901C216846FCF756 +:103F500082F91A481A490860482048600021184828 +:103F6000816040F2E731C1600021016180218161FF +:103F7000FFF7E5FA08B1FDF713FA202007900020BB +:103F8000089007A90E48FEF779FF08B1FDF708FA77 +:103F90006020009040F2F310019000200290049005 +:103FA000082269460648FFF748FA08B1FDF7F8F914 +:103FB0000348FFF7BDF909B000BD0000000C004048 +:103FC0003405002000B595B0002011901290139098 +:103FD00014900F9010901C2108A8FCF73CF92021A8 +:103FE0006846FCF738F92C482C490860482048609E +:103FF00000212A48816040F2E731C160002101615F +:10400000416180218161FEF787FF08B1FDF7C8F9A2 +:104010004FF48050119011A92048FFF74BF808B1D8 +:10402000FDF7BEF91D48FFF78AFA08B1FDF7B8F9A8 +:1040300020200F90002010900FA91848FEF71EFFB7 +:1040400008B1FDF7ADF960200890002009900A90B2 +:104050000B900C900D900E90002208A90F48FFF7CE +:10406000ECF908B1FDF79CF9002000900190029056 +:10407000039004904FF4005005900020079069468B +:104080000648FEF7C1FE08B1FDF78AF90348FFF7BD +:104090004FF915B000BD0000003401407C05002040 +:1040A00010B50B480B4908604FF4E130486000211F +:1040B00008488160C16001610C214161002181617A +:1040C000C161FFF71AFB08B1FDF76AF910BD0000E6 +:1040D00000380140C405002010B50B480B490860AA +:1040E0004FF4E1304860002108488160C1600161FF +:1040F0000821416100218161C161FFF7FEFA08B129 +:10410000FDF74EF910BD0000004800400C060020ED +:1041100000BFFEE700BF02F0B5FC0A2003F05CF927 +:10412000F9E700001CB51421002000F07BFB4FF4E0 +:104130007A71012000F076FB44F62061022000F045 +:1041400071FB1448182100234FF48072CDE9001050 +:1041500011A1144805F0FCF8134908600D48001D32 +:10416000182101231A02CDE9001010A10D4805F015 +:10417000EFF8114908600748083018210223DA01D6 +:10418000CDE900100DA1074805F0E2F80E490860DE +:104190001CBD0000140400205461736B4E616D65FA +:1041A00031000000CD630008140100205461736BDE +:1041B0004E616D6532000000180100205461736B80 +:1041C0004E616D65330000001C010020044600BFF5 +:1041D00024B1012C03D0022C09D104E000BF2046F9 +:1041E00000F03EF904E02046FCF7F8FD00E000BFD7 +:1041F000EEE7000010B5044600203B490855FDF7E6 +:10420000A7F80021204600F0FDF8012037490855A5 +:1042100000212046FDF7D6F80121204600F0AEF837 +:104220000121204600F072F80A2003F0D5F80021A1 +:10423000204600F0A8F8C821204600F0BCF820462F +:10424000FDF7B2F8C8B90021204600F05FF80A2057 +:1042500003F0C2F80121204600F0D4F84FF41670A4 +:1042600003F0BAF80021204600F0CCF801212046E6 +:1042700000F04CF8962003F0AFF801212046FDF73E +:10428000A1F80121204600F0BDF80020184941F8AE +:1042900024000120174941F8240006E000201649B7 +:1042A00041F82400142003F097F8124850F8240035 +:1042B0000028F3D1104941F82400104941F82400A6 +:1042C0000B4941F824000E4941F824000D490855D6 +:1042D0000120054908550020054941F824000A49F4 +:1042E00008550249085510BD0101002008010020B1 +:1042F0005C0300207803002008030020EC0200206B +:10430000B0030020D0000020FA00002020B10128D6 +:1043100011D002282DD11DE031B1174A126842F4A4 +:104320000022154B1A6005E0134A126842F0080299 +:10433000114B1A601EE031B10F4A126842F40012AC +:104340000D4B1A6005E00C4A126842F020020A4B3D +:104350001A600FE031B1084A126842F00102064BC0 +:104360001A6005E0044A126842F48032024B1A6077 +:1043700000E000BF00BF70471008014000B900E036 +:1043800000BF00BF704770B505460C4625B1012D32 +:1043900006D0022D08D108E0204600F019FF08E001 +:1043A000204600F09FFE04E000BF204600F024FEFF +:1043B00000BF00BF70BD70B505460C4625B1012D8C +:1043C0000BD0022D1BD111E0264604EBD670C0F3B2 +:1043D0004F01204600F0F4FE12E0264604EBD670B2 +:1043E000C0F34F01204600F075FE09E0264604EBBD +:1043F000D670C0F34F01204600F0F9FD00E000BF89 +:1044000000BF70BD70B505460C4625B1012D06D024 +:10441000022D0CD107E0204600F0B0FE08E0204657 +:1044200000F036FE04E0204600F0C4FD00E000BFCE +:1044300000BF70BD00BFFEE708B508490968C9089C +:104440004FF47A72B1FBF2F14143009100BF00BF1B +:1044500000994A1E00920029F9D108BD8801002068 +:104460002DE9FE4F0446DB4850F82400002872D0A6 +:10447000D948005D00286ED1D84951F82400FCF7D6 +:10448000C5F885B22946204600F0CCF90120D24972 +:1044900008550020D24941F824004FF4FA60D14970 +:1044A00041F82400D048D14941F824006420D04983 +:1044B00041F824000020CF4941F82400CE49085596 +:1044C000C44850F82400CD4941F824000121204679 +:1044D000FFF759FFCA48015D2046FFF717FFC9489B +:1044E00050F82410C848FBF74BFF0646FCF78EF83F +:1044F00085B229462046FFF75EFF322002F06CFFAE +:1045000001212046FFF73AFFBC4850F8240040083C +:10451000B74941F8240051F82400FCF759F8054642 +:10452000BA4850F824102846FCF70EF907D2B749CC +:1045300051F82400FCF76AF8AD4941F82400012144 +:104540002046FFF75FFF25E1B148005D20B1002064 +:10455000AF49085523E138E1A64850F82400A449A2 +:1045600051F8241088426FD2A24951F82410480013 +:10457000FCF72EF88246A74850F824105046FBF767 +:10458000CDFE8146FCF78EF8074603F0CBFD0546CD +:10459000FCF7B4F8954941F824000A4652F8241073 +:1045A0008F4A52F82400FCF7C5F805D28F4850F81E +:1045B00024008B4941F82400974A52F824108B4A72 +:1045C00052F82400FCF7C0F805D2934850F82400B4 +:1045D000864941F824008B4A52F82410834A52F845 +:1045E0002400FCF7A7F805D2864850F824007F493C +:1045F00041F82400894931F81400FBF7E9FF05462A +:104600007A4850F824102846FCF794F807D28349DA +:1046100031F81400FBF7DCFF744941F824007348BB +:1046200050F824107848FBF7ABFE0546FBF7EEFF89 +:104630006C4941F82400084630F8240081B2204635 +:10464000FFF7B9FEA3E0FFE76C4850F82400684983 +:1046500051F82410401A674951F82410884239D380 +:104660006E4931F81400FBF7B3FF06463146664841 +:10467000FBF786FE0546FBF7C9FF5A4941F82400BF +:10468000084630F8240081B22046FFF794FE06E089 +:104690000020584941F82400052002F09DFE4D48B5 +:1046A00050F824004FF6FF718842F1D0494850F885 +:1046B000240000286BD14E4850F8240040004F4998 +:1046C00041F824004A4850F82400401C494941F868 +:1046D00024005CE04F4951F824004FF08041FBF783 +:1046E0004FFE4449029051F82400FBF771FF434903 +:1046F000019051F82400FBF76BFF00900199FBF744 +:1047000007FE83464FF08041FBF708FE8246029980 +:10471000FBF704FE8146FBF7C5FF074603F002FDE9 +:104720000546FBF7EBFF314941F824003A4A52F8BD +:1047300024102E4A52F82400FCF706F805D2364819 +:1047400050F82400294941F824002E4A52F8241038 +:10475000264A52F82400FBF7EDFF05D2294850F80D +:104760002400224941F82400204850F8241026480B +:10477000FBF706FE0546FBF749FF1A4941F82400FE +:10478000084630F8240081B22046FFF714FE0520C9 +:1047900002F022FE1848005D00283FF4D5AE00BFAD +:1047A0000F2002F019FE00200A4941F824001C489D +:1047B000015D2046FFF7E2FD0020074908550E493C +:1047C00008550F2002F008FE02E00F2002F004FE60 +:1047D000BDE8FE8F5C03002034000020180000209C +:1047E000B4000020600000200000C04098000020BD +:1047F000440000200803002007000020EC020020F5 +:10480000DE000020709900080050C3473899000866 +:10481000D70000207C00002054990008E803002005 +:10482000E50000202DE9F04104460D460E4830F821 +:104830001400A84215D00D4850F824104FF08040C5 +:10484000FBF76CFD064605FB05F0FBF7B8FE0746D7 +:104850003146FBF795FD064941F82400024820F84F +:104860001450BDE8F0810000E803002038990008EA +:104870007C0000202DE9F04F8BB04FF00009FE487E +:10488000007828B9002003F0A7FE0BB0BDE8F08F38 +:104890000124D4E240F2DC5002F09EFDF648005DB7 +:1048A00000287DD0F548005D0028FAD04FF4C850AC +:1048B0006043F349886000BFC82002F08DFDF048D6 +:1048C0008068F04989688842F6D140F2DC5002F0F5 +:1048D00083FD2246ECA1F04801F072F8EF48016830 +:1048E000EF480068FBF71AFD0546FBF776FEE44942 +:1048F00048600020EB490870EB48008800F0FEFAA1 +:1049000000BFC82002F068FDDD484068DD49496805 +:104910008842F6D1002000F0F1FA40F2DC5002F0BB +:104920005BFD0020D649886000BFC82002F054FD1E +:10493000D3488068D34989688842F6D14FF47A70A9 +:1049400002F04AFDD948DA490860DA480168D748D8 +:10495000FBF716FD0546FBF740FEC949086000BF9E +:10496000C82002F039FDC6480068C6490968884277 +:10497000F6D1D148CE4908604FF47A7002F02CFD90 +:104980004FF4C8506043BE49886000BFC82002F0A1 +:1049900023FDBB488068BB4989688842F6D100E0A6 +:1049A00044E240F2DC5002F017FD0020C3490880C9 +:1049B000C34908602246C3A1B74801F001F8FCF7DB +:1049C00077FCC449086008460068C3490860C348CA +:1049D000AB490860B448008800F090FA00BFFCF7CB +:1049E00067FCBC49086008460168BB480068FBF7E3 +:1049F000C7FC0790FBF756FECDE9080102F046FC24 +:104A000007460022B64BFBF7F9FC0546FBF731FEE3 +:104A10001FFA80FB5846FBF7DBFD8246A349FBF7F4 +:104A2000AFFCB0490860B0490868FBF7D1FD824689 +:104A3000A04801685046FBF771FC80469B49FBF794 +:104A40006DFC0746FBF7E2FD0646FBF7C1FD054698 +:104A50009649FBF795FC9A490860A2480068A3496B +:104A6000964A128841F8220095480068A049934A66 +:104A7000128841F8220097480068FBF713FE0546AC +:104A80000E4698480068FBF70DFE07463A460B466F +:104A900098A0CDE9005600F083FF9949914800683D +:104AA000FBF752FE77D209F10109B9F1050F73DB6B +:104AB0009348944908600020714908609249087041 +:104AC000642000F01BFA4FF47A7002F085FC7B48FA +:104AD000008800B28D4908804FE08C480088401E55 +:104AE00000B28A49088087480068FBF7DBFD05466D +:104AF0000E467E49854AB2F9002051F822008449C9 +:104B0000FBF706FC8246FBF7CDFD21F0004107468E +:104B10002A463346FBF7DAFD17D274497B4AB2F9CD +:104B2000002051F822007A49FBF7F2FB0746FBF719 +:104B3000B9FD21F000410546FBF7E0FD7149086031 +:104B40007248B0F900007349088068496F4AB2F9A9 +:104B5000002051F822006E49FBF7ECFD0DD26448AD +:104B60006A49B1F9001050F821006B4941F824005E +:104B70004FF0FF306549088004E06448B0F9000058 +:104B80000028AADC00BF61480088002804D1C720A3 +:104B90005E49088051E0F0E0DBE05A480068FBF72E +:104BA00081FD05460E465149584AB2F9002051F898 +:104BB00022005749FBF7ACFB8246FBF773FD21F05F +:104BC000004107462A463346FBF780FD17D2474986 +:104BD0004E4AB2F9002051F822004D49FBF798FBEC +:104BE0000746FBF75FFD21F000410546FBF786FD18 +:104BF000444908604548B0F90000464908803B49EF +:104C0000424AB2F9002051F822004149FBF792FDD7 +:104C10000DD237483D49B1F9001050F821003E4906 +:104C200041F824004FF0FF30384908800CE0374845 +:104C30000088401E00B2354908803448B0F90000B1 +:104C40001E4909888842A8DC00BF3048B0F900003E +:104C50001A49098888427CD12A480068FBF722FD5E +:104C6000074688462149294AB2F9002051F8220016 +:104C70002749FBF74DFB51E0540100205C01002067 +:104C80005C030020780300202564BAC5B1ADDDCDFA +:104C9000C8A12F3000000000540600202801002089 +:104CA00030010020380100203A01002000007A4441 +:104CB000180000202C0100200000A0414401002029 +:104CC000340100202564BAC5B1ADD6D0BACD2F309D +:104CD00000000000240100203C010020F0F16300EE +:104CE00000408F4040010020080300207C06002087 +:104CF0009C090020252E33662C2533660A0000000F +:104D00009A99993E74010020390100207001002019 +:104D1000713D8A3E78010020040D00208246FBF799 +:104D2000C1FC21F0004105463A464346FBF7CEFC64 +:104D300019D25349534AB2F9002051F8220052497E +:104D4000FBF7E6FA0746FBF7ADFC21F0004105460C +:104D500000E014E0FBF7D2FC4C4908604948B0F988 +:104D600000004B4908804B484949B1F9001050F800 +:104D70002100494941F8240001E04FF0000947486B +:104D80000088401C80B245490880C82801DB00200B +:104D90000880322002F020FB414800684149096840 +:104DA00088427FF41CAE404951F824000021FBF7F3 +:104DB000C1FC35D03C4951F82400FBF773FC824616 +:104DC0008B46354951F8240038490968FBF7A0FAA9 +:104DD0000190FBF767FC0546354A364BFBF70EFBA7 +:104DE0000746354A354BFBF709FB52465B46CDE992 +:104DF0000201FBF775FB0022314BCDE90401FBF703 +:104E0000FDFACDE90601FBF715FC0890FBF7D7FB8F +:104E10002C490990FBF7B4FA2B4941F824000CE027 +:104E20001D4850F824002149086006E027A12948C0 +:104E300000F0C6FD00201A490860601CC4B2082CAE +:104E4000FFF628AD002000F059F840F2DC5002F0E7 +:104E5000C3FA00201249886000BFC82002F0BCFAE3 +:104E60000F4880680F4989688842F6D14FF47A70FC +:104E700002F0B2FA002003F0AFFB00BF05E500002E +:104E80007C06002070010020713D8A3E74010020E4 +:104E9000780100209C090020040D0020440100201E +:104EA0005C03002078030020E40C00206401002053 +:104EB0007B14AE47E17A943FCDCCCCCCCC0C4C40AB +:104EC00000408F4000247449240D0020BFD5CEBB84 +:104ED0002F3000005406002010B504460548FCF7AA +:104EE00083FA102204490348FCF7C6FC00F09CFC3E +:104EF00010BD000030040020BC0C002001490968EE +:104F0000486370477C05002010B54FF0E020006931 +:104F100004F0AEFA012801D003F0F8FE10BD00B590 +:104F200095B028210BA8FBF796F9142106A8FBF7EA +:104F300092F918216846FBF78EF901200B900004C6 +:104F40000C9000200D9001200F9002201290C103C0 +:104F500013914FF4E01114910BA8FDF721FD08B156 +:104F6000FCF71EFA0F200690022007900020089000 +:104F70004FF48060099000200A90022106A8FDF7F6 +:104F8000C9FB08B1FCF70CFA0220009080030290E4 +:104F90006846FDF727FB08B1FCF702FA15B000BD23 +:104FA0007047000010B50248FEF70BF910BD000075 +:104FB000440D002068B14FF08041098841F00101A3 +:104FC0004FF0804211801146098C41F0100111848C +:104FD0000CE04FF08041098C21F010014FF080422D +:104FE00011841146098821F00101118070474FF0AA +:104FF000804290851187704768B14FF08041898960 +:1050000041F004014FF0804291811146098A21F05C +:10501000050111820CE04FF08041898921F00401E3 +:105020004FF0804291811146098A21F005011182D9 +:105030007047000010B51248FEF7C3F84FF08040EB +:10504000006920F005004FF0804108610D4880683C +:105050000D498968884205D20A488068401C094980 +:1050600088600CE00020FFF7A5FF01200749887049 +:105070008007006920F005004FF08041086110BDF5 +:10508000A404002008030020EC02002007000020F8 +:1050900070B10F49098841F001010D4A11800C4996 +:1050A0002031098841F00101094A203211800DE0C8 +:1050B00007492031098821F00101054A2032118079 +:1050C0000349098821F00101014A1180704700005D +:1050D00000040040024A1080014A083211807047E3 +:1050E0002C04004060B10D49098841F002010B4ACF +:1050F0001180111D098821F00301121D11800BE0A0 +:105100000649098821F00201044A1180111D09880D +:1051100021F00301121D1180704700000C040040B3 +:1051200010B51148FEF74DF81048006820F0030054 +:105130000E4908600E4840680E494968884205D209 +:105140000B484068401C0A4948600BE00020FFF70C +:105150009FFF0120084948700448006820F00300C0 +:105160000249086010BD0000EC040020100400405B +:1051700008030020EC0200200700002070B10F4956 +:10518000098841F001010D4A11800C49203109883C +:1051900041F48071094A203211800DE00749203125 +:1051A000098821F48071054A203211800349098859 +:1051B00021F00101014A118070470000000C0040FD +:1051C000024A1080014A1032118070472C0C0040B6 +:1051D00060B10D49098841F008010B4A1180111D89 +:1051E000098821F00901121D11800BE00649098888 +:1051F00021F00801044A1180111D098821F00901DC +:10520000121D1180704700000C0C004010B51148B1 +:10521000FDF7D7FF1048006820F009000E4908602C +:105220000E4800680E490968884205D20B4800689C +:10523000401C0A4908600BE00020FFF79FFF012097 +:10524000084908700448006820F009000249086015 +:1052500010BD000034050020100C004008030020A1 +:10526000EC0200200700002010B50748008800F07D +:10527000010038B10448008820F00100024908808C +:1052800002F080FE10BD00001014004010B502684E +:10529000244B98420ED0244B98420BD0B0F1804F53 +:1052A00008D0224B984205D0214B984202D0214B86 +:1052B000984203D122F070024B681A43194B98426E +:1052C0000ED0194B98420BD0B0F1804F08D0174B3D +:1052D000984205D0164B984202D0164B984203D103 +:1052E00022F44072CB681A4322F080034C6943EAEF +:1052F000040202608B68C3620B688362094B9842A8 +:1053000002D0094B984201D10B6903630123436129 +:10531000036903F001031BB1036923F00103036177 +:1053200010BD0000002C014000340140000400408A +:1053300000080040000C004030B501F01F050124BA +:1053400004FA05F3046A9C430462046A01F01F0531 +:1053500002FA05F52C43046230BD30B50C46816875 +:1053600021F47F4142EA032525432943816030BD72 +:105370000A46816821F0700142F0070319438160F9 +:105380007047000030B5026A056A25F00105056224 +:105390004368846924F0700424F003040D682C43EE +:1053A00022F002028D682A43104DA84200D103E08A +:1053B0000F4DA84206D100BF22F00802CD682A4353 +:1053C00022F00402094DA84202D0094DA84207D19B +:1053D00023F4807323F400734D692B438D692B43B1 +:1053E000436084614D684563026230BD002C01401A +:1053F0000034014030B5026A056A25F010050562E7 +:105400004368846924F4E04424F440740D6844EA59 +:10541000052422F020028D6842EA0512124DA842AE +:1054200000D103E0114DA84207D100BF22F0800255 +:10543000CD6842EA051222F040020B4DA84202D08C +:105440000A4DA84209D123F4806323F400634D6917 +:1054500043EA85038D6943EA8503436084614D68AF +:105460008563026230BD0000002C01400034014021 +:1054700030B5026A056A25F4807505624368C4691F +:1054800024F0700424F003040D682C4322F400720D +:105490008D6842EA0522124DA84200D103E0114D69 +:1054A000A84207D100BF22F40062CD6842EA05227B +:1054B00022F480620A4DA84202D00A4DA84209D1C6 +:1054C00023F4805323F400534D6943EA05138D6997 +:1054D00043EA05134360C4614D68C563026230BD91 +:1054E000002C01400034014030B5036A056A25F400 +:1054F000805505624468C26922F4E04222F4407299 +:105500000D6842EA052223F400538D6843EA05330F +:10551000084DA84202D0084DA84204D124F480448A +:105520004D6944EA85144460C2614D6805640362B4 +:1055300030BD0000002C01400034014030B50B4666 +:105540001446026A056A25F001050562816921F0A9 +:10555000F00141EA041122F00A021A438161026259 +:1055600030BD30B50B461446026A056A25F01005B9 +:105570000562816921F4704141EA043122F0A00200 +:1055800042EA03128161026230BD00BF00BF0268BF +:105590000C3252E8002F22F4907102680C3242E87B +:1055A0000013002BF3D100BF00BF00BF026814320C +:1055B00052E8002F22F001010268143242E8001381 +:1055C000002BF3D100BF016B01290ED100BF00BF3A +:1055D00002680C3252E8002F22F0100102680C32EF +:1055E00042E80013002BF3D100BF202180F84210C5 +:1055F000002101637047000070B504462168096905 +:1056000021F44051E2681143226811612269A168C6 +:105610001143626941EA02052168C96841F20C62DE +:10562000914329432268D1602168496921F440717E +:10563000A2691143226851612D4A2168914202D129 +:10564000FDF766F901E0FDF753F900EBC00101EB4E +:10565000001162689200B1FBF2F100EBC00202EBB4 +:10566000001263689B00B2FBF3F26423B2FBF3F217 +:1056700002EBC20303EB0212A1EB8201322202EB26 +:1056800001116422B1FBF2F101F0F00100EBC00264 +:1056900002EB001263689B00B2FBF3F26423B2FBDF +:1056A000F3F201EB021200EBC00101EB00116368A1 +:1056B0009B00B1FBF3F100EBC00303EB0013666842 +:1056C000B600B3FBF6F36426B3FBF6F303EBC306B5 +:1056D00006EB0313A1EB8301322303EB01116423D7 +:1056E000B1FBF3F101F00F0111442268916070BD2C +:1056F000003801402DE9F84304460D461746984608 +:10570000089E31E0701C70B3FCF7D8FDA0EB0800D8 +:10571000B04200D816B90320BDE8F8832068C068FD +:1057200000F00400F8B1802D1ED0402D1CD0206860 +:105730000068C0F3C000B0B100BF00200090206836 +:105740000068009020684068009000BF00BF2046BD +:10575000FFF71BFF0820606400BF002084F84000B2 +:1057600000BF0120D8E7FFE7206800682840A84272 +:1057700001D1012000E00020B842C3D00020CBE7D7 +:1057800010B52548008800F0010048B12248008883 +:10579000C0B2224908802048001D0088C0B208809D +:1057A0001E48008838B100201C4908801C48006849 +:1057B000401C1B49086018480C30008800F020008D +:1057C00030B11548008800F0200008B102F0E2FB7B +:1057D00011480C30008800F0800030B10E4800887D +:1057E00000F0800008B102F0DDFB0B480C300088AF +:1057F00000F0400020B90848008800F0400048B19F +:1058000005480C30008820F0400003490C31088026 +:10581000FEF746F910BD000000380140DC02002010 +:10582000D802002000BFFEE744A1474800F0C8F8B6 +:105830000120FEF755F94548454908604548464965 +:105840000860FEF76FFC00204449086048608860EB +:105850000220FEF7CFFCFEF775F841484149086089 +:10586000414808604148C860FBF722FD4049086094 +:10587000084600683F49086000BF3F48007800289C +:1058800040D000203C4908703449886000BFC820DF +:1058900001F0A2FD31488068384989688842F6D114 +:1058A0002B4801684FF07E50FAF738FD0446FAF7AE +:1058B00094FE2A49486000203149087000BFC82082 +:1058C00001F08AFD254840682C4949688842F6D194 +:1058D000254824490860204801682348FAF750FD0C +:1058E0000446FAF77AFE1D49086000BFC82001F09F +:1058F00073FD1A480068214909688842F6D11848A2 +:10590000184908601F48007850B11F4A00211F48FD +:1059100001F0B8FD1E49086000201A49087009E02E +:105920001C48807830B11CA1074800F049F80220DB +:10593000FEF760FCC82001F04FFD9EE7BDF8C8EB04 +:10594000CFB5CDB32F300000540600200086A1470C +:105950002801002096093F3C2C0100205C03002018 +:105960000000A0411800002000007A4400409C453F +:10597000240100203C0100207A010020780300204F +:105980003801002068010020B4990008754800081B +:105990006C010020FA000020D5D2C1E32F300000B6 +:1059A0000FB4054B10B503A9044A029800F086F91C +:1059B00010BC5DF814FB0000156F0008E402002025 +:1059C0000FB4084B10B504A902AA039800F076F9A9 +:1059D000044602A9002000F0F4FC204610BC5DF84B +:1059E00014FB0000C3630008002809DB00F01F025D +:1059F000012191404209920002F1E022C2F8001117 +:105A00007047000002480068C0F3022070470000A1 +:105A10000CED00E010B5002804DB0A07130E054A60 +:105A2000135406E00A07140E034A00F00F031B1F6D +:105A3000D45410BD00E400E018ED00E0EFF3058061 +:105A400070472DE9F0414F1E00EBC7010446D1E934 +:105A5000000115461E4637F006020DD02A46334691 +:105A6000FAF7CCFC7F1E04EBC703D3E90023FAF757 +:105A700050FF37F00602F1D1022F25D0042F13D0AA +:105A8000062F18BFBDE8F0812A463346FAF7B6FC68 +:105A9000D4E90A23FAF73DFF2A463346FAF7AEFC6B +:105AA000D4E90823FAF735FF2A463346FAF7A6FC6D +:105AB000D4E90623FAF72DFF2A463346FAF79EFC6F +:105AC000D4E90423FAF725FF2A463346FAF796FC71 +:105AD000D4E90223FAF71DFF2A463346FAF78EFC73 +:105AE000D4E90023BDE8F041FAF713BF00221346C2 +:105AF00010460149FAF7F4BC0000F03F0122FAF722 +:105B0000AFBF0022134610461146FAF7E9BC02E087 +:105B100008C8121F08C1002AFAD170477047002038 +:105B200001E001C1121F002AFBD170470149086042 +:105B300070470000E80200202DE9FF5F82B00021DD +:105B4000DDE90430020DDDF840B0034318D044F61F +:105B50001050A2F2FF3242431514119801281FD0B1 +:105B6000A5EB0B00401C5FEA000A4FF000064E4F09 +:105B7000DFF83891B046504615D5CAF1000413E05D +:105B8000119801244AA3012801D16FEA0B01029860 +:105B9000119AC0E90031C0E9024206B0BDE8F09FA9 +:105BA000CBF10000DFE704460021404A491842EBF0 +:105BB0000450CDE9001012E0E00707D032463B4622 +:105BC00040464946FAF71AFC8046894632463B462B +:105BD00010461946FAF712FC06460F466410002CD0 +:105BE000EAD1DDE90401DDE90023BAF1000F06DAAC +:105BF000FAF704FC42464B46FAF700FC05E0FAF7D8 +:105C00006FFC42464B46FAF76BFC04460E460022F8 +:105C1000284BFAF7B7FF03D84FF0FF30014607E0F3 +:105C20000022254B20463146FAF773FEFAF791FF22 +:105C3000102409E0002C0ADB0A220023FAF7A4FD55 +:105C4000039B30321A55641E50EA0102F2D1641CE3 +:105C5000039AC4F111031444119A012A03D00122BA +:105C600008430DD10AE0084304D000204FF0110B87 +:105C7000119072E7A3EB0B056D1E0DE05B4504DD93 +:105C80004FF0000205F1010504E003DA4FF00002D5 +:105C9000A5F10105002AECD002981199C0E9023162 +:105CA000C0E9004579E70000000014400000F03F23 +:105CB000300000000000F0430000E03F2DE9FF4FFE +:105CC00095B09A46884606460025EEE1252877D10C +:105CD00000242746F94A0121039400E0044316F802 +:105CE000013F203B01FA03F01042F7D130782A2817 +:105CF00011D06FF02F033078A0F13002092A16D8A6 +:105D0000039A44F0020402EB820203EB42021044C5 +:105D1000761C0390EFE758F8042B0392002A03DA6D +:105D2000504244F40054039044F00204761C30784E +:105D30002E2816D116F8010F44F004042A280DD09D +:105D40006FF02F023078A0F13003092B09D807EB50 +:105D5000870302EB4303C718761CF3E758F8047B6C +:105D6000761C30786C280FD006DC4C2817D06828B9 +:105D70000DD06A2814D104E0742810D07A280FD1ED +:105D80000DE044F400140AE044F4801401E044F40B +:105D900040147278824202D104F58014761C761C7D +:105DA000307866280BD013DC582877D009DC00281F +:105DB00075D04528F6D04628F4D047281AD193E16B +:105DC00018E0632835D0642879D0652812D18BE19A +:105DD000702873D008DC6728F1D069286FD06E284E +:105DE0000DD06F2806D1ACE073282CD0752874D064 +:105DF000782853D05246179990476D1C54E1C4F34C +:105E00000250022809D003280DD0D8F80010042829 +:105E10000DD00D6008F1040846E1D8F80010EA172B +:105E2000C1E90052F6E7D8F800100D80F2E70D70D6 +:105E3000F0E718F8041B8DF8001000208DF8010021 +:105E4000EB46012003E058F804BB4FF0FF30610738 +:105E50004FF0000102D40DE009F101018946B94279 +:105E60000FDA8145F8DB1BF809100029F4D108E0AE +:105E700009F1010189468142FADB1BF8091000296A +:105E8000F6D103985346A0EB090721463846179AE6 +:105E900000F080FA284400EB090507E044E008E13F +:105EA0000DE01BF8010B524617999047B9F1010913 +:105EB000F7D2534621463846179AF2E039E00A21D4 +:105EC000C4F302524FF0000B0091022A06D058F89A +:105ED000040BC117032A09D00AE023E008F10700E8 +:105EE00020F00702F2E80201904605E000B2C11777 +:105EF000042A01D140B2C117002906DA0A4600215E +:105F0000404261EB02012D2202E0220504D52B2242 +:105F10008DF80420012203E0E20701D02022F7E7F8 +:105F2000914657E00A2100E010214FF0000B00914C +:105F30000BE010214FF0000B44F0040408270091FF +:105F400003E008204FF0000B0090C4F30252022A35 +:105F500005D058F8040B0021032A08D008E008F106 +:105F6000070020F00702F2E80201904603E080B249 +:105F7000042A00D1C0B24FF0000922072AD5327896 +:105F8000702A07D0DDF800C08CF0100C5CEA0B0C16 +:105F900005D00EE040228DF80420012208E050EAEE +:105FA000010306D030238DF804308DF8052002223D +:105FB0009146009B83F0080353EA0B030AD150EA91 +:105FC000010201D1620705D530228DF804204FF07F +:105FD00001097F1E3278582A04D039A20C920CAAEB +:105FE00002920BE03BA2F9E75B46009AFAF7CCFB82 +:105FF0000C9B9B5C029A521E0292137050EA0102A3 +:10600000F2D1029804A9081A00F1200B600702D50A +:1060100024F4803400E001275F4502DDA7EB0B008C +:1060200000E0002000EB0B01009003984944401A67 +:106030000390E00306D453462146179A039800F0D4 +:10604000A9F90544002706E001A85246C05D17994A +:1060500090476D1C7F1C4F45F6DBE0030CD5534683 +:106060002146179A039800F095F9054404E0302082 +:106070005246179990476D1C0099481E00900029C0 +:10608000F5DC08E00298029952460078491C02911A +:10609000179990476D1CBBF10001ABF1010BF1DCCE +:1060A0005BE100F065F90544761C307800287FF448 +:1060B0000DAE19B02846BDE8F08F00000928010098 +:1060C000303132333435363738396162636465666E +:1060D0000000000030313233343536373839414230 +:1060E0004344454600000000600700D4062708F13D +:1060F000070020F00700F0E80223804603F0004C80 +:106100005FEA0C0001D097A009E0200501D596A018 +:1061100005E0E00701D095A001E0AFF24C0013903C +:10612000307823F0004365280CD006DC452809D0E0 +:1061300046281DD047287FD13BE0662818D0672825 +:106140007AD136E00021112F01DB112000E0781C0C +:10615000CDE9000104A90CA8FFF7EEFCDDE90D0173 +:106160000C9A4FF0000B07F10109109200914EE0DC +:106170004FF000400097CDE9011004A90CA8FFF7EB +:10618000DBFCDDE90D020C9B0F994FF0000B9146F3 +:106190001093009211B9791C00EB0109B7EB0900CB +:1061A00003D4C0F1FF3B07F10109A9EB07000190FF +:1061B00042E0012F00DA01270021112F01DD11201B +:1061C00000E03846CDE9000104A90CA8FFF7B4FCB3 +:1061D000DDE90D010C9A00914FF0000BB9461092C9 +:1061E00021070FD4009A4A4503DA914601E0A9F14C +:1061F0000109B9F1010F05DD109AA9F10101515C06 +:106200003029F4D0B84202DA10F1040F03DA012188 +:10621000CDE9011010E0002803DC8344A9EB000164 +:1062200002E0411C494500DD8946A0EB0B00401C03 +:1062300001904FF000400290200705D40198484596 +:1062400002DB4FF0FF30019000208DF84B000298E8 +:106250000DF14B07B0F1004F25D002200C902B2000 +:106260000D90029800280CDA404202902D200D90EB +:1062700007E00A210298FAF771FA3031029007F824 +:10628000011D0C99481E0C900029F2DC0298002890 +:10629000EFD1791E0D980870307800F0200040F0A2 +:1062A000450007F8020D11A8C01BC01D02901398ED +:1062B000007800B1012000EB0901019801EBE071C9 +:1062C000029801440398401A401E0390E00306D44C +:1062D00053462146179A039800F05CF8054413983A +:1062E000007818B15246179990476D1CE00323D5EA +:1062F00053462146179A039800F04CF805441BE0DA +:10630000BBF1000F07DB0098584504DD1098179982 +:1063100010F80B0001E01799302052469047019881 +:106320000BF1010B401E05F10105019004D12E2057 +:106330005246179990476D1CB9F10001A9F1010966 +:10634000DEDC05E017F8010B5246179990476D1CEB +:106350000299481E02900029F4DC53462146179A00 +:1063600003989EE62D0000002B0000002000000096 +:106370002DE9F041044600251E461746880404D442 +:1063800005E039462020B0476D1C641EF9D528462B +:10639000BDE8F0812DE9F041044600251E469046F7 +:1063A000C80301D5302700E02027880404D505E084 +:1063B00041463846B0476D1C641EF9D52846BDE8F5 +:1063C000F0810A68531C0B60107070470446254624 +:1063D000E8B2FDF7FBFE3CE000BF00BF00BF00BF1E +:1063E00000BF00BF00BF00BF00BF00BF00BF00BFB5 +:1063F00000BF00BF00BF00BF00BF00BF00BF00BFA5 +:1064000000BF00BF00BF00BF00BF00BF00BF00BF94 +:1064100000BF00BF00BF00BF00BF00BF00BF00BF84 +:1064200000BF00BF00BF00BF00BF00BF00BF00BF74 +:1064300000BF00BF00BF00BF00BF00BF00BF00BF64 +:1064400000BF00BF00BF00BF00BF00BF00BF00BF54 +:1064500000BF011EA0F10100BED1704710B500249D +:1064600006480078012806D10548006880470020CA +:106470000249087000E00624204610BD1E020020DC +:10648000240200202DE9F05F06460D464FF0000B78 +:106490002888052848D170784FEA0029B07840EA6A +:1064A000090909F101001FFA80F9F0780402307936 +:1064B0000443012C35DBB4F5FA6F32DA374600209D +:1064C0002880012007F8010B2888401C288004F050 +:1064D000070040B12046E11704EB5171C910491C77 +:1064E00001F0FF0805E02046E11704EB5171C1F30C +:1064F000C70807F8018B2888401C28800023224603 +:106500004946384600F0FCFB8246BAF1000F04D041 +:10651000504601F025FD834608E028884044288045 +:1065200004E04FF0030B01E04FF0030B5846BDE8C9 +:10653000F09F2DE9F05F06460D464FF0000B2888CE +:10654000052847D170784FEA0029B07840EA090958 +:1065500009F101001FFA80F9F07804023079044350 +:10656000012C34DBB4F5FA6F31DA3746002028808D +:10657000022007F8010B2888401C288004F007003F +:1065800040B12046E11704EB5171C910491C01F0DC +:10659000FF0805E02046E11704EB5171C1F3C7087D +:1065A00007F8018B2888401C288022464946384637 +:1065B00000F0F4FB8246BAF1000F04D0504601F01F +:1065C000CFFC834608E028884044288004E04FF050 +:1065D000030B01E04FF0030B5846BDE8F09F2DE997 +:1065E000F04705460C464FF0000A2088052837D1B1 +:1065F00068784FEA0028A87840EA080808F1010006 +:106600001FFA80F8E87806022E79012E25DB7D2E10 +:1066100023DC2F4600202080032007F8010B208870 +:10662000401C20807006000E07F8010B2088401CDB +:106630002080002332464146384600F0E1FB814687 +:10664000B9F1000F04D0484601F08AFC824609E007 +:10665000208800EB4600208004E04FF0030A01E0B0 +:106660004FF0030A5046BDE8F0872DE9F047054694 +:106670000C464FF0000A2088052837D168784FEA89 +:106680000028A87840EA080808F101001FFA80F8FD +:10669000E878060228790643012E24DB7D2E22DAD3 +:1066A0002F4600202080042007F8010B2088401C82 +:1066B00020807006000E07F8010B2088401C208007 +:1066C00032464146384600F0F9FB8146B9F1000FE9 +:1066D00004D0484601F044FC824609E0208800EBE3 +:1066E0004600208004E04FF0030A01E04FF0030A67 +:1066F0005046BDE8F0872DE9FC5F04460D460020BA +:10670000009028880A285DDB60784FEA002AA0788C +:1067100040EA0A0A0AF101001FFA80FAE07806024C +:106720002079064360794FEA002BA07940EA0B0BF1 +:106730000BF101001FFA80FBE0790702207A074382 +:10674000607A0190012E3BDB7D2E39DC012F37DB97 +:10675000792F35DC79000198814231D101233A4605 +:10676000594604F10A0000F04BFB8146B9F1000FD5 +:106770001ED1A04600202880172008F8010B288889 +:10678000401C28807006000E08F8010B2888401C69 +:106790002880002332465146404600F031FB8146B6 +:1067A000B9F1000F04D12888022101FB06002880DE +:1067B000B9F1000F06D0484601F0D2FB009001E08D +:1067C000032000900098BDE8FC9F000070B50546CE +:1067D0000C46064802880649681CF9F723FD034861 +:1067E0000088401C2080002070BD00000C020020AA +:1067F000603800202DE9F84304460F464FF00008AA +:106800003888052829D160780502A0780543681CDE +:1068100085B22079F0B9E078FF2801D0E078C8B9D6 +:1068200000208DF80100E078FF2803D101208DF8C9 +:10683000000002E000208DF8000001231A462946DE +:10684000684600F05DFA06464EB1304601F088FB1E +:10685000804604E04FF0030801E04FF00308404693 +:10686000BDE8F8832DE9F04104460F464FF00008DB +:106870003888052812D160780502A0780543681C85 +:1068800085B201231A462946E01C00F0B9FA0646F3 +:1068900036B1304601F064FB804601E04FF003085A +:1068A0004046BDE8F0812DE9F05F05460E464FF009 +:1068B000000B3088052839DD68780702A87807437F +:1068C000781C87B2E87804022879044395F805A07B +:1068D00004F0070040B12046E11704EB5171C910E4 +:1068E000491C01F0FF0805E02046E11704EB517157 +:1068F000C1F3C708012C16DBB4F5F66F13DCD045E5 +:1069000011D1012322463946A81D00F0F9F981462C +:10691000B9F1000F04D0484601F022FB834607E09E +:106920000520308004E04FF0030B01E04FF0030B33 +:106930005846BDE8F09F2DE9F04704460E464FF05B +:10694000000A3088062828DB60780702A078074311 +:10695000781C87B2E07805022079054394F8059009 +:10696000012D17DB782D15DC6806000E484511D186 +:1069700001232A463946A01D00F042FA8046B8F1AC +:10698000000F04D0404601F0EBFA824607E00520F4 +:10699000308004E04FF0030A01E04FF0030A504654 +:1069A000BDE8F0872DE9F04705460C4616461F4620 +:1069B000DDF820904FF000081CB1012C01DBF72C12 +:1069C00002DD4FF0020835E01C48047005BB1C488E +:1069D0001C4908601C481D4908601D481D49086085 +:1069E0001D481E49086000201D4908601D481E49B9 +:1069F00008601E481E4908601E481F4908604B4633 +:106A00003A4631460D48007800F0D2F8804602E060 +:106A10004FF0020800BF00BFB8F1000F0AD101F02B +:106A20004BFF10B94FF0030804E014480570012033 +:106A3000134908704046BDE8F08700001C020020A2 +:106A4000D56C000824020020F16C00082802002008 +:106A5000456C000820020020FD6B00082C0200207D +:106A600030020020558A0008340200201D8B0008E7 +:106A700038020020DD8A00083C0200201D020020B0 +:106A80001E02002038B500253F48007808B10620D6 +:106A900038BD684601F0FEFE002872D09DF8000067 +:106AA00030B1012805D0022818D0032868D166E04B +:106AB00066E0364A36493748374B1B6898470546E3 +:106AC0005DB93448007835490978884202D03148A8 +:106AD000007810B9022001F0F7FE51E02C48006860 +:106AE00000782F49087001202E490870002417E013 +:106AF0002D4810F8340000B914E02B4810F8340089 +:106B00002749097888420AD1274800EBC4001F4969 +:106B100042681F48006890472249087002E0641CE0 +:106B2000102CE5DB00BF1B48007830B31D4800780F +:106B3000C8B10020154908801948007840F080014C +:106B4000124802880088401C104B188010480068CA +:106B5000815414480178184602880088401C188027 +:106B60000B480068815409480288094801680B48AD +:106B700000780E4B1B689847054601E001E000BF16 +:106B800000BF002084E700001E020020CE0200208B +:106B9000C8020020CC0200202C0200201C02002091 +:106BA000CD020020D0020020480200202002002058 +:106BB0002DE9F04781460E4614461F464FF0000867 +:106BC0003B4608222146304601F096FE10B94FF0B0 +:106BD00003080EE0B4F5964F01D9232503E06000C9 +:106BE0000549B1FBF0F5A8B201F00AFF08B94FF072 +:106BF00003084046BDE8F087A07F17002DE9F0416B +:106C000004460D46164600270C480088042810DB71 +:106C10000A4801880A4801F0ABFA50B908480078E0 +:106C2000207006480088C01E30800548401C28603F +:106C300000E005273846BDE8F08100001A02002078 +:106C4000803800202DE9F04105460E4617464FF0EA +:106C500000081B48007801282CD1701E19490860D3 +:106C60000120194908801748006805700846008807 +:106C700038440880084601881248006801F078FA14 +:106C8000044611490888411C0F4B19800F490C54C8 +:106C9000221219460888411C19800C490A541E20EA +:106CA00000F09AFB01200A4908700121002001F040 +:106CB000DDFA01E04FF005084046BDE8F081000034 +:106CC0001102002014020020180200208038002049 +:106CD0001002002010B50020044908700021012096 +:106CE00001F0C4FA01F008FB10BD00001102002001 +:106CF00010B50021084601F0B9FA01F0E1FA10BD23 +:106D00002DE9F04705460E46174699464FF0000A12 +:106D10003CB23220FFF75FFB012E37DBF019512820 +:106D200034DC701E1FFA80F8B9F1000F03D0B9F1FE +:106D3000010F2AD116E012E0082C01DD082000E046 +:106D40002046C2B24146144801F01EFF05F8010B6F +:106D5000A4F1080004B208F108001FFA80F8002C22 +:106D6000EADC12E00EE015F8013B082C01DD0820FA +:106D700000E02046C2B24146074801F01AFFA4F1E4 +:106D8000080004B2002CEEDC00BF01E04FF0010A65 +:106D90005046BDE8F0870000CA3A00202DE9F047D0 +:106DA00005460C4616464FF0000937B23220FFF771 +:106DB00012FB012C1CDBA019512819DC601E1FFAE4 +:106DC00080F812E0082F01DD082000E03846C2B24A +:106DD00041460A4801F0D8FE05F8010BA7F108006A +:106DE00007B208F108001FFA80F8002FEADC01E082 +:106DF0004FF001094846BDE8F0870000C03A002086 +:106E00002DE9F04704460F46164698464FF0000914 +:106E10003220FFF7E0FA012F34DBB819512831DCBA +:106E2000781E05B2B8F1000F03D0B8F1010F28D1D8 +:106E300012E00EE0204830F81500001204F8010BB3 +:106E40001D4810F8150004F8010B681C05B2701EEF +:106E500086B2002EEEDC14E011E014F8011B0802EB +:106E6000154921F8150014F8010B31F815100843E5 +:106E7000114921F81500681C05B2701E86B2002E5B +:106E8000EBDC16E0B7F57A7F11DDB81940F2D1716D +:106E900088420CDCA7F2E93005B2B8F1000F03D04C +:106EA000B8F1010F02D100E000E000BF01E04FF0B7 +:106EB00001094846BDE8F087203A00202DE9F0415D +:106EC00004460D4616464FF000083220FFF783FABD +:106ED000012D17DBA819512814DC681E07B20EE03B +:106EE0000B4830F81700001204F8010B084810F89E +:106EF000170004F8010B781C07B2701E86B2002E32 +:106F0000EEDC01E04FF001084046BDE8F0810000F2 +:106F10008039002013B50C464FF6FF7301226946F5 +:106F20000248FCF7ADFC00981CBD00000C060020D8 +:106F30002DE9F04DC84A002490B0914205DA21F0C5 +:106F40000043934201D805D120B110B0BDE8F04D07 +:106F5000FEF7D4BDB1F5801F1BDA53EA000209D059 +:106F6000002911DA0120FEF7E1FD10B0BDE8F04D77 +:106F7000FEF7C7BD0220FEF7D9FDFEF7B7FD10B042 +:106F800081F00041BDE8F08D6FF035043622F9F74D +:106F900067FD04EB2152C1F31308B049A2F2FF339D +:106FA000414401F4801282F07F6103EB225281F0B0 +:106FB0004051009241EA08010022A94BF9F74AFD2D +:106FC000044608F10200A74EC0F313000D467E44AC +:106FD000032867D2D6E900232046F9F777FB1ED1B4 +:106FE0000098002802BFD6E9000110B0BDE8F08D7E +:106FF000F9F79EFD07460C469B4A9C4BF9F7FEF9B4 +:1070000006460D469A4A9B4B38462146F9F7F6F953 +:1070100010B032462B46BDE8F04DF9F77ABC4FF080 +:107020005532954B20462946F9F7E8F90022934B53 +:10703000F9F713FD06460F4622462B461046194621 +:10704000F9F7DCF932463B46F9F7D8F906460098DD +:107050000F46F0B1F9F76CFD80468A46824A834BB1 +:10706000F9F7CCF932463B46F9F7F7FC22462B46B6 +:10707000F9F7F0FC05460C467D4A7E4B40465146EA +:10708000F9F7BCF910B02A462346BDE8F04DF9F7F0 +:10709000E1BC0B4610B0324620462946BDE8F04D13 +:1070A000F9F7D8BC00224FF080432046F9F731FCB5 +:1070B00002460B4620462946F9F712FA06460F46C5 +:1070C0000098F9F735FDCDE9040132463B461046FC +:1070D0003946F9F793F90C9069480C9A40440190AD +:1070E00009910B461046F9F789F982460246654830 +:1070F0008B46C8F151080B4608F5D7280321784480 +:10710000FEF79FFC52465B46F9F778F90A905E4815 +:107110000D9152465B4604217844FEF792FC099B90 +:107120000C9AF9F76BF9844601980D9B40EA080820 +:1071300060460A9AF9F7EDFB83460891B8F1000F13 +:107140004EDD4FF0FF3220462946F9F789FC2246F2 +:107150002B46F9F753F9804600988A4660B3DDE97B +:107160000401414A414BF9F749F9099100905A4607 +:1071700040465146089BF9F7CCFB32463B46F9F7AF +:107180003DF9099B009AF9F7C4FB42465346F9F7CB +:1071900064FC22462B46F9F75DFC04460D46DDE90A +:1071A0000401334A334BF9F729F910B022462B4634 +:1071B000BDE8F04DF9F74EBC5A464046089BF9F73A +:1071C000A8FB32463B46F9F719F942465346F9F710 +:1071D00044FC10B022462B46BDE8F04DF9F73DBC0B +:1071E000009840B3DDE904011F4A204BF9F706F986 +:1071F00080468A465A4620462946089BF9F72AFCCB +:1072000032463B46F9F7FAF842465346F9F722FC74 +:1072100022462B46F9F71EFC04460D46DDE9040123 +:10722000134A144BF9F7EAF810B022462B46BDE892 +:10723000F04DF9F70FBC0B465A4620462946F9F7A0 +:1072400009FC32463B46F9F7D9F810B022462B46E6 +:10725000BDE8F04DF9F701BC0000F07F645F090064 +:107260000000F03F9E2C0000763C7935EF39EA3D76 +:107270000000E0FE422EE63F5555D53F0000E03FBE +:1072800086EBF9FF362B0000342B00002DE9F0418E +:10729000044630480025814205DA21F0004282424E +:1072A00001D805D124B12046BDE8F041FEF726BC47 +:1072B000B1F5801F1BDA52EA040008D000290FDA6A +:1072C0000120FEF733FCBDE8F041FEF71ABC0220B6 +:1072D000FEF72CFCFEF70AFC81F00041BDE8F081CE +:1072E0006FF0350536222046F9F7BAFB044605EB68 +:1072F0002150A0F2FF32D00F40F2FF331B1A0D468F +:1073000063F31F551044F9F713FC06460F46294650 +:107310002046FFF70DFE104A104BF9F76FF80446B0 +:107320000D460F4A0F4B30463946F9F767F82246AB +:107330002B46F9F7EEFA05460C460B4A0B4B304646 +:107340003946F9F75BF82A462346BDE8F041F9F7DC +:10735000E0BA00000000F07F0EE526157BCBDB3F96 +:10736000362BF111F3FE593D00609F501344D33F7B +:10737000FAF7B6FFFDF7D3FDFCF79EFCFCF782FCA5 +:10738000FCF7C8FBFCF786FDFCF730FDFCF7D8FDE9 +:10739000FCF718FEFCF784FEFCF79EFE00200A496D +:1073A0000968486300210848FCF720F900F024F838 +:1073B000064A0021064800F065F80649086000F01A +:1073C00031F800BFFEE700007C0500208C99000822 +:1073D000D94E00082001002070B50546FEF72EFBAF +:1073E00010B16FF0050404E0002415B1284601F047 +:1073F000C5F8204670BD000010B5FEF71FFB10B1A8 +:107400006FF0050409E00648006820B9012004492E +:107410000860002401E04FF0FF34204610BD00005A +:10742000DC01002070B5FEF709FB10B16FF0050418 +:107430001FE011480068012819D100BF801F0021FA +:10744000002804DB0A07130E0C4A135406E00A074F +:10745000150E0B4A00F00F031B1FD55400BF00BFD1 +:1074600002200549086001F069F9002401E04FF0AD +:10747000FF34204670BD0000DC01002000E400E085 +:1074800018ED00E02DE9FF478046894614460020AC +:107490000390FEF7D3FA00284ED1B8F1000F4BD07D +:1074A000802618258246471E44B3206808B1D4F8C8 +:1074B00000A0A06900B1A5692DB1382D03D82079AD +:1074C00000F0010018B1002004B0BDE8F087606949 +:1074D00008B160698608A06840B1E0685C2805D3FF +:1074E000206918B1606908B1012708E0A06830B9C7 +:1074F000E06820B9206910B9002700E00027012FBB +:107500000CD12169A0684B463246CDE9005102906A +:107510005146404601F04EFF03900DE067B903A8C5 +:10752000B2B24B465146CDE90050404601F010FF43 +:10753000012801D0002003900398C5E72DE9F04110 +:1075400005460E461648076816480068001D00F0FC +:107550002BFE681C38B936B112480168091D124863 +:1075600000F078FE1AE07C190E4800684460BC42C6 +:1075700007D20C480168091D0C48006800F050FE55 +:107580000CE008480168091D0948006800F048FE41 +:1075900008480068844201D206480460BDE8F081D2 +:1075A000A00100208C0100207C120020940100200A +:1075B00090010020BC01002010B5044600F0B8FE88 +:1075C00024480068401C234908602348006840B9EB +:1075D000214804600846006801280DD100F0FCF93C +:1075E0000AE01E48006838B91B480068C06AE16AB2 +:1075F000884201D81848046019480068401C18499E +:1076000008600846006860641649E06A09688842B4 +:1076100002D91449E06A0860E16A01EB8101124A6B +:1076200002EB8100211D00F015FE00F0ABFE0B48BF +:10763000006868B108480068C06AE16A884207D2F9 +:107640004FF0805009490860BFF34F8FBFF36F8F31 +:1076500010BD00009C0100208C010020A80100202A +:10766000B8010020A4010020CC0D002004ED00E0B2 +:1076700008B500F05DFE12480068E8B9114800F056 +:10768000BFFD114800F0BCFD0E48104908600E48CF +:107690000F49086000200F4B0F4A102100900A206C +:1076A00001F04EFB064908600846006820B10BA1B6 +:1076B0000348006800F026FF00F064FE08BD0000EB +:1076C000D001002090120020A4120020C801002048 +:1076D000CC010020B812002008130020546D725114 +:1076E0000000000010B516E000F022FE0C48C06853 +:1076F000C468201D00F058FD0A480068401E094972 +:10770000086009480068401E0749086000F03AFE1A +:10771000204600F05FF8044800680028E4D110BD5E +:10772000681200209C0100209801002070B50446DA +:107730000D46206C70B1216CE0680144E160D4E931 +:107740000210884201D32168E1602846226CE1687A +:10775000F8F768FD70BD2DE9F04104460F46154667 +:107760004FF00008A66B206C48B9206800282CD187 +:10777000A06801F035FF80460020A06025E07DB9BB +:107780003946226C6068F8F74DFD216C606808444A +:107790006060D4E90101884217D32068606014E07A +:1077A0003946226CE068F8F73DFD216CE068411A2B +:1077B000E1602168E068884203D2216CA068411A28 +:1077C000E160022D01D106B1761E701CA063404617 +:1077D000BDE8F08110B5044694F8590030B9206B2B +:1077E00000F0EEFD204600F0EBFD1AE094F85900A1 +:1077F000012803D1204600F0E3FD12E094F859007F +:10780000022801D1012000E0002050B900BF502023 +:1078100080F31188BFF34F8FBFF36F8F00BF00BF9E +:10782000FEE710BD0146084A126812680AB9012233 +:1078300000E000220A600A6822B9034A1268D2688E +:10784000106800E000207047C801002030B54FF4F8 +:10785000F053174800F007042CB1C01D20F00700BA +:10786000134C041B1B1B0246124C22600024114DBA +:107870006C60D018083820F007000F4C20600024FE +:107880000D4D2D686C600C4D2D682C601146441A0E +:107890004C60094C24680C60084D4C682C60084D05 +:1078A0004C682C604FF00044064D2C6030BD000049 +:1078B000601A0020E0010020E8010020F001002013 +:1078C000EC010020FC01002000BFFFF70BFF064881 +:1078D00000680128F9D94FF0805004490860BFF3CF +:1078E0004F8FBFF36F8FF0E7CC0D002004ED00E069 +:1078F0002DE9F04106460D4617469846069C0DB9FF +:10790000246000E02760E66325640121204601F041 +:1079100087FA84F84C80BDE8F0812DE9F05F82465B +:107920000E4690469B460A9F0C9C4FEA8801A52272 +:10793000206BF8F789FCA8F10100216B01EB8009AD +:1079400029F0070909F0070008B9012000E000202C +:1079500050B900BF502080F31188BFF34F8FBFF3A1 +:107960006F8F00BF00BFFEE786B1002507E0715DA5 +:1079700004F134004155705D00B902E06D1C102D1A +:10798000F5D300BF00214320015502E0002084F818 +:107990003400382F00D33727E762E76400202065E2 +:1079A000201D00F03AFC04F1180000F036FC2461C0 +:1079B000C7F13800A06164620020606584F8580057 +:1079C0005A465146484600F09BFB20600B9808B190 +:1079D0000B980460BDE8F09F10B5002407E004EBAD +:1079E00084010F4A02EB810000F00AFC641C382C71 +:1079F000F5D30C4800F004FC0B4800F001FC0B48E8 +:107A000000F0FEFB0A4800F0FBFB0A4800F0F8FB20 +:107A100004480949086004480849086010BD00008E +:107A2000CC0D00202C120020401200205412002007 +:107A3000681200207C120020900100209401002098 +:107A400010B50146164800E0006803688B42FBD37E +:107A50000246436813448B4204D143684C68234474 +:107A6000436001460A464B6813440468A34211D19F +:107A70000C4C03682468A34208D04B68046864680F +:107A800023444B6003681B680B6005E0054B1B68D3 +:107A90000B6001E003680B60884200D0016010BDFC +:107AA000E0010020E80100202DE9F04104460D46E8 +:107AB00016461F464FF0000865602461B5420CD899 +:107AC000F01BA169884202D34FF0010811E0211D8B +:107AD0000948006800F0A4FB0BE0BE4204D2BD429E +:107AE00002D34FF0010804E0211D0448006800F0B3 +:107AF00097FB4046BDE8F081CC010020C801002082 +:107B000070B5054600F014FCA86B08B9012400E02C +:107B1000002400F037FC204670BD70B5054600F02B +:107B200007FCA86BE96B884201D1012400E0002426 +:107B300000F028FC204670BDF8B505460F461A48EF +:107B40000068C068C468201D00F02EFB94F828006F +:107B500000F00400E8B1A06941192B463A462046DE +:107B6000FFF7A2FFD8B1002003462A460146009045 +:107B7000204601F091FE064656B900BF502080F322 +:107B80001188BFF34F8FBFF36F8F00BF00BFFEE7B9 +:107B900005E094F8280020F0010084F82800204631 +:107BA000216A8847F8BD0000C8010020F0B587B001 +:107BB000A0E00398002811DA04AE56B900BF5020A7 +:107BC00080F31188BFF34F8FBFF36F8F00BF00BFEB +:107BD000FEE7D6E90020B168904700BF039800286F +:107BE000E6DB059C606908B9012000E0002010B9BF +:107BF000201D00F0D9FA02A800F0DEF8054603982F +:107C00000A2875D2DFE800F0090507394163060844 +:107C10003A4200BF00BF00BF00BF94F8280040F008 +:107C2000010084F828000498A269811803462A46B6 +:107C30002046FFF739FFF8B12046216A884794F8BB +:107C4000280000F00400B8B1002000900498A16959 +:107C5000421800231946204601F01EFE074657B978 +:107C600000BF502080F31188BFF34F8FBFF36F8F99 +:107C700000BF00BFFEE700BF3BE000BF94F8280054 +:107C800020F0010084F8280033E000BF94F82800B9 +:107C900040F0010084F828000498A061A06908B1B0 +:107CA000012000E0002050B900BF502080F311886F +:107CB000BFF34F8FBFF36F8F00BF00BFFEE7A06918 +:107CC00041192B462A462046FFF7EEFE11E094F8B4 +:107CD000280000F0020018B9204600F071FB05E012 +:107CE00094F8280020F0010084F8280001E0FFE764 +:107CF00000BF00BF002203A90448006801F02EFA6B +:107D000000287FF456AF07B0F0BD0000D00100207E +:107D1000F8B505460C4600F06DFD684600F04CF8DD +:107D20000646009820BB44B9B54206D801F0F6FCDF +:107D300031462846FFF700FF1CE03CB10E480068C2 +:107D4000006808B9012000E000200446A91B224673 +:107D50000A48006800F0ECFB01F0E0FC50B94FF07D +:107D6000805007490860BFF34F8FBFF36F8F01E06A +:107D700001F0D4FCF8BD0000CC010020D0010020AF +:107D800004ED00E00A490968096809B9012100E029 +:107D9000002121B14FF0FF31064A116006E004498D +:107DA0000968C968C868034A4168116070470000E3 +:107DB00090010020BC01002070B5044601F068FB72 +:107DC000054607480068854204D200F00BF8012000 +:107DD000206001E00020206001480560284670BD59 +:107DE000D80100202DE9F84334E025480068C06838 +:107DF000056823480068C068C468201D00F0D4F9F5 +:107E00002046216A884794F8280000F0040008B34F +:107E1000A0694619AE4207D966602461211D184841 +:107E2000006800F0FDF915E0002003462A460146EF +:107E30000090204601F030FD074657B900BF5020A2 +:107E400080F31188BFF34F8FBFF36F8F00BF00BF68 +:107E5000FEE700BF0A480068006808B9012000E09A +:107E600000200028C1D00648D0F8008005480068EE +:107E7000034908600348C0F80080BDE8F8830000AB +:107E8000C8010020CC0100200E480068401C08B941 +:107E9000012000E0002050B900BF502080F311887D +:107EA000BFF34F8FBFF36F8F00BF00BFFEE700BF70 +:107EB000502080F31188BFF34F8FBFF36F8F00BF47 +:107EC00000BFFEE70002002008B500BF6846FFF7CC +:107ED000A9FC044620460099FFF71AFFFFF766FE4B +:107EE000F4E770B5044600F023FA94F9455010E029 +:107EF000606A08B9012000E0002038B904F12400CC +:107F000001F0C0FB18B100F0D7FB00E003E0681EF1 +:107F100045B2002DECDC00BFFF2084F8450000F0E6 +:107F200031FA00F005FA94F9445010E0206908B9DC +:107F3000012000E0002048B904F1100001F0A2FB8C +:107F400008B100F0B9FB681E45B200E001E0002D69 +:107F5000ECDC00BFFF2084F8440000F013FA70BD91 +:107F6000014621B1012904D0072906D103E00020F0 +:107F700005E0022003E0062001E0042000BF00BF6E +:107F80007047000010B502480068804710BD00002F +:107F90003C02002010B502480068804710BD000078 +:107FA0003402002010B502480068804710BD000070 +:107FB000380200202DE9F04104464FF0000800F09F +:107FC00019FC4948006808B9FFF740FC47480068B9 +:107FD0002040002870D1D4B1083404F00700B0B1BB +:107FE00004F00700C0F10800044404F0070008B9D9 +:107FF000012000E0002050B900BF502080F311881C +:10800000BFF34F8FBFF36F8F00BF00BFFEE7002CA1 +:1080100052D03748006884424ED8364E3046056804 +:1080200001E02E462D686868A04202D22868002828 +:10803000F7D12D48006885423ED0306800F108082D +:10804000286830606868001B102819D92F1907F0BC +:10805000070008B9012000E0002050B900BF5020FF +:1080600080F31188BFF34F8FBFF36F8F00BF00BF46 +:10807000FEE76868001B78606C603846FFF7E0FC3C +:108080001B4968680968081A1949086008460068A9 +:1080900019490968884203D21548006816490860E2 +:1080A000124968680968084368600020286013481E +:1080B0000068401C1149086001F030FB08F007001F +:1080C00008B9012000E0002050B900BF502080F323 +:1080D0001188BFF34F8FBFF36F8F00BF00BFFEE764 +:1080E0004046BDE8F0810000E8010020FC010020CE +:1080F000EC010020E0010020F0010020F40100204C +:10810000001F4FF080730360001F21F00103036024 +:10811000001F034B036014380260203870470000D2 +:10812000897E00082DE9F04106460F46F8F7AFFCBE +:10813000041E0D4618BF0120284320F00040C0F166 +:108140007F6000F1E040C00F0ED0301C18BF01204E +:10815000384320F00040C0F17F6000F1E040C00FE4 +:1081600004BF0120FDF7E2FC20462946BDE8F0816E +:1081700070B502460C46FF25FF2309E012F8010BFB +:1081800080EA03010648405C80EA05030548455C37 +:10819000201EA4F10106B4B2F0D143EA052070BD5F +:1081A000149A0008149B000801460A69D1E90130BD +:1081B0009860D1E9010358605068884201D188680D +:1081C0005060002008611068401E10601068704701 +:1081D000034B0360034B0B60802313607047000068 +:1081E000A813002004140020034B0360034B0B6012 +:1081F0004FF480731360704704160020601600204F +:1082000000F1080141604FF0FF31816000F1080189 +:10821000C160016100210160704700210161704768 +:1082200010B502460B685C1C0CB9106907E002F13E +:10823000080000E04068446824689C42FAD9446819 +:108240004C604C68A160886041600A611468641CDD +:10825000146010BD42684A6093688B6093685960EF +:108260009160086103685B1C0360704700B50346BA +:108270000A4633B11148008840F020000F490880B9 +:1082800005E00E48008820F020000C49088042B12B +:10829000FBF71CFC0948008840F080000749088073 +:1082A0000AE00648008820F080000449088008465B +:1082B000008840F04000088000BD00000C380140FC +:1082C0000C48008820F001000A4908800020094974 +:1082D0002431088007480C30008820F0010005494F +:1082E0000C310880081D008820F00100091D08805D +:1082F00070470000001400400C48008820F0010086 +:108300000A490880081F008840F00100091F088002 +:10831000002006491431088004481038008840F0D5 +:108320000100024910390880704700001014004015 +:1083300000BF502080F31188BFF34F8FBFF36F8FC2 +:1083400000BF0E480068401C0C49086008460068E1 +:10835000012812D10A480068C0B208B9012000E023 +:10836000002050B900BF502080F31188BFF34F8F19 +:10837000BFF36F8F00BF00BFFEE770470002002011 +:1083800004ED00E00D48006850B900BF502080F3B4 +:108390001188BFF34F8FBFF36F8F00BF00BFFEE7A1 +:1083A00006480068401E054908600846006820B974 +:1083B000002080F3118800BF00BF7047000200203A +:1083C00070B506463546002E44D0083D2C4622495D +:1083D00060680968084008B1012000E0002050B939 +:1083E00000BF502080F31188BFF34F8FBFF36F8F12 +:1083F00000BF00BFFEE7206808B9012000E00020B0 +:1084000050B900BF502080F31188BFF34F8FBFF3E6 +:108410006F8F00BF00BFFEE70F4960680968084022 +:10842000C0B12068B0B90C496068096888436060D1 +:1084300000F0E0F9094960680968084407490860E4 +:108440002046FFF7FDFA06480068401C0449086012 +:1084500001F064F970BD0000FC010020EC01002077 +:10846000F801002000204FF0E021086188610648F3 +:1084700000684FF47A71B0FBF1F0401E4FF0E0213C +:1084800048610720086170478801002070B5F7F740 +:10849000A3FE0446102C16D304F1E02090F8F0530C +:1084A00015480078854201DB012000E0002050B92A +:1084B00000BF502080F31188BFF34F8FBFF36F8F41 +:1084C00000BF00BFFEE70D48006800F4E0600C4903 +:1084D0000968884201D8012000E0002050B900BF9F +:1084E000502080F31188BFF34F8FBFF36F8F00BF11 +:1084F00000BFFEE770BD0000040200200CED00E0AC +:1085000008020020024600200BE0084B53F83030F0 +:1085100033B9064B43F8301003EBC0035A6002E056 +:10852000401C0828F1D300BF704700008C0D0020CC +:108530002DE9F04105460E4617462C46FFF7F8FE9A +:1085400094F94400401C10B9002084F8440094F9C8 +:108550004500401C10B9002084F84500FFF712FFC9 +:10856000A06B28B93A46314604F1240000F0C6F861 +:108570002046FFF7B6FCBDE8F081000070B5044668 +:108580000025D4B11248006808B9012000E000209D +:1085900050B900BF502080F31188BFF34F8FBFF355 +:1085A0006F8F00BF00BFFEE700F024F900212046D6 +:1085B000FEF7C4FF01F0B2F805463DB94FF0805018 +:1085C00004490860BFF34F8FBFF36F8F70BD000089 +:1085D000C401002004ED00E070B50546FFF7A8FED9 +:1085E00015B92748006800E028460446201DFFF71B +:1085F000DBFDA06A18B104F11800FFF7D5FD214892 +:108600000068401C1F4908601D480068844209D169 +:10861000211D1D48FFF71EFE1C480068401C1B4919 +:10862000086009E01A480068401E194908602046A1 +:10863000FFF7D0F8FFF7A6FBFFF7A4FE1548006888 +:10864000E8B10F480068844219D11348006808B99E +:10865000012000E0002050B900BF502080F31188B5 +:10866000BFF34F8FBFF36F8F00BF00BFFEE74FF028 +:1086700080500A490860BFF34F8FBFF36F8F70BD02 +:108680008C010020B8010020681200209801002011 +:108690009C010020A8010020C401002004ED00E09E +:1086A0000349096801600349096841607047000097 +:1086B000B4010020A001002001200149086070479A +:1086C000B001002070B504460D4654B900BF5020DB +:1086D00080F31188BFF34F8FBFF36F8F00BF00BFD0 +:1086E000FEE70548016818312046FFF799FD012192 +:1086F0002846FEF723FF70BD8C01002070B50546AB +:108700000E46144655B900BF502080F31188BFF3C0 +:108710004F8FBFF36F8F00BF00BFFEE706480168B1 +:1087200018312846FFF796FD0CB14FF0FF36214671 +:108730003046FEF703FF70BD8C01002010B586B0F7 +:1087400000200590049003AA04A905A8FFF740FDA6 +:108750000022DDE904101346CDE9002102901EA19C +:108760001F48039A00F026FE1E490860084600686C +:1087700008B1012400E00024012C02D101F050F8DE +:108780000446012C15D100BF502080F31188BFF39F +:108790004F8FBFF36F8F00BF4FF0FF30124908605B +:1087A00001201249086000201149086000F032FAE7 +:1087B00010E0601C08B1012000E0002050B900BFAB +:1087C000502080F31188BFF34F8FBFF36F8F00BF2E +:1087D00000BFFEE706B010BD49444C450000000054 +:1087E000C9780008C0010020BC010020A8010020B9 +:1087F000A001002002480068401C01490860704741 +:10880000C40100201E48006818B101201D490860FD +:1088100034E000201B4908601B4801680CE051B996 +:1088200000BF502080F31188BFF34F8FBFF36F8FCD +:1088300000BF00BFFEE7491E01EB8100134A52F85A +:10884000200008B9012000E000200028E7D101EB5A +:1088500081020E4B03EB820042685268426000F1D5 +:1088600008024368934202D14268526842604268FB +:10887000D268074B1A600448016000BF70470000CF +:10888000C4010020B0010020A4010020CC0D002074 +:108890008C01002001460020054A127832B1054AB9 +:1088A00012780A700022024B1A70012070470000F3 +:1088B000D5020020D40200200020024908700120C7 +:1088C00070470000D502002001460120024A1070C6 +:1088D0000248017001207047D5020020D402002018 +:1088E00010B50446FBF7DCF8024800882070012030 +:1088F00010BD0000043801402DE9F04107460C4648 +:1089000015461E463548806940F0040033498861A9 +:10891000334800686FF30B0000F2B3403049086041 +:108920002E48806940F480402C498861FBF7B8F8F4 +:1089300000202C490880091D0880091D08800C2092 +:108940002849088028480068B0FBF4F0091F088017 +:10895000082D02D0092D0ED106E02248008820F40F +:1089600080502049088006E01E48008840F480506E +:108970001C49088000BF00BF26B1012E09D0022E7D +:108980001FD112E01748008820F480601549088044 +:1089900017E01448008840F4007012490880084627 +:1089A000008840F4806008800BE00E48008820F4C6 +:1089B00000700C4908800846008840F480600880F8 +:1089C00000BF00BF0748008840F4005005490880F8 +:1089D0002520FDF709F80120BDE8F08100100240D4 +:1089E000040801400C3801408801002000B502460F +:1089F000FBF76CF801480280012000BD04380140FB +:108A000010B504461048C06940F020000E49C86106 +:108A100000200E4908800E4800684CF25031B0FB2F +:108A2000F1F0401E094928310880081D048001200A +:108A300006491431088005490C3108803720FCF7BD +:108A4000D3FF012010BD00000010024000140040C0 +:108A50008801002038B500246846FFF741FF1C4814 +:108A6000007830B101280AD0022819D003282BD170 +:108A700002E0FFF741FC27E0FFF73EFC24E0002086 +:108A8000144908809DF800200888411C114B19806A +:108A900011490A5402200E490870FFF72DFC13E01B +:108AA0000C480088FF2809DC9DF800200949088847 +:108AB000411C084B198008490A5402E0032004496C +:108AC0000870FFF719FC00BF00BF204638BD00004A +:108AD000110200201A0200208038002010B5002466 +:108AE0000D48007820B1022807D003280BD109E0F7 +:108AF0000020FFF7E9FE044606E00120FFF7E4FE50 +:108B0000044601E000E000BF00BFFFF7D9FB0120F1 +:108B100001490870204610BD1102002010B5002444 +:108B20001648007810B1012824D104E0002101206A +:108B3000FFF79CFB1EE01248008878B111490968D4 +:108B40000878FFF753FF0F480068401C0D49086084 +:108B50000B480088401E0A4908800AE00320FFF7FE +:108B6000B3FE044600210120FFF780FB00200349EB +:108B7000087000BF00BF204610BD0000100200209A +:108B80001802002014020020F0B503460C461546DA +:108B9000E208A4EBC20087B20120A840401E86B2C2 +:108BA000995C501C185C41EA002139413140C8B23F +:108BB000F0BD2DE9F043044615461F46C808A1EB59 +:108BC000C0081FFA88FC07FA0CF81FFA88F74FF064 +:108BD000010808FA05F8A8F101081FFA88F6A1EBC8 +:108BE000C00806FA08F81FFA88F6225C00F10108AE +:108BF00014F8088042EA082222EA060848EA070236 +:108C000022544FEA222900F1010804F80890BDE837 +:108C1000F08300001CB53849084600780190FF2019 +:108C20000A4610700846007800909DF8000000F099 +:108C3000F0009DF80020904201D1012000E00020CA +:108C400050B900BF502080F31188BFF34F8FBFF39E +:108C50006F8F00BF00BFFEE79DF8000000F05000DE +:108C6000264A10700720264A106009E02448006850 +:108C7000401E234A10609DF800004006000E009040 +:108C80009DF8000000F080008028EFD01C480068AC +:108C9000C0F10700042801D1012000E0002050B9F4 +:108CA00000BF502080F31188BFF34F8FBFF36F8F49 +:108CB00000BF00BFFEE7124800680002104A1060C3 +:108CC0001046008800F4E06010600B4A01981070B4 +:108CD0000C48006840F470000A49086008460068C3 +:108CE00040F070400860FFF7BDFB002006490860B7 +:108CF000F7F73CFA00201CBD00E400E0040200206D +:108D00000802002020ED00E00002002010B500BFA6 +:108D1000502080F31188BFF34F8FBFF36F8F00BFD8 +:108D200000F0BCFB18B14FF080500449086000BF50 +:108D3000002080F3118800BF10BD000004ED00E0AA +:108D40002DE9F84380460E4617461D46DDF8209073 +:108D5000B8F1000F01D0012000E0002050B900BFA1 +:108D6000502080F31188BFF34F8FBFF36F8F00BF88 +:108D700000BFFEE70DB1012000E0002050B900BFA8 +:108D8000502080F31188BFF34F8FBFF36F8F00BF68 +:108D900000BFFEE707B10EB1012000E0002050B98E +:108DA00000BF502080F31188BFF34F8FBFF36F8F48 +:108DB00000BF00BFFEE707B90EB9012000E00020A8 +:108DC00050B900BF502080F31188BFF34F8FBFF31D +:108DD0006F8F00BF00BFFEE7502000900098502822 +:108DE00001D1012000E0002050B900BF502080F3E5 +:108DF0001188BFF34F8FBFF36F8F00BF00BFFEE737 +:108E000000BF2C464CB1012084F846004B463A4640 +:108E1000314640460094FEF76BFD2046BDE8F883DE +:108E200070B505460E462C4654B900BF502080F35D +:108E30001188BFF34F8FBFF36F8F00BF00BFFEE7F6 +:108E4000FFF776FAD4E90F12206801FB0200A06058 +:108E50000020A06320686060E06B401E226C2168E7 +:108E600000FB0211E160FF2084F8440084F8450013 +:108E70009EB9206908B9012000E00020A8B904F1DA +:108E8000100000F0FFFB80B14FF0805009490860EE +:108E9000BFF34F8FBFF36F8F07E004F11000FFF7B0 +:108EA000AFF904F12400FFF7ABF9FFF76BFA0120EB +:108EB00070BD000004ED00E02DE9FF4383B00646DD +:108EC00088461D464FF00009344654B900BF502073 +:108ED00080F31188BFF34F8FBFF36F8F00BF00BFC8 +:108EE000FEE7B8F1000F01D1206C08B9012000E0C5 +:108EF000002050B900BF502080F31188BFF34F8F7E +:108F0000BFF36F8F00BF00BFFEE7022D02D1E06B01 +:108F1000012801D1012000E0002050B900BF5020FD +:108F200080F31188BFF34F8FBFF36F8F00BF00BF77 +:108F3000FEE700F09DFA08B9059808B9012000E0A5 +:108F4000002050B900BF502080F31188BFF34F8F2D +:108F5000BFF36F8F00BF00BFFEE700BFFFF7E8F968 +:108F6000A06BE16B884201D3022D28D12A464146ED +:108F70002046FEF7F0FB0746606A08B9012000E0D2 +:108F8000002068B904F1240000F07CFB88B14FF0A8 +:108F9000805032490860BFF34F8FBFF36F8F08E0F6 +:108FA0003FB14FF080502D490860BFF34F8FBFF3A2 +:108FB0006F8FFFF7E7F9012007B0BDE8F083059850 +:108FC00018B9FFF7DFF90020F6E7B9F1000F04D177 +:108FD00001A8FFF765FB4FF00109FFF7D3F9FFF791 +:108FE00009FCFFF7A5F994F94400401C10B90020D2 +:108FF00084F8440094F94500401C10B9002084F81E +:109000004500FFF7BFF905A901A800F05BF9F0B929 +:109010002046FEF782FDA0B104F110000599FFF78C +:1090200051FB2046FEF75DFF00F078FB002895D14C +:109030004FF0805009490860BFF34F8FBFF36F8F27 +:109040008CE72046FEF74DFF00F068FB86E72046E0 +:10905000FEF747FF00F062FB0020ADE704ED00E003 +:109060002DE9F84F07468A4690461E463C4654B9BD +:1090700000BF502080F31188BFF34F8FBFF36F8F75 +:1090800000BF00BFFEE7BAF1000F01D1206C08B9A4 +:10909000012000E0002050B900BF502080F311886B +:1090A000BFF34F8FBFF36F8F00BF00BFFEE7022EED +:1090B00002D1E06B012801D1012000E0002050B96D +:1090C00000BF502080F31188BFF34F8FBFF36F8F25 +:1090D00000BF00BFFEE7FFF7D9F900BF5021EFF353 +:1090E000118081F31188BFF34F8FBFF36F8F00BFE3 +:1090F0000546A06BE16B884201D3022E25D194F97D +:1091000045B0A06B0090324651462046FEF723FB47 +:109110000BF1010088B9606A08B9012000E0002065 +:1091200050B904F1240000F0ADFA28B1B8F1000FF5 +:1091300002D00120C8F8000004E00BF1010040B2A9 +:1091400084F845004FF0010901E04FF0000900BF2D +:1091500085F3118800BF4846BDE8F88F2DE9F74137 +:1091600083B005460E464FF000082C4654B900BFA8 +:10917000502080F31188BFF34F8FBFF36F8F00BF74 +:1091800000BFFEE70EB9206C08B9012000E0002006 +:1091900050B900BF502080F31188BFF34F8FBFF349 +:1091A0006F8F00BF00BFFEE700F062F908B90598B5 +:1091B00008B9012000E0002050B900BF502080F322 +:1091C0001188BFF34F8FBFF36F8F00BF00BFFEE763 +:1091D00000BFFFF7ADF8A76BF7B131462046FEF7A9 +:1091E000A5FA781EA063206908B9012000E00020DC +:1091F00060B904F1100000F045FA38B14FF080502A +:109200002F490860BFF34F8FBFF36F8FFFF7BAF896 +:10921000012006B0BDE8F081059818B9FFF7B2F853 +:109220000020F6E7B8F1000F04D101A8FFF738FAE3 +:109230004FF00108FFF7A6F8FFF7DCFAFFF778F820 +:1092400094F94400401C10B9002084F8440094F9BB +:109250004500401C10B9002084F84500FFF792F843 +:1092600005A901A800F02EF8F0B92046FEF748FC49 +:10927000A0B104F124000599FFF724FA2046FEF777 +:1092800030FE00F04BFA0028A3D14FF080500C497B +:109290000860BFF34F8FBFF36F8F9AE72046FEF74A +:1092A00020FE00F03BFA94E72046FEF71AFE00F09D +:1092B00035FA2046FEF724FC00288AD00020A8E7D3 +:1092C00004ED00E070B505460C4655B900BF5020CE +:1092D00080F31188BFF34F8FBFF36F8F00BF00BFC4 +:1092E000FEE754B900BF502080F31188BFF34F8FC1 +:1092F000BFF36F8F00BF00BFFEE7FFF719F81248FA +:1093000002686868131A2068401C08B9002617E034 +:109310000E4928680968884204D06868904201D8DC +:1093200001260DE02068984207D92068C01A206005 +:109330002846FFF7B5F9002602E00020206001264C +:10934000FFF720F8304670BDA0010020B4010020D6 +:109350002DE9FF4F85B0804689461746DDE912ABFF +:10936000B800FEF727FE064656B15C20FEF722FE47 +:1093700004460CB1266304E03046FFF721F800E014 +:1093800000248CB1002084F85900CDE900ABCDE970 +:1093900002403A4649464046089BFEF7BEFA204640 +:1093A000FEF70AF9012501E04FF0FF35284609B024 +:1093B000BDE8F08F2DE9F04F85B00746884691460D +:1093C0009A46DDE90EB6109C0EB1012000E00020A7 +:1093D00050B900BF502080F31188BFF34F8FBFF307 +:1093E0006F8F00BF00BFFEE70CB1012000E000203E +:1093F00050B900BF502080F31188BFF34F8FBFF3E7 +:109400006F8F00BF00BFFEE75C20039003985C28CD +:1094100001D1012000E0002050B900BF502080F3AE +:109420001188BFF34F8FBFF36F8F00BF00BFFEE700 +:1094300000BFB4B1AEB125462C462E63022085F89C +:109440005900002004A953464A46CDE900B1CDE9B0 +:10945000025041463846FEF760FA2846FEF7ACF85F +:1094600001E000200490049805B0BDE8F08F0000F2 +:109470000549096809B9012005E00449096809B9E5 +:10948000022000E000207047A8010020C401002055 +:109490000149086870470000A00100202DE9F04153 +:1094A0004FF000084348006800287BD1424800681C +:1094B000451C4148056015BB40480068006808B974 +:1094C000012000E0002050B900BF502080F3118837 +:1094D000BFF34F8FBFF36F8F00BF00BFFEE737486A +:1094E00007683748006835490860354807603548DF +:1094F0000068401C33490860FEF744FC00BF324856 +:10950000006885423BD300BF2C480068006808B95A +:10951000012000E0002020B14FF0FF302A49086010 +:109520002CE026480068C068C4686668B54202D26C +:109530002548066022E0201DFEF736FEA06A18B11D +:1095400004F11800FEF730FE2049E06A09688842FD +:1095500002D91E49E06A0860E16A01EB81011C4AF8 +:1095600002EB8100211DFEF775FE1A49E06A0968C9 +:10957000C96A8842C8D34FF00108C5E700BF154843 +:109580000068C06A00EB8000114951F820000128F2 +:1095900001D94FF001081048006808B14FF00108E8 +:1095A00005E0FFE70D480068401C0C490860404694 +:1095B000BDE8F081C4010020A0010020900100203E +:1095C00094010020B4010020BC010020A40100206F +:1095D000CC0D00208C010020B0010020AC01002047 +:1095E00070B505462C460026002D43D02248006861 +:1095F000844201D1012000E0002050B900BF50207A +:1096000080F31188BFF34F8FBFF36F8F00BF00BF90 +:10961000FEE7206D50B900BF502080F31188BFF3E2 +:109620004F8FBFF36F8F00BF00BFFEE7206D401E5E +:109630002065E16CE06A88421CD0206DD0B9201D05 +:10964000FEF7B2FDE06CE062E06AC0F13800A061B4 +:109650000A49E06A0968884202D90849E06A086054 +:10966000E16A01EB8101064A02EB8100211DFEF750 +:10967000F1FD0126304670BD8C010020A4010020C0 +:10968000CC0D002070B50646F068C46854B900BF20 +:10969000502080F31188BFF34F8FBFF36F8F00BF4F +:1096A00000BFFEE704F11800FEF77EFD15480068D4 +:1096B000A0B9201DFEF778FD1349E06A09688842C9 +:1096C00002D91149E06A0860E16A01EB81010F4AA1 +:1096D00002EB8100211DFEF7BDFD04E004F118013D +:1096E0000B48FEF7B7FD0B49E06A0968C96A884272 +:1096F00004D9012501200849086000E0002528461A +:1097000070BD0000C4010020A4010020CC0D002089 +:10971000541200208C010020B001002070B50024FC +:1097200000263648006850B900BF502080F31188E9 +:10973000BFF34F8FBFF36F8F00BF00BFFEE7FEF791 +:10974000F7FD2E480068401E2C4908600846006856 +:1097500000284ED12A48006800284AD023E0294832 +:10976000C068C46804F11800FEF71EFD201DFEF756 +:109770001BFD2549E06A0968884202D92249E06A4E +:109780000860E16A01EB8101204A02EB8100211DA2 +:10979000FEF760FD1E49E06A0968C96A884202D383 +:1097A00001201C4908601748006808B9012000E042 +:1097B00000200028D3D00CB1FEF7E4FA1648056863 +:1097C00065B100BFFFF76AFE10B1012011490860C2 +:1097D0006D1E002DF6D100200F4908600D4800686D +:1097E00038B1012630070D490860BFF34F8FBFF332 +:1097F0006F8FFEF7C7FD304670BD0000C40100202A +:109800009C01002054120020A4010020CC0D002057 +:109810008C010020B0010020AC01002004ED00E02C +:1098200010B586B00024FDF723FF16480068D0B1BC +:1098300000200590049003AA04A905A8FEF7D4FC13 +:109840000222DDE904100023CDE9002102900EA1DF +:109850000F48039AFFF7AEFD0E49086008460068FE +:1098600000B1012400BF54B900BF502080F311881B +:10987000BFF34F8FBFF36F8F00BF00BFFEE72046DF +:1098800006B010BDD0010020546D722053766300E5 +:10989000C97E0008D40100202DE9FF4704460D468B +:1098A00016461F46DDF830804FF0000954B900BF5E +:1098B000502080F31188BFF34F8FBFF36F8F00BF2D +:1098C00000BFFEE71448006810B3009501960294AB +:1098D000062D15DAFFF7CCFD022808D100234246F9 +:1098E00069460D480068FFF7E7FA814610E000235B +:1098F0001A46694608480068FFF7DEFA814607E025 +:1099000000233A46694604480068FFF7A9FB8146F0 +:10991000484604B0BDE8F087D00100201450000094 +:10992000E8FD000048E80100000000000000000021 +:1099300000000000000000000000C8420080BB449E +:109940000080BB4400000000000000000000000098 +:109950000000000000401C4600409C4500409C4622 +:1099600000000000000000000000000000000000F7 +:109970000000204100007A4400007A44000000000A +:10998000000000000000000000000000789C0008BB +:1099900000000000000000000000000000000000C7 +:1099A000000300001800000000000000000000009C +:1099B00008000019849C000800000000000000005E +:1099C000000000000000000000020000180000007D +:1099D000000000000000000002030405060708095B +:1099E0000A0B0C0D0E0F10100102020304050607EE +:1099F00008090A0B0C0D0E0F1010010200000000E8 +:109A0000000000000102030406070809000000002E +:109A10000102030400C1814001C0804101C08041B6 +:109A200000C1814001C0804100C1814000C181402E +:109A300001C0804101C0804100C1814000C181401E +:109A400001C0804100C1814001C0804101C080410E +:109A500000C1814001C0804100C1814000C18140FE +:109A600001C0804100C1814001C0804101C08041EE +:109A700000C1814000C1814001C0804101C08041DE +:109A800000C1814001C0804100C1814000C18140CE +:109A900001C0804101C0804100C1814000C18140BE +:109AA00001C0804100C1814001C0804101C08041AE +:109AB00000C1814000C1814001C0804101C080419E +:109AC00000C1814001C0804100C1814000C181408E +:109AD00001C0804100C1814001C0804101C080417E +:109AE00000C1814001C0804100C1814000C181406E +:109AF00001C0804101C0804100C1814000C181405E +:109B000001C0804100C1814001C0804101C080414D +:109B100000C1814000C0C101C30302C2C60607C71D +:109B200005C5C404CC0C0DCD0FCFCE0E0ACACB0B8D +:109B3000C90908C8D81819D91BDBDA1A1EDEDF1FBD +:109B4000DD1D1CDC14D4D515D71716D6D21213D3AD +:109B500011D1D010F03031F133F3F23236F6F7375D +:109B6000F53534F43CFCFD3DFF3F3EFEFA3A3BFB4D +:109B700039F9F83828E8E929EB2B2AEAEE2E2FEFFD +:109B80002DEDEC2CE42425E527E7E62622E2E3236D +:109B9000E12120E0A06061A163A3A26266A6A7679D +:109BA000A56564A46CACAD6DAF6F6EAEAA6A6BAB0D +:109BB00069A9A86878B8B979BB7B7ABABE7E7FBF3D +:109BC0007DBDBC7CB47475B577B7B67672B2B3732D +:109BD000B17170B0509091519353529296565797DD +:109BE000559594549C5C5D9D5F9F9E5E5A9A9B5BCD +:109BF00099595898884849894B8B8A4A4E8E8F4F7D +:109C00008D4D4C8C448485458747468682424383EC +:109C100041818040949C000800000000000000008A +:109C20000000000000000000000500002800000007 +:109C3000000000000000000004FA97999999D93FAC +:109C4000AF788E1DC571CC3F9FC678D0099AC33FAF +:109C5000935555555555E53F599322942449D23F84 +:109C6000DE03CB966446C73F44523EDF12F1C23F4B +:109C7000000000000000000064656661756C7454AB +:109C800061736B0053616D706C6552756E546173D6 +:109C90006B0000004D4252756E5461736B00000002 +:109CA000C09C000800000020EC0200001A0C000814 +:109CB000509D0008EC020020EC3B00001E5B0008F9 +:109CC000011A23A041137A440420409C468BF401DE +:109CD00004011023204E4BD0070401117C401C4688 +:109CE00004091784290409113809161C01616974D3 +:109CF000BA2CEE4264E2C85A010121C34842859A57 +:109D000099993E2A1028410375127A1AAA01011A5C +:109D1000022902321113CD67330804136B6633082E +:109D20000313DF652A08E0133769330806136568F3 +:109D30003308171AF72029F41385643308051AF538 +:109D400038320F1AA72029721A3338015400000044 +:0400000508000131BD +:00000001FF diff --git a/MDK-ARM/OutPut/YouSuan.map b/MDK-ARM/OutPut/YouSuan.map new file mode 100644 index 0000000..113bf11 --- /dev/null +++ b/MDK-ARM/OutPut/YouSuan.map @@ -0,0 +1,4291 @@ +Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601] + +============================================================================== + +Section Cross References + + startup_stm32f103xe.o(RESET) refers to startup_stm32f103xe.o(STACK) for __initial_sp + startup_stm32f103xe.o(RESET) refers to startup_stm32f103xe.o(.text) for Reset_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.NMI_Handler) for NMI_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.HardFault_Handler) for HardFault_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.MemManage_Handler) for MemManage_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.BusFault_Handler) for BusFault_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.UsageFault_Handler) for UsageFault_Handler + startup_stm32f103xe.o(RESET) refers to port.o(.emb_text) for SVC_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.DebugMon_Handler) for DebugMon_Handler + startup_stm32f103xe.o(RESET) refers to cmsis_os2.o(i.SysTick_Handler) for SysTick_Handler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.EXTI0_IRQHandler) for EXTI0_IRQHandler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.DMA1_Channel1_IRQHandler) for DMA1_Channel1_IRQHandler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.TIM1_UP_IRQHandler) for TIM1_UP_IRQHandler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.TIM2_IRQHandler) for TIM2_IRQHandler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.TIM3_IRQHandler) for TIM3_IRQHandler + startup_stm32f103xe.o(RESET) refers to modbus-port-stm32.o(i.USART1_IRQHandler) for USART1_IRQHandler + startup_stm32f103xe.o(RESET) refers to stm32f1xx_it.o(i.TIM5_IRQHandler) for TIM5_IRQHandler + startup_stm32f103xe.o(RESET) refers to modbus-port-stm32.o(i.TIM7_IRQHandler) for TIM7_IRQHandler + startup_stm32f103xe.o(.text) refers to system_stm32f1xx.o(i.SystemInit) for SystemInit + startup_stm32f103xe.o(.text) refers to entry.o(.ARM.Collect$$$$00000000) for __main + stepmotor.o(i.ArmSoftCtrl) refers to ffixui.o(.text) for __aeabi_f2uiz + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) for SamplePumpSpeed_AcceleratedConver + stepmotor.o(i.ArmSoftCtrl) refers to cmsis_os2.o(i.osDelay) for osDelay + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(i.Motor_IECMD) for Motor_IECMD + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(i.Motor_Dir) for Motor_Dir + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(i.Motor_PWM) for Motor_PWM + stepmotor.o(i.ArmSoftCtrl) refers to ffltui.o(.text) for __aeabi_ui2f + stepmotor.o(i.ArmSoftCtrl) refers to cfrcmple.o(.text) for __aeabi_cfrcmple + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(i.Motor_PWMCmd) for Motor_PWMCmd + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(i.Motor_En) for Motor_En + stepmotor.o(i.ArmSoftCtrl) refers to fdiv.o(.text) for __aeabi_fdiv + stepmotor.o(i.ArmSoftCtrl) refers to fmul.o(.text) for __aeabi_fmul + stepmotor.o(i.ArmSoftCtrl) refers to f2d.o(.text) for __aeabi_f2d + stepmotor.o(i.ArmSoftCtrl) refers to sqrt.o(i.sqrt) for sqrt + stepmotor.o(i.ArmSoftCtrl) refers to d2f.o(.text) for __aeabi_d2f + stepmotor.o(i.ArmSoftCtrl) refers to cfcmple.o(.text) for __aeabi_cfcmple + stepmotor.o(i.ArmSoftCtrl) refers to fflti.o(.text) for __aeabi_i2f + stepmotor.o(i.ArmSoftCtrl) refers to fadd.o(.text) for __aeabi_fsub + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(.bss) for CoordinateSet + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(.data) for TaskisRunning + stepmotor.o(i.ArmSoftCtrl) refers to stepmotor.o(.constdata) for FullCoordinate + stepmotor.o(i.Exti_IRQ_Ctrl) refers to stepmotor.o(i.EXTIx_IRQ_Enable) for EXTIx_IRQ_Enable + stepmotor.o(i.Exti_IRQ_Ctrl) refers to stepmotor.o(i.EXTIx_IRQ_Disable) for EXTIx_IRQ_Disable + stepmotor.o(i.HAL_GPIO_EXTI_Callback) refers to stepmotor.o(i.EXTIx_IRQ_Disable) for EXTIx_IRQ_Disable + stepmotor.o(i.HAL_GPIO_EXTI_Callback) refers to stepmotor.o(i.Motor_PWMCmd) for Motor_PWMCmd + stepmotor.o(i.HAL_GPIO_EXTI_Callback) refers to cmsis_os2.o(i.osDelay) for osDelay + stepmotor.o(i.HAL_GPIO_EXTI_Callback) refers to stepmotor.o(.data) for iz + stepmotor.o(i.HAL_GPIO_EXTI_Callback) refers to stepmotor.o(.bss) for CoordinateSet + stepmotor.o(i.MotorCTRLInitiate) refers to stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) for SamplePumpSpeed_AcceleratedConver + stepmotor.o(i.MotorCTRLInitiate) refers to tasks.o(i.xTaskCreate) for xTaskCreate + stepmotor.o(i.MotorCTRLInitiate) refers to stepmotor.o(.bss) for xTaskHandles + stepmotor.o(i.MotorCTRLInitiate) refers to stepmotor.o(i._task_MotorCTRL) for _task_MotorCTRL + stepmotor.o(i.MotorCTRLInitiate) refers to stepmotor.o(.data) for temp1 + stepmotor.o(i.MotorCtrl) refers to stepmotor.o(i.SamplePumpCtrl) for SamplePumpCtrl + stepmotor.o(i.MotorCtrl) refers to stepmotor.o(i.ArmSoftCtrl) for ArmSoftCtrl + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.EXTIx_IRQ_Disable) for EXTIx_IRQ_Disable + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Motor_PWMCmd) for Motor_PWMCmd + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Exti_IRQ_Ctrl) for Exti_IRQ_Ctrl + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Motor_En) for Motor_En + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Motor_Dir) for Motor_Dir + stepmotor.o(i.MotorZero_Init) refers to cmsis_os2.o(i.osDelay) for osDelay + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Motor_IECMD) for Motor_IECMD + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Motor_PWM) for Motor_PWM + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(i.Exti_IOStateRead) for Exti_IOStateRead + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(.data) for FindedZero + stepmotor.o(i.MotorZero_Init) refers to stepmotor.o(.bss) for CoordinateSet + stepmotor.o(i.Motor_IECMD) refers to tim.o(i.TIM5_IECMD) for TIM5_IECMD + stepmotor.o(i.Motor_IECMD) refers to tim.o(i.TIM3_IECMD) for TIM3_IECMD + stepmotor.o(i.Motor_IECMD) refers to tim.o(i.TIM2_IECMD) for TIM2_IECMD + stepmotor.o(i.Motor_PWM) refers to tim.o(i.TIM5_CH3_CTRL) for TIM5_CH3_CTRL + stepmotor.o(i.Motor_PWM) refers to tim.o(i.TIM3_CH1_CTRL) for TIM3_CH1_CTRL + stepmotor.o(i.Motor_PWM) refers to tim.o(i.TIM2_CH2_CTRL) for TIM2_CH2_CTRL + stepmotor.o(i.Motor_PWMCmd) refers to tim.o(i.TIM5_CH3_CMD) for TIM5_CH3_CMD + stepmotor.o(i.Motor_PWMCmd) refers to tim.o(i.TIM3_CH1_CMD) for TIM3_CH1_CMD + stepmotor.o(i.Motor_PWMCmd) refers to tim.o(i.TIM2_CH2_CMD) for TIM2_CH2_CMD + stepmotor.o(i.SamplePumpCtrl) refers to ffixui.o(.text) for __aeabi_f2uiz + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) for SamplePumpSpeed_AcceleratedConver + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(i.Motor_IECMD) for Motor_IECMD + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(i.Motor_Dir) for Motor_Dir + stepmotor.o(i.SamplePumpCtrl) refers to fdiv.o(.text) for __aeabi_fdiv + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(i.Motor_PWM) for Motor_PWM + stepmotor.o(i.SamplePumpCtrl) refers to cmsis_os2.o(i.osDelay) for osDelay + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(i.Motor_En) for Motor_En + stepmotor.o(i.SamplePumpCtrl) refers to ffltui.o(.text) for __aeabi_ui2f + stepmotor.o(i.SamplePumpCtrl) refers to cfrcmple.o(.text) for __aeabi_cfrcmple + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(i.Motor_PWMCmd) for Motor_PWMCmd + stepmotor.o(i.SamplePumpCtrl) refers to fmul.o(.text) for __aeabi_fmul + stepmotor.o(i.SamplePumpCtrl) refers to f2d.o(.text) for __aeabi_f2d + stepmotor.o(i.SamplePumpCtrl) refers to sqrt.o(i.sqrt) for sqrt + stepmotor.o(i.SamplePumpCtrl) refers to d2f.o(.text) for __aeabi_d2f + stepmotor.o(i.SamplePumpCtrl) refers to cfcmple.o(.text) for __aeabi_cfcmple + stepmotor.o(i.SamplePumpCtrl) refers to fadd.o(.text) for __aeabi_fsub + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(.bss) for CoordinateSet + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(.data) for TaskisRunning + stepmotor.o(i.SamplePumpCtrl) refers to stepmotor.o(.constdata) for VelocityL + stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) refers to fmul.o(.text) for __aeabi_fmul + stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) refers to fflti.o(.text) for __aeabi_i2f + stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) refers to fdiv.o(.text) for __aeabi_fdiv + stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) refers to stepmotor.o(.bss) for SpeedOld + stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) refers to stepmotor.o(.constdata) for ShiftPluse + stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) refers to stepmotor.o(.data) for Speeda + stepmotor.o(i._task_MotorCTRL) refers to stepmotor.o(i.MotorCtrl) for MotorCtrl + main.o(i.HAL_TIM_PeriodElapsedCallback) refers to stm32f1xx_hal.o(i.HAL_IncTick) for HAL_IncTick + main.o(i.MX_ADC1_Init) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_Init) for HAL_ADC_Init + main.o(i.MX_ADC1_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_ADC1_Init) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_ConfigChannel) for HAL_ADC_ConfigChannel + main.o(i.MX_ADC1_Init) refers to main.o(.bss) for hadc1 + main.o(i.MX_DMA_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + main.o(i.MX_DMA_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ + main.o(i.MX_GPIO_Init) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) for HAL_GPIO_WritePin + main.o(i.MX_GPIO_Init) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) for HAL_GPIO_Init + main.o(i.MX_GPIO_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + main.o(i.MX_GPIO_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ + main.o(i.MX_TIM2_Init) refers to memseta.o(.text) for __aeabi_memclr4 + main.o(i.MX_TIM2_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) for HAL_TIM_Base_Init + main.o(i.MX_TIM2_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_TIM2_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource + main.o(i.MX_TIM2_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) for HAL_TIM_PWM_Init + main.o(i.MX_TIM2_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization + main.o(i.MX_TIM2_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) for HAL_TIM_PWM_ConfigChannel + main.o(i.MX_TIM2_Init) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) for HAL_TIM_MspPostInit + main.o(i.MX_TIM2_Init) refers to main.o(.bss) for htim2 + main.o(i.MX_TIM3_Init) refers to memseta.o(.text) for __aeabi_memclr4 + main.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) for HAL_TIM_Base_Init + main.o(i.MX_TIM3_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource + main.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) for HAL_TIM_PWM_Init + main.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization + main.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) for HAL_TIM_PWM_ConfigChannel + main.o(i.MX_TIM3_Init) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) for HAL_TIM_MspPostInit + main.o(i.MX_TIM3_Init) refers to main.o(.bss) for htim3 + main.o(i.MX_TIM5_Init) refers to memseta.o(.text) for __aeabi_memclr4 + main.o(i.MX_TIM5_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) for HAL_TIM_PWM_Init + main.o(i.MX_TIM5_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_TIM5_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization + main.o(i.MX_TIM5_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) for HAL_TIM_PWM_ConfigChannel + main.o(i.MX_TIM5_Init) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) for HAL_TIM_MspPostInit + main.o(i.MX_TIM5_Init) refers to main.o(.bss) for htim5 + main.o(i.MX_TIM8_Init) refers to memseta.o(.text) for __aeabi_memclr4 + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) for HAL_TIM_Base_Init + main.o(i.MX_TIM8_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) for HAL_TIM_ConfigClockSource + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) for HAL_TIM_PWM_Init + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) for HAL_TIMEx_MasterConfigSynchronization + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) for HAL_TIM_PWM_ConfigChannel + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigBreakDeadTime) for HAL_TIMEx_ConfigBreakDeadTime + main.o(i.MX_TIM8_Init) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) for HAL_TIM_MspPostInit + main.o(i.MX_TIM8_Init) refers to main.o(.bss) for htim8 + main.o(i.MX_USART1_UART_Init) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Init) for HAL_UART_Init + main.o(i.MX_USART1_UART_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_USART1_UART_Init) refers to main.o(.bss) for huart1 + main.o(i.MX_USART3_UART_Init) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Init) for HAL_UART_Init + main.o(i.MX_USART3_UART_Init) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.MX_USART3_UART_Init) refers to main.o(.bss) for huart3 + main.o(i.StartDefaultTask) refers to stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) for HAL_ADCEx_Calibration_Start + main.o(i.StartDefaultTask) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) for HAL_ADC_Start_DMA + main.o(i.StartDefaultTask) refers to yousuan.o(i.YouSuanRun) for YouSuanRun + main.o(i.StartDefaultTask) refers to main.o(.bss) for hadc1 + main.o(i.StartDefaultTask) refers to yousuan.o(.bss) for ADCDataBuf + main.o(i.StirrerCtrl) refers to main.o(.bss) for htim8 + main.o(i.SystemClock_Config) refers to memseta.o(.text) for __aeabi_memclr4 + main.o(i.SystemClock_Config) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) for HAL_RCC_OscConfig + main.o(i.SystemClock_Config) refers to main.o(i.Error_Handler) for Error_Handler + main.o(i.SystemClock_Config) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) for HAL_RCC_ClockConfig + main.o(i.SystemClock_Config) refers to stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig) for HAL_RCCEx_PeriphCLKConfig + main.o(i.fputc) refers to stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) for HAL_UART_Transmit + main.o(i.fputc) refers to main.o(.bss) for huart3 + main.o(i.main) refers to stm32f1xx_hal.o(i.HAL_Init) for HAL_Init + main.o(i.main) refers to main.o(i.SystemClock_Config) for SystemClock_Config + main.o(i.main) refers to main.o(i.MX_GPIO_Init) for MX_GPIO_Init + main.o(i.main) refers to main.o(i.MX_DMA_Init) for MX_DMA_Init + main.o(i.main) refers to main.o(i.MX_ADC1_Init) for MX_ADC1_Init + main.o(i.main) refers to main.o(i.MX_TIM3_Init) for MX_TIM3_Init + main.o(i.main) refers to main.o(i.MX_TIM2_Init) for MX_TIM2_Init + main.o(i.main) refers to main.o(i.MX_TIM5_Init) for MX_TIM5_Init + main.o(i.main) refers to main.o(i.MX_TIM8_Init) for MX_TIM8_Init + main.o(i.main) refers to main.o(i.MX_USART1_UART_Init) for MX_USART1_UART_Init + main.o(i.main) refers to main.o(i.MX_USART3_UART_Init) for MX_USART3_UART_Init + main.o(i.main) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start) for HAL_TIM_PWM_Start + main.o(i.main) refers to cmsis_os2.o(i.osKernelInitialize) for osKernelInitialize + main.o(i.main) refers to cmsis_os2.o(i.osThreadNew) for osThreadNew + main.o(i.main) refers to cmsis_os2.o(i.osKernelStart) for osKernelStart + main.o(i.main) refers to main.o(.bss) for htim8 + main.o(i.main) refers to main.o(.constdata) for defaultTask_attributes + main.o(i.main) refers to main.o(i.StartDefaultTask) for StartDefaultTask + main.o(i.main) refers to main.o(.data) for defaultTaskHandle + main.o(.constdata) refers to main.o(.conststring) for .conststring + yousuan.o(i.AverageData) refers to ffltui.o(.text) for __aeabi_ui2f + yousuan.o(i.AverageData) refers to fdiv.o(.text) for __aeabi_fdiv + yousuan.o(i.AverageData) refers to yousuan.o(.bss) for ADCDataBuf + yousuan.o(i.HasSampleCheck) refers to cmsis_os2.o(i.osDelay) for osDelay + yousuan.o(i.HasSampleCheck) refers to yousuan.o(i.AverageData) for AverageData + yousuan.o(i.HasSampleCheck) refers to fadd.o(.text) for __aeabi_fsub + yousuan.o(i.HasSampleCheck) refers to cfrcmple.o(.text) for __aeabi_cfrcmple + yousuan.o(i.HasSampleCheck) refers to f2d.o(.text) for __aeabi_f2d + yousuan.o(i.HasSampleCheck) refers to fflti.o(.text) for __aeabi_i2f + yousuan.o(i.HasSampleCheck) refers to fdiv.o(.text) for __aeabi_fdiv + yousuan.o(i.HasSampleCheck) refers to printfa.o(i.__0printf) for __2printf + yousuan.o(i.HasSampleCheck) refers to stepmotor.o(.data) for SpeedSet + yousuan.o(i.HasSampleCheck) refers to stepmotor.o(.bss) for CoordinateSet + yousuan.o(i.HasSampleCheck) refers to yousuan.o(.data) for ADCData + yousuan.o(i.SampleRunTask) refers to tasks.o(i.vTaskDelete) for vTaskDelete + yousuan.o(i.SampleRunTask) refers to cmsis_os2.o(i.osDelay) for osDelay + yousuan.o(i.SampleRunTask) refers to printfa.o(i.__0sprintf) for __2sprintf + yousuan.o(i.SampleRunTask) refers to fmul.o(.text) for __aeabi_fmul + yousuan.o(i.SampleRunTask) refers to ffixi.o(.text) for __aeabi_f2iz + yousuan.o(i.SampleRunTask) refers to main.o(i.StirrerCtrl) for StirrerCtrl + yousuan.o(i.SampleRunTask) refers to fdiv.o(.text) for __aeabi_fdiv + yousuan.o(i.SampleRunTask) refers to yousuan.o(i.AverageData) for AverageData + yousuan.o(i.SampleRunTask) refers to f2d.o(.text) for __aeabi_f2d + yousuan.o(i.SampleRunTask) refers to log10.o(i.log10) for log10 + yousuan.o(i.SampleRunTask) refers to dmul.o(.text) for __aeabi_dmul + yousuan.o(i.SampleRunTask) refers to dfixui.o(.text) for __aeabi_d2uiz + yousuan.o(i.SampleRunTask) refers to ffltui.o(.text) for __aeabi_ui2f + yousuan.o(i.SampleRunTask) refers to ffixui.o(.text) for __aeabi_f2uiz + yousuan.o(i.SampleRunTask) refers to printfa.o(i.__0printf) for __2printf + yousuan.o(i.SampleRunTask) refers to cfrcmple.o(.text) for __aeabi_cfrcmple + yousuan.o(i.SampleRunTask) refers to fadd.o(.text) for __aeabi_fsub + yousuan.o(i.SampleRunTask) refers to cdcmple.o(.text) for __aeabi_cdcmple + yousuan.o(i.SampleRunTask) refers to d2f.o(.text) for __aeabi_d2f + yousuan.o(i.SampleRunTask) refers to cfcmple.o(.text) for __aeabi_cfcmple + yousuan.o(i.SampleRunTask) refers to yousuan.o(.data) for HasSample + yousuan.o(i.SampleRunTask) refers to stepmotor.o(.bss) for CoordinateSet + yousuan.o(i.SampleRunTask) refers to main.o(.bss) for StateString + yousuan.o(i.SampleRunTask) refers to stepmotor.o(.data) for SpeedSet + yousuan.o(i.SampleRunTask) refers to yousuan.o(.bss) for ABSBuf + yousuan.o(i.SampleRunTask) refers to ddiv.o(.text) for __aeabi_ddiv + yousuan.o(i.SampleRunTask) refers to dfixi.o(.text) for __aeabi_d2iz + yousuan.o(i.SampleRunTask) refers to fflti.o(.text) for __aeabi_i2f + yousuan.o(i.YouSuanRun) refers to printfa.o(i.__0sprintf) for __2sprintf + yousuan.o(i.YouSuanRun) refers to modbus-port-stm32.o(i.MODBUS_Init) for MODBUS_Init + yousuan.o(i.YouSuanRun) refers to stepmotor.o(i.MotorCTRLInitiate) for MotorCTRLInitiate + yousuan.o(i.YouSuanRun) refers to stepmotor.o(i.MotorZero_Init) for MotorZero_Init + yousuan.o(i.YouSuanRun) refers to yousuan.o(i.HasSampleCheck) for HasSampleCheck + yousuan.o(i.YouSuanRun) refers to yousuan.o(i.AverageData) for AverageData + yousuan.o(i.YouSuanRun) refers to cmsis_os2.o(i.osDelay) for osDelay + yousuan.o(i.YouSuanRun) refers to fmul.o(.text) for __aeabi_fmul + yousuan.o(i.YouSuanRun) refers to ffixi.o(.text) for __aeabi_f2iz + yousuan.o(i.YouSuanRun) refers to fdiv.o(.text) for __aeabi_fdiv + yousuan.o(i.YouSuanRun) refers to cmsis_os2.o(i.osThreadNew) for osThreadNew + yousuan.o(i.YouSuanRun) refers to main.o(.bss) for StateString + yousuan.o(i.YouSuanRun) refers to yousuan.o(.data) for slope1 + yousuan.o(i.YouSuanRun) refers to stepmotor.o(.bss) for CoordinateSet + yousuan.o(i.YouSuanRun) refers to stepmotor.o(.data) for SpeedSet + yousuan.o(i.YouSuanRun) refers to yousuan.o(.constdata) for SampleRunTask_attributes + yousuan.o(i.YouSuanRun) refers to yousuan.o(i.SampleRunTask) for SampleRunTask + yousuan.o(.constdata) refers to yousuan.o(.conststring) for .conststring + stm32f1xx_it.o(i.DMA1_Channel1_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_IRQHandler) for HAL_DMA_IRQHandler + stm32f1xx_it.o(i.DMA1_Channel1_IRQHandler) refers to main.o(.bss) for hdma_adc1 + stm32f1xx_it.o(i.EXTI0_IRQHandler) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_EXTI_IRQHandler) for HAL_GPIO_EXTI_IRQHandler + stm32f1xx_it.o(i.TIM1_UP_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) for HAL_TIM_IRQHandler + stm32f1xx_it.o(i.TIM1_UP_IRQHandler) refers to stm32f1xx_hal_timebase_tim.o(.bss) for htim1 + stm32f1xx_it.o(i.TIM2_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) for HAL_TIM_IRQHandler + stm32f1xx_it.o(i.TIM2_IRQHandler) refers to tim.o(i.TIM2_CH2_CMD) for TIM2_CH2_CMD + stm32f1xx_it.o(i.TIM2_IRQHandler) refers to main.o(.bss) for htim2 + stm32f1xx_it.o(i.TIM2_IRQHandler) refers to stepmotor.o(.bss) for PluseCount + stm32f1xx_it.o(i.TIM2_IRQHandler) refers to stepmotor.o(.data) for CountOver + stm32f1xx_it.o(i.TIM3_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) for HAL_TIM_IRQHandler + stm32f1xx_it.o(i.TIM3_IRQHandler) refers to tim.o(i.TIM3_CH1_CMD) for TIM3_CH1_CMD + stm32f1xx_it.o(i.TIM3_IRQHandler) refers to main.o(.bss) for htim3 + stm32f1xx_it.o(i.TIM3_IRQHandler) refers to stepmotor.o(.bss) for PluseCount + stm32f1xx_it.o(i.TIM3_IRQHandler) refers to stepmotor.o(.data) for CountOver + stm32f1xx_it.o(i.TIM5_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) for HAL_TIM_IRQHandler + stm32f1xx_it.o(i.TIM5_IRQHandler) refers to tim.o(i.TIM5_CH3_CMD) for TIM5_CH3_CMD + stm32f1xx_it.o(i.TIM5_IRQHandler) refers to main.o(.bss) for htim5 + stm32f1xx_it.o(i.TIM5_IRQHandler) refers to stepmotor.o(.bss) for PluseCount + stm32f1xx_it.o(i.TIM5_IRQHandler) refers to stepmotor.o(.data) for CountOver + stm32f1xx_hal_msp.o(i.HAL_ADC_MspDeInit) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_DeInit) for HAL_GPIO_DeInit + stm32f1xx_hal_msp.o(i.HAL_ADC_MspDeInit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_DeInit) for HAL_DMA_DeInit + stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) for HAL_GPIO_Init + stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Init) for HAL_DMA_Init + stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) refers to main.o(i.Error_Handler) for Error_Handler + stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) refers to main.o(.bss) for hdma_adc1 + stm32f1xx_hal_msp.o(i.HAL_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspDeInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_DisableIRQ) for HAL_NVIC_DisableIRQ + stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ + stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) for HAL_GPIO_Init + stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspDeInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_DisableIRQ) for HAL_NVIC_DisableIRQ + stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspInit) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ + stm32f1xx_hal_msp.o(i.HAL_UART_MspDeInit) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_DeInit) for HAL_GPIO_DeInit + stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) for HAL_GPIO_Init + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetClockConfig) for HAL_RCC_GetClockConfig + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) for HAL_TIM_Base_Init + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) for HAL_TIM_Base_Start_IT + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) for HAL_NVIC_EnableIRQ + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal_timebase_tim.o(.bss) for htim1 + stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) refers to stm32f1xx_hal.o(.data) for uwTickPrio + stm32f1xx_hal_timebase_tim.o(i.HAL_ResumeTick) refers to stm32f1xx_hal_timebase_tim.o(.bss) for htim1 + stm32f1xx_hal_timebase_tim.o(i.HAL_SuspendTick) refers to stm32f1xx_hal_timebase_tim.o(.bss) for htim1 + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_DeInit) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspDeInit) for HAL_TIM_Base_MspDeInit + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspInit) for HAL_TIM_Base_MspInit + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) for TIM_DMAPeriodElapsedCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) for TIM_DMAPeriodElapsedHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) for TIM_ETR_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) for TIM_TI1_ConfigInputStage + stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) for TIM_ITRx_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) for TIM_TI2_ConfigInputStage + stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigOCrefClear) refers to stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) for TIM_ETR_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) for TIM_DMAPeriodElapsedCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) for TIM_DMAPeriodElapsedHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) for TIMEx_DMACommutationCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) for TIMEx_DMACommutationHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt) for TIM_DMATriggerCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt) for TIM_DMATriggerHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) for TIM_DMAPeriodElapsedCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) for TIM_DMAPeriodElapsedHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) for TIM_DMADelayPulseCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) for TIMEx_DMACommutationCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) for TIMEx_DMACommutationHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt) for TIM_DMATriggerCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) refers to stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt) for TIM_DMATriggerHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStart) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart) for HAL_TIM_DMABurst_MultiReadStart + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStart) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart) for HAL_TIM_DMABurst_MultiWriteStart + stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspDeInit) for HAL_TIM_Encoder_MspDeInit + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspInit) for HAL_TIM_Encoder_MspInit + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig) for TIM_TI1_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_SetConfig) for TIM_TI2_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI3_SetConfig) for TIM_TI3_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI4_SetConfig) for TIM_TI4_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspDeInit) for HAL_TIM_IC_MspDeInit + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspInit) for HAL_TIM_IC_MspInit + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) for HAL_TIM_IC_CaptureCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback) for HAL_TIM_OC_DelayElapsedCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) for HAL_TIM_PWM_PulseFinishedCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to main.o(i.HAL_TIM_PeriodElapsedCallback) for HAL_TIM_PeriodElapsedCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback) for HAL_TIMEx_BreakCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) for HAL_TIM_TriggerCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) for HAL_TIMEx_CommutCallback + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) for TIM_OC1_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig) for TIM_OC3_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig) for TIM_OC4_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspDeInit) for HAL_TIM_OC_MspDeInit + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspInit) for HAL_TIM_OC_MspInit + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) for TIM_DMADelayPulseCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) for TIM_OC1_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig) for TIM_TI1_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_SetConfig) for TIM_TI2_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_DeInit) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspDeInit) for HAL_TIM_OnePulse_MspDeInit + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Init) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspInit) for HAL_TIM_OnePulse_MspInit + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) for TIM_OC1_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig) for TIM_OC3_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) refers to stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig) for TIM_OC4_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_DeInit) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspDeInit) for HAL_TIM_PWM_MspDeInit + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) refers to stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspInit) for HAL_TIM_PWM_MspInit + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) for TIM_DMADelayPulseCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro) refers to stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) for TIM_SlaveTimer_SetConfig + stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro_IT) refers to stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) for TIM_SlaveTimer_SetConfig + stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) for HAL_TIM_IC_CaptureCallback + stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureHalfCpltCallback) for HAL_TIM_IC_CaptureHalfCpltCallback + stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) for HAL_TIM_PWM_PulseFinishedCallback + stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedHalfCpltCallback) for HAL_TIM_PWM_PulseFinishedHalfCpltCallback + stm32f1xx_hal_tim.o(i.TIM_DMAError) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ErrorCallback) for HAL_TIM_ErrorCallback + stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt) refers to main.o(i.HAL_TIM_PeriodElapsedCallback) for HAL_TIM_PeriodElapsedCallback + stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PeriodElapsedHalfCpltCallback) for HAL_TIM_PeriodElapsedHalfCpltCallback + stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) for HAL_TIM_TriggerCallback + stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerHalfCpltCallback) for HAL_TIM_TriggerHalfCpltCallback + stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) refers to stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) for TIM_ETR_SetConfig + stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) for TIM_TI1_ConfigInputStage + stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig) refers to stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) for TIM_TI2_ConfigInputStage + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) for TIMEx_DMACommutationCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) for TIMEx_DMACommutationHalfCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_DeInit) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspDeInit) for HAL_TIMEx_HallSensor_MspDeInit + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspInit) for HAL_TIMEx_HallSensor_MspInit + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) for TIM_Base_SetConfig + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig) for TIM_TI1_SetConfig + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init) refers to stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) for TIM_OC2_SetConfig + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt) for TIM_DMACaptureCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt) for TIM_DMACaptureHalfCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMAError) for TIM_DMAError + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt) for TIM_DMADelayPulseNCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN) for TIM_DMAErrorCCxN + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop_IT) refers to stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) for TIM_CCxChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt) for TIM_DMADelayPulseNCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt) for TIM_DMADelayPulseHalfCplt + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN) for TIM_DMAErrorCCxN + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_DMA) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_IT) refers to stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd) for TIM_CCxNChannelCmd + stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) for HAL_TIMEx_CommutCallback + stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt) refers to stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutHalfCpltCallback) for HAL_TIMEx_CommutHalfCpltCallback + stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) for HAL_TIM_PWM_PulseFinishedCallback + stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN) refers to stm32f1xx_hal_tim.o(i.HAL_TIM_ErrorCallback) for HAL_TIM_ErrorCallback + stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_adc.o(i.ADC_DMAConvCplt) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_ConvCpltCallback) for HAL_ADC_ConvCpltCallback + stm32f1xx_hal_adc.o(i.ADC_DMAError) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_ErrorCallback) for HAL_ADC_ErrorCallback + stm32f1xx_hal_adc.o(i.ADC_DMAHalfConvCplt) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_ConvHalfCpltCallback) for HAL_ADC_ConvHalfCpltCallback + stm32f1xx_hal_adc.o(i.ADC_Enable) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_adc.o(i.ADC_Enable) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_adc.o(i.HAL_ADC_ConfigChannel) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_adc.o(i.HAL_ADC_DeInit) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc.o(i.HAL_ADC_DeInit) refers to stm32f1xx_hal_msp.o(i.HAL_ADC_MspDeInit) for HAL_ADC_MspDeInit + stm32f1xx_hal_adc.o(i.HAL_ADC_IRQHandler) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_ConvCpltCallback) for HAL_ADC_ConvCpltCallback + stm32f1xx_hal_adc.o(i.HAL_ADC_IRQHandler) refers to stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedConvCpltCallback) for HAL_ADCEx_InjectedConvCpltCallback + stm32f1xx_hal_adc.o(i.HAL_ADC_IRQHandler) refers to stm32f1xx_hal_adc.o(i.HAL_ADC_LevelOutOfWindowCallback) for HAL_ADC_LevelOutOfWindowCallback + stm32f1xx_hal_adc.o(i.HAL_ADC_Init) refers to stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) for HAL_ADC_MspInit + stm32f1xx_hal_adc.o(i.HAL_ADC_Init) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc.o(i.HAL_ADC_PollForConversion) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_adc.o(i.HAL_ADC_PollForConversion) refers to stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) for HAL_RCCEx_GetPeriphCLKFreq + stm32f1xx_hal_adc.o(i.HAL_ADC_PollForConversion) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_adc.o(i.HAL_ADC_PollForEvent) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_adc.o(i.HAL_ADC_Start) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_DMAConvCplt) for ADC_DMAConvCplt + stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_DMAHalfConvCplt) for ADC_DMAHalfConvCplt + stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_DMAError) for ADC_DMAError + stm32f1xx_hal_adc.o(i.HAL_ADC_Start_IT) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc.o(i.HAL_ADC_Stop) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc.o(i.HAL_ADC_Stop_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc.o(i.HAL_ADC_Stop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_adc.o(i.HAL_ADC_Stop_IT) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) refers to stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) for HAL_RCCEx_GetPeriphCLKFreq + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedConfigChannel) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedPollForConversion) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedPollForConversion) refers to stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) for HAL_RCCEx_GetPeriphCLKFreq + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedPollForConversion) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStart) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStart_IT) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStop) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStop_IT) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeConfigChannel) refers to memseta.o(.text) for __aeabi_memclr4 + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA) refers to memseta.o(.text) for __aeabi_memclr4 + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_Enable) for ADC_Enable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_DMAConvCplt) for ADC_DMAConvCplt + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_DMAHalfConvCplt) for ADC_DMAHalfConvCplt + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_DMAError) for ADC_DMAError + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStop_DMA) refers to memseta.o(.text) for __aeabi_memclr4 + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStop_DMA) refers to stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) for ADC_ConversionStop_Disable + stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStop_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal.o(i.HAL_DeInit) refers to stm32f1xx_hal.o(i.HAL_MspDeInit) for HAL_MspDeInit + stm32f1xx_hal.o(i.HAL_Delay) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal.o(i.HAL_Delay) refers to stm32f1xx_hal.o(.data) for uwTickFreq + stm32f1xx_hal.o(i.HAL_GetTick) refers to stm32f1xx_hal.o(.data) for uwTick + stm32f1xx_hal.o(i.HAL_GetTickFreq) refers to stm32f1xx_hal.o(.data) for uwTickFreq + stm32f1xx_hal.o(i.HAL_GetTickPrio) refers to stm32f1xx_hal.o(.data) for uwTickPrio + stm32f1xx_hal.o(i.HAL_IncTick) refers to stm32f1xx_hal.o(.data) for uwTick + stm32f1xx_hal.o(i.HAL_Init) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) for HAL_NVIC_SetPriorityGrouping + stm32f1xx_hal.o(i.HAL_Init) refers to stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) for HAL_InitTick + stm32f1xx_hal.o(i.HAL_Init) refers to stm32f1xx_hal_msp.o(i.HAL_MspInit) for HAL_MspInit + stm32f1xx_hal.o(i.HAL_InitTick) refers to stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) for HAL_SYSTICK_Config + stm32f1xx_hal.o(i.HAL_InitTick) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) for HAL_NVIC_SetPriority + stm32f1xx_hal.o(i.HAL_InitTick) refers to stm32f1xx_hal.o(.data) for uwTickFreq + stm32f1xx_hal.o(i.HAL_InitTick) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal.o(i.HAL_SetTickFreq) refers to stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) for HAL_InitTick + stm32f1xx_hal.o(i.HAL_SetTickFreq) refers to stm32f1xx_hal.o(.data) for uwTickFreq + stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) for HAL_RCC_GetSysClockFreq + stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) refers to stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) for HAL_InitTick + stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) refers to system_stm32f1xx.o(.constdata) for AHBPrescTable + stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) refers to stm32f1xx_hal.o(.data) for uwTickPrio + stm32f1xx_hal_rcc.o(i.HAL_RCC_DeInit) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_rcc.o(i.HAL_RCC_DeInit) refers to stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) for HAL_InitTick + stm32f1xx_hal_rcc.o(i.HAL_RCC_DeInit) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_rcc.o(i.HAL_RCC_DeInit) refers to stm32f1xx_hal.o(.data) for uwTickPrio + stm32f1xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq) for HAL_RCC_GetHCLKFreq + stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) refers to system_stm32f1xx.o(.constdata) for APBPrescTable + stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq) for HAL_RCC_GetHCLKFreq + stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) refers to system_stm32f1xx.o(.constdata) for APBPrescTable + stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) refers to stm32f1xx_hal_rcc.o(.constdata) for aPLLMULFactorTable + stm32f1xx_hal_rcc.o(i.HAL_RCC_MCOConfig) refers to stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) for HAL_GPIO_Init + stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback) for HAL_RCC_CSSCallback + stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) refers to stm32f1xx_hal_rcc.o(i.RCC_Delay) for RCC_Delay + stm32f1xx_hal_rcc.o(i.RCC_Delay) refers to system_stm32f1xx.o(.data) for SystemCoreClock + stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) for HAL_RCC_GetSysClockFreq + stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq + stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) refers to stm32f1xx_hal_rcc_ex.o(.constdata) for aPLLMULFactorTable + stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_gpio.o(i.HAL_GPIO_EXTI_IRQHandler) refers to stepmotor.o(i.HAL_GPIO_EXTI_Callback) for HAL_GPIO_EXTI_Callback + stm32f1xx_hal_dma.o(i.HAL_DMA_PollForTransfer) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_dma.o(i.HAL_DMA_Start) refers to stm32f1xx_hal_dma.o(i.DMA_SetConfig) for DMA_SetConfig + stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) refers to stm32f1xx_hal_dma.o(i.DMA_SetConfig) for DMA_SetConfig + stm32f1xx_hal_cortex.o(i.HAL_NVIC_GetPriorityGrouping) refers to stm32f1xx_hal_cortex.o(i.__NVIC_GetPriorityGrouping) for __NVIC_GetPriorityGrouping + stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) refers to stm32f1xx_hal_cortex.o(i.__NVIC_GetPriorityGrouping) for __NVIC_GetPriorityGrouping + stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) refers to stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) for __NVIC_SetPriority + stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config) refers to stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) for __NVIC_SetPriority + stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_IRQHandler) refers to stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Callback) for HAL_SYSTICK_Callback + stm32f1xx_hal_pwr.o(i.HAL_PWR_EnterSTOPMode) refers to stm32f1xx_hal_pwr.o(i.PWR_OverloadWfe) for PWR_OverloadWfe + stm32f1xx_hal_pwr.o(i.HAL_PWR_PVD_IRQHandler) refers to stm32f1xx_hal_pwr.o(i.HAL_PWR_PVDCallback) for HAL_PWR_PVDCallback + stm32f1xx_hal_flash.o(i.FLASH_Program_HalfWord) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash.o(i.FLASH_SetErrorCode) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) refers to stm32f1xx_hal_flash.o(i.FLASH_SetErrorCode) for FLASH_SetErrorCode + stm32f1xx_hal_flash.o(i.HAL_FLASH_GetError) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler) refers to stm32f1xx_hal_flash.o(i.FLASH_SetErrorCode) for FLASH_SetErrorCode + stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler) refers to stm32f1xx_hal_flash.o(i.HAL_FLASH_OperationErrorCallback) for HAL_FLASH_OperationErrorCallback + stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler) refers to stm32f1xx_hal_flash.o(i.HAL_FLASH_EndOfOperationCallback) for HAL_FLASH_EndOfOperationCallback + stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_PageErase) for FLASH_PageErase + stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler) refers to stm32f1xx_hal_flash.o(i.FLASH_Program_HalfWord) for FLASH_Program_HalfWord + stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash.o(i.HAL_FLASH_OB_Launch) refers to stm32f1xx_hal_cortex.o(i.HAL_NVIC_SystemReset) for HAL_NVIC_SystemReset + stm32f1xx_hal_flash.o(i.HAL_FLASH_Program) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash.o(i.HAL_FLASH_Program) refers to llushr.o(.text) for __aeabi_llsr + stm32f1xx_hal_flash.o(i.HAL_FLASH_Program) refers to stm32f1xx_hal_flash.o(i.FLASH_Program_HalfWord) for FLASH_Program_HalfWord + stm32f1xx_hal_flash.o(i.HAL_FLASH_Program) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash.o(i.HAL_FLASH_Program_IT) refers to stm32f1xx_hal_flash.o(i.FLASH_Program_HalfWord) for FLASH_Program_HalfWord + stm32f1xx_hal_flash.o(i.HAL_FLASH_Program_IT) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_MassErase) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_DisableWRP) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetWRP) for FLASH_OB_GetWRP + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_DisableWRP) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_DisableWRP) refers to stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase) for HAL_FLASHEx_OBErase + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_DisableWRP) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_EnableWRP) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetWRP) for FLASH_OB_GetWRP + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_EnableWRP) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_EnableWRP) refers to stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase) for HAL_FLASHEx_OBErase + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_EnableWRP) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_ProgramData) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_ProgramData) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_RDP_LevelConfig) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_RDP_LevelConfig) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_UserConfig) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.FLASH_OB_UserConfig) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.FLASH_PageErase) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_MassErase) for FLASH_MassErase + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_PageErase) for FLASH_PageErase + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase_IT) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_MassErase) for FLASH_MassErase + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase_IT) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_PageErase) for FLASH_PageErase + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase_IT) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetRDP) for FLASH_OB_GetRDP + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase) refers to stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation) for FLASH_WaitForLastOperation + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_RDP_LevelConfig) for FLASH_OB_RDP_LevelConfig + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBGetConfig) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetWRP) for FLASH_OB_GetWRP + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBGetConfig) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetRDP) for FLASH_OB_GetRDP + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBGetConfig) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetUser) for FLASH_OB_GetUser + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_EnableWRP) for FLASH_OB_EnableWRP + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_DisableWRP) for FLASH_OB_DisableWRP + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_RDP_LevelConfig) for FLASH_OB_RDP_LevelConfig + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_UserConfig) for FLASH_OB_UserConfig + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash_ex.o(i.FLASH_OB_ProgramData) for FLASH_OB_ProgramData + stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram) refers to stm32f1xx_hal_flash.o(.bss) for pFlash + stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_LIN_Init) refers to stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_LIN_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_DMA) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) for UART_Start_Receive_DMA + stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_IT) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT) for UART_Start_Receive_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_Abort) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback) for UART_DMARxOnlyAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_GetError) for HAL_DMA_GetError + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback) for UART_DMATxOnlyAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback) for UART_DMATxAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT) refers to stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback) for UART_DMARxAbortCallback + stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) for UART_EndTxTransfer + stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(i.HAL_UART_DeInit) refers to stm32f1xx_hal_msp.o(i.HAL_UART_MspDeInit) for HAL_UART_MspDeInit + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_Receive_IT) for UART_Receive_IT + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT) for HAL_DMA_Abort_IT + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Abort) for HAL_DMA_Abort + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_Transmit_IT) for UART_Transmit_IT + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_EndTransmit_IT) for UART_EndTransmit_IT + stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler) refers to stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) for UART_DMAAbortOnError + stm32f1xx_hal_uart.o(i.HAL_UART_Init) refers to stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) for HAL_UART_MspInit + stm32f1xx_hal_uart.o(i.HAL_UART_Init) refers to stm32f1xx_hal_uart.o(i.UART_SetConfig) for UART_SetConfig + stm32f1xx_hal_uart.o(i.HAL_UART_Receive) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.HAL_UART_Receive) refers to stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout + stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) for UART_Start_Receive_DMA + stm32f1xx_hal_uart.o(i.HAL_UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT) for UART_Start_Receive_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) refers to stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) for UART_WaitOnFlagUntilTimeout + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt) for UART_DMATransmitCplt + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt) for UART_DMATxHalfCplt + stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAError) for UART_DMAError + stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.UART_EndTxTransfer) for UART_EndTxTransfer + stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + stm32f1xx_hal_uart.o(i.UART_DMAError) refers to stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback) for HAL_UART_ErrorCallback + stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback) for HAL_UART_RxHalfCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback) for HAL_UART_AbortReceiveCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback) for HAL_UART_AbortCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback) for HAL_UART_TxHalfCpltCallback + stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback) refers to stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback) for HAL_UART_AbortTransmitCpltCallback + stm32f1xx_hal_uart.o(i.UART_EndTransmit_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback) for HAL_UART_TxCpltCallback + stm32f1xx_hal_uart.o(i.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback) for HAL_UARTEx_RxEventCallback + stm32f1xx_hal_uart.o(i.UART_Receive_IT) refers to stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback) for HAL_UART_RxCpltCallback + stm32f1xx_hal_uart.o(i.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) for HAL_RCC_GetPCLK2Freq + stm32f1xx_hal_uart.o(i.UART_SetConfig) refers to stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) for HAL_RCC_GetPCLK1Freq + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) for HAL_DMA_Start_IT + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt) for UART_DMAReceiveCplt + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt) for UART_DMARxHalfCplt + stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA) refers to stm32f1xx_hal_uart.o(i.UART_DMAError) for UART_DMAError + stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal.o(i.HAL_GetTick) for HAL_GetTick + stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) refers to stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) for UART_EndRxTransfer + system_stm32f1xx.o(i.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.data) for SystemCoreClock + system_stm32f1xx.o(i.SystemCoreClockUpdate) refers to system_stm32f1xx.o(.constdata) for AHBPrescTable + event_groups.o(i.vEventGroupClearBitsCallback) refers to event_groups.o(i.xEventGroupClearBits) for xEventGroupClearBits + event_groups.o(i.vEventGroupDelete) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + event_groups.o(i.vEventGroupDelete) refers to tasks.o(i.vTaskRemoveFromUnorderedEventList) for vTaskRemoveFromUnorderedEventList + event_groups.o(i.vEventGroupDelete) refers to heap_4.o(i.vPortFree) for vPortFree + event_groups.o(i.vEventGroupDelete) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + event_groups.o(i.vEventGroupSetBitsCallback) refers to event_groups.o(i.xEventGroupSetBits) for xEventGroupSetBits + event_groups.o(i.xEventGroupClearBits) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + event_groups.o(i.xEventGroupClearBits) refers to port.o(i.vPortExitCritical) for vPortExitCritical + event_groups.o(i.xEventGroupClearBitsFromISR) refers to timers.o(i.xTimerPendFunctionCallFromISR) for xTimerPendFunctionCallFromISR + event_groups.o(i.xEventGroupClearBitsFromISR) refers to event_groups.o(i.vEventGroupClearBitsCallback) for vEventGroupClearBitsCallback + event_groups.o(i.xEventGroupCreate) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + event_groups.o(i.xEventGroupCreate) refers to list.o(i.vListInitialise) for vListInitialise + event_groups.o(i.xEventGroupCreateStatic) refers to list.o(i.vListInitialise) for vListInitialise + event_groups.o(i.xEventGroupSetBits) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + event_groups.o(i.xEventGroupSetBits) refers to tasks.o(i.vTaskRemoveFromUnorderedEventList) for vTaskRemoveFromUnorderedEventList + event_groups.o(i.xEventGroupSetBits) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + event_groups.o(i.xEventGroupSetBitsFromISR) refers to timers.o(i.xTimerPendFunctionCallFromISR) for xTimerPendFunctionCallFromISR + event_groups.o(i.xEventGroupSetBitsFromISR) refers to event_groups.o(i.vEventGroupSetBitsCallback) for vEventGroupSetBitsCallback + event_groups.o(i.xEventGroupSync) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + event_groups.o(i.xEventGroupSync) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + event_groups.o(i.xEventGroupSync) refers to event_groups.o(i.xEventGroupSetBits) for xEventGroupSetBits + event_groups.o(i.xEventGroupSync) refers to tasks.o(i.vTaskPlaceOnUnorderedEventList) for vTaskPlaceOnUnorderedEventList + event_groups.o(i.xEventGroupSync) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + event_groups.o(i.xEventGroupSync) refers to tasks.o(i.uxTaskResetEventItemValue) for uxTaskResetEventItemValue + event_groups.o(i.xEventGroupSync) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + event_groups.o(i.xEventGroupSync) refers to port.o(i.vPortExitCritical) for vPortExitCritical + event_groups.o(i.xEventGroupWaitBits) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + event_groups.o(i.xEventGroupWaitBits) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + event_groups.o(i.xEventGroupWaitBits) refers to event_groups.o(i.prvTestWaitCondition) for prvTestWaitCondition + event_groups.o(i.xEventGroupWaitBits) refers to tasks.o(i.vTaskPlaceOnUnorderedEventList) for vTaskPlaceOnUnorderedEventList + event_groups.o(i.xEventGroupWaitBits) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + event_groups.o(i.xEventGroupWaitBits) refers to tasks.o(i.uxTaskResetEventItemValue) for uxTaskResetEventItemValue + event_groups.o(i.xEventGroupWaitBits) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + event_groups.o(i.xEventGroupWaitBits) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.pcQueueGetName) refers to queue.o(.bss) for xQueueRegistry + queue.o(i.prvCopyDataFromQueue) refers to memcpya.o(.text) for __aeabi_memcpy + queue.o(i.prvCopyDataToQueue) refers to tasks.o(i.xTaskPriorityDisinherit) for xTaskPriorityDisinherit + queue.o(i.prvCopyDataToQueue) refers to memcpya.o(.text) for __aeabi_memcpy + queue.o(i.prvInitialiseMutex) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + queue.o(i.prvInitialiseNewQueue) refers to queue.o(i.xQueueGenericReset) for xQueueGenericReset + queue.o(i.prvIsQueueEmpty) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.prvIsQueueEmpty) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.prvIsQueueFull) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.prvIsQueueFull) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.prvUnlockQueue) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.prvUnlockQueue) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.prvUnlockQueue) refers to tasks.o(i.vTaskMissedYield) for vTaskMissedYield + queue.o(i.prvUnlockQueue) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.uxQueueMessagesWaiting) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.uxQueueMessagesWaiting) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.uxQueueSpacesAvailable) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.uxQueueSpacesAvailable) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.vQueueAddToRegistry) refers to queue.o(.bss) for xQueueRegistry + queue.o(i.vQueueDelete) refers to queue.o(i.vQueueUnregisterQueue) for vQueueUnregisterQueue + queue.o(i.vQueueDelete) refers to heap_4.o(i.vPortFree) for vPortFree + queue.o(i.vQueueUnregisterQueue) refers to queue.o(.bss) for xQueueRegistry + queue.o(i.vQueueWaitForMessageRestricted) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.vQueueWaitForMessageRestricted) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.vQueueWaitForMessageRestricted) refers to tasks.o(i.vTaskPlaceOnEventListRestricted) for vTaskPlaceOnEventListRestricted + queue.o(i.vQueueWaitForMessageRestricted) refers to queue.o(i.prvUnlockQueue) for prvUnlockQueue + queue.o(i.xQueueCreateCountingSemaphore) refers to queue.o(i.xQueueGenericCreate) for xQueueGenericCreate + queue.o(i.xQueueCreateCountingSemaphoreStatic) refers to queue.o(i.xQueueGenericCreateStatic) for xQueueGenericCreateStatic + queue.o(i.xQueueCreateMutex) refers to queue.o(i.xQueueGenericCreate) for xQueueGenericCreate + queue.o(i.xQueueCreateMutex) refers to queue.o(i.prvInitialiseMutex) for prvInitialiseMutex + queue.o(i.xQueueCreateMutexStatic) refers to queue.o(i.xQueueGenericCreateStatic) for xQueueGenericCreateStatic + queue.o(i.xQueueCreateMutexStatic) refers to queue.o(i.prvInitialiseMutex) for prvInitialiseMutex + queue.o(i.xQueueGenericCreate) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + queue.o(i.xQueueGenericCreate) refers to queue.o(i.prvInitialiseNewQueue) for prvInitialiseNewQueue + queue.o(i.xQueueGenericCreateStatic) refers to queue.o(i.prvInitialiseNewQueue) for prvInitialiseNewQueue + queue.o(i.xQueueGenericReset) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.xQueueGenericReset) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueGenericReset) refers to list.o(i.vListInitialise) for vListInitialise + queue.o(i.xQueueGenericReset) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.xQueueGenericSend) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + queue.o(i.xQueueGenericSend) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.xQueueGenericSend) refers to queue.o(i.prvCopyDataToQueue) for prvCopyDataToQueue + queue.o(i.xQueueGenericSend) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueGenericSend) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.xQueueGenericSend) refers to tasks.o(i.vTaskInternalSetTimeOutState) for vTaskInternalSetTimeOutState + queue.o(i.xQueueGenericSend) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + queue.o(i.xQueueGenericSend) refers to tasks.o(i.xTaskCheckForTimeOut) for xTaskCheckForTimeOut + queue.o(i.xQueueGenericSend) refers to queue.o(i.prvIsQueueFull) for prvIsQueueFull + queue.o(i.xQueueGenericSend) refers to tasks.o(i.vTaskPlaceOnEventList) for vTaskPlaceOnEventList + queue.o(i.xQueueGenericSend) refers to queue.o(i.prvUnlockQueue) for prvUnlockQueue + queue.o(i.xQueueGenericSend) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + queue.o(i.xQueueGenericSendFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + queue.o(i.xQueueGenericSendFromISR) refers to queue.o(i.prvCopyDataToQueue) for prvCopyDataToQueue + queue.o(i.xQueueGenericSendFromISR) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueGetMutexHolder) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.xQueueGetMutexHolder) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.xQueueGiveFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + queue.o(i.xQueueGiveFromISR) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueGiveMutexRecursive) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + queue.o(i.xQueueGiveMutexRecursive) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + queue.o(i.xQueuePeek) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + queue.o(i.xQueuePeek) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.xQueuePeek) refers to queue.o(i.prvCopyDataFromQueue) for prvCopyDataFromQueue + queue.o(i.xQueuePeek) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueuePeek) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.xQueuePeek) refers to tasks.o(i.vTaskInternalSetTimeOutState) for vTaskInternalSetTimeOutState + queue.o(i.xQueuePeek) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + queue.o(i.xQueuePeek) refers to tasks.o(i.xTaskCheckForTimeOut) for xTaskCheckForTimeOut + queue.o(i.xQueuePeek) refers to queue.o(i.prvIsQueueEmpty) for prvIsQueueEmpty + queue.o(i.xQueuePeek) refers to tasks.o(i.vTaskPlaceOnEventList) for vTaskPlaceOnEventList + queue.o(i.xQueuePeek) refers to queue.o(i.prvUnlockQueue) for prvUnlockQueue + queue.o(i.xQueuePeek) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + queue.o(i.xQueuePeekFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + queue.o(i.xQueuePeekFromISR) refers to queue.o(i.prvCopyDataFromQueue) for prvCopyDataFromQueue + queue.o(i.xQueueReceive) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + queue.o(i.xQueueReceive) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.xQueueReceive) refers to queue.o(i.prvCopyDataFromQueue) for prvCopyDataFromQueue + queue.o(i.xQueueReceive) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueReceive) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.xQueueReceive) refers to tasks.o(i.vTaskInternalSetTimeOutState) for vTaskInternalSetTimeOutState + queue.o(i.xQueueReceive) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + queue.o(i.xQueueReceive) refers to tasks.o(i.xTaskCheckForTimeOut) for xTaskCheckForTimeOut + queue.o(i.xQueueReceive) refers to queue.o(i.prvIsQueueEmpty) for prvIsQueueEmpty + queue.o(i.xQueueReceive) refers to tasks.o(i.vTaskPlaceOnEventList) for vTaskPlaceOnEventList + queue.o(i.xQueueReceive) refers to queue.o(i.prvUnlockQueue) for prvUnlockQueue + queue.o(i.xQueueReceive) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + queue.o(i.xQueueReceiveFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + queue.o(i.xQueueReceiveFromISR) refers to queue.o(i.prvCopyDataFromQueue) for prvCopyDataFromQueue + queue.o(i.xQueueReceiveFromISR) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + queue.o(i.xQueueSemaphoreTake) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.pvTaskIncrementMutexHeldCount) for pvTaskIncrementMutexHeldCount + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.xTaskRemoveFromEventList) for xTaskRemoveFromEventList + queue.o(i.xQueueSemaphoreTake) refers to port.o(i.vPortExitCritical) for vPortExitCritical + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.vTaskInternalSetTimeOutState) for vTaskInternalSetTimeOutState + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.xTaskCheckForTimeOut) for xTaskCheckForTimeOut + queue.o(i.xQueueSemaphoreTake) refers to queue.o(i.prvIsQueueEmpty) for prvIsQueueEmpty + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.xTaskPriorityInherit) for xTaskPriorityInherit + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.vTaskPlaceOnEventList) for vTaskPlaceOnEventList + queue.o(i.xQueueSemaphoreTake) refers to queue.o(i.prvUnlockQueue) for prvUnlockQueue + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + queue.o(i.xQueueSemaphoreTake) refers to queue.o(i.prvGetDisinheritPriorityAfterTimeout) for prvGetDisinheritPriorityAfterTimeout + queue.o(i.xQueueSemaphoreTake) refers to tasks.o(i.vTaskPriorityDisinheritAfterTimeout) for vTaskPriorityDisinheritAfterTimeout + queue.o(i.xQueueTakeMutexRecursive) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + queue.o(i.xQueueTakeMutexRecursive) refers to queue.o(i.xQueueSemaphoreTake) for xQueueSemaphoreTake + stream_buffer.o(i.prvInitialiseNewStreamBuffer) refers to memseta.o(.text) for memset + stream_buffer.o(i.prvReadBytesFromBuffer) refers to memcpya.o(.text) for __aeabi_memcpy + stream_buffer.o(i.prvReadMessageFromBuffer) refers to stream_buffer.o(i.prvReadBytesFromBuffer) for prvReadBytesFromBuffer + stream_buffer.o(i.prvWriteBytesToBuffer) refers to memcpya.o(.text) for __aeabi_memcpy + stream_buffer.o(i.prvWriteMessageToBuffer) refers to stream_buffer.o(i.prvWriteBytesToBuffer) for prvWriteBytesToBuffer + stream_buffer.o(i.vStreamBufferDelete) refers to heap_4.o(i.vPortFree) for vPortFree + stream_buffer.o(i.vStreamBufferDelete) refers to memseta.o(.text) for __aeabi_memclr4 + stream_buffer.o(i.xStreamBufferBytesAvailable) refers to stream_buffer.o(i.prvBytesInBuffer) for prvBytesInBuffer + stream_buffer.o(i.xStreamBufferGenericCreate) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + stream_buffer.o(i.xStreamBufferGenericCreate) refers to stream_buffer.o(i.prvInitialiseNewStreamBuffer) for prvInitialiseNewStreamBuffer + stream_buffer.o(i.xStreamBufferGenericCreateStatic) refers to stream_buffer.o(i.prvInitialiseNewStreamBuffer) for prvInitialiseNewStreamBuffer + stream_buffer.o(i.xStreamBufferIsFull) refers to stream_buffer.o(i.xStreamBufferSpacesAvailable) for xStreamBufferSpacesAvailable + stream_buffer.o(i.xStreamBufferNextMessageLengthBytes) refers to stream_buffer.o(i.prvBytesInBuffer) for prvBytesInBuffer + stream_buffer.o(i.xStreamBufferNextMessageLengthBytes) refers to stream_buffer.o(i.prvReadBytesFromBuffer) for prvReadBytesFromBuffer + stream_buffer.o(i.xStreamBufferReceive) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + stream_buffer.o(i.xStreamBufferReceive) refers to stream_buffer.o(i.prvBytesInBuffer) for prvBytesInBuffer + stream_buffer.o(i.xStreamBufferReceive) refers to tasks.o(i.xTaskNotifyStateClear) for xTaskNotifyStateClear + stream_buffer.o(i.xStreamBufferReceive) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + stream_buffer.o(i.xStreamBufferReceive) refers to port.o(i.vPortExitCritical) for vPortExitCritical + stream_buffer.o(i.xStreamBufferReceive) refers to tasks.o(i.xTaskNotifyWait) for xTaskNotifyWait + stream_buffer.o(i.xStreamBufferReceive) refers to stream_buffer.o(i.prvReadMessageFromBuffer) for prvReadMessageFromBuffer + stream_buffer.o(i.xStreamBufferReceive) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + stream_buffer.o(i.xStreamBufferReceive) refers to tasks.o(i.xTaskGenericNotify) for xTaskGenericNotify + stream_buffer.o(i.xStreamBufferReceive) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + stream_buffer.o(i.xStreamBufferReceiveCompletedFromISR) refers to tasks.o(i.xTaskGenericNotifyFromISR) for xTaskGenericNotifyFromISR + stream_buffer.o(i.xStreamBufferReceiveFromISR) refers to stream_buffer.o(i.prvBytesInBuffer) for prvBytesInBuffer + stream_buffer.o(i.xStreamBufferReceiveFromISR) refers to stream_buffer.o(i.prvReadMessageFromBuffer) for prvReadMessageFromBuffer + stream_buffer.o(i.xStreamBufferReceiveFromISR) refers to tasks.o(i.xTaskGenericNotifyFromISR) for xTaskGenericNotifyFromISR + stream_buffer.o(i.xStreamBufferReset) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + stream_buffer.o(i.xStreamBufferReset) refers to stream_buffer.o(i.prvInitialiseNewStreamBuffer) for prvInitialiseNewStreamBuffer + stream_buffer.o(i.xStreamBufferReset) refers to port.o(i.vPortExitCritical) for vPortExitCritical + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.vTaskSetTimeOutState) for vTaskSetTimeOutState + stream_buffer.o(i.xStreamBufferSend) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + stream_buffer.o(i.xStreamBufferSend) refers to stream_buffer.o(i.xStreamBufferSpacesAvailable) for xStreamBufferSpacesAvailable + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.xTaskNotifyStateClear) for xTaskNotifyStateClear + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + stream_buffer.o(i.xStreamBufferSend) refers to port.o(i.vPortExitCritical) for vPortExitCritical + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.xTaskNotifyWait) for xTaskNotifyWait + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.xTaskCheckForTimeOut) for xTaskCheckForTimeOut + stream_buffer.o(i.xStreamBufferSend) refers to stream_buffer.o(i.prvWriteMessageToBuffer) for prvWriteMessageToBuffer + stream_buffer.o(i.xStreamBufferSend) refers to stream_buffer.o(i.prvBytesInBuffer) for prvBytesInBuffer + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.xTaskGenericNotify) for xTaskGenericNotify + stream_buffer.o(i.xStreamBufferSend) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + stream_buffer.o(i.xStreamBufferSendCompletedFromISR) refers to tasks.o(i.xTaskGenericNotifyFromISR) for xTaskGenericNotifyFromISR + stream_buffer.o(i.xStreamBufferSendFromISR) refers to stream_buffer.o(i.xStreamBufferSpacesAvailable) for xStreamBufferSpacesAvailable + stream_buffer.o(i.xStreamBufferSendFromISR) refers to stream_buffer.o(i.prvWriteMessageToBuffer) for prvWriteMessageToBuffer + stream_buffer.o(i.xStreamBufferSendFromISR) refers to stream_buffer.o(i.prvBytesInBuffer) for prvBytesInBuffer + stream_buffer.o(i.xStreamBufferSendFromISR) refers to tasks.o(i.xTaskGenericNotifyFromISR) for xTaskGenericNotifyFromISR + tasks.o(i.eTaskGetState) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.eTaskGetState) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.eTaskGetState) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.eTaskGetState) refers to tasks.o(.bss) for xSuspendedTaskList + tasks.o(i.pcTaskGetName) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.prvAddCurrentTaskToDelayedList) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.prvAddCurrentTaskToDelayedList) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.prvAddCurrentTaskToDelayedList) refers to list.o(i.vListInsert) for vListInsert + tasks.o(i.prvAddCurrentTaskToDelayedList) refers to tasks.o(.data) for xTickCount + tasks.o(i.prvAddCurrentTaskToDelayedList) refers to tasks.o(.bss) for xSuspendedTaskList + tasks.o(i.prvAddNewTaskToReadyList) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.prvAddNewTaskToReadyList) refers to tasks.o(i.prvInitialiseTaskLists) for prvInitialiseTaskLists + tasks.o(i.prvAddNewTaskToReadyList) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.prvAddNewTaskToReadyList) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.prvAddNewTaskToReadyList) refers to tasks.o(.data) for uxCurrentNumberOfTasks + tasks.o(i.prvAddNewTaskToReadyList) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.prvCheckTasksWaitingTermination) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.prvCheckTasksWaitingTermination) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.prvCheckTasksWaitingTermination) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.prvCheckTasksWaitingTermination) refers to tasks.o(i.prvDeleteTCB) for prvDeleteTCB + tasks.o(i.prvCheckTasksWaitingTermination) refers to tasks.o(.bss) for xTasksWaitingTermination + tasks.o(i.prvCheckTasksWaitingTermination) refers to tasks.o(.data) for uxCurrentNumberOfTasks + tasks.o(i.prvDeleteTCB) refers to heap_4.o(i.vPortFree) for vPortFree + tasks.o(i.prvIdleTask) refers to tasks.o(i.prvCheckTasksWaitingTermination) for prvCheckTasksWaitingTermination + tasks.o(i.prvIdleTask) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.prvInitialiseNewTask) refers to memseta.o(.text) for __aeabi_memset + tasks.o(i.prvInitialiseNewTask) refers to list.o(i.vListInitialiseItem) for vListInitialiseItem + tasks.o(i.prvInitialiseNewTask) refers to port.o(i.pxPortInitialiseStack) for pxPortInitialiseStack + tasks.o(i.prvInitialiseTaskLists) refers to list.o(i.vListInitialise) for vListInitialise + tasks.o(i.prvInitialiseTaskLists) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.prvInitialiseTaskLists) refers to tasks.o(.data) for pxDelayedTaskList + tasks.o(i.prvListTasksWithinSingleList) refers to tasks.o(i.vTaskGetInfo) for vTaskGetInfo + tasks.o(i.prvResetNextTaskUnblockTime) refers to tasks.o(.data) for pxDelayedTaskList + tasks.o(i.prvTaskIsTaskSuspended) refers to tasks.o(.bss) for xSuspendedTaskList + tasks.o(i.pvTaskIncrementMutexHeldCount) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.ulTaskNotifyTake) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.ulTaskNotifyTake) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.ulTaskNotifyTake) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.ulTaskNotifyTake) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.ulTaskNotifyValueClear) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.ulTaskNotifyValueClear) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.ulTaskNotifyValueClear) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.uxTaskGetNumberOfTasks) refers to tasks.o(.data) for uxCurrentNumberOfTasks + tasks.o(i.uxTaskGetStackHighWaterMark) refers to tasks.o(i.prvTaskCheckFreeStackSpace) for prvTaskCheckFreeStackSpace + tasks.o(i.uxTaskGetStackHighWaterMark) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.uxTaskGetSystemState) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + tasks.o(i.uxTaskGetSystemState) refers to tasks.o(i.prvListTasksWithinSingleList) for prvListTasksWithinSingleList + tasks.o(i.uxTaskGetSystemState) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + tasks.o(i.uxTaskGetSystemState) refers to tasks.o(.data) for uxCurrentNumberOfTasks + tasks.o(i.uxTaskGetSystemState) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.uxTaskPriorityGet) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.uxTaskPriorityGet) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.uxTaskPriorityGet) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.uxTaskPriorityGetFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + tasks.o(i.uxTaskPriorityGetFromISR) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.uxTaskResetEventItemValue) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskDelay) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + tasks.o(i.vTaskDelay) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.vTaskDelay) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + tasks.o(i.vTaskDelay) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskDelayUntil) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + tasks.o(i.vTaskDelayUntil) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.vTaskDelayUntil) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + tasks.o(i.vTaskDelayUntil) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskDelete) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.vTaskDelete) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskDelete) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskDelete) refers to tasks.o(i.prvDeleteTCB) for prvDeleteTCB + tasks.o(i.vTaskDelete) refers to tasks.o(i.prvResetNextTaskUnblockTime) for prvResetNextTaskUnblockTime + tasks.o(i.vTaskDelete) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.vTaskDelete) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskDelete) refers to tasks.o(.bss) for xTasksWaitingTermination + tasks.o(i.vTaskEndScheduler) refers to port.o(i.vPortEndScheduler) for vPortEndScheduler + tasks.o(i.vTaskEndScheduler) refers to tasks.o(.data) for xSchedulerRunning + tasks.o(i.vTaskGetInfo) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + tasks.o(i.vTaskGetInfo) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + tasks.o(i.vTaskGetInfo) refers to tasks.o(i.eTaskGetState) for eTaskGetState + tasks.o(i.vTaskGetInfo) refers to tasks.o(i.prvTaskCheckFreeStackSpace) for prvTaskCheckFreeStackSpace + tasks.o(i.vTaskGetInfo) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskInternalSetTimeOutState) refers to tasks.o(.data) for xNumOfOverflows + tasks.o(i.vTaskMissedYield) refers to tasks.o(.data) for xYieldPending + tasks.o(i.vTaskNotifyGiveFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + tasks.o(i.vTaskNotifyGiveFromISR) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskNotifyGiveFromISR) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskNotifyGiveFromISR) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskNotifyGiveFromISR) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.vTaskPlaceOnEventList) refers to list.o(i.vListInsert) for vListInsert + tasks.o(i.vTaskPlaceOnEventList) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.vTaskPlaceOnEventList) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskPlaceOnEventListRestricted) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskPlaceOnEventListRestricted) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.vTaskPlaceOnEventListRestricted) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskPlaceOnUnorderedEventList) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskPlaceOnUnorderedEventList) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.vTaskPlaceOnUnorderedEventList) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskPriorityDisinheritAfterTimeout) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskPriorityDisinheritAfterTimeout) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskPriorityDisinheritAfterTimeout) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskPriorityDisinheritAfterTimeout) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.vTaskPrioritySet) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.vTaskPrioritySet) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskPrioritySet) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskPrioritySet) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.vTaskPrioritySet) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskPrioritySet) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.vTaskRemoveFromUnorderedEventList) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskRemoveFromUnorderedEventList) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskRemoveFromUnorderedEventList) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskRemoveFromUnorderedEventList) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.vTaskResume) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.vTaskResume) refers to tasks.o(i.prvTaskIsTaskSuspended) for prvTaskIsTaskSuspended + tasks.o(i.vTaskResume) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskResume) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskResume) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.vTaskResume) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskResume) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.vTaskSetTimeOutState) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.vTaskSetTimeOutState) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.vTaskSetTimeOutState) refers to tasks.o(.data) for xNumOfOverflows + tasks.o(i.vTaskStartScheduler) refers to cmsis_os2.o(i.vApplicationGetIdleTaskMemory) for vApplicationGetIdleTaskMemory + tasks.o(i.vTaskStartScheduler) refers to tasks.o(i.xTaskCreateStatic) for xTaskCreateStatic + tasks.o(i.vTaskStartScheduler) refers to timers.o(i.xTimerCreateTimerTask) for xTimerCreateTimerTask + tasks.o(i.vTaskStartScheduler) refers to port.o(i.xPortStartScheduler) for xPortStartScheduler + tasks.o(i.vTaskStartScheduler) refers to tasks.o(i.prvIdleTask) for prvIdleTask + tasks.o(i.vTaskStartScheduler) refers to tasks.o(.data) for xIdleTaskHandle + tasks.o(i.vTaskSuspend) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.vTaskSuspend) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.vTaskSuspend) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.vTaskSuspend) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.vTaskSuspend) refers to tasks.o(i.prvResetNextTaskUnblockTime) for prvResetNextTaskUnblockTime + tasks.o(i.vTaskSuspend) refers to tasks.o(i.vTaskSwitchContext) for vTaskSwitchContext + tasks.o(i.vTaskSuspend) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.vTaskSuspend) refers to tasks.o(.bss) for xSuspendedTaskList + tasks.o(i.vTaskSuspendAll) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskSwitchContext) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.vTaskSwitchContext) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskCatchUpTicks) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + tasks.o(i.xTaskCatchUpTicks) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + tasks.o(i.xTaskCatchUpTicks) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.xTaskCheckForTimeOut) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.xTaskCheckForTimeOut) refers to tasks.o(i.vTaskInternalSetTimeOutState) for vTaskInternalSetTimeOutState + tasks.o(i.xTaskCheckForTimeOut) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.xTaskCheckForTimeOut) refers to tasks.o(.data) for xTickCount + tasks.o(i.xTaskCreate) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + tasks.o(i.xTaskCreate) refers to heap_4.o(i.vPortFree) for vPortFree + tasks.o(i.xTaskCreate) refers to tasks.o(i.prvInitialiseNewTask) for prvInitialiseNewTask + tasks.o(i.xTaskCreate) refers to tasks.o(i.prvAddNewTaskToReadyList) for prvAddNewTaskToReadyList + tasks.o(i.xTaskCreateStatic) refers to tasks.o(i.prvInitialiseNewTask) for prvInitialiseNewTask + tasks.o(i.xTaskCreateStatic) refers to tasks.o(i.prvAddNewTaskToReadyList) for prvAddNewTaskToReadyList + tasks.o(i.xTaskGenericNotify) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.xTaskGenericNotify) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskGenericNotify) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskGenericNotify) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.xTaskGenericNotify) refers to tasks.o(.data) for uxTopReadyPriority + tasks.o(i.xTaskGenericNotify) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskGenericNotifyFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + tasks.o(i.xTaskGenericNotifyFromISR) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskGenericNotifyFromISR) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskGenericNotifyFromISR) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.xTaskGenericNotifyFromISR) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskGetCurrentTaskHandle) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.xTaskGetSchedulerState) refers to tasks.o(.data) for xSchedulerRunning + tasks.o(i.xTaskGetTickCount) refers to tasks.o(.data) for xTickCount + tasks.o(i.xTaskGetTickCountFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + tasks.o(i.xTaskGetTickCountFromISR) refers to tasks.o(.data) for xTickCount + tasks.o(i.xTaskIncrementTick) refers to tasks.o(i.prvResetNextTaskUnblockTime) for prvResetNextTaskUnblockTime + tasks.o(i.xTaskIncrementTick) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskIncrementTick) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskIncrementTick) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.xTaskIncrementTick) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskNotifyStateClear) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.xTaskNotifyStateClear) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.xTaskNotifyStateClear) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.xTaskNotifyWait) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.xTaskNotifyWait) refers to tasks.o(i.prvAddCurrentTaskToDelayedList) for prvAddCurrentTaskToDelayedList + tasks.o(i.xTaskNotifyWait) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.xTaskNotifyWait) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.xTaskPriorityDisinherit) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskPriorityDisinherit) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskPriorityDisinherit) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.xTaskPriorityDisinherit) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskPriorityInherit) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskPriorityInherit) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskPriorityInherit) refers to tasks.o(.data) for pxCurrentTCB + tasks.o(i.xTaskPriorityInherit) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskRemoveFromEventList) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskRemoveFromEventList) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskRemoveFromEventList) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.xTaskRemoveFromEventList) refers to tasks.o(.bss) for pxReadyTasksLists + tasks.o(i.xTaskResumeAll) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + tasks.o(i.xTaskResumeAll) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskResumeAll) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskResumeAll) refers to tasks.o(i.prvResetNextTaskUnblockTime) for prvResetNextTaskUnblockTime + tasks.o(i.xTaskResumeAll) refers to tasks.o(i.xTaskIncrementTick) for xTaskIncrementTick + tasks.o(i.xTaskResumeAll) refers to port.o(i.vPortExitCritical) for vPortExitCritical + tasks.o(i.xTaskResumeAll) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.xTaskResumeAll) refers to tasks.o(.bss) for xPendingReadyList + tasks.o(i.xTaskResumeFromISR) refers to port.o(i.vPortValidateInterruptPriority) for vPortValidateInterruptPriority + tasks.o(i.xTaskResumeFromISR) refers to tasks.o(i.prvTaskIsTaskSuspended) for prvTaskIsTaskSuspended + tasks.o(i.xTaskResumeFromISR) refers to list.o(i.uxListRemove) for uxListRemove + tasks.o(i.xTaskResumeFromISR) refers to list.o(i.vListInsertEnd) for vListInsertEnd + tasks.o(i.xTaskResumeFromISR) refers to tasks.o(.data) for uxSchedulerSuspended + tasks.o(i.xTaskResumeFromISR) refers to tasks.o(.bss) for pxReadyTasksLists + timers.o(i.prvCheckForValidListAndQueue) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + timers.o(i.prvCheckForValidListAndQueue) refers to list.o(i.vListInitialise) for vListInitialise + timers.o(i.prvCheckForValidListAndQueue) refers to queue.o(i.xQueueGenericCreateStatic) for xQueueGenericCreateStatic + timers.o(i.prvCheckForValidListAndQueue) refers to queue.o(i.vQueueAddToRegistry) for vQueueAddToRegistry + timers.o(i.prvCheckForValidListAndQueue) refers to port.o(i.vPortExitCritical) for vPortExitCritical + timers.o(i.prvCheckForValidListAndQueue) refers to timers.o(.data) for xTimerQueue + timers.o(i.prvCheckForValidListAndQueue) refers to timers.o(.bss) for xActiveTimerList1 + timers.o(i.prvGetNextExpireTime) refers to timers.o(.data) for pxCurrentTimerList + timers.o(i.prvInitialiseNewTimer) refers to timers.o(i.prvCheckForValidListAndQueue) for prvCheckForValidListAndQueue + timers.o(i.prvInitialiseNewTimer) refers to list.o(i.vListInitialiseItem) for vListInitialiseItem + timers.o(i.prvInsertTimerInActiveList) refers to list.o(i.vListInsert) for vListInsert + timers.o(i.prvInsertTimerInActiveList) refers to timers.o(.data) for pxOverflowTimerList + timers.o(i.prvProcessExpiredTimer) refers to list.o(i.uxListRemove) for uxListRemove + timers.o(i.prvProcessExpiredTimer) refers to timers.o(i.prvInsertTimerInActiveList) for prvInsertTimerInActiveList + timers.o(i.prvProcessExpiredTimer) refers to timers.o(i.xTimerGenericCommand) for xTimerGenericCommand + timers.o(i.prvProcessExpiredTimer) refers to timers.o(.data) for pxCurrentTimerList + timers.o(i.prvProcessReceivedCommands) refers to list.o(i.uxListRemove) for uxListRemove + timers.o(i.prvProcessReceivedCommands) refers to timers.o(i.prvSampleTimeNow) for prvSampleTimeNow + timers.o(i.prvProcessReceivedCommands) refers to timers.o(i.prvInsertTimerInActiveList) for prvInsertTimerInActiveList + timers.o(i.prvProcessReceivedCommands) refers to timers.o(i.xTimerGenericCommand) for xTimerGenericCommand + timers.o(i.prvProcessReceivedCommands) refers to heap_4.o(i.vPortFree) for vPortFree + timers.o(i.prvProcessReceivedCommands) refers to queue.o(i.xQueueReceive) for xQueueReceive + timers.o(i.prvProcessReceivedCommands) refers to timers.o(.data) for xTimerQueue + timers.o(i.prvProcessTimerOrBlockTask) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + timers.o(i.prvProcessTimerOrBlockTask) refers to timers.o(i.prvSampleTimeNow) for prvSampleTimeNow + timers.o(i.prvProcessTimerOrBlockTask) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + timers.o(i.prvProcessTimerOrBlockTask) refers to timers.o(i.prvProcessExpiredTimer) for prvProcessExpiredTimer + timers.o(i.prvProcessTimerOrBlockTask) refers to queue.o(i.vQueueWaitForMessageRestricted) for vQueueWaitForMessageRestricted + timers.o(i.prvProcessTimerOrBlockTask) refers to timers.o(.data) for pxOverflowTimerList + timers.o(i.prvSampleTimeNow) refers to tasks.o(i.xTaskGetTickCount) for xTaskGetTickCount + timers.o(i.prvSampleTimeNow) refers to timers.o(i.prvSwitchTimerLists) for prvSwitchTimerLists + timers.o(i.prvSampleTimeNow) refers to timers.o(.data) for xLastTime + timers.o(i.prvSwitchTimerLists) refers to list.o(i.uxListRemove) for uxListRemove + timers.o(i.prvSwitchTimerLists) refers to list.o(i.vListInsert) for vListInsert + timers.o(i.prvSwitchTimerLists) refers to timers.o(i.xTimerGenericCommand) for xTimerGenericCommand + timers.o(i.prvSwitchTimerLists) refers to timers.o(.data) for pxCurrentTimerList + timers.o(i.prvTimerTask) refers to timers.o(i.prvGetNextExpireTime) for prvGetNextExpireTime + timers.o(i.prvTimerTask) refers to timers.o(i.prvProcessTimerOrBlockTask) for prvProcessTimerOrBlockTask + timers.o(i.prvTimerTask) refers to timers.o(i.prvProcessReceivedCommands) for prvProcessReceivedCommands + timers.o(i.pvTimerGetTimerID) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + timers.o(i.pvTimerGetTimerID) refers to port.o(i.vPortExitCritical) for vPortExitCritical + timers.o(i.uxTimerGetReloadMode) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + timers.o(i.uxTimerGetReloadMode) refers to port.o(i.vPortExitCritical) for vPortExitCritical + timers.o(i.vTimerSetReloadMode) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + timers.o(i.vTimerSetReloadMode) refers to port.o(i.vPortExitCritical) for vPortExitCritical + timers.o(i.vTimerSetTimerID) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + timers.o(i.vTimerSetTimerID) refers to port.o(i.vPortExitCritical) for vPortExitCritical + timers.o(i.xTimerCreate) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + timers.o(i.xTimerCreate) refers to timers.o(i.prvInitialiseNewTimer) for prvInitialiseNewTimer + timers.o(i.xTimerCreateStatic) refers to timers.o(i.prvInitialiseNewTimer) for prvInitialiseNewTimer + timers.o(i.xTimerCreateTimerTask) refers to timers.o(i.prvCheckForValidListAndQueue) for prvCheckForValidListAndQueue + timers.o(i.xTimerCreateTimerTask) refers to cmsis_os2.o(i.vApplicationGetTimerTaskMemory) for vApplicationGetTimerTaskMemory + timers.o(i.xTimerCreateTimerTask) refers to tasks.o(i.xTaskCreateStatic) for xTaskCreateStatic + timers.o(i.xTimerCreateTimerTask) refers to timers.o(.data) for xTimerQueue + timers.o(i.xTimerCreateTimerTask) refers to timers.o(i.prvTimerTask) for prvTimerTask + timers.o(i.xTimerGenericCommand) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + timers.o(i.xTimerGenericCommand) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + timers.o(i.xTimerGenericCommand) refers to queue.o(i.xQueueGenericSendFromISR) for xQueueGenericSendFromISR + timers.o(i.xTimerGenericCommand) refers to timers.o(.data) for xTimerQueue + timers.o(i.xTimerGetTimerDaemonTaskHandle) refers to timers.o(.data) for xTimerTaskHandle + timers.o(i.xTimerIsTimerActive) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + timers.o(i.xTimerIsTimerActive) refers to port.o(i.vPortExitCritical) for vPortExitCritical + timers.o(i.xTimerPendFunctionCall) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + timers.o(i.xTimerPendFunctionCall) refers to timers.o(.data) for xTimerQueue + timers.o(i.xTimerPendFunctionCallFromISR) refers to queue.o(i.xQueueGenericSendFromISR) for xQueueGenericSendFromISR + timers.o(i.xTimerPendFunctionCallFromISR) refers to timers.o(.data) for xTimerQueue + cmsis_os2.o(i.SysTick_Handler) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + cmsis_os2.o(i.SysTick_Handler) refers to port.o(i.xPortSysTickHandler) for xPortSysTickHandler + cmsis_os2.o(i.TimerCallback) refers to timers.o(i.pvTimerGetTimerID) for pvTimerGetTimerID + cmsis_os2.o(i.osDelay) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osDelay) refers to tasks.o(i.vTaskDelay) for vTaskDelay + cmsis_os2.o(i.osDelayUntil) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osDelayUntil) refers to tasks.o(i.xTaskGetTickCount) for xTaskGetTickCount + cmsis_os2.o(i.osDelayUntil) refers to tasks.o(i.vTaskDelayUntil) for vTaskDelayUntil + cmsis_os2.o(i.osEventFlagsClear) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osEventFlagsClear) refers to event_groups.o(i.xEventGroupGetBitsFromISR) for xEventGroupGetBitsFromISR + cmsis_os2.o(i.osEventFlagsClear) refers to event_groups.o(i.xEventGroupClearBitsFromISR) for xEventGroupClearBitsFromISR + cmsis_os2.o(i.osEventFlagsClear) refers to event_groups.o(i.xEventGroupClearBits) for xEventGroupClearBits + cmsis_os2.o(i.osEventFlagsDelete) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osEventFlagsDelete) refers to event_groups.o(i.vEventGroupDelete) for vEventGroupDelete + cmsis_os2.o(i.osEventFlagsGet) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osEventFlagsGet) refers to event_groups.o(i.xEventGroupGetBitsFromISR) for xEventGroupGetBitsFromISR + cmsis_os2.o(i.osEventFlagsGet) refers to event_groups.o(i.xEventGroupClearBits) for xEventGroupClearBits + cmsis_os2.o(i.osEventFlagsNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osEventFlagsNew) refers to event_groups.o(i.xEventGroupCreateStatic) for xEventGroupCreateStatic + cmsis_os2.o(i.osEventFlagsNew) refers to event_groups.o(i.xEventGroupCreate) for xEventGroupCreate + cmsis_os2.o(i.osEventFlagsSet) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osEventFlagsSet) refers to event_groups.o(i.xEventGroupSetBitsFromISR) for xEventGroupSetBitsFromISR + cmsis_os2.o(i.osEventFlagsSet) refers to event_groups.o(i.xEventGroupSetBits) for xEventGroupSetBits + cmsis_os2.o(i.osEventFlagsWait) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osEventFlagsWait) refers to event_groups.o(i.xEventGroupWaitBits) for xEventGroupWaitBits + cmsis_os2.o(i.osKernelGetInfo) refers to memcpya.o(.text) for __aeabi_memcpy + cmsis_os2.o(i.osKernelGetState) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + cmsis_os2.o(i.osKernelGetState) refers to cmsis_os2.o(.data) for KernelState + cmsis_os2.o(i.osKernelGetSysTimerCount) refers to tasks.o(i.xTaskGetTickCount) for xTaskGetTickCount + cmsis_os2.o(i.osKernelGetSysTimerCount) refers to cmsis_os2.o(i.OS_Tick_GetCount) for OS_Tick_GetCount + cmsis_os2.o(i.osKernelGetSysTimerCount) refers to cmsis_os2.o(i.OS_Tick_GetOverflow) for OS_Tick_GetOverflow + cmsis_os2.o(i.osKernelGetSysTimerCount) refers to cmsis_os2.o(i.OS_Tick_GetInterval) for OS_Tick_GetInterval + cmsis_os2.o(i.osKernelGetSysTimerFreq) refers to system_stm32f1xx.o(.data) for SystemCoreClock + cmsis_os2.o(i.osKernelGetTickCount) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osKernelGetTickCount) refers to tasks.o(i.xTaskGetTickCountFromISR) for xTaskGetTickCountFromISR + cmsis_os2.o(i.osKernelGetTickCount) refers to tasks.o(i.xTaskGetTickCount) for xTaskGetTickCount + cmsis_os2.o(i.osKernelInitialize) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osKernelInitialize) refers to cmsis_os2.o(.data) for KernelState + cmsis_os2.o(i.osKernelLock) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osKernelLock) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + cmsis_os2.o(i.osKernelLock) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + cmsis_os2.o(i.osKernelRestoreLock) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osKernelRestoreLock) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + cmsis_os2.o(i.osKernelRestoreLock) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + cmsis_os2.o(i.osKernelRestoreLock) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + cmsis_os2.o(i.osKernelStart) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osKernelStart) refers to tasks.o(i.vTaskStartScheduler) for vTaskStartScheduler + cmsis_os2.o(i.osKernelStart) refers to cmsis_os2.o(.data) for KernelState + cmsis_os2.o(i.osKernelUnlock) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osKernelUnlock) refers to tasks.o(i.xTaskGetSchedulerState) for xTaskGetSchedulerState + cmsis_os2.o(i.osKernelUnlock) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + cmsis_os2.o(i.osMemoryPoolAlloc) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolAlloc) refers to queue.o(i.xQueueReceiveFromISR) for xQueueReceiveFromISR + cmsis_os2.o(i.osMemoryPoolAlloc) refers to cmsis_os2.o(i.AllocBlock) for AllocBlock + cmsis_os2.o(i.osMemoryPoolAlloc) refers to cmsis_os2.o(i.CreateBlock) for CreateBlock + cmsis_os2.o(i.osMemoryPoolAlloc) refers to queue.o(i.xQueueSemaphoreTake) for xQueueSemaphoreTake + cmsis_os2.o(i.osMemoryPoolAlloc) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + cmsis_os2.o(i.osMemoryPoolAlloc) refers to port.o(i.vPortExitCritical) for vPortExitCritical + cmsis_os2.o(i.osMemoryPoolDelete) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolDelete) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + cmsis_os2.o(i.osMemoryPoolDelete) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + cmsis_os2.o(i.osMemoryPoolDelete) refers to heap_4.o(i.vPortFree) for vPortFree + cmsis_os2.o(i.osMemoryPoolDelete) refers to port.o(i.vPortExitCritical) for vPortExitCritical + cmsis_os2.o(i.osMemoryPoolFree) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolFree) refers to queue.o(i.uxQueueMessagesWaitingFromISR) for uxQueueMessagesWaitingFromISR + cmsis_os2.o(i.osMemoryPoolFree) refers to cmsis_os2.o(i.FreeBlock) for FreeBlock + cmsis_os2.o(i.osMemoryPoolFree) refers to queue.o(i.xQueueGiveFromISR) for xQueueGiveFromISR + cmsis_os2.o(i.osMemoryPoolFree) refers to queue.o(i.uxQueueMessagesWaiting) for uxQueueMessagesWaiting + cmsis_os2.o(i.osMemoryPoolFree) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + cmsis_os2.o(i.osMemoryPoolFree) refers to port.o(i.vPortExitCritical) for vPortExitCritical + cmsis_os2.o(i.osMemoryPoolFree) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + cmsis_os2.o(i.osMemoryPoolGetCount) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolGetCount) refers to queue.o(i.uxQueueMessagesWaitingFromISR) for uxQueueMessagesWaitingFromISR + cmsis_os2.o(i.osMemoryPoolGetCount) refers to queue.o(i.uxQueueMessagesWaiting) for uxQueueMessagesWaiting + cmsis_os2.o(i.osMemoryPoolGetName) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolGetSpace) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolGetSpace) refers to queue.o(i.uxQueueMessagesWaitingFromISR) for uxQueueMessagesWaitingFromISR + cmsis_os2.o(i.osMemoryPoolGetSpace) refers to queue.o(i.uxQueueMessagesWaiting) for uxQueueMessagesWaiting + cmsis_os2.o(i.osMemoryPoolNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMemoryPoolNew) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + cmsis_os2.o(i.osMemoryPoolNew) refers to queue.o(i.xQueueCreateCountingSemaphoreStatic) for xQueueCreateCountingSemaphoreStatic + cmsis_os2.o(i.osMemoryPoolNew) refers to heap_4.o(i.vPortFree) for vPortFree + cmsis_os2.o(i.osMessageQueueDelete) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueueDelete) refers to queue.o(i.vQueueUnregisterQueue) for vQueueUnregisterQueue + cmsis_os2.o(i.osMessageQueueDelete) refers to queue.o(i.vQueueDelete) for vQueueDelete + cmsis_os2.o(i.osMessageQueueGet) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueueGet) refers to queue.o(i.xQueueReceiveFromISR) for xQueueReceiveFromISR + cmsis_os2.o(i.osMessageQueueGet) refers to queue.o(i.xQueueReceive) for xQueueReceive + cmsis_os2.o(i.osMessageQueueGetCount) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueueGetCount) refers to queue.o(i.uxQueueMessagesWaitingFromISR) for uxQueueMessagesWaitingFromISR + cmsis_os2.o(i.osMessageQueueGetCount) refers to queue.o(i.uxQueueMessagesWaiting) for uxQueueMessagesWaiting + cmsis_os2.o(i.osMessageQueueGetSpace) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueueGetSpace) refers to queue.o(i.uxQueueSpacesAvailable) for uxQueueSpacesAvailable + cmsis_os2.o(i.osMessageQueueNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueueNew) refers to queue.o(i.xQueueGenericCreateStatic) for xQueueGenericCreateStatic + cmsis_os2.o(i.osMessageQueueNew) refers to queue.o(i.xQueueGenericCreate) for xQueueGenericCreate + cmsis_os2.o(i.osMessageQueueNew) refers to queue.o(i.vQueueAddToRegistry) for vQueueAddToRegistry + cmsis_os2.o(i.osMessageQueuePut) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueuePut) refers to queue.o(i.xQueueGenericSendFromISR) for xQueueGenericSendFromISR + cmsis_os2.o(i.osMessageQueuePut) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + cmsis_os2.o(i.osMessageQueueReset) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMessageQueueReset) refers to queue.o(i.xQueueGenericReset) for xQueueGenericReset + cmsis_os2.o(i.osMutexAcquire) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMutexAcquire) refers to queue.o(i.xQueueTakeMutexRecursive) for xQueueTakeMutexRecursive + cmsis_os2.o(i.osMutexAcquire) refers to queue.o(i.xQueueSemaphoreTake) for xQueueSemaphoreTake + cmsis_os2.o(i.osMutexDelete) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMutexDelete) refers to queue.o(i.vQueueUnregisterQueue) for vQueueUnregisterQueue + cmsis_os2.o(i.osMutexDelete) refers to queue.o(i.vQueueDelete) for vQueueDelete + cmsis_os2.o(i.osMutexGetOwner) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMutexGetOwner) refers to queue.o(i.xQueueGetMutexHolder) for xQueueGetMutexHolder + cmsis_os2.o(i.osMutexNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMutexNew) refers to queue.o(i.xQueueCreateMutexStatic) for xQueueCreateMutexStatic + cmsis_os2.o(i.osMutexNew) refers to queue.o(i.xQueueCreateMutex) for xQueueCreateMutex + cmsis_os2.o(i.osMutexNew) refers to queue.o(i.vQueueAddToRegistry) for vQueueAddToRegistry + cmsis_os2.o(i.osMutexRelease) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osMutexRelease) refers to queue.o(i.xQueueGiveMutexRecursive) for xQueueGiveMutexRecursive + cmsis_os2.o(i.osMutexRelease) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + cmsis_os2.o(i.osSemaphoreAcquire) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osSemaphoreAcquire) refers to queue.o(i.xQueueReceiveFromISR) for xQueueReceiveFromISR + cmsis_os2.o(i.osSemaphoreAcquire) refers to queue.o(i.xQueueSemaphoreTake) for xQueueSemaphoreTake + cmsis_os2.o(i.osSemaphoreDelete) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osSemaphoreDelete) refers to queue.o(i.vQueueUnregisterQueue) for vQueueUnregisterQueue + cmsis_os2.o(i.osSemaphoreDelete) refers to queue.o(i.vQueueDelete) for vQueueDelete + cmsis_os2.o(i.osSemaphoreGetCount) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osSemaphoreGetCount) refers to queue.o(i.uxQueueMessagesWaitingFromISR) for uxQueueMessagesWaitingFromISR + cmsis_os2.o(i.osSemaphoreGetCount) refers to queue.o(i.uxQueueMessagesWaiting) for uxQueueMessagesWaiting + cmsis_os2.o(i.osSemaphoreNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.xQueueGenericCreateStatic) for xQueueGenericCreateStatic + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.xQueueGenericCreate) for xQueueGenericCreate + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.vQueueDelete) for vQueueDelete + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.xQueueCreateCountingSemaphoreStatic) for xQueueCreateCountingSemaphoreStatic + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.xQueueCreateCountingSemaphore) for xQueueCreateCountingSemaphore + cmsis_os2.o(i.osSemaphoreNew) refers to queue.o(i.vQueueAddToRegistry) for vQueueAddToRegistry + cmsis_os2.o(i.osSemaphoreRelease) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osSemaphoreRelease) refers to queue.o(i.xQueueGiveFromISR) for xQueueGiveFromISR + cmsis_os2.o(i.osSemaphoreRelease) refers to queue.o(i.xQueueGenericSend) for xQueueGenericSend + cmsis_os2.o(i.osThreadEnumerate) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadEnumerate) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + cmsis_os2.o(i.osThreadEnumerate) refers to tasks.o(i.uxTaskGetNumberOfTasks) for uxTaskGetNumberOfTasks + cmsis_os2.o(i.osThreadEnumerate) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + cmsis_os2.o(i.osThreadEnumerate) refers to tasks.o(i.uxTaskGetSystemState) for uxTaskGetSystemState + cmsis_os2.o(i.osThreadEnumerate) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + cmsis_os2.o(i.osThreadEnumerate) refers to heap_4.o(i.vPortFree) for vPortFree + cmsis_os2.o(i.osThreadExit) refers to tasks.o(i.vTaskDelete) for vTaskDelete + cmsis_os2.o(i.osThreadFlagsClear) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadFlagsClear) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + cmsis_os2.o(i.osThreadFlagsClear) refers to tasks.o(i.xTaskGenericNotify) for xTaskGenericNotify + cmsis_os2.o(i.osThreadFlagsGet) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadFlagsGet) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + cmsis_os2.o(i.osThreadFlagsGet) refers to tasks.o(i.xTaskGenericNotify) for xTaskGenericNotify + cmsis_os2.o(i.osThreadFlagsSet) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadFlagsSet) refers to tasks.o(i.xTaskGenericNotifyFromISR) for xTaskGenericNotifyFromISR + cmsis_os2.o(i.osThreadFlagsSet) refers to tasks.o(i.xTaskGenericNotify) for xTaskGenericNotify + cmsis_os2.o(i.osThreadFlagsWait) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadFlagsWait) refers to tasks.o(i.xTaskGetTickCount) for xTaskGetTickCount + cmsis_os2.o(i.osThreadFlagsWait) refers to tasks.o(i.xTaskNotifyWait) for xTaskNotifyWait + cmsis_os2.o(i.osThreadGetCount) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadGetCount) refers to tasks.o(i.uxTaskGetNumberOfTasks) for uxTaskGetNumberOfTasks + cmsis_os2.o(i.osThreadGetId) refers to tasks.o(i.xTaskGetCurrentTaskHandle) for xTaskGetCurrentTaskHandle + cmsis_os2.o(i.osThreadGetName) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadGetName) refers to tasks.o(i.pcTaskGetName) for pcTaskGetName + cmsis_os2.o(i.osThreadGetPriority) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadGetPriority) refers to tasks.o(i.uxTaskPriorityGet) for uxTaskPriorityGet + cmsis_os2.o(i.osThreadGetStackSpace) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadGetStackSpace) refers to tasks.o(i.uxTaskGetStackHighWaterMark) for uxTaskGetStackHighWaterMark + cmsis_os2.o(i.osThreadGetState) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadGetState) refers to tasks.o(i.eTaskGetState) for eTaskGetState + cmsis_os2.o(i.osThreadNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadNew) refers to tasks.o(i.xTaskCreateStatic) for xTaskCreateStatic + cmsis_os2.o(i.osThreadNew) refers to tasks.o(i.xTaskCreate) for xTaskCreate + cmsis_os2.o(i.osThreadResume) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadResume) refers to tasks.o(i.vTaskResume) for vTaskResume + cmsis_os2.o(i.osThreadSetPriority) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadSetPriority) refers to tasks.o(i.vTaskPrioritySet) for vTaskPrioritySet + cmsis_os2.o(i.osThreadSuspend) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadSuspend) refers to tasks.o(i.vTaskSuspend) for vTaskSuspend + cmsis_os2.o(i.osThreadTerminate) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osThreadTerminate) refers to tasks.o(i.eTaskGetState) for eTaskGetState + cmsis_os2.o(i.osThreadTerminate) refers to tasks.o(i.vTaskDelete) for vTaskDelete + cmsis_os2.o(i.osThreadYield) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerDelete) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerDelete) refers to timers.o(i.pvTimerGetTimerID) for pvTimerGetTimerID + cmsis_os2.o(i.osTimerDelete) refers to timers.o(i.xTimerGenericCommand) for xTimerGenericCommand + cmsis_os2.o(i.osTimerDelete) refers to heap_4.o(i.vPortFree) for vPortFree + cmsis_os2.o(i.osTimerGetName) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerGetName) refers to timers.o(i.pcTimerGetName) for pcTimerGetName + cmsis_os2.o(i.osTimerIsRunning) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerIsRunning) refers to timers.o(i.xTimerIsTimerActive) for xTimerIsTimerActive + cmsis_os2.o(i.osTimerNew) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerNew) refers to heap_4.o(i.pvPortMalloc) for pvPortMalloc + cmsis_os2.o(i.osTimerNew) refers to timers.o(i.xTimerCreateStatic) for xTimerCreateStatic + cmsis_os2.o(i.osTimerNew) refers to timers.o(i.xTimerCreate) for xTimerCreate + cmsis_os2.o(i.osTimerNew) refers to heap_4.o(i.vPortFree) for vPortFree + cmsis_os2.o(i.osTimerNew) refers to cmsis_os2.o(i.TimerCallback) for TimerCallback + cmsis_os2.o(i.osTimerStart) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerStart) refers to timers.o(i.xTimerGenericCommand) for xTimerGenericCommand + cmsis_os2.o(i.osTimerStop) refers to cmsis_os2.o(i.__get_IPSR) for __get_IPSR + cmsis_os2.o(i.osTimerStop) refers to timers.o(i.xTimerIsTimerActive) for xTimerIsTimerActive + cmsis_os2.o(i.osTimerStop) refers to timers.o(i.xTimerGenericCommand) for xTimerGenericCommand + cmsis_os2.o(i.vApplicationGetIdleTaskMemory) refers to cmsis_os2.o(.bss) for Idle_TCB + cmsis_os2.o(i.vApplicationGetTimerTaskMemory) refers to cmsis_os2.o(.bss) for Timer_TCB + heap_4.o(i.prvHeapInit) refers to heap_4.o(.bss) for ucHeap + heap_4.o(i.prvHeapInit) refers to heap_4.o(.data) for xStart + heap_4.o(i.prvInsertBlockIntoFreeList) refers to heap_4.o(.data) for xStart + heap_4.o(i.pvPortMalloc) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + heap_4.o(i.pvPortMalloc) refers to heap_4.o(i.prvHeapInit) for prvHeapInit + heap_4.o(i.pvPortMalloc) refers to heap_4.o(i.prvInsertBlockIntoFreeList) for prvInsertBlockIntoFreeList + heap_4.o(i.pvPortMalloc) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + heap_4.o(i.pvPortMalloc) refers to heap_4.o(.data) for pxEnd + heap_4.o(i.vPortFree) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + heap_4.o(i.vPortFree) refers to heap_4.o(i.prvInsertBlockIntoFreeList) for prvInsertBlockIntoFreeList + heap_4.o(i.vPortFree) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + heap_4.o(i.vPortFree) refers to heap_4.o(.data) for xBlockAllocatedBit + heap_4.o(i.vPortGetHeapStats) refers to tasks.o(i.vTaskSuspendAll) for vTaskSuspendAll + heap_4.o(i.vPortGetHeapStats) refers to tasks.o(i.xTaskResumeAll) for xTaskResumeAll + heap_4.o(i.vPortGetHeapStats) refers to port.o(i.vPortEnterCritical) for vPortEnterCritical + heap_4.o(i.vPortGetHeapStats) refers to port.o(i.vPortExitCritical) for vPortExitCritical + heap_4.o(i.vPortGetHeapStats) refers to heap_4.o(.data) for xStart + heap_4.o(i.xPortGetFreeHeapSize) refers to heap_4.o(.data) for xFreeBytesRemaining + heap_4.o(i.xPortGetMinimumEverFreeHeapSize) refers to heap_4.o(.data) for xMinimumEverFreeBytesRemaining + port.o(.emb_text) refers to tasks.o(i.vTaskSwitchContext) for vTaskSwitchContext + port.o(.emb_text) refers to tasks.o(.data) for pxCurrentTCB + port.o(i.prvTaskExitError) refers to port.o(.data) for uxCriticalNesting + port.o(i.pxPortInitialiseStack) refers to port.o(i.prvTaskExitError) for prvTaskExitError + port.o(i.vPortEndScheduler) refers to port.o(.data) for uxCriticalNesting + port.o(i.vPortEnterCritical) refers to port.o(.data) for uxCriticalNesting + port.o(i.vPortExitCritical) refers to port.o(.data) for uxCriticalNesting + port.o(i.vPortSetupTimerInterrupt) refers to system_stm32f1xx.o(.data) for SystemCoreClock + port.o(i.vPortValidateInterruptPriority) refers to port.o(.emb_text) for vPortGetIPSR + port.o(i.vPortValidateInterruptPriority) refers to port.o(.data) for ucMaxSysCallPriority + port.o(i.xPortStartScheduler) refers to port.o(i.vPortSetupTimerInterrupt) for vPortSetupTimerInterrupt + port.o(i.xPortStartScheduler) refers to port.o(.emb_text) for __asm___6_port_c_39a90d8d__prvStartFirstTask + port.o(i.xPortStartScheduler) refers to port.o(.data) for ucMaxSysCallPriority + port.o(i.xPortSysTickHandler) refers to tasks.o(i.xTaskIncrementTick) for xTaskIncrementTick + mbfunccoils.o(i.eMBFuncReadCoils) refers to modbus-port-stm32.o(i.eMBRegCoilsCB) for eMBRegCoilsCB + mbfunccoils.o(i.eMBFuncReadCoils) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfunccoils.o(i.eMBFuncWriteCoil) refers to modbus-port-stm32.o(i.eMBRegCoilsCB) for eMBRegCoilsCB + mbfunccoils.o(i.eMBFuncWriteCoil) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfunccoils.o(i.eMBFuncWriteMultipleCoils) refers to modbus-port-stm32.o(i.eMBRegCoilsCB) for eMBRegCoilsCB + mbfunccoils.o(i.eMBFuncWriteMultipleCoils) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncdisc.o(i.eMBFuncReadDiscreteInputs) refers to modbus-port-stm32.o(i.eMBRegDiscreteCB) for eMBRegDiscreteCB + mbfuncdisc.o(i.eMBFuncReadDiscreteInputs) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncholding.o(i.eMBFuncReadHoldingRegister) refers to modbus-port-stm32.o(i.eMBRegHoldingCB) for eMBRegHoldingCB + mbfuncholding.o(i.eMBFuncReadHoldingRegister) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncholding.o(i.eMBFuncReadWriteMultipleHoldingRegister) refers to modbus-port-stm32.o(i.eMBRegHoldingCB) for eMBRegHoldingCB + mbfuncholding.o(i.eMBFuncReadWriteMultipleHoldingRegister) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncholding.o(i.eMBFuncWriteHoldingRegister) refers to modbus-port-stm32.o(i.eMBRegHoldingCB) for eMBRegHoldingCB + mbfuncholding.o(i.eMBFuncWriteHoldingRegister) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncholding.o(i.eMBFuncWriteMultipleHoldingRegister) refers to modbus-port-stm32.o(i.eMBRegHoldingCB) for eMBRegHoldingCB + mbfuncholding.o(i.eMBFuncWriteMultipleHoldingRegister) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncinput.o(i.eMBFuncReadInputRegister) refers to modbus-port-stm32.o(i.eMBRegInputCB) for eMBRegInputCB + mbfuncinput.o(i.eMBFuncReadInputRegister) refers to mbutils.o(i.prveMBError2Exception) for prveMBError2Exception + mbfuncother.o(i.eMBFuncReportSlaveID) refers to memcpya.o(.text) for __aeabi_memcpy + mbfuncother.o(i.eMBFuncReportSlaveID) refers to mbfuncother.o(.data) for usMBSlaveIDLen + mbfuncother.o(i.eMBFuncReportSlaveID) refers to mbfuncother.o(.bss) for ucMBSlaveID + mbfuncother.o(i.eMBSetSlaveID) refers to memcpya.o(.text) for __aeabi_memcpy + mbfuncother.o(i.eMBSetSlaveID) refers to mbfuncother.o(.data) for usMBSlaveIDLen + mbfuncother.o(i.eMBSetSlaveID) refers to mbfuncother.o(.bss) for ucMBSlaveID + mbcrc.o(i.usMBCRC16) refers to mbcrc.o(.constdata) for aucCRCHi + mbrtu.o(i.eMBRTUInit) refers to modbus-port-stm32.o(i.xMBPortSerialInit) for xMBPortSerialInit + mbrtu.o(i.eMBRTUInit) refers to modbus-port-stm32.o(i.xMBPortTimersInit) for xMBPortTimersInit + mbrtu.o(i.eMBRTUReceive) refers to mbcrc.o(i.usMBCRC16) for usMBCRC16 + mbrtu.o(i.eMBRTUReceive) refers to mbrtu.o(.data) for usRcvBufferPos + mbrtu.o(i.eMBRTUReceive) refers to mbrtu.o(.bss) for ucRTUBuf + mbrtu.o(i.eMBRTUSend) refers to mbcrc.o(i.usMBCRC16) for usMBCRC16 + mbrtu.o(i.eMBRTUSend) refers to cmsis_os2.o(i.osDelay) for osDelay + mbrtu.o(i.eMBRTUSend) refers to modbus-port-stm32.o(i.vMBPortSerialEnable) for vMBPortSerialEnable + mbrtu.o(i.eMBRTUSend) refers to mbrtu.o(.data) for eRcvState + mbrtu.o(i.eMBRTUSend) refers to mbrtu.o(.bss) for ucRTUBuf + mbrtu.o(i.eMBRTUStart) refers to modbus-port-stm32.o(i.vMBPortSerialEnable) for vMBPortSerialEnable + mbrtu.o(i.eMBRTUStart) refers to modbus-port-stm32.o(i.vMBPortTimersEnable) for vMBPortTimersEnable + mbrtu.o(i.eMBRTUStart) refers to mbrtu.o(.data) for eRcvState + mbrtu.o(i.eMBRTUStop) refers to modbus-port-stm32.o(i.vMBPortSerialEnable) for vMBPortSerialEnable + mbrtu.o(i.eMBRTUStop) refers to modbus-port-stm32.o(i.vMBPortTimersDisable) for vMBPortTimersDisable + mbrtu.o(i.xMBRTUReceiveFSM) refers to modbus-port-stm32.o(i.xMBPortSerialGetByte) for xMBPortSerialGetByte + mbrtu.o(i.xMBRTUReceiveFSM) refers to modbus-port-stm32.o(i.vMBPortTimersEnable) for vMBPortTimersEnable + mbrtu.o(i.xMBRTUReceiveFSM) refers to mbrtu.o(.data) for eRcvState + mbrtu.o(i.xMBRTUReceiveFSM) refers to mbrtu.o(.bss) for ucRTUBuf + mbrtu.o(i.xMBRTUTimerT35Expired) refers to modbus-port-stm32.o(i.xMBPortEventPost) for xMBPortEventPost + mbrtu.o(i.xMBRTUTimerT35Expired) refers to modbus-port-stm32.o(i.vMBPortTimersDisable) for vMBPortTimersDisable + mbrtu.o(i.xMBRTUTimerT35Expired) refers to mbrtu.o(.data) for eRcvState + mbrtu.o(i.xMBRTUTransmitFSM) refers to modbus-port-stm32.o(i.vMBPortSerialEnable) for vMBPortSerialEnable + mbrtu.o(i.xMBRTUTransmitFSM) refers to modbus-port-stm32.o(i.xMBPortSerialPutByte) for xMBPortSerialPutByte + mbrtu.o(i.xMBRTUTransmitFSM) refers to modbus-port-stm32.o(i.xMBPortEventPost) for xMBPortEventPost + mbrtu.o(i.xMBRTUTransmitFSM) refers to mbrtu.o(.data) for eSndState + mb.o(i.eMBClose) refers to mb.o(.data) for eMBState + mb.o(i.eMBDisable) refers to mb.o(.data) for eMBState + mb.o(i.eMBEnable) refers to mb.o(.data) for eMBState + mb.o(i.eMBInit) refers to mbrtu.o(i.eMBRTUInit) for eMBRTUInit + mb.o(i.eMBInit) refers to modbus-port-stm32.o(i.xMBPortEventInit) for xMBPortEventInit + mb.o(i.eMBInit) refers to mb.o(.data) for ucMBAddress + mb.o(i.eMBInit) refers to mbrtu.o(i.eMBRTUStart) for eMBRTUStart + mb.o(i.eMBInit) refers to mbrtu.o(i.eMBRTUStop) for eMBRTUStop + mb.o(i.eMBInit) refers to mbrtu.o(i.eMBRTUSend) for eMBRTUSend + mb.o(i.eMBInit) refers to mbrtu.o(i.eMBRTUReceive) for eMBRTUReceive + mb.o(i.eMBInit) refers to mbrtu.o(i.xMBRTUReceiveFSM) for xMBRTUReceiveFSM + mb.o(i.eMBInit) refers to mbrtu.o(i.xMBRTUTransmitFSM) for xMBRTUTransmitFSM + mb.o(i.eMBInit) refers to mbrtu.o(i.xMBRTUTimerT35Expired) for xMBRTUTimerT35Expired + mb.o(i.eMBPoll) refers to modbus-port-stm32.o(i.xMBPortEventGet) for xMBPortEventGet + mb.o(i.eMBPoll) refers to modbus-port-stm32.o(i.xMBPortEventPost) for xMBPortEventPost + mb.o(i.eMBPoll) refers to mb.o(.data) for eMBState + mb.o(i.eMBRegisterCB) refers to mb.o(.data) for xFuncHandlers + mb.o(.data) refers to mbfuncother.o(i.eMBFuncReportSlaveID) for eMBFuncReportSlaveID + mb.o(.data) refers to mbfuncinput.o(i.eMBFuncReadInputRegister) for eMBFuncReadInputRegister + mb.o(.data) refers to mbfuncholding.o(i.eMBFuncReadHoldingRegister) for eMBFuncReadHoldingRegister + mb.o(.data) refers to mbfuncholding.o(i.eMBFuncWriteMultipleHoldingRegister) for eMBFuncWriteMultipleHoldingRegister + mb.o(.data) refers to mbfuncholding.o(i.eMBFuncWriteHoldingRegister) for eMBFuncWriteHoldingRegister + mb.o(.data) refers to mbfuncholding.o(i.eMBFuncReadWriteMultipleHoldingRegister) for eMBFuncReadWriteMultipleHoldingRegister + mb.o(.data) refers to mbfunccoils.o(i.eMBFuncReadCoils) for eMBFuncReadCoils + mb.o(.data) refers to mbfunccoils.o(i.eMBFuncWriteCoil) for eMBFuncWriteCoil + mb.o(.data) refers to mbfunccoils.o(i.eMBFuncWriteMultipleCoils) for eMBFuncWriteMultipleCoils + mb.o(.data) refers to mbfuncdisc.o(i.eMBFuncReadDiscreteInputs) for eMBFuncReadDiscreteInputs + modbus-port-stm32.o(i.MB_485_Direct_Receive) refers to delay.o(i.delay_us) for delay_us + modbus-port-stm32.o(i.MODBUS_Init) refers to cmsis_os2.o(i.osThreadNew) for osThreadNew + modbus-port-stm32.o(i.MODBUS_Init) refers to mb.o(i.eMBInit) for eMBInit + modbus-port-stm32.o(i.MODBUS_Init) refers to mb.o(i.eMBEnable) for eMBEnable + modbus-port-stm32.o(i.MODBUS_Init) refers to modbus-port-stm32.o(.constdata) for MBRunTask_attributes + modbus-port-stm32.o(i.MODBUS_Init) refers to modbus-port-stm32.o(i.ModbusPoll) for ModbusPoll + modbus-port-stm32.o(i.MODBUS_Init) refers to modbus-port-stm32.o(.data) for MBRunTaskHandle + modbus-port-stm32.o(i.ModbusPoll) refers to mb.o(i.eMBPoll) for eMBPoll + modbus-port-stm32.o(i.ModbusPoll) refers to cmsis_os2.o(i.osDelay) for osDelay + modbus-port-stm32.o(i.TIM7_IRQHandler) refers to modbus-port-stm32.o(i.prvvTIMERExpiredISR) for prvvTIMERExpiredISR + modbus-port-stm32.o(i.USART1_IRQHandler) refers to modbus-port-stm32.o(i.prvvUARTRxISR) for prvvUARTRxISR + modbus-port-stm32.o(i.USART1_IRQHandler) refers to modbus-port-stm32.o(i.prvvUARTTxReadyISR) for prvvUARTTxReadyISR + modbus-port-stm32.o(i.USART1_IRQHandler) refers to modbus-port-stm32.o(i.MB_485_Direct_Receive) for MB_485_Direct_Receive + modbus-port-stm32.o(i.USART1_IRQHandler) refers to modbus-port-stm32.o(.data) for ucByte + modbus-port-stm32.o(i.eMBRegCoilsCB) refers to delay.o(i.delay_us) for delay_us + modbus-port-stm32.o(i.eMBRegCoilsCB) refers to mbutils.o(i.xMBUtilGetBits) for xMBUtilGetBits + modbus-port-stm32.o(i.eMBRegCoilsCB) refers to mbutils.o(i.xMBUtilSetBits) for xMBUtilSetBits + modbus-port-stm32.o(i.eMBRegCoilsCB) refers to modbus-port-stm32.o(.bss) for ucRegCoilsBuf + modbus-port-stm32.o(i.eMBRegDiscreteCB) refers to delay.o(i.delay_us) for delay_us + modbus-port-stm32.o(i.eMBRegDiscreteCB) refers to mbutils.o(i.xMBUtilGetBits) for xMBUtilGetBits + modbus-port-stm32.o(i.eMBRegDiscreteCB) refers to modbus-port-stm32.o(.bss) for ucRegDiscBuf + modbus-port-stm32.o(i.eMBRegHoldingCB) refers to delay.o(i.delay_us) for delay_us + modbus-port-stm32.o(i.eMBRegHoldingCB) refers to modbus-port-stm32.o(.bss) for usRegHoldingBuf + modbus-port-stm32.o(i.eMBRegInputCB) refers to delay.o(i.delay_us) for delay_us + modbus-port-stm32.o(i.eMBRegInputCB) refers to modbus-port-stm32.o(.bss) for usRegInputBuf + modbus-port-stm32.o(i.prvvTIMERExpiredISR) refers to mb.o(.data) for pxMBPortCBTimerExpired + modbus-port-stm32.o(i.prvvUARTRxISR) refers to mb.o(.data) for pxMBFrameCBByteReceived + modbus-port-stm32.o(i.prvvUARTTxReadyISR) refers to mb.o(.data) for pxMBFrameCBTransmitterEmpty + modbus-port-stm32.o(i.vMBPortSerialEnable) refers to modbus-port-stm32.o(i.MB_485_Direct_Transmit) for MB_485_Direct_Transmit + modbus-port-stm32.o(i.xMBPortEventGet) refers to modbus-port-stm32.o(.data) for xEventInQueue + modbus-port-stm32.o(i.xMBPortEventInit) refers to modbus-port-stm32.o(.data) for xEventInQueue + modbus-port-stm32.o(i.xMBPortEventPost) refers to modbus-port-stm32.o(.data) for xEventInQueue + modbus-port-stm32.o(i.xMBPortSerialGetByte) refers to modbus-port-stm32.o(i.MB_485_Direct_Receive) for MB_485_Direct_Receive + modbus-port-stm32.o(i.xMBPortSerialInit) refers to modbus-port-stm32.o(i.MB_485_Direct_Receive) for MB_485_Direct_Receive + modbus-port-stm32.o(i.xMBPortSerialInit) refers to modbus-port-stm32.o(i.__NVIC_EnableIRQ) for __NVIC_EnableIRQ + modbus-port-stm32.o(i.xMBPortSerialInit) refers to system_stm32f1xx.o(.data) for SystemCoreClock + modbus-port-stm32.o(i.xMBPortSerialPutByte) refers to modbus-port-stm32.o(i.MB_485_Direct_Transmit) for MB_485_Direct_Transmit + modbus-port-stm32.o(i.xMBPortTimersInit) refers to modbus-port-stm32.o(i.__NVIC_EnableIRQ) for __NVIC_EnableIRQ + modbus-port-stm32.o(i.xMBPortTimersInit) refers to system_stm32f1xx.o(.data) for SystemCoreClock + modbus-port-stm32.o(.constdata) refers to modbus-port-stm32.o(.conststring) for .conststring + log10.o(i.__softfp_log10) refers (Special) to iusefp.o(.text) for __I$use$fp + log10.o(i.__softfp_log10) refers to log10.o(i.log10) for log10 + log10.o(i.log10) refers (Special) to iusefp.o(.text) for __I$use$fp + log10.o(i.log10) refers to dunder.o(i.__mathlib_dbl_infnan) for __mathlib_dbl_infnan + log10.o(i.log10) refers to errno.o(i.__set_errno) for __set_errno + log10.o(i.log10) refers to dunder.o(i.__mathlib_dbl_invalid) for __mathlib_dbl_invalid + log10.o(i.log10) refers to dunder.o(i.__mathlib_dbl_divzero) for __mathlib_dbl_divzero + log10.o(i.log10) refers to dscalb.o(.text) for __ARM_scalbn + log10.o(i.log10) refers to dflti.o(.text) for __aeabi_i2d + log10.o(i.log10) refers to log.o(i.log) for log + log10.o(i.log10) refers to dmul.o(.text) for __aeabi_dmul + log10.o(i.log10) refers to dadd.o(.text) for __aeabi_dadd + log10_x.o(i.____softfp_log10$lsc) refers (Special) to iusefp.o(.text) for __I$use$fp + log10_x.o(i.____softfp_log10$lsc) refers to log10_x.o(i.__log10$lsc) for __log10$lsc + log10_x.o(i.__log10$lsc) refers (Special) to iusefp.o(.text) for __I$use$fp + log10_x.o(i.__log10$lsc) refers to dunder.o(i.__mathlib_dbl_infnan) for __mathlib_dbl_infnan + log10_x.o(i.__log10$lsc) refers to errno.o(i.__set_errno) for __set_errno + log10_x.o(i.__log10$lsc) refers to dscalb.o(.text) for __ARM_scalbn + log10_x.o(i.__log10$lsc) refers to dflti.o(.text) for __aeabi_i2d + log10_x.o(i.__log10$lsc) refers to log.o(i.log) for log + log10_x.o(i.__log10$lsc) refers to dmul.o(.text) for __aeabi_dmul + log10_x.o(i.__log10$lsc) refers to dadd.o(.text) for __aeabi_dadd + sqrt.o(i.__softfp_sqrt) refers (Special) to iusefp.o(.text) for __I$use$fp + sqrt.o(i.__softfp_sqrt) refers to dsqrt.o(.text) for _dsqrt + sqrt.o(i.__softfp_sqrt) refers to errno.o(i.__set_errno) for __set_errno + sqrt.o(i.sqrt) refers (Special) to iusefp.o(.text) for __I$use$fp + sqrt.o(i.sqrt) refers to dsqrt.o(.text) for _dsqrt + sqrt.o(i.sqrt) refers to errno.o(i.__set_errno) for __set_errno + sqrt_x.o(i.____softfp_sqrt$lsc) refers (Special) to iusefp.o(.text) for __I$use$fp + sqrt_x.o(i.____softfp_sqrt$lsc) refers to cdcmple.o(.text) for __aeabi_cdcmple + sqrt_x.o(i.____softfp_sqrt$lsc) refers to errno.o(i.__set_errno) for __set_errno + sqrt_x.o(i.____softfp_sqrt$lsc) refers to dsqrt.o(.text) for _dsqrt + sqrt_x.o(i.__sqrt$lsc) refers (Special) to iusefp.o(.text) for __I$use$fp + sqrt_x.o(i.__sqrt$lsc) refers to cdcmple.o(.text) for __aeabi_cdcmple + sqrt_x.o(i.__sqrt$lsc) refers to errno.o(i.__set_errno) for __set_errno + sqrt_x.o(i.__sqrt$lsc) refers to dsqrt.o(.text) for _dsqrt + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000F) for __rt_final_cpp + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$00000011) for __rt_final_exit + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry12b.o(.ARM.Collect$$$$0000000E) for __rt_lib_shutdown_fini + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry7b.o(.ARM.Collect$$$$00000008) for _main_clock + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry8b.o(.ARM.Collect$$$$0000000A) for _main_cpp_init + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry5.o(.ARM.Collect$$$$00000004) for _main_scatterload + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry2.o(.ARM.Collect$$$$00000001) for _main_stk + printfb.o(i.__0fprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0fprintf$bare) refers to main.o(i.fputc) for fputc + printfb.o(i.__0printf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0printf$bare) refers to main.o(i.fputc) for fputc + printfb.o(i.__0printf$bare) refers to stdout.o(.data) for __stdout + printfb.o(i.__0snprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0snprintf$bare) refers to printfb.o(i._snputc) for _snputc + printfb.o(i.__0sprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0sprintf$bare) refers to printfb.o(i._sputc) for _sputc + printfb.o(i.__0vfprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vfprintf$bare) refers to main.o(i.fputc) for fputc + printfb.o(i.__0vprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vprintf$bare) refers to main.o(i.fputc) for fputc + printfb.o(i.__0vprintf$bare) refers to stdout.o(.data) for __stdout + printfb.o(i.__0vsnprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vsnprintf$bare) refers to printfb.o(i._snputc) for _snputc + printfb.o(i.__0vsprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vsprintf$bare) refers to printfb.o(i._sputc) for _sputc + printf0.o(i.__0fprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0fprintf$0) refers to main.o(i.fputc) for fputc + printf0.o(i.__0printf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0printf$0) refers to main.o(i.fputc) for fputc + printf0.o(i.__0printf$0) refers to stdout.o(.data) for __stdout + printf0.o(i.__0snprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0snprintf$0) refers to printf0.o(i._snputc) for _snputc + printf0.o(i.__0sprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0sprintf$0) refers to printf0.o(i._sputc) for _sputc + printf0.o(i.__0vfprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vfprintf$0) refers to main.o(i.fputc) for fputc + printf0.o(i.__0vprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vprintf$0) refers to main.o(i.fputc) for fputc + printf0.o(i.__0vprintf$0) refers to stdout.o(.data) for __stdout + printf0.o(i.__0vsnprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vsnprintf$0) refers to printf0.o(i._snputc) for _snputc + printf0.o(i.__0vsprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vsprintf$0) refers to printf0.o(i._sputc) for _sputc + printf1.o(i.__0fprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0fprintf$1) refers to main.o(i.fputc) for fputc + printf1.o(i.__0printf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0printf$1) refers to main.o(i.fputc) for fputc + printf1.o(i.__0printf$1) refers to stdout.o(.data) for __stdout + printf1.o(i.__0snprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0snprintf$1) refers to printf1.o(i._snputc) for _snputc + printf1.o(i.__0sprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0sprintf$1) refers to printf1.o(i._sputc) for _sputc + printf1.o(i.__0vfprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vfprintf$1) refers to main.o(i.fputc) for fputc + printf1.o(i.__0vprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vprintf$1) refers to main.o(i.fputc) for fputc + printf1.o(i.__0vprintf$1) refers to stdout.o(.data) for __stdout + printf1.o(i.__0vsnprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vsnprintf$1) refers to printf1.o(i._snputc) for _snputc + printf1.o(i.__0vsprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vsprintf$1) refers to printf1.o(i._sputc) for _sputc + printf1.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf2.o(i.__0fprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0fprintf$2) refers to main.o(i.fputc) for fputc + printf2.o(i.__0printf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0printf$2) refers to main.o(i.fputc) for fputc + printf2.o(i.__0printf$2) refers to stdout.o(.data) for __stdout + printf2.o(i.__0snprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0snprintf$2) refers to printf2.o(i._snputc) for _snputc + printf2.o(i.__0sprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0sprintf$2) refers to printf2.o(i._sputc) for _sputc + printf2.o(i.__0vfprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vfprintf$2) refers to main.o(i.fputc) for fputc + printf2.o(i.__0vprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vprintf$2) refers to main.o(i.fputc) for fputc + printf2.o(i.__0vprintf$2) refers to stdout.o(.data) for __stdout + printf2.o(i.__0vsnprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vsnprintf$2) refers to printf2.o(i._snputc) for _snputc + printf2.o(i.__0vsprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vsprintf$2) refers to printf2.o(i._sputc) for _sputc + printf3.o(i.__0fprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0fprintf$3) refers to main.o(i.fputc) for fputc + printf3.o(i.__0printf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0printf$3) refers to main.o(i.fputc) for fputc + printf3.o(i.__0printf$3) refers to stdout.o(.data) for __stdout + printf3.o(i.__0snprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0snprintf$3) refers to printf3.o(i._snputc) for _snputc + printf3.o(i.__0sprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0sprintf$3) refers to printf3.o(i._sputc) for _sputc + printf3.o(i.__0vfprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vfprintf$3) refers to main.o(i.fputc) for fputc + printf3.o(i.__0vprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vprintf$3) refers to main.o(i.fputc) for fputc + printf3.o(i.__0vprintf$3) refers to stdout.o(.data) for __stdout + printf3.o(i.__0vsnprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vsnprintf$3) refers to printf3.o(i._snputc) for _snputc + printf3.o(i.__0vsprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vsprintf$3) refers to printf3.o(i._sputc) for _sputc + printf3.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf4.o(i.__0fprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0fprintf$4) refers to main.o(i.fputc) for fputc + printf4.o(i.__0printf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0printf$4) refers to main.o(i.fputc) for fputc + printf4.o(i.__0printf$4) refers to stdout.o(.data) for __stdout + printf4.o(i.__0snprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0snprintf$4) refers to printf4.o(i._snputc) for _snputc + printf4.o(i.__0sprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0sprintf$4) refers to printf4.o(i._sputc) for _sputc + printf4.o(i.__0vfprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vfprintf$4) refers to main.o(i.fputc) for fputc + printf4.o(i.__0vprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vprintf$4) refers to main.o(i.fputc) for fputc + printf4.o(i.__0vprintf$4) refers to stdout.o(.data) for __stdout + printf4.o(i.__0vsnprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vsnprintf$4) refers to printf4.o(i._snputc) for _snputc + printf4.o(i.__0vsprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vsprintf$4) refers to printf4.o(i._sputc) for _sputc + printf4.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf5.o(i.__0fprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0fprintf$5) refers to main.o(i.fputc) for fputc + printf5.o(i.__0printf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0printf$5) refers to main.o(i.fputc) for fputc + printf5.o(i.__0printf$5) refers to stdout.o(.data) for __stdout + printf5.o(i.__0snprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0snprintf$5) refers to printf5.o(i._snputc) for _snputc + printf5.o(i.__0sprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0sprintf$5) refers to printf5.o(i._sputc) for _sputc + printf5.o(i.__0vfprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vfprintf$5) refers to main.o(i.fputc) for fputc + printf5.o(i.__0vprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vprintf$5) refers to main.o(i.fputc) for fputc + printf5.o(i.__0vprintf$5) refers to stdout.o(.data) for __stdout + printf5.o(i.__0vsnprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vsnprintf$5) refers to printf5.o(i._snputc) for _snputc + printf5.o(i.__0vsprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vsprintf$5) refers to printf5.o(i._sputc) for _sputc + printf5.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf6.o(i.__0fprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0fprintf$6) refers to main.o(i.fputc) for fputc + printf6.o(i.__0printf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0printf$6) refers to main.o(i.fputc) for fputc + printf6.o(i.__0printf$6) refers to stdout.o(.data) for __stdout + printf6.o(i.__0snprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0snprintf$6) refers to printf6.o(i._snputc) for _snputc + printf6.o(i.__0sprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0sprintf$6) refers to printf6.o(i._sputc) for _sputc + printf6.o(i.__0vfprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vfprintf$6) refers to main.o(i.fputc) for fputc + printf6.o(i.__0vprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vprintf$6) refers to main.o(i.fputc) for fputc + printf6.o(i.__0vprintf$6) refers to stdout.o(.data) for __stdout + printf6.o(i.__0vsnprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vsnprintf$6) refers to printf6.o(i._snputc) for _snputc + printf6.o(i.__0vsprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vsprintf$6) refers to printf6.o(i._sputc) for _sputc + printf6.o(i._printf_core) refers to printf6.o(i._printf_pre_padding) for _printf_pre_padding + printf6.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf6.o(i._printf_core) refers to printf6.o(i._printf_post_padding) for _printf_post_padding + printf7.o(i.__0fprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0fprintf$7) refers to main.o(i.fputc) for fputc + printf7.o(i.__0printf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0printf$7) refers to main.o(i.fputc) for fputc + printf7.o(i.__0printf$7) refers to stdout.o(.data) for __stdout + printf7.o(i.__0snprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0snprintf$7) refers to printf7.o(i._snputc) for _snputc + printf7.o(i.__0sprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0sprintf$7) refers to printf7.o(i._sputc) for _sputc + printf7.o(i.__0vfprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vfprintf$7) refers to main.o(i.fputc) for fputc + printf7.o(i.__0vprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vprintf$7) refers to main.o(i.fputc) for fputc + printf7.o(i.__0vprintf$7) refers to stdout.o(.data) for __stdout + printf7.o(i.__0vsnprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vsnprintf$7) refers to printf7.o(i._snputc) for _snputc + printf7.o(i.__0vsprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vsprintf$7) refers to printf7.o(i._sputc) for _sputc + printf7.o(i._printf_core) refers to printf7.o(i._printf_pre_padding) for _printf_pre_padding + printf7.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf7.o(i._printf_core) refers to printf7.o(i._printf_post_padding) for _printf_post_padding + printf8.o(i.__0fprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0fprintf$8) refers to main.o(i.fputc) for fputc + printf8.o(i.__0printf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0printf$8) refers to main.o(i.fputc) for fputc + printf8.o(i.__0printf$8) refers to stdout.o(.data) for __stdout + printf8.o(i.__0snprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0snprintf$8) refers to printf8.o(i._snputc) for _snputc + printf8.o(i.__0sprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0sprintf$8) refers to printf8.o(i._sputc) for _sputc + printf8.o(i.__0vfprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vfprintf$8) refers to main.o(i.fputc) for fputc + printf8.o(i.__0vprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vprintf$8) refers to main.o(i.fputc) for fputc + printf8.o(i.__0vprintf$8) refers to stdout.o(.data) for __stdout + printf8.o(i.__0vsnprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vsnprintf$8) refers to printf8.o(i._snputc) for _snputc + printf8.o(i.__0vsprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vsprintf$8) refers to printf8.o(i._sputc) for _sputc + printf8.o(i._printf_core) refers to printf8.o(i._printf_pre_padding) for _printf_pre_padding + printf8.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf8.o(i._printf_core) refers to printf8.o(i._printf_post_padding) for _printf_post_padding + printfa.o(i.__0fprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0fprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0fprintf) refers to main.o(i.fputc) for fputc + printfa.o(i.__0printf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0printf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0printf) refers to main.o(i.fputc) for fputc + printfa.o(i.__0printf) refers to stdout.o(.data) for __stdout + printfa.o(i.__0snprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0snprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0snprintf) refers to printfa.o(i._snputc) for _snputc + printfa.o(i.__0sprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0sprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0sprintf) refers to printfa.o(i._sputc) for _sputc + printfa.o(i.__0vfprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vfprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vfprintf) refers to main.o(i.fputc) for fputc + printfa.o(i.__0vprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vprintf) refers to main.o(i.fputc) for fputc + printfa.o(i.__0vprintf) refers to stdout.o(.data) for __stdout + printfa.o(i.__0vsnprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vsnprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vsnprintf) refers to printfa.o(i._snputc) for _snputc + printfa.o(i.__0vsprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vsprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vsprintf) refers to printfa.o(i._sputc) for _sputc + printfa.o(i._fp_digits) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._fp_digits) refers to dmul.o(.text) for __aeabi_dmul + printfa.o(i._fp_digits) refers to ddiv.o(.text) for __aeabi_ddiv + printfa.o(i._fp_digits) refers to cdrcmple.o(.text) for __aeabi_cdrcmple + printfa.o(i._fp_digits) refers to dadd.o(.text) for __aeabi_dadd + printfa.o(i._fp_digits) refers to dfixul.o(.text) for __aeabi_d2ulz + printfa.o(i._fp_digits) refers to uldiv.o(.text) for __aeabi_uldivmod + printfa.o(i._printf_core) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_core) refers to printfa.o(i._printf_pre_padding) for _printf_pre_padding + printfa.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printfa.o(i._printf_core) refers to printfa.o(i._printf_post_padding) for _printf_post_padding + printfa.o(i._printf_core) refers to printfa.o(i._fp_digits) for _fp_digits + printfa.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printfa.o(i._printf_post_padding) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_pre_padding) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._snputc) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._sputc) refers (Special) to iusefp.o(.text) for __I$use$fp + fadd.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + fadd.o(.text) refers to fepilogue.o(.text) for _float_epilogue + fmul.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + fdiv.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + fdiv.o(.text) refers to fepilogue.o(.text) for _float_round + dmul.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dmul.o(.text) refers to depilogue.o(.text) for _double_epilogue + ddiv.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + ddiv.o(.text) refers to depilogue.o(.text) for _double_round + fflti.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + fflti.o(.text) refers to fepilogue.o(.text) for _float_epilogue + ffltui.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + ffltui.o(.text) refers to fepilogue.o(.text) for _float_epilogue + ffixi.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + ffixui.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dfixi.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dfixi.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dfixui.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dfixui.o(.text) refers to llushr.o(.text) for __aeabi_llsr + f2d.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + cdcmple.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + d2f.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + d2f.o(.text) refers to fepilogue.o(.text) for _float_round + cfcmple.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + cfrcmple.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dunder.o(i.__mathlib_dbl_divzero) refers to ddiv.o(.text) for __aeabi_ddiv + dunder.o(i.__mathlib_dbl_infnan) refers to dscalb.o(.text) for __ARM_scalbn + dunder.o(i.__mathlib_dbl_infnan2) refers to dadd.o(.text) for __aeabi_dadd + dunder.o(i.__mathlib_dbl_invalid) refers to ddiv.o(.text) for __aeabi_ddiv + dunder.o(i.__mathlib_dbl_overflow) refers to dscalb.o(.text) for __ARM_scalbn + dunder.o(i.__mathlib_dbl_posinfnan) refers to dmul.o(.text) for __aeabi_dmul + dunder.o(i.__mathlib_dbl_underflow) refers to dscalb.o(.text) for __ARM_scalbn + log.o(i.__softfp_log) refers (Special) to iusefp.o(.text) for __I$use$fp + log.o(i.__softfp_log) refers to log.o(i.log) for log + log.o(i.log) refers (Special) to iusefp.o(.text) for __I$use$fp + log.o(i.log) refers to dunder.o(i.__mathlib_dbl_infnan) for __mathlib_dbl_infnan + log.o(i.log) refers to errno.o(i.__set_errno) for __set_errno + log.o(i.log) refers to dunder.o(i.__mathlib_dbl_invalid) for __mathlib_dbl_invalid + log.o(i.log) refers to dunder.o(i.__mathlib_dbl_divzero) for __mathlib_dbl_divzero + log.o(i.log) refers to dscalb.o(.text) for __ARM_scalbn + log.o(i.log) refers to dadd.o(.text) for __aeabi_dsub + log.o(i.log) refers to cdcmple.o(.text) for __aeabi_cdcmpeq + log.o(i.log) refers to dflti.o(.text) for __aeabi_i2d + log.o(i.log) refers to dmul.o(.text) for __aeabi_dmul + log.o(i.log) refers to ddiv.o(.text) for __aeabi_ddiv + log.o(i.log) refers to poly.o(i.__kernel_poly) for __kernel_poly + log.o(i.log) refers to qnan.o(.constdata) for __mathlib_zero + log.o(i.log) refers to log.o(.constdata) for .constdata + log.o(.constdata) refers (Special) to iusefp.o(.text) for __I$use$fp + log_x.o(i.____softfp_log$lsc) refers (Special) to iusefp.o(.text) for __I$use$fp + log_x.o(i.____softfp_log$lsc) refers to log_x.o(i.__log$lsc) for __log$lsc + log_x.o(i.__log$lsc) refers (Special) to iusefp.o(.text) for __I$use$fp + log_x.o(i.__log$lsc) refers to dunder.o(i.__mathlib_dbl_infnan) for __mathlib_dbl_infnan + log_x.o(i.__log$lsc) refers to errno.o(i.__set_errno) for __set_errno + log_x.o(i.__log$lsc) refers to dscalb.o(.text) for __ARM_scalbn + log_x.o(i.__log$lsc) refers to dadd.o(.text) for __aeabi_dsub + log_x.o(i.__log$lsc) refers to cdcmple.o(.text) for __aeabi_cdcmpeq + log_x.o(i.__log$lsc) refers to dflti.o(.text) for __aeabi_i2d + log_x.o(i.__log$lsc) refers to dmul.o(.text) for __aeabi_dmul + log_x.o(i.__log$lsc) refers to ddiv.o(.text) for __aeabi_ddiv + log_x.o(i.__log$lsc) refers to poly.o(i.__kernel_poly) for __kernel_poly + log_x.o(i.__log$lsc) refers to qnan.o(.constdata) for __mathlib_zero + log_x.o(i.__log$lsc) refers to log_x.o(.constdata) for .constdata + log_x.o(.constdata) refers (Special) to iusefp.o(.text) for __I$use$fp + entry2.o(.ARM.Collect$$$$00000001) refers to entry2.o(.ARM.Collect$$$$00002712) for __lit__00000000 + entry2.o(.ARM.Collect$$$$00002712) refers to startup_stm32f103xe.o(STACK) for __initial_sp + entry2.o(__vectab_stack_and_reset_area) refers to startup_stm32f103xe.o(STACK) for __initial_sp + entry2.o(__vectab_stack_and_reset_area) refers to entry.o(.ARM.Collect$$$$00000000) for __main + entry5.o(.ARM.Collect$$$$00000004) refers to init.o(.text) for __scatterload + entry9a.o(.ARM.Collect$$$$0000000B) refers to main.o(i.main) for main + entry9b.o(.ARM.Collect$$$$0000000C) refers to main.o(i.main) for main + uldiv.o(.text) refers to llushr.o(.text) for __aeabi_llsr + uldiv.o(.text) refers to llshl.o(.text) for __aeabi_llsl + errno.o(i.__aeabi_errno_addr) refers to errno.o(.data) for .data + errno.o(i.__read_errno) refers to errno.o(.data) for .data + errno.o(i.__set_errno) refers to errno.o(.data) for .data + depilogue.o(.text) refers to llshl.o(.text) for __aeabi_llsl + depilogue.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dadd.o(.text) refers to llshl.o(.text) for __aeabi_llsl + dadd.o(.text) refers to llsshr.o(.text) for __aeabi_lasr + dadd.o(.text) refers to depilogue.o(.text) for _double_epilogue + dsqrt.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dsqrt.o(.text) refers to depilogue.o(.text) for _double_round + dflti.o(.text) refers to depilogue.o(.text) for _double_epilogue + dfixul.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dfixul.o(.text) refers to llshl.o(.text) for __aeabi_llsl + poly.o(i.__kernel_poly) refers (Special) to iusefp.o(.text) for __I$use$fp + poly.o(i.__kernel_poly) refers to dmul.o(.text) for __aeabi_dmul + poly.o(i.__kernel_poly) refers to dadd.o(.text) for __aeabi_dadd + qnan.o(.constdata) refers (Special) to iusefp.o(.text) for __I$use$fp + init.o(.text) refers to entry5.o(.ARM.Collect$$$$00000004) for __main_after_scatterload + + +============================================================================== + +Removing Unused input sections from the image. + + Removing startup_stm32f103xe.o(HEAP), (512 bytes). + Removing tim.o(.rev16_text), (4 bytes). + Removing tim.o(.revsh_text), (4 bytes). + Removing tim.o(.rrx_text), (6 bytes). + Removing stepmotor.o(.rev16_text), (4 bytes). + Removing stepmotor.o(.revsh_text), (4 bytes). + Removing stepmotor.o(.rrx_text), (6 bytes). + Removing main.o(.rev16_text), (4 bytes). + Removing main.o(.revsh_text), (4 bytes). + Removing main.o(.rrx_text), (6 bytes). + Removing yousuan.o(.rev16_text), (4 bytes). + Removing yousuan.o(.revsh_text), (4 bytes). + Removing yousuan.o(.rrx_text), (6 bytes). + Removing freertos.o(.rev16_text), (4 bytes). + Removing freertos.o(.revsh_text), (4 bytes). + Removing freertos.o(.rrx_text), (6 bytes). + Removing stm32f1xx_it.o(.rev16_text), (4 bytes). + Removing stm32f1xx_it.o(.revsh_text), (4 bytes). + Removing stm32f1xx_it.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_msp.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_msp.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_msp.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_msp.o(i.HAL_ADC_MspDeInit), (52 bytes). + Removing stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspDeInit), (96 bytes). + Removing stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspDeInit), (40 bytes). + Removing stm32f1xx_hal_msp.o(i.HAL_UART_MspDeInit), (88 bytes). + Removing stm32f1xx_hal_timebase_tim.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_timebase_tim.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_timebase_tim.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_timebase_tim.o(i.HAL_ResumeTick), (24 bytes). + Removing stm32f1xx_hal_timebase_tim.o(i.HAL_SuspendTick), (24 bytes). + Removing delay.o(.rev16_text), (4 bytes). + Removing delay.o(.revsh_text), (4 bytes). + Removing delay.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_gpio_ex.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_gpio_ex.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_gpio_ex.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_gpio_ex.o(i.HAL_GPIOEx_ConfigEventout), (24 bytes). + Removing stm32f1xx_hal_gpio_ex.o(i.HAL_GPIOEx_DisableEventout), (20 bytes). + Removing stm32f1xx_hal_gpio_ex.o(i.HAL_GPIOEx_EnableEventout), (20 bytes). + Removing stm32f1xx_hal_tim.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_tim.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_tim.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_DeInit), (120 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_GetState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start), (132 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_DMA), (224 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop), (50 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_DMA), (70 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Stop_IT), (62 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigOCrefClear), (278 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigTI1Input), (22 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurstState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiReadStart), (476 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_MultiWriteStart), (476 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStart), (42 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_ReadStop), (140 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStart), (42 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_DMABurst_WriteStop), (140 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_DeInit), (96 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_GetState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Init), (196 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start), (204 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_DMA), (556 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Start_IT), (252 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop), (214 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_DMA), (280 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_Encoder_Stop_IT), (256 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ErrorCallback), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_GenerateEvent), (54 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_GetActiveChannel), (6 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_GetChannelState), (38 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_ConfigChannel), (222 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_DeInit), (120 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_GetState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Init), (102 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start), (292 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_DMA), (584 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Start_IT), (376 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop), (138 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_DMA), (244 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_IC_Stop_IT), (222 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_ConfigChannel), (112 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DeInit), (120 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_GetState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Init), (102 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start), (244 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_DMA), (564 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Start_IT), (324 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop), (168 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_DMA), (276 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OC_Stop_IT), (252 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_ConfigChannel), (310 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_DeInit), (96 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_GetState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Init), (102 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start), (140 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Start_IT), (164 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop), (160 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_OnePulse_Stop_IT), (184 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_DeInit), (120 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_GetState), (8 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_DMA), (564 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start_IT), (324 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop), (168 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_DMA), (276 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Stop_IT), (252 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PeriodElapsedCallback), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_PeriodElapsedHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_ReadCapturedValue), (50 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro), (108 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_SlaveConfigSynchro_IT), (108 bytes). + Removing stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMACaptureCplt), (122 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMACaptureHalfCplt), (64 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseCplt), (104 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMADelayPulseHalfCplt), (64 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMAError), (94 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedCplt), (26 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMAPeriodElapsedHalfCplt), (14 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMATriggerCplt), (26 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_DMATriggerHalfCplt), (14 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_SlaveTimer_SetConfig), (178 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_TI1_SetConfig), (124 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_TI2_SetConfig), (58 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_TI3_SetConfig), (56 bytes). + Removing stm32f1xx_hal_tim.o(i.TIM_TI4_SetConfig), (60 bytes). + Removing stm32f1xx_hal_tim_ex.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_tim_ex.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_tim_ex.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent), (134 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_DMA), (164 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigCommutEvent_IT), (134 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_GetChannelNState), (38 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_DeInit), (96 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_GetState), (8 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Init), (234 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_MspInit), (2 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start), (192 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_DMA), (256 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Start_IT), (204 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop), (78 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_DMA), (84 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_HallSensor_Stop_IT), (90 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start), (220 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_DMA), (480 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Start_IT), (300 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop), (136 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_DMA), (220 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OCN_Stop_IT), (230 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start), (118 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Start_IT), (142 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop), (138 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_OnePulseN_Stop_IT), (162 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start), (220 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_DMA), (480 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Start_IT), (300 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop), (136 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_DMA), (220 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_PWMN_Stop_IT), (230 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_RemapConfig), (6 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationCplt), (20 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.TIMEx_DMACommutationHalfCplt), (20 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.TIM_CCxNChannelCmd), (34 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.TIM_DMADelayPulseNCplt), (82 bytes). + Removing stm32f1xx_hal_tim_ex.o(i.TIM_DMAErrorCCxN), (68 bytes). + Removing stm32f1xx_hal_adc.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_adc.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_adc.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_AnalogWDGConfig), (148 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_DeInit), (268 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_GetError), (6 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_GetState), (6 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_GetValue), (8 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_IRQHandler), (274 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_LevelOutOfWindowCallback), (2 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_MspInit), (2 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_PollForConversion), (384 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_PollForEvent), (118 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_Start), (304 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_Start_IT), (316 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_Stop), (64 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_Stop_DMA), (106 bytes). + Removing stm32f1xx_hal_adc.o(i.HAL_ADC_Stop_IT), (76 bytes). + Removing stm32f1xx_hal_adc_ex.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_adc_ex.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_adc_ex.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedConfigChannel), (628 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedConvCpltCallback), (2 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedGetValue), (50 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedPollForConversion), (364 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStart), (236 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStart_IT), (248 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStop), (94 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_InjectedStop_IT), (106 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeConfigChannel), (124 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeGetValue), (36 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStart_DMA), (284 bytes). + Removing stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_MultiModeStop_DMA), (148 bytes). + Removing stm32f1xx_hal.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal.o(i.HAL_DBGMCU_DisableDBGSleepMode), (20 bytes). + Removing stm32f1xx_hal.o(i.HAL_DBGMCU_DisableDBGStandbyMode), (20 bytes). + Removing stm32f1xx_hal.o(i.HAL_DBGMCU_DisableDBGStopMode), (20 bytes). + Removing stm32f1xx_hal.o(i.HAL_DBGMCU_EnableDBGSleepMode), (20 bytes). + Removing stm32f1xx_hal.o(i.HAL_DBGMCU_EnableDBGStandbyMode), (20 bytes). + Removing stm32f1xx_hal.o(i.HAL_DBGMCU_EnableDBGStopMode), (20 bytes). + Removing stm32f1xx_hal.o(i.HAL_DeInit), (36 bytes). + Removing stm32f1xx_hal.o(i.HAL_Delay), (40 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetDEVID), (16 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetHalVersion), (8 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetREVID), (12 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetTickFreq), (12 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetTickPrio), (12 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetUIDw0), (12 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetUIDw1), (12 bytes). + Removing stm32f1xx_hal.o(i.HAL_GetUIDw2), (12 bytes). + Removing stm32f1xx_hal.o(i.HAL_InitTick), (76 bytes). + Removing stm32f1xx_hal.o(i.HAL_MspDeInit), (2 bytes). + Removing stm32f1xx_hal.o(i.HAL_MspInit), (2 bytes). + Removing stm32f1xx_hal.o(i.HAL_ResumeTick), (18 bytes). + Removing stm32f1xx_hal.o(i.HAL_SetTickFreq), (48 bytes). + Removing stm32f1xx_hal.o(i.HAL_SuspendTick), (18 bytes). + Removing stm32f1xx_hal_rcc.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_rcc.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_rcc.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_CSSCallback), (2 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_DeInit), (272 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_DisableCSS), (12 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_EnableCSS), (12 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_GetOscConfig), (200 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_MCOConfig), (100 bytes). + Removing stm32f1xx_hal_rcc.o(i.HAL_RCC_NMI_IRQHandler), (32 bytes). + Removing stm32f1xx_hal_rcc_ex.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_rcc_ex.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_rcc_ex.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKConfig), (84 bytes). + Removing stm32f1xx_hal_gpio.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_gpio.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_gpio.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_gpio.o(i.HAL_GPIO_DeInit), (340 bytes). + Removing stm32f1xx_hal_gpio.o(i.HAL_GPIO_EXTI_Callback), (2 bytes). + Removing stm32f1xx_hal_gpio.o(i.HAL_GPIO_LockPin), (46 bytes). + Removing stm32f1xx_hal_gpio.o(i.HAL_GPIO_ReadPin), (16 bytes). + Removing stm32f1xx_hal_gpio.o(i.HAL_GPIO_TogglePin), (20 bytes). + Removing stm32f1xx_hal_dma.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_dma.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_dma.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_Abort), (86 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_Abort_IT), (424 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_DeInit), (140 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_GetError), (6 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_GetState), (8 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_PollForTransfer), (1620 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_RegisterCallback), (90 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_Start), (114 bytes). + Removing stm32f1xx_hal_dma.o(i.HAL_DMA_UnRegisterCallback), (106 bytes). + Removing stm32f1xx_hal_cortex.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_cortex.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_cortex.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_ClearPendingIRQ), (36 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_DisableIRQ), (68 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_GetActive), (48 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_GetPendingIRQ), (48 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_GetPriority), (148 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_GetPriorityGrouping), (8 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPendingIRQ), (36 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_NVIC_SystemReset), (68 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_CLKSourceConfig), (40 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Callback), (2 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_Config), (52 bytes). + Removing stm32f1xx_hal_cortex.o(i.HAL_SYSTICK_IRQHandler), (8 bytes). + Removing stm32f1xx_hal_pwr.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_pwr.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_pwr.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_ConfigPVD), (180 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_DeInit), (28 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_DisableBkUpAccess), (12 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_DisablePVD), (12 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_DisableSEVOnPend), (20 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_DisableSleepOnExit), (20 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_DisableWakeUpPin), (28 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnableBkUpAccess), (12 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnablePVD), (12 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnableSEVOnPend), (20 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnableSleepOnExit), (20 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnableWakeUpPin), (28 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnterSLEEPMode), (32 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnterSTANDBYMode), (40 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_EnterSTOPMode), (84 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_PVDCallback), (2 bytes). + Removing stm32f1xx_hal_pwr.o(i.HAL_PWR_PVD_IRQHandler), (32 bytes). + Removing stm32f1xx_hal_pwr.o(i.PWR_OverloadWfe), (6 bytes). + Removing stm32f1xx_hal_flash.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_flash.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_flash.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_flash.o(i.FLASH_Program_HalfWord), (32 bytes). + Removing stm32f1xx_hal_flash.o(i.FLASH_SetErrorCode), (132 bytes). + Removing stm32f1xx_hal_flash.o(i.FLASH_WaitForLastOperation), (112 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_EndOfOperationCallback), (2 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_GetError), (12 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_IRQHandler), (376 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_Lock), (20 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_OB_Launch), (8 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_OB_Lock), (20 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_OB_Unlock), (44 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_OperationErrorCallback), (2 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_Program), (176 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_Program_IT), (100 bytes). + Removing stm32f1xx_hal_flash.o(i.HAL_FLASH_Unlock), (48 bytes). + Removing stm32f1xx_hal_flash.o(.bss), (32 bytes). + Removing stm32f1xx_hal_flash_ex.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_flash_ex.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_flash_ex.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_MassErase), (40 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_DisableWRP), (232 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_EnableWRP), (236 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetRDP), (28 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetUser), (16 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_GetWRP), (12 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_ProgramData), (76 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_RDP_LevelConfig), (124 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_OB_UserConfig), (84 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.FLASH_PageErase), (40 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase), (176 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_Erase_IT), (80 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBErase), (96 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBGetConfig), (28 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBGetUserData), (40 bytes). + Removing stm32f1xx_hal_flash_ex.o(i.HAL_FLASHEx_OBProgram), (200 bytes). + Removing stm32f1xx_hal_exti.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_exti.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_exti.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_ClearConfigLine), (120 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_ClearPending), (28 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_GenerateSWI), (24 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_GetConfigLine), (156 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_GetHandle), (14 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_GetPending), (36 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_IRQHandler), (44 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_RegisterCallback), (20 bytes). + Removing stm32f1xx_hal_exti.o(i.HAL_EXTI_SetConfigLine), (240 bytes). + Removing stm32f1xx_hal_uart.o(.rev16_text), (4 bytes). + Removing stm32f1xx_hal_uart.o(.revsh_text), (4 bytes). + Removing stm32f1xx_hal_uart.o(.rrx_text), (6 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_EnableReceiver), (68 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_EnableTransmitter), (68 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_HalfDuplex_Init), (122 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_LIN_Init), (146 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_LIN_SendBreak), (80 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_EnterMuteMode), (82 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_ExitMuteMode), (82 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_MultiProcessor_Init), (158 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_GetRxEventType), (6 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle), (296 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_DMA), (112 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_ReceiveToIdle_IT), (114 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Abort), (278 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive), (194 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceiveCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortReceive_IT), (216 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit), (124 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmitCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_AbortTransmit_IT), (144 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Abort_IT), (328 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAPause), (166 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAResume), (170 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DMAStop), (138 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_DeInit), (62 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_ErrorCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_GetError), (6 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_GetState), (20 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_IRQHandler), (740 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_MspDeInit), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_MspInit), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive), (194 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive_DMA), (44 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Receive_IT), (44 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_RxCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_DMA), (140 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_Transmit_IT), (56 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_TxCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback), (2 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMAAbortOnError), (20 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMAError), (80 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMAReceiveCplt), (180 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMARxAbortCallback), (56 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMARxHalfCplt), (36 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMARxOnlyAbortCallback), (28 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATransmitCplt), (88 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATxAbortCallback), (56 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATxHalfCplt), (14 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_DMATxOnlyAbortCallback), (24 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_EndTransmit_IT), (32 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_EndTxTransfer), (38 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_Receive_IT), (252 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_Start_Receive_DMA), (200 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_Start_Receive_IT), (64 bytes). + Removing stm32f1xx_hal_uart.o(i.UART_Transmit_IT), (96 bytes). + Removing system_stm32f1xx.o(.rev16_text), (4 bytes). + Removing system_stm32f1xx.o(.revsh_text), (4 bytes). + Removing system_stm32f1xx.o(.rrx_text), (6 bytes). + Removing system_stm32f1xx.o(i.SystemCoreClockUpdate), (164 bytes). + Removing event_groups.o(i.prvTestWaitCondition), (30 bytes). + Removing event_groups.o(i.uxEventGroupGetNumber), (14 bytes). + Removing event_groups.o(i.vEventGroupClearBitsCallback), (16 bytes). + Removing event_groups.o(i.vEventGroupDelete), (86 bytes). + Removing event_groups.o(i.vEventGroupSetBitsCallback), (16 bytes). + Removing event_groups.o(i.vEventGroupSetNumber), (4 bytes). + Removing event_groups.o(i.xEventGroupClearBits), (92 bytes). + Removing event_groups.o(i.xEventGroupClearBitsFromISR), (28 bytes). + Removing event_groups.o(i.xEventGroupCreate), (30 bytes). + Removing event_groups.o(i.xEventGroupCreateStatic), (90 bytes). + Removing event_groups.o(i.xEventGroupGetBitsFromISR), (44 bytes). + Removing event_groups.o(i.xEventGroupSetBits), (206 bytes). + Removing event_groups.o(i.xEventGroupSetBitsFromISR), (36 bytes). + Removing event_groups.o(i.xEventGroupSync), (272 bytes). + Removing event_groups.o(i.xEventGroupWaitBits), (344 bytes). + Removing queue.o(i.pcQueueGetName), (44 bytes). + Removing queue.o(i.prvGetDisinheritPriorityAfterTimeout), (20 bytes). + Removing queue.o(i.prvInitialiseMutex), (30 bytes). + Removing queue.o(i.ucQueueGetQueueType), (8 bytes). + Removing queue.o(i.uxQueueGetQueueNumber), (6 bytes). + Removing queue.o(i.uxQueueMessagesWaiting), (42 bytes). + Removing queue.o(i.uxQueueMessagesWaitingFromISR), (34 bytes). + Removing queue.o(i.uxQueueSpacesAvailable), (48 bytes). + Removing queue.o(i.vQueueDelete), (50 bytes). + Removing queue.o(i.vQueueSetQueueNumber), (4 bytes). + Removing queue.o(i.vQueueUnregisterQueue), (48 bytes). + Removing queue.o(i.xQueueCreateCountingSemaphore), (92 bytes). + Removing queue.o(i.xQueueCreateCountingSemaphoreStatic), (100 bytes). + Removing queue.o(i.xQueueCreateMutex), (34 bytes). + Removing queue.o(i.xQueueCreateMutexStatic), (42 bytes). + Removing queue.o(i.xQueueGenericCreate), (90 bytes). + Removing queue.o(i.xQueueGetMutexHolder), (28 bytes). + Removing queue.o(i.xQueueGetMutexHolderFromISR), (38 bytes). + Removing queue.o(i.xQueueGiveFromISR), (224 bytes). + Removing queue.o(i.xQueueGiveMutexRecursive), (72 bytes). + Removing queue.o(i.xQueueIsQueueEmptyFromISR), (42 bytes). + Removing queue.o(i.xQueueIsQueueFullFromISR), (46 bytes). + Removing queue.o(i.xQueuePeek), (368 bytes). + Removing queue.o(i.xQueuePeekFromISR), (176 bytes). + Removing queue.o(i.xQueueReceiveFromISR), (202 bytes). + Removing queue.o(i.xQueueSemaphoreTake), (440 bytes). + Removing queue.o(i.xQueueTakeMutexRecursive), (78 bytes). + Removing stream_buffer.o(i.prvBytesInBuffer), (24 bytes). + Removing stream_buffer.o(i.prvInitialiseNewStreamBuffer), (86 bytes). + Removing stream_buffer.o(i.prvReadBytesFromBuffer), (202 bytes). + Removing stream_buffer.o(i.prvReadMessageFromBuffer), (72 bytes). + Removing stream_buffer.o(i.prvWriteBytesToBuffer), (186 bytes). + Removing stream_buffer.o(i.prvWriteMessageToBuffer), (92 bytes). + Removing stream_buffer.o(i.ucStreamBufferGetStreamBufferType), (10 bytes). + Removing stream_buffer.o(i.uxStreamBufferGetStreamBufferNumber), (6 bytes). + Removing stream_buffer.o(i.vStreamBufferDelete), (56 bytes). + Removing stream_buffer.o(i.vStreamBufferSetStreamBufferNumber), (4 bytes). + Removing stream_buffer.o(i.xStreamBufferBytesAvailable), (42 bytes). + Removing stream_buffer.o(i.xStreamBufferGenericCreate), (160 bytes). + Removing stream_buffer.o(i.xStreamBufferGenericCreateStatic), (238 bytes). + Removing stream_buffer.o(i.xStreamBufferIsEmpty), (46 bytes). + Removing stream_buffer.o(i.xStreamBufferIsFull), (64 bytes). + Removing stream_buffer.o(i.xStreamBufferNextMessageLengthBytes), (120 bytes). + Removing stream_buffer.o(i.xStreamBufferReceive), (254 bytes). + Removing stream_buffer.o(i.xStreamBufferReceiveCompletedFromISR), (102 bytes). + Removing stream_buffer.o(i.xStreamBufferReceiveFromISR), (184 bytes). + Removing stream_buffer.o(i.xStreamBufferReset), (74 bytes). + Removing stream_buffer.o(i.xStreamBufferSend), (312 bytes). + Removing stream_buffer.o(i.xStreamBufferSendCompletedFromISR), (102 bytes). + Removing stream_buffer.o(i.xStreamBufferSendFromISR), (184 bytes). + Removing stream_buffer.o(i.xStreamBufferSetTriggerLevel), (50 bytes). + Removing stream_buffer.o(i.xStreamBufferSpacesAvailable), (54 bytes). + Removing tasks.o(i.eTaskGetState), (148 bytes). + Removing tasks.o(i.pcTaskGetName), (48 bytes). + Removing tasks.o(i.prvListTasksWithinSingleList), (106 bytes). + Removing tasks.o(i.prvTaskCheckFreeStackSpace), (22 bytes). + Removing tasks.o(i.prvTaskIsTaskSuspended), (88 bytes). + Removing tasks.o(i.pvTaskIncrementMutexHeldCount), (32 bytes). + Removing tasks.o(i.ulTaskNotifyTake), (116 bytes). + Removing tasks.o(i.ulTaskNotifyValueClear), (52 bytes). + Removing tasks.o(i.uxTaskGetNumberOfTasks), (12 bytes). + Removing tasks.o(i.uxTaskGetStackHighWaterMark), (40 bytes). + Removing tasks.o(i.uxTaskGetSystemState), (176 bytes). + Removing tasks.o(i.uxTaskGetTaskNumber), (14 bytes). + Removing tasks.o(i.uxTaskPriorityGet), (36 bytes). + Removing tasks.o(i.uxTaskPriorityGetFromISR), (68 bytes). + Removing tasks.o(i.uxTaskResetEventItemValue), (28 bytes). + Removing tasks.o(i.vTaskDelayUntil), (212 bytes). + Removing tasks.o(i.vTaskEndScheduler), (36 bytes). + Removing tasks.o(i.vTaskGetInfo), (132 bytes). + Removing tasks.o(i.vTaskNotifyGiveFromISR), (236 bytes). + Removing tasks.o(i.vTaskPlaceOnUnorderedEventList), (108 bytes). + Removing tasks.o(i.vTaskPriorityDisinheritAfterTimeout), (208 bytes). + Removing tasks.o(i.vTaskPrioritySet), (256 bytes). + Removing tasks.o(i.vTaskRemoveFromUnorderedEventList), (160 bytes). + Removing tasks.o(i.vTaskResume), (144 bytes). + Removing tasks.o(i.vTaskSetTaskNumber), (8 bytes). + Removing tasks.o(i.vTaskSetTimeOutState), (60 bytes). + Removing tasks.o(i.vTaskSuspend), (200 bytes). + Removing tasks.o(i.xTaskCatchUpTicks), (76 bytes). + Removing tasks.o(i.xTaskGenericNotify), (296 bytes). + Removing tasks.o(i.xTaskGenericNotifyFromISR), (356 bytes). + Removing tasks.o(i.xTaskGetCurrentTaskHandle), (12 bytes). + Removing tasks.o(i.xTaskGetTickCountFromISR), (20 bytes). + Removing tasks.o(i.xTaskNotifyStateClear), (52 bytes). + Removing tasks.o(i.xTaskNotifyWait), (160 bytes). + Removing tasks.o(i.xTaskPriorityInherit), (164 bytes). + Removing tasks.o(i.xTaskResumeFromISR), (176 bytes). + Removing timers.o(i.pcTimerGetName), (32 bytes). + Removing timers.o(i.prvInitialiseNewTimer), (90 bytes). + Removing timers.o(i.pvTimerGetTimerID), (44 bytes). + Removing timers.o(i.uxTimerGetReloadMode), (58 bytes). + Removing timers.o(i.uxTimerGetTimerNumber), (6 bytes). + Removing timers.o(i.vTimerSetReloadMode), (70 bytes). + Removing timers.o(i.vTimerSetTimerID), (44 bytes). + Removing timers.o(i.vTimerSetTimerNumber), (4 bytes). + Removing timers.o(i.xTimerCreate), (54 bytes). + Removing timers.o(i.xTimerCreateStatic), (114 bytes). + Removing timers.o(i.xTimerGetExpiryTime), (34 bytes). + Removing timers.o(i.xTimerGetPeriod), (32 bytes). + Removing timers.o(i.xTimerGetTimerDaemonTaskHandle), (48 bytes). + Removing timers.o(i.xTimerIsTimerActive), (58 bytes). + Removing timers.o(i.xTimerPendFunctionCall), (80 bytes). + Removing timers.o(i.xTimerPendFunctionCallFromISR), (52 bytes). + Removing cmsis_os2.o(.rev16_text), (4 bytes). + Removing cmsis_os2.o(.revsh_text), (4 bytes). + Removing cmsis_os2.o(.rrx_text), (6 bytes). + Removing cmsis_os2.o(i.AllocBlock), (16 bytes). + Removing cmsis_os2.o(i.CreateBlock), (32 bytes). + Removing cmsis_os2.o(i.FreeBlock), (10 bytes). + Removing cmsis_os2.o(i.OS_Tick_GetCount), (12 bytes). + Removing cmsis_os2.o(i.OS_Tick_GetInterval), (10 bytes). + Removing cmsis_os2.o(i.OS_Tick_GetOverflow), (12 bytes). + Removing cmsis_os2.o(i.TimerCallback), (22 bytes). + Removing cmsis_os2.o(i.osDelayUntil), (52 bytes). + Removing cmsis_os2.o(i.osEventFlagsClear), (70 bytes). + Removing cmsis_os2.o(i.osEventFlagsDelete), (38 bytes). + Removing cmsis_os2.o(i.osEventFlagsGet), (42 bytes). + Removing cmsis_os2.o(i.osEventFlagsNew), (70 bytes). + Removing cmsis_os2.o(i.osEventFlagsSet), (92 bytes). + Removing cmsis_os2.o(i.osEventFlagsWait), (144 bytes). + Removing cmsis_os2.o(i.osKernelGetInfo), (64 bytes). + Removing cmsis_os2.o(i.osKernelGetState), (52 bytes). + Removing cmsis_os2.o(i.osKernelGetSysTimerCount), (70 bytes). + Removing cmsis_os2.o(i.osKernelGetSysTimerFreq), (12 bytes). + Removing cmsis_os2.o(i.osKernelGetTickCount), (26 bytes). + Removing cmsis_os2.o(i.osKernelGetTickFreq), (6 bytes). + Removing cmsis_os2.o(i.osKernelLock), (56 bytes). + Removing cmsis_os2.o(i.osKernelRestoreLock), (88 bytes). + Removing cmsis_os2.o(i.osKernelUnlock), (68 bytes). + Removing cmsis_os2.o(i.osMemoryPoolAlloc), (176 bytes). + Removing cmsis_os2.o(i.osMemoryPoolDelete), (102 bytes). + Removing cmsis_os2.o(i.osMemoryPoolFree), (224 bytes). + Removing cmsis_os2.o(i.osMemoryPoolGetBlockSize), (36 bytes). + Removing cmsis_os2.o(i.osMemoryPoolGetCapacity), (36 bytes). + Removing cmsis_os2.o(i.osMemoryPoolGetCount), (64 bytes). + Removing cmsis_os2.o(i.osMemoryPoolGetName), (28 bytes). + Removing cmsis_os2.o(i.osMemoryPoolGetSpace), (60 bytes). + Removing cmsis_os2.o(i.osMemoryPoolNew), (276 bytes). + Removing cmsis_os2.o(i.osMessageQueueDelete), (44 bytes). + Removing cmsis_os2.o(i.osMessageQueueGet), (128 bytes). + Removing cmsis_os2.o(i.osMessageQueueGetCapacity), (14 bytes). + Removing cmsis_os2.o(i.osMessageQueueGetCount), (40 bytes). + Removing cmsis_os2.o(i.osMessageQueueGetMsgSize), (14 bytes). + Removing cmsis_os2.o(i.osMessageQueueGetSpace), (74 bytes). + Removing cmsis_os2.o(i.osMessageQueueNew), (154 bytes). + Removing cmsis_os2.o(i.osMessageQueuePut), (132 bytes). + Removing cmsis_os2.o(i.osMessageQueueReset), (40 bytes). + Removing cmsis_os2.o(i.osMutexAcquire), (98 bytes). + Removing cmsis_os2.o(i.osMutexDelete), (46 bytes). + Removing cmsis_os2.o(i.osMutexGetOwner), (32 bytes). + Removing cmsis_os2.o(i.osMutexNew), (178 bytes). + Removing cmsis_os2.o(i.osMutexRelease), (78 bytes). + Removing cmsis_os2.o(i.osSemaphoreAcquire), (108 bytes). + Removing cmsis_os2.o(i.osSemaphoreDelete), (44 bytes). + Removing cmsis_os2.o(i.osSemaphoreGetCount), (40 bytes). + Removing cmsis_os2.o(i.osSemaphoreNew), (204 bytes). + Removing cmsis_os2.o(i.osSemaphoreRelease), (92 bytes). + Removing cmsis_os2.o(i.osThreadEnumerate), (106 bytes). + Removing cmsis_os2.o(i.osThreadExit), (10 bytes). + Removing cmsis_os2.o(i.osThreadFlagsClear), (88 bytes). + Removing cmsis_os2.o(i.osThreadFlagsGet), (48 bytes). + Removing cmsis_os2.o(i.osThreadFlagsSet), (128 bytes). + Removing cmsis_os2.o(i.osThreadFlagsWait), (178 bytes). + Removing cmsis_os2.o(i.osThreadGetCount), (22 bytes). + Removing cmsis_os2.o(i.osThreadGetId), (12 bytes). + Removing cmsis_os2.o(i.osThreadGetName), (30 bytes). + Removing cmsis_os2.o(i.osThreadGetPriority), (32 bytes). + Removing cmsis_os2.o(i.osThreadGetStackSpace), (30 bytes). + Removing cmsis_os2.o(i.osThreadGetState), (72 bytes). + Removing cmsis_os2.o(i.osThreadResume), (38 bytes). + Removing cmsis_os2.o(i.osThreadSetPriority), (54 bytes). + Removing cmsis_os2.o(i.osThreadSuspend), (38 bytes). + Removing cmsis_os2.o(i.osThreadTerminate), (60 bytes). + Removing cmsis_os2.o(i.osThreadYield), (40 bytes). + Removing cmsis_os2.o(i.osTimerDelete), (72 bytes). + Removing cmsis_os2.o(i.osTimerGetName), (30 bytes). + Removing cmsis_os2.o(i.osTimerIsRunning), (30 bytes). + Removing cmsis_os2.o(i.osTimerNew), (188 bytes). + Removing cmsis_os2.o(i.osTimerStart), (60 bytes). + Removing cmsis_os2.o(i.osTimerStop), (72 bytes). + Removing heap_4.o(i.vPortGetHeapStats), (128 bytes). + Removing heap_4.o(i.vPortInitialiseBlocks), (2 bytes). + Removing heap_4.o(i.xPortGetFreeHeapSize), (12 bytes). + Removing heap_4.o(i.xPortGetMinimumEverFreeHeapSize), (12 bytes). + Removing port.o(i.vPortEndScheduler), (48 bytes). + Removing mbfuncother.o(i.eMBSetSlaveID), (120 bytes). + Removing mb.o(i.eMBClose), (40 bytes). + Removing mb.o(i.eMBDisable), (52 bytes). + Removing mb.o(i.eMBRegisterCB), (128 bytes). + Removing modbus-port-stm32.o(.rev16_text), (4 bytes). + Removing modbus-port-stm32.o(.revsh_text), (4 bytes). + Removing modbus-port-stm32.o(.rrx_text), (6 bytes). + +632 unused section(s) (total 55900 bytes) removed from the image. + +============================================================================== + +Image Symbol Table + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + ../Core/Src/freertos.c 0x00000000 Number 0 freertos.o ABSOLUTE + ../Core/Src/main.c 0x00000000 Number 0 main.o ABSOLUTE + ../Core/Src/stm32f1xx_hal_msp.c 0x00000000 Number 0 stm32f1xx_hal_msp.o ABSOLUTE + ../Core/Src/stm32f1xx_hal_timebase_tim.c 0x00000000 Number 0 stm32f1xx_hal_timebase_tim.o ABSOLUTE + ../Core/Src/stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE + ../Core/Src/system_stm32f1xx.c 0x00000000 Number 0 system_stm32f1xx.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c 0x00000000 Number 0 stm32f1xx_hal.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c 0x00000000 Number 0 stm32f1xx_hal_adc.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c 0x00000000 Number 0 stm32f1xx_hal_adc_ex.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c 0x00000000 Number 0 stm32f1xx_hal_cortex.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c 0x00000000 Number 0 stm32f1xx_hal_dma.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c 0x00000000 Number 0 stm32f1xx_hal_exti.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c 0x00000000 Number 0 stm32f1xx_hal_flash.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c 0x00000000 Number 0 stm32f1xx_hal_flash_ex.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c 0x00000000 Number 0 stm32f1xx_hal_gpio.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c 0x00000000 Number 0 stm32f1xx_hal_gpio_ex.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c 0x00000000 Number 0 stm32f1xx_hal_pwr.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c 0x00000000 Number 0 stm32f1xx_hal_rcc.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c 0x00000000 Number 0 stm32f1xx_hal_rcc_ex.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c 0x00000000 Number 0 stm32f1xx_hal_tim.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c 0x00000000 Number 0 stm32f1xx_hal_tim_ex.o ABSOLUTE + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c 0x00000000 Number 0 stm32f1xx_hal_uart.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c 0x00000000 Number 0 cmsis_os2.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/croutine.c 0x00000000 Number 0 croutine.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/event_groups.c 0x00000000 Number 0 event_groups.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/list.c 0x00000000 Number 0 list.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c 0x00000000 Number 0 heap_4.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM3/port.c 0x00000000 Number 0 port.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/queue.c 0x00000000 Number 0 queue.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c 0x00000000 Number 0 stream_buffer.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/tasks.c 0x00000000 Number 0 tasks.o ABSOLUTE + ../Middlewares/Third_Party/FreeRTOS/Source/timers.c 0x00000000 Number 0 timers.o ABSOLUTE + ../clib/../cmprslib/zerorunl2.c 0x00000000 Number 0 __dczerorl2.o ABSOLUTE + ../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE + ../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE + ../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE + ../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE + ../clib/microlib/stdio/streams.c 0x00000000 Number 0 stdout.o ABSOLUTE + ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE + ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE + ../clib/microlib/string/memset.c 0x00000000 Number 0 memset.o ABSOLUTE + ../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE + ../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE + ../fplib/microlib/d2f.c 0x00000000 Number 0 d2f.o ABSOLUTE + ../fplib/microlib/f2d.c 0x00000000 Number 0 f2d.o ABSOLUTE + ../fplib/microlib/fpadd.c 0x00000000 Number 0 dadd.o ABSOLUTE + ../fplib/microlib/fpadd.c 0x00000000 Number 0 fadd.o ABSOLUTE + ../fplib/microlib/fpdiv.c 0x00000000 Number 0 fdiv.o ABSOLUTE + ../fplib/microlib/fpdiv.c 0x00000000 Number 0 ddiv.o ABSOLUTE + ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 fepilogue.o ABSOLUTE + ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 depilogue.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixui.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 ffixui.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 ffixi.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixul.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixi.o ABSOLUTE + ../fplib/microlib/fpflt.c 0x00000000 Number 0 fflti.o ABSOLUTE + ../fplib/microlib/fpflt.c 0x00000000 Number 0 ffltui.o ABSOLUTE + ../fplib/microlib/fpflt.c 0x00000000 Number 0 dflti.o ABSOLUTE + ../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE + ../fplib/microlib/fpmul.c 0x00000000 Number 0 fmul.o ABSOLUTE + ../fplib/microlib/fpscalb.c 0x00000000 Number 0 dscalb.o ABSOLUTE + ../fplib/microlib/fpsqrt.c 0x00000000 Number 0 dsqrt.o ABSOLUTE + ../mathlib/dunder.c 0x00000000 Number 0 dunder.o ABSOLUTE + ../mathlib/log.c 0x00000000 Number 0 log.o ABSOLUTE + ../mathlib/log.c 0x00000000 Number 0 log_x.o ABSOLUTE + ../mathlib/log10.c 0x00000000 Number 0 log10_x.o ABSOLUTE + ../mathlib/log10.c 0x00000000 Number 0 log10.o ABSOLUTE + ../mathlib/poly.c 0x00000000 Number 0 poly.o ABSOLUTE + ../mathlib/qnan.c 0x00000000 Number 0 qnan.o ABSOLUTE + ../mathlib/sqrt.c 0x00000000 Number 0 sqrt_x.o ABSOLUTE + ../mathlib/sqrt.c 0x00000000 Number 0 sqrt.o ABSOLUTE + ..\Core\Src\Delay.c 0x00000000 Number 0 delay.o ABSOLUTE + ..\Core\Src\Modbus\MODBUS-Port-STM32.C 0x00000000 Number 0 modbus-port-stm32.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbfunccoils.c 0x00000000 Number 0 mbfunccoils.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbfuncdiag.c 0x00000000 Number 0 mbfuncdiag.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbfuncdisc.c 0x00000000 Number 0 mbfuncdisc.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbfuncholding.c 0x00000000 Number 0 mbfuncholding.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbfuncinput.c 0x00000000 Number 0 mbfuncinput.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbfuncother.c 0x00000000 Number 0 mbfuncother.o ABSOLUTE + ..\Core\Src\Modbus\functions\mbutils.c 0x00000000 Number 0 mbutils.o ABSOLUTE + ..\Core\Src\Modbus\mb.c 0x00000000 Number 0 mb.o ABSOLUTE + ..\Core\Src\Modbus\rtu\mbcrc.c 0x00000000 Number 0 mbcrc.o ABSOLUTE + ..\Core\Src\Modbus\rtu\mbrtu.c 0x00000000 Number 0 mbrtu.o ABSOLUTE + ..\Core\Src\StepMotor.c 0x00000000 Number 0 stepmotor.o ABSOLUTE + ..\Core\Src\TIM.c 0x00000000 Number 0 tim.o ABSOLUTE + ..\Core\Src\YouSuan.c 0x00000000 Number 0 yousuan.o ABSOLUTE + ..\Core\Src\freertos.c 0x00000000 Number 0 freertos.o ABSOLUTE + ..\Core\Src\main.c 0x00000000 Number 0 main.o ABSOLUTE + ..\Core\Src\stm32f1xx_hal_msp.c 0x00000000 Number 0 stm32f1xx_hal_msp.o ABSOLUTE + ..\Core\Src\stm32f1xx_hal_timebase_tim.c 0x00000000 Number 0 stm32f1xx_hal_timebase_tim.o ABSOLUTE + ..\Core\Src\stm32f1xx_it.c 0x00000000 Number 0 stm32f1xx_it.o ABSOLUTE + ..\Core\Src\system_stm32f1xx.c 0x00000000 Number 0 system_stm32f1xx.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c 0x00000000 Number 0 stm32f1xx_hal.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc.c 0x00000000 Number 0 stm32f1xx_hal_adc.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_adc_ex.c 0x00000000 Number 0 stm32f1xx_hal_adc_ex.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c 0x00000000 Number 0 stm32f1xx_hal_cortex.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c 0x00000000 Number 0 stm32f1xx_hal_dma.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c 0x00000000 Number 0 stm32f1xx_hal_exti.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c 0x00000000 Number 0 stm32f1xx_hal_flash.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c 0x00000000 Number 0 stm32f1xx_hal_flash_ex.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c 0x00000000 Number 0 stm32f1xx_hal_gpio.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c 0x00000000 Number 0 stm32f1xx_hal_gpio_ex.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c 0x00000000 Number 0 stm32f1xx_hal_pwr.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c 0x00000000 Number 0 stm32f1xx_hal_rcc.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c 0x00000000 Number 0 stm32f1xx_hal_rcc_ex.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c 0x00000000 Number 0 stm32f1xx_hal_tim.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c 0x00000000 Number 0 stm32f1xx_hal_tim_ex.o ABSOLUTE + ..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c 0x00000000 Number 0 stm32f1xx_hal_uart.o ABSOLUTE + ..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c 0x00000000 Number 0 cmsis_os2.o ABSOLUTE + ..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM3\port.c 0x00000000 Number 0 port.o ABSOLUTE + ..\\Core\\Src\\Delay.c 0x00000000 Number 0 delay.o ABSOLUTE + ..\\Core\\Src\\Modbus\\MODBUS-Port-STM32.C 0x00000000 Number 0 modbus-port-stm32.o ABSOLUTE + ..\\Core\\Src\\StepMotor.c 0x00000000 Number 0 stepmotor.o ABSOLUTE + ..\\Core\\Src\\TIM.c 0x00000000 Number 0 tim.o ABSOLUTE + ..\\Core\\Src\\YouSuan.c 0x00000000 Number 0 yousuan.o ABSOLUTE + cdcmple.s 0x00000000 Number 0 cdcmple.o ABSOLUTE + cdrcmple.s 0x00000000 Number 0 cdrcmple.o ABSOLUTE + cfcmple.s 0x00000000 Number 0 cfcmple.o ABSOLUTE + cfrcmple.s 0x00000000 Number 0 cfrcmple.o ABSOLUTE + dc.s 0x00000000 Number 0 dc.o ABSOLUTE + handlers.s 0x00000000 Number 0 handlers.o ABSOLUTE + init.s 0x00000000 Number 0 init.o ABSOLUTE + startup_stm32f103xe.s 0x00000000 Number 0 startup_stm32f103xe.o ABSOLUTE + RESET 0x08000000 Section 304 startup_stm32f103xe.o(RESET) + .ARM.Collect$$$$00000000 0x08000130 Section 0 entry.o(.ARM.Collect$$$$00000000) + .ARM.Collect$$$$00000001 0x08000130 Section 4 entry2.o(.ARM.Collect$$$$00000001) + .ARM.Collect$$$$00000004 0x08000134 Section 4 entry5.o(.ARM.Collect$$$$00000004) + .ARM.Collect$$$$00000008 0x08000138 Section 0 entry7b.o(.ARM.Collect$$$$00000008) + .ARM.Collect$$$$0000000A 0x08000138 Section 0 entry8b.o(.ARM.Collect$$$$0000000A) + .ARM.Collect$$$$0000000B 0x08000138 Section 8 entry9a.o(.ARM.Collect$$$$0000000B) + .ARM.Collect$$$$0000000E 0x08000140 Section 4 entry12b.o(.ARM.Collect$$$$0000000E) + .ARM.Collect$$$$0000000F 0x08000144 Section 0 entry10a.o(.ARM.Collect$$$$0000000F) + .ARM.Collect$$$$00000011 0x08000144 Section 0 entry11a.o(.ARM.Collect$$$$00000011) + .ARM.Collect$$$$00002712 0x08000144 Section 4 entry2.o(.ARM.Collect$$$$00002712) + __lit__00000000 0x08000144 Data 4 entry2.o(.ARM.Collect$$$$00002712) + .emb_text 0x08000148 Section 150 port.o(.emb_text) + .text 0x080001e0 Section 36 startup_stm32f103xe.o(.text) + .text 0x08000204 Section 0 llushr.o(.text) + .text 0x08000224 Section 0 memcpya.o(.text) + .text 0x08000248 Section 0 memseta.o(.text) + .text 0x0800026c Section 0 fadd.o(.text) + .text 0x0800031c Section 0 fmul.o(.text) + .text 0x08000380 Section 0 fdiv.o(.text) + .text 0x080003fc Section 0 dmul.o(.text) + .text 0x080004e0 Section 0 ddiv.o(.text) + .text 0x080005be Section 0 fflti.o(.text) + .text 0x080005d0 Section 0 ffltui.o(.text) + .text 0x080005da Section 0 ffixi.o(.text) + .text 0x0800060c Section 0 ffixui.o(.text) + .text 0x08000634 Section 0 dfixi.o(.text) + .text 0x08000672 Section 0 dfixui.o(.text) + .text 0x080006a4 Section 0 f2d.o(.text) + .text 0x080006cc Section 48 cdcmple.o(.text) + .text 0x080006fc Section 0 d2f.o(.text) + .text 0x08000734 Section 20 cfcmple.o(.text) + .text 0x08000748 Section 20 cfrcmple.o(.text) + .text 0x0800075c Section 0 uidiv.o(.text) + .text 0x08000788 Section 0 uldiv.o(.text) + .text 0x080007ea Section 0 fepilogue.o(.text) + .text 0x080007ea Section 0 iusefp.o(.text) + .text 0x08000858 Section 0 depilogue.o(.text) + .text 0x08000912 Section 0 dadd.o(.text) + .text 0x08000a60 Section 0 dscalb.o(.text) + .text 0x08000a8e Section 0 dsqrt.o(.text) + .text 0x08000b30 Section 0 dflti.o(.text) + .text 0x08000b52 Section 0 dfixul.o(.text) + .text 0x08000b84 Section 48 cdrcmple.o(.text) + .text 0x08000bb4 Section 36 init.o(.text) + .text 0x08000bd8 Section 0 llshl.o(.text) + .text 0x08000bf6 Section 0 llsshr.o(.text) + .text 0x08000c1a Section 0 __dczerorl2.o(.text) + i.ADC_ConversionStop_Disable 0x08000c70 Section 0 stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) + i.ADC_DMAConvCplt 0x08000ccc Section 0 stm32f1xx_hal_adc.o(i.ADC_DMAConvCplt) + i.ADC_DMAError 0x08000d1e Section 0 stm32f1xx_hal_adc.o(i.ADC_DMAError) + i.ADC_DMAHalfConvCplt 0x08000d3c Section 0 stm32f1xx_hal_adc.o(i.ADC_DMAHalfConvCplt) + i.ADC_Enable 0x08000d4c Section 0 stm32f1xx_hal_adc.o(i.ADC_Enable) + i.ArmSoftCtrl 0x08000ddc Section 0 stepmotor.o(i.ArmSoftCtrl) + i.AverageData 0x080012b0 Section 0 yousuan.o(i.AverageData) + i.BusFault_Handler 0x08001304 Section 0 stm32f1xx_it.o(i.BusFault_Handler) + i.DMA1_Channel1_IRQHandler 0x08001308 Section 0 stm32f1xx_it.o(i.DMA1_Channel1_IRQHandler) + i.DMA_SetConfig 0x08001318 Section 0 stm32f1xx_hal_dma.o(i.DMA_SetConfig) + DMA_SetConfig 0x08001319 Thumb Code 44 stm32f1xx_hal_dma.o(i.DMA_SetConfig) + i.DebugMon_Handler 0x08001344 Section 0 stm32f1xx_it.o(i.DebugMon_Handler) + i.EXTI0_IRQHandler 0x08001346 Section 0 stm32f1xx_it.o(i.EXTI0_IRQHandler) + i.EXTIx_IRQ_Disable 0x08001350 Section 0 stepmotor.o(i.EXTIx_IRQ_Disable) + i.EXTIx_IRQ_Enable 0x08001378 Section 0 stepmotor.o(i.EXTIx_IRQ_Enable) + i.Error_Handler 0x080013a0 Section 0 main.o(i.Error_Handler) + i.Exti_IOStateRead 0x080013a8 Section 0 stepmotor.o(i.Exti_IOStateRead) + i.Exti_IRQ_Ctrl 0x080013c4 Section 0 stepmotor.o(i.Exti_IRQ_Ctrl) + i.HAL_ADCEx_Calibration_Start 0x080013e8 Section 0 stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) + i.HAL_ADC_ConfigChannel 0x08001504 Section 0 stm32f1xx_hal_adc.o(i.HAL_ADC_ConfigChannel) + i.HAL_ADC_ConvCpltCallback 0x08001664 Section 0 stm32f1xx_hal_adc.o(i.HAL_ADC_ConvCpltCallback) + i.HAL_ADC_ConvHalfCpltCallback 0x08001666 Section 0 stm32f1xx_hal_adc.o(i.HAL_ADC_ConvHalfCpltCallback) + i.HAL_ADC_ErrorCallback 0x08001668 Section 0 stm32f1xx_hal_adc.o(i.HAL_ADC_ErrorCallback) + i.HAL_ADC_Init 0x0800166c Section 0 stm32f1xx_hal_adc.o(i.HAL_ADC_Init) + i.HAL_ADC_MspInit 0x080017cc Section 0 stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) + i.HAL_ADC_Start_DMA 0x08001878 Section 0 stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) + i.HAL_DMA_IRQHandler 0x080019f8 Section 0 stm32f1xx_hal_dma.o(i.HAL_DMA_IRQHandler) + i.HAL_DMA_Init 0x08001d90 Section 0 stm32f1xx_hal_dma.o(i.HAL_DMA_Init) + i.HAL_DMA_Start_IT 0x08001e1c Section 0 stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) + i.HAL_GPIO_EXTI_Callback 0x08001eb8 Section 0 stepmotor.o(i.HAL_GPIO_EXTI_Callback) + i.HAL_GPIO_EXTI_IRQHandler 0x08001f54 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_EXTI_IRQHandler) + i.HAL_GPIO_Init 0x08001f70 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) + i.HAL_GPIO_WritePin 0x080022b0 Section 0 stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) + i.HAL_GetTick 0x080022bc Section 0 stm32f1xx_hal.o(i.HAL_GetTick) + i.HAL_IncTick 0x080022c8 Section 0 stm32f1xx_hal.o(i.HAL_IncTick) + i.HAL_Init 0x080022e0 Section 0 stm32f1xx_hal.o(i.HAL_Init) + i.HAL_InitTick 0x08002308 Section 0 stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) + i.HAL_MspInit 0x080023a8 Section 0 stm32f1xx_hal_msp.o(i.HAL_MspInit) + i.HAL_NVIC_EnableIRQ 0x08002408 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) + i.HAL_NVIC_SetPriority 0x08002428 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) + i.HAL_NVIC_SetPriorityGrouping 0x080024a4 Section 0 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) + i.HAL_RCCEx_GetPeriphCLKFreq 0x080024cc Section 0 stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) + i.HAL_RCCEx_PeriphCLKConfig 0x080025e4 Section 0 stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig) + i.HAL_RCC_ClockConfig 0x08002714 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) + i.HAL_RCC_GetClockConfig 0x080028a0 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetClockConfig) + i.HAL_RCC_GetHCLKFreq 0x080028e4 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq) + i.HAL_RCC_GetPCLK1Freq 0x080028f0 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) + i.HAL_RCC_GetPCLK2Freq 0x08002910 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) + i.HAL_RCC_GetSysClockFreq 0x08002930 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) + i.HAL_RCC_OscConfig 0x080029a0 Section 0 stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) + i.HAL_TIMEx_BreakCallback 0x08002e04 Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback) + i.HAL_TIMEx_CommutCallback 0x08002e06 Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) + i.HAL_TIMEx_ConfigBreakDeadTime 0x08002e08 Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigBreakDeadTime) + i.HAL_TIMEx_MasterConfigSynchronization 0x08002e7c Section 0 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) + i.HAL_TIM_Base_Init 0x08002f18 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) + i.HAL_TIM_Base_MspInit 0x08002f80 Section 0 stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspInit) + i.HAL_TIM_Base_Start_IT 0x08003024 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) + i.HAL_TIM_ConfigClockSource 0x080030b4 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) + i.HAL_TIM_IC_CaptureCallback 0x080031c0 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) + i.HAL_TIM_IRQHandler 0x080031c2 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) + i.HAL_TIM_MspPostInit 0x08003330 Section 0 stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) + i.HAL_TIM_OC_DelayElapsedCallback 0x08003438 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback) + i.HAL_TIM_PWM_ConfigChannel 0x0800343a Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) + i.HAL_TIM_PWM_Init 0x0800353e Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) + i.HAL_TIM_PWM_MspInit 0x080035a4 Section 0 stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspInit) + i.HAL_TIM_PWM_PulseFinishedCallback 0x080035e8 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) + i.HAL_TIM_PWM_Start 0x080035ec Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start) + i.HAL_TIM_PeriodElapsedCallback 0x080036e0 Section 0 main.o(i.HAL_TIM_PeriodElapsedCallback) + i.HAL_TIM_TriggerCallback 0x080036f8 Section 0 stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) + i.HAL_UART_Init 0x080036fa Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Init) + i.HAL_UART_MspInit 0x08003770 Section 0 stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) + i.HAL_UART_Transmit 0x08003880 Section 0 stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) + i.HardFault_Handler 0x0800393e Section 0 stm32f1xx_it.o(i.HardFault_Handler) + i.HasSampleCheck 0x08003944 Section 0 yousuan.o(i.HasSampleCheck) + i.MB_485_Direct_Receive 0x08003aa0 Section 0 modbus-port-stm32.o(i.MB_485_Direct_Receive) + i.MB_485_Direct_Transmit 0x08003acc Section 0 modbus-port-stm32.o(i.MB_485_Direct_Transmit) + i.MODBUS_Init 0x08003ae0 Section 0 modbus-port-stm32.o(i.MODBUS_Init) + i.MX_ADC1_Init 0x08003b14 Section 0 main.o(i.MX_ADC1_Init) + MX_ADC1_Init 0x08003b15 Thumb Code 358 main.o(i.MX_ADC1_Init) + i.MX_DMA_Init 0x08003c84 Section 0 main.o(i.MX_DMA_Init) + MX_DMA_Init 0x08003c85 Thumb Code 48 main.o(i.MX_DMA_Init) + i.MX_GPIO_Init 0x08003cb8 Section 0 main.o(i.MX_GPIO_Init) + MX_GPIO_Init 0x08003cb9 Thumb Code 288 main.o(i.MX_GPIO_Init) + i.MX_TIM2_Init 0x08003dec Section 0 main.o(i.MX_TIM2_Init) + MX_TIM2_Init 0x08003ded Thumb Code 164 main.o(i.MX_TIM2_Init) + i.MX_TIM3_Init 0x08003e94 Section 0 main.o(i.MX_TIM3_Init) + MX_TIM3_Init 0x08003e95 Thumb Code 162 main.o(i.MX_TIM3_Init) + i.MX_TIM5_Init 0x08003f40 Section 0 main.o(i.MX_TIM5_Init) + MX_TIM5_Init 0x08003f41 Thumb Code 122 main.o(i.MX_TIM5_Init) + i.MX_TIM8_Init 0x08003fc4 Section 0 main.o(i.MX_TIM8_Init) + MX_TIM8_Init 0x08003fc5 Thumb Code 210 main.o(i.MX_TIM8_Init) + i.MX_USART1_UART_Init 0x080040a0 Section 0 main.o(i.MX_USART1_UART_Init) + MX_USART1_UART_Init 0x080040a1 Thumb Code 46 main.o(i.MX_USART1_UART_Init) + i.MX_USART3_UART_Init 0x080040d8 Section 0 main.o(i.MX_USART3_UART_Init) + MX_USART3_UART_Init 0x080040d9 Thumb Code 46 main.o(i.MX_USART3_UART_Init) + i.MemManage_Handler 0x08004110 Section 0 stm32f1xx_it.o(i.MemManage_Handler) + i.ModbusPoll 0x08004114 Section 0 modbus-port-stm32.o(i.ModbusPoll) + i.MotorCTRLInitiate 0x08004124 Section 0 stepmotor.o(i.MotorCTRLInitiate) + i.MotorCtrl 0x080041cc Section 0 stepmotor.o(i.MotorCtrl) + i.MotorZero_Init 0x080041f4 Section 0 stepmotor.o(i.MotorZero_Init) + i.Motor_Dir 0x0800430c Section 0 stepmotor.o(i.Motor_Dir) + i.Motor_En 0x0800437c Section 0 stepmotor.o(i.Motor_En) + i.Motor_IECMD 0x08004386 Section 0 stepmotor.o(i.Motor_IECMD) + i.Motor_PWM 0x080043b6 Section 0 stepmotor.o(i.Motor_PWM) + i.Motor_PWMCmd 0x08004404 Section 0 stepmotor.o(i.Motor_PWMCmd) + i.NMI_Handler 0x08004434 Section 0 stm32f1xx_it.o(i.NMI_Handler) + i.RCC_Delay 0x08004438 Section 0 stm32f1xx_hal_rcc.o(i.RCC_Delay) + RCC_Delay 0x08004439 Thumb Code 36 stm32f1xx_hal_rcc.o(i.RCC_Delay) + i.SamplePumpCtrl 0x08004460 Section 0 stepmotor.o(i.SamplePumpCtrl) + i.SamplePumpSpeed_AcceleratedConver 0x08004824 Section 0 stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) + i.SampleRunTask 0x08004874 Section 0 yousuan.o(i.SampleRunTask) + i.StartDefaultTask 0x08004ed8 Section 0 main.o(i.StartDefaultTask) + i.StirrerCtrl 0x08004efc Section 0 main.o(i.StirrerCtrl) + i.SysTick_Handler 0x08004f08 Section 0 cmsis_os2.o(i.SysTick_Handler) + i.SystemClock_Config 0x08004f1e Section 0 main.o(i.SystemClock_Config) + i.SystemInit 0x08004fa0 Section 0 system_stm32f1xx.o(i.SystemInit) + i.TIM1_UP_IRQHandler 0x08004fa4 Section 0 stm32f1xx_it.o(i.TIM1_UP_IRQHandler) + i.TIM2_CH2_CMD 0x08004fb4 Section 0 tim.o(i.TIM2_CH2_CMD) + i.TIM2_CH2_CTRL 0x08004fee Section 0 tim.o(i.TIM2_CH2_CTRL) + i.TIM2_IECMD 0x08004ff8 Section 0 tim.o(i.TIM2_IECMD) + i.TIM2_IRQHandler 0x08005034 Section 0 stm32f1xx_it.o(i.TIM2_IRQHandler) + i.TIM3_CH1_CMD 0x08005090 Section 0 tim.o(i.TIM3_CH1_CMD) + i.TIM3_CH1_CTRL 0x080050d4 Section 0 tim.o(i.TIM3_CH1_CTRL) + i.TIM3_IECMD 0x080050e4 Section 0 tim.o(i.TIM3_IECMD) + i.TIM3_IRQHandler 0x08005120 Section 0 stm32f1xx_it.o(i.TIM3_IRQHandler) + i.TIM5_CH3_CMD 0x0800517c Section 0 tim.o(i.TIM5_CH3_CMD) + i.TIM5_CH3_CTRL 0x080051c0 Section 0 tim.o(i.TIM5_CH3_CTRL) + i.TIM5_IECMD 0x080051d0 Section 0 tim.o(i.TIM5_IECMD) + i.TIM5_IRQHandler 0x0800520c Section 0 stm32f1xx_it.o(i.TIM5_IRQHandler) + i.TIM7_IRQHandler 0x08005268 Section 0 modbus-port-stm32.o(i.TIM7_IRQHandler) + i.TIM_Base_SetConfig 0x0800528c Section 0 stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) + i.TIM_CCxChannelCmd 0x08005338 Section 0 stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) + i.TIM_ETR_SetConfig 0x0800535a Section 0 stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) + i.TIM_ITRx_SetConfig 0x08005370 Section 0 stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) + TIM_ITRx_SetConfig 0x08005371 Thumb Code 18 stm32f1xx_hal_tim.o(i.TIM_ITRx_SetConfig) + i.TIM_OC1_SetConfig 0x08005384 Section 0 stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) + TIM_OC1_SetConfig 0x08005385 Thumb Code 104 stm32f1xx_hal_tim.o(i.TIM_OC1_SetConfig) + i.TIM_OC2_SetConfig 0x080053f4 Section 0 stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) + i.TIM_OC3_SetConfig 0x08005470 Section 0 stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig) + TIM_OC3_SetConfig 0x08005471 Thumb Code 112 stm32f1xx_hal_tim.o(i.TIM_OC3_SetConfig) + i.TIM_OC4_SetConfig 0x080054e8 Section 0 stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig) + TIM_OC4_SetConfig 0x080054e9 Thumb Code 74 stm32f1xx_hal_tim.o(i.TIM_OC4_SetConfig) + i.TIM_TI1_ConfigInputStage 0x0800553c Section 0 stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) + TIM_TI1_ConfigInputStage 0x0800553d Thumb Code 38 stm32f1xx_hal_tim.o(i.TIM_TI1_ConfigInputStage) + i.TIM_TI2_ConfigInputStage 0x08005562 Section 0 stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) + TIM_TI2_ConfigInputStage 0x08005563 Thumb Code 40 stm32f1xx_hal_tim.o(i.TIM_TI2_ConfigInputStage) + i.UART_EndRxTransfer 0x0800558a Section 0 stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) + UART_EndRxTransfer 0x0800558b Thumb Code 108 stm32f1xx_hal_uart.o(i.UART_EndRxTransfer) + i.UART_SetConfig 0x080055f8 Section 0 stm32f1xx_hal_uart.o(i.UART_SetConfig) + UART_SetConfig 0x080055f9 Thumb Code 248 stm32f1xx_hal_uart.o(i.UART_SetConfig) + i.UART_WaitOnFlagUntilTimeout 0x080056f4 Section 0 stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) + UART_WaitOnFlagUntilTimeout 0x080056f5 Thumb Code 140 stm32f1xx_hal_uart.o(i.UART_WaitOnFlagUntilTimeout) + i.USART1_IRQHandler 0x08005780 Section 0 modbus-port-stm32.o(i.USART1_IRQHandler) + i.UsageFault_Handler 0x08005824 Section 0 stm32f1xx_it.o(i.UsageFault_Handler) + i.YouSuanRun 0x08005828 Section 0 yousuan.o(i.YouSuanRun) + i.__0printf 0x080059a0 Section 0 printfa.o(i.__0printf) + i.__0sprintf 0x080059c0 Section 0 printfa.o(i.__0sprintf) + i.__NVIC_EnableIRQ 0x080059e8 Section 0 modbus-port-stm32.o(i.__NVIC_EnableIRQ) + __NVIC_EnableIRQ 0x080059e9 Thumb Code 26 modbus-port-stm32.o(i.__NVIC_EnableIRQ) + i.__NVIC_GetPriorityGrouping 0x08005a04 Section 0 stm32f1xx_hal_cortex.o(i.__NVIC_GetPriorityGrouping) + __NVIC_GetPriorityGrouping 0x08005a05 Thumb Code 10 stm32f1xx_hal_cortex.o(i.__NVIC_GetPriorityGrouping) + i.__NVIC_SetPriority 0x08005a14 Section 0 stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) + __NVIC_SetPriority 0x08005a15 Thumb Code 32 stm32f1xx_hal_cortex.o(i.__NVIC_SetPriority) + i.__get_IPSR 0x08005a3c Section 0 cmsis_os2.o(i.__get_IPSR) + __get_IPSR 0x08005a3d Thumb Code 6 cmsis_os2.o(i.__get_IPSR) + i.__kernel_poly 0x08005a42 Section 0 poly.o(i.__kernel_poly) + i.__mathlib_dbl_divzero 0x08005aec Section 0 dunder.o(i.__mathlib_dbl_divzero) + i.__mathlib_dbl_infnan 0x08005afc Section 0 dunder.o(i.__mathlib_dbl_infnan) + i.__mathlib_dbl_invalid 0x08005b02 Section 0 dunder.o(i.__mathlib_dbl_invalid) + i.__scatterload_copy 0x08005b0e Section 14 handlers.o(i.__scatterload_copy) + i.__scatterload_null 0x08005b1c Section 2 handlers.o(i.__scatterload_null) + i.__scatterload_zeroinit 0x08005b1e Section 14 handlers.o(i.__scatterload_zeroinit) + i.__set_errno 0x08005b2c Section 0 errno.o(i.__set_errno) + i._fp_digits 0x08005b38 Section 0 printfa.o(i._fp_digits) + _fp_digits 0x08005b39 Thumb Code 366 printfa.o(i._fp_digits) + i._printf_core 0x08005cbc Section 0 printfa.o(i._printf_core) + _printf_core 0x08005cbd Thumb Code 1704 printfa.o(i._printf_core) + i._printf_post_padding 0x08006370 Section 0 printfa.o(i._printf_post_padding) + _printf_post_padding 0x08006371 Thumb Code 36 printfa.o(i._printf_post_padding) + i._printf_pre_padding 0x08006394 Section 0 printfa.o(i._printf_pre_padding) + _printf_pre_padding 0x08006395 Thumb Code 46 printfa.o(i._printf_pre_padding) + i._sputc 0x080063c2 Section 0 printfa.o(i._sputc) + _sputc 0x080063c3 Thumb Code 10 printfa.o(i._sputc) + i._task_MotorCTRL 0x080063cc Section 0 stepmotor.o(i._task_MotorCTRL) + i.delay_us 0x080063d6 Section 0 delay.o(i.delay_us) + i.eMBEnable 0x0800645c Section 0 mb.o(i.eMBEnable) + i.eMBFuncReadCoils 0x08006484 Section 0 mbfunccoils.o(i.eMBFuncReadCoils) + i.eMBFuncReadDiscreteInputs 0x08006532 Section 0 mbfuncdisc.o(i.eMBFuncReadDiscreteInputs) + i.eMBFuncReadHoldingRegister 0x080065de Section 0 mbfuncholding.o(i.eMBFuncReadHoldingRegister) + i.eMBFuncReadInputRegister 0x0800666a Section 0 mbfuncinput.o(i.eMBFuncReadInputRegister) + i.eMBFuncReadWriteMultipleHoldingRegister 0x080066f6 Section 0 mbfuncholding.o(i.eMBFuncReadWriteMultipleHoldingRegister) + i.eMBFuncReportSlaveID 0x080067cc Section 0 mbfuncother.o(i.eMBFuncReportSlaveID) + i.eMBFuncWriteCoil 0x080067f4 Section 0 mbfunccoils.o(i.eMBFuncWriteCoil) + i.eMBFuncWriteHoldingRegister 0x08006864 Section 0 mbfuncholding.o(i.eMBFuncWriteHoldingRegister) + i.eMBFuncWriteMultipleCoils 0x080068a6 Section 0 mbfunccoils.o(i.eMBFuncWriteMultipleCoils) + i.eMBFuncWriteMultipleHoldingRegister 0x08006936 Section 0 mbfuncholding.o(i.eMBFuncWriteMultipleHoldingRegister) + i.eMBInit 0x080069a4 Section 0 mb.o(i.eMBInit) + i.eMBPoll 0x08006a84 Section 0 mb.o(i.eMBPoll) + i.eMBRTUInit 0x08006bb0 Section 0 mbrtu.o(i.eMBRTUInit) + i.eMBRTUReceive 0x08006bfc Section 0 mbrtu.o(i.eMBRTUReceive) + i.eMBRTUSend 0x08006c44 Section 0 mbrtu.o(i.eMBRTUSend) + i.eMBRTUStart 0x08006cd4 Section 0 mbrtu.o(i.eMBRTUStart) + i.eMBRTUStop 0x08006cf0 Section 0 mbrtu.o(i.eMBRTUStop) + i.eMBRegCoilsCB 0x08006d00 Section 0 modbus-port-stm32.o(i.eMBRegCoilsCB) + i.eMBRegDiscreteCB 0x08006d9c Section 0 modbus-port-stm32.o(i.eMBRegDiscreteCB) + i.eMBRegHoldingCB 0x08006e00 Section 0 modbus-port-stm32.o(i.eMBRegHoldingCB) + i.eMBRegInputCB 0x08006ebc Section 0 modbus-port-stm32.o(i.eMBRegInputCB) + i.fputc 0x08006f14 Section 0 main.o(i.fputc) + i.log 0x08006f30 Section 0 log.o(i.log) + i.log10 0x0800728c Section 0 log10.o(i.log10) + i.main 0x08007370 Section 0 main.o(i.main) + i.osDelay 0x080073d8 Section 0 cmsis_os2.o(i.osDelay) + i.osKernelInitialize 0x080073f8 Section 0 cmsis_os2.o(i.osKernelInitialize) + i.osKernelStart 0x08007424 Section 0 cmsis_os2.o(i.osKernelStart) + i.osThreadNew 0x08007484 Section 0 cmsis_os2.o(i.osThreadNew) + i.prvAddCurrentTaskToDelayedList 0x0800753c Section 0 tasks.o(i.prvAddCurrentTaskToDelayedList) + prvAddCurrentTaskToDelayedList 0x0800753d Thumb Code 100 tasks.o(i.prvAddCurrentTaskToDelayedList) + i.prvAddNewTaskToReadyList 0x080075b8 Section 0 tasks.o(i.prvAddNewTaskToReadyList) + prvAddNewTaskToReadyList 0x080075b9 Thumb Code 154 tasks.o(i.prvAddNewTaskToReadyList) + i.prvCheckForValidListAndQueue 0x08007670 Section 0 timers.o(i.prvCheckForValidListAndQueue) + prvCheckForValidListAndQueue 0x08007671 Thumb Code 78 timers.o(i.prvCheckForValidListAndQueue) + i.prvCheckTasksWaitingTermination 0x080076e4 Section 0 tasks.o(i.prvCheckTasksWaitingTermination) + prvCheckTasksWaitingTermination 0x080076e5 Thumb Code 60 tasks.o(i.prvCheckTasksWaitingTermination) + i.prvCopyDataFromQueue 0x0800772c Section 0 queue.o(i.prvCopyDataFromQueue) + prvCopyDataFromQueue 0x0800772d Thumb Code 42 queue.o(i.prvCopyDataFromQueue) + i.prvCopyDataToQueue 0x08007756 Section 0 queue.o(i.prvCopyDataToQueue) + prvCopyDataToQueue 0x08007757 Thumb Code 126 queue.o(i.prvCopyDataToQueue) + i.prvDeleteTCB 0x080077d4 Section 0 tasks.o(i.prvDeleteTCB) + prvDeleteTCB 0x080077d5 Thumb Code 80 tasks.o(i.prvDeleteTCB) + i.prvGetNextExpireTime 0x08007824 Section 0 timers.o(i.prvGetNextExpireTime) + prvGetNextExpireTime 0x08007825 Thumb Code 36 timers.o(i.prvGetNextExpireTime) + i.prvHeapInit 0x0800784c Section 0 heap_4.o(i.prvHeapInit) + prvHeapInit 0x0800784d Thumb Code 98 heap_4.o(i.prvHeapInit) + i.prvIdleTask 0x080078c8 Section 0 tasks.o(i.prvIdleTask) + prvIdleTask 0x080078c9 Thumb Code 32 tasks.o(i.prvIdleTask) + i.prvInitialiseNewQueue 0x080078f0 Section 0 queue.o(i.prvInitialiseNewQueue) + prvInitialiseNewQueue 0x080078f1 Thumb Code 42 queue.o(i.prvInitialiseNewQueue) + i.prvInitialiseNewTask 0x0800791a Section 0 tasks.o(i.prvInitialiseNewTask) + prvInitialiseNewTask 0x0800791b Thumb Code 190 tasks.o(i.prvInitialiseNewTask) + i.prvInitialiseTaskLists 0x080079d8 Section 0 tasks.o(i.prvInitialiseTaskLists) + prvInitialiseTaskLists 0x080079d9 Thumb Code 70 tasks.o(i.prvInitialiseTaskLists) + i.prvInsertBlockIntoFreeList 0x08007a40 Section 0 heap_4.o(i.prvInsertBlockIntoFreeList) + prvInsertBlockIntoFreeList 0x08007a41 Thumb Code 96 heap_4.o(i.prvInsertBlockIntoFreeList) + i.prvInsertTimerInActiveList 0x08007aa8 Section 0 timers.o(i.prvInsertTimerInActiveList) + prvInsertTimerInActiveList 0x08007aa9 Thumb Code 80 timers.o(i.prvInsertTimerInActiveList) + i.prvIsQueueEmpty 0x08007b00 Section 0 queue.o(i.prvIsQueueEmpty) + prvIsQueueEmpty 0x08007b01 Thumb Code 26 queue.o(i.prvIsQueueEmpty) + i.prvIsQueueFull 0x08007b1a Section 0 queue.o(i.prvIsQueueFull) + prvIsQueueFull 0x08007b1b Thumb Code 30 queue.o(i.prvIsQueueFull) + i.prvProcessExpiredTimer 0x08007b38 Section 0 timers.o(i.prvProcessExpiredTimer) + prvProcessExpiredTimer 0x08007b39 Thumb Code 110 timers.o(i.prvProcessExpiredTimer) + i.prvProcessReceivedCommands 0x08007bac Section 0 timers.o(i.prvProcessReceivedCommands) + prvProcessReceivedCommands 0x08007bad Thumb Code 350 timers.o(i.prvProcessReceivedCommands) + i.prvProcessTimerOrBlockTask 0x08007d10 Section 0 timers.o(i.prvProcessTimerOrBlockTask) + prvProcessTimerOrBlockTask 0x08007d11 Thumb Code 102 timers.o(i.prvProcessTimerOrBlockTask) + i.prvResetNextTaskUnblockTime 0x08007d84 Section 0 tasks.o(i.prvResetNextTaskUnblockTime) + prvResetNextTaskUnblockTime 0x08007d85 Thumb Code 42 tasks.o(i.prvResetNextTaskUnblockTime) + i.prvSampleTimeNow 0x08007db8 Section 0 timers.o(i.prvSampleTimeNow) + prvSampleTimeNow 0x08007db9 Thumb Code 40 timers.o(i.prvSampleTimeNow) + i.prvSwitchTimerLists 0x08007de4 Section 0 timers.o(i.prvSwitchTimerLists) + prvSwitchTimerLists 0x08007de5 Thumb Code 154 timers.o(i.prvSwitchTimerLists) + i.prvTaskExitError 0x08007e88 Section 0 port.o(i.prvTaskExitError) + prvTaskExitError 0x08007e89 Thumb Code 60 port.o(i.prvTaskExitError) + i.prvTimerTask 0x08007ec8 Section 0 timers.o(i.prvTimerTask) + prvTimerTask 0x08007ec9 Thumb Code 26 timers.o(i.prvTimerTask) + i.prvUnlockQueue 0x08007ee2 Section 0 queue.o(i.prvUnlockQueue) + prvUnlockQueue 0x08007ee3 Thumb Code 126 queue.o(i.prvUnlockQueue) + i.prveMBError2Exception 0x08007f60 Section 0 mbutils.o(i.prveMBError2Exception) + i.prvvTIMERExpiredISR 0x08007f84 Section 0 modbus-port-stm32.o(i.prvvTIMERExpiredISR) + prvvTIMERExpiredISR 0x08007f85 Thumb Code 10 modbus-port-stm32.o(i.prvvTIMERExpiredISR) + i.prvvUARTRxISR 0x08007f94 Section 0 modbus-port-stm32.o(i.prvvUARTRxISR) + prvvUARTRxISR 0x08007f95 Thumb Code 10 modbus-port-stm32.o(i.prvvUARTRxISR) + i.prvvUARTTxReadyISR 0x08007fa4 Section 0 modbus-port-stm32.o(i.prvvUARTTxReadyISR) + prvvUARTTxReadyISR 0x08007fa5 Thumb Code 10 modbus-port-stm32.o(i.prvvUARTTxReadyISR) + i.pvPortMalloc 0x08007fb4 Section 0 heap_4.o(i.pvPortMalloc) + i.pxPortInitialiseStack 0x08008100 Section 0 port.o(i.pxPortInitialiseStack) + i.sqrt 0x08008124 Section 0 sqrt.o(i.sqrt) + i.usMBCRC16 0x08008170 Section 0 mbcrc.o(i.usMBCRC16) + i.uxListRemove 0x080081a8 Section 0 list.o(i.uxListRemove) + i.vApplicationGetIdleTaskMemory 0x080081d0 Section 0 cmsis_os2.o(i.vApplicationGetIdleTaskMemory) + i.vApplicationGetTimerTaskMemory 0x080081e8 Section 0 cmsis_os2.o(i.vApplicationGetTimerTaskMemory) + i.vListInitialise 0x08008200 Section 0 list.o(i.vListInitialise) + i.vListInitialiseItem 0x0800821a Section 0 list.o(i.vListInitialiseItem) + i.vListInsert 0x08008220 Section 0 list.o(i.vListInsert) + i.vListInsertEnd 0x08008254 Section 0 list.o(i.vListInsertEnd) + i.vMBPortSerialEnable 0x0800826c Section 0 modbus-port-stm32.o(i.vMBPortSerialEnable) + i.vMBPortTimersDisable 0x080082c0 Section 0 modbus-port-stm32.o(i.vMBPortTimersDisable) + i.vMBPortTimersEnable 0x080082f8 Section 0 modbus-port-stm32.o(i.vMBPortTimersEnable) + i.vPortEnterCritical 0x08008330 Section 0 port.o(i.vPortEnterCritical) + i.vPortExitCritical 0x08008384 Section 0 port.o(i.vPortExitCritical) + i.vPortFree 0x080083c0 Section 0 heap_4.o(i.vPortFree) + i.vPortSetupTimerInterrupt 0x08008464 Section 0 port.o(i.vPortSetupTimerInterrupt) + i.vPortValidateInterruptPriority 0x0800848c Section 0 port.o(i.vPortValidateInterruptPriority) + i.vQueueAddToRegistry 0x08008504 Section 0 queue.o(i.vQueueAddToRegistry) + i.vQueueWaitForMessageRestricted 0x08008530 Section 0 queue.o(i.vQueueWaitForMessageRestricted) + i.vTaskDelay 0x0800857c Section 0 tasks.o(i.vTaskDelay) + i.vTaskDelete 0x080085d8 Section 0 tasks.o(i.vTaskDelete) + i.vTaskInternalSetTimeOutState 0x080086a0 Section 0 tasks.o(i.vTaskInternalSetTimeOutState) + i.vTaskMissedYield 0x080086b8 Section 0 tasks.o(i.vTaskMissedYield) + i.vTaskPlaceOnEventList 0x080086c4 Section 0 tasks.o(i.vTaskPlaceOnEventList) + i.vTaskPlaceOnEventListRestricted 0x080086fc Section 0 tasks.o(i.vTaskPlaceOnEventListRestricted) + i.vTaskStartScheduler 0x0800873c Section 0 tasks.o(i.vTaskStartScheduler) + i.vTaskSuspendAll 0x080087f4 Section 0 tasks.o(i.vTaskSuspendAll) + i.vTaskSwitchContext 0x08008804 Section 0 tasks.o(i.vTaskSwitchContext) + i.xMBPortEventGet 0x08008894 Section 0 modbus-port-stm32.o(i.xMBPortEventGet) + i.xMBPortEventInit 0x080088b8 Section 0 modbus-port-stm32.o(i.xMBPortEventInit) + i.xMBPortEventPost 0x080088c8 Section 0 modbus-port-stm32.o(i.xMBPortEventPost) + i.xMBPortSerialGetByte 0x080088e0 Section 0 modbus-port-stm32.o(i.xMBPortSerialGetByte) + i.xMBPortSerialInit 0x080088f8 Section 0 modbus-port-stm32.o(i.xMBPortSerialInit) + i.xMBPortSerialPutByte 0x080089ec Section 0 modbus-port-stm32.o(i.xMBPortSerialPutByte) + i.xMBPortTimersInit 0x08008a00 Section 0 modbus-port-stm32.o(i.xMBPortTimersInit) + i.xMBRTUReceiveFSM 0x08008a54 Section 0 mbrtu.o(i.xMBRTUReceiveFSM) + i.xMBRTUTimerT35Expired 0x08008adc Section 0 mbrtu.o(i.xMBRTUTimerT35Expired) + i.xMBRTUTransmitFSM 0x08008b1c Section 0 mbrtu.o(i.xMBRTUTransmitFSM) + i.xMBUtilGetBits 0x08008b88 Section 0 mbutils.o(i.xMBUtilGetBits) + i.xMBUtilSetBits 0x08008bb2 Section 0 mbutils.o(i.xMBUtilSetBits) + i.xPortStartScheduler 0x08008c14 Section 0 port.o(i.xPortStartScheduler) + i.xPortSysTickHandler 0x08008d0c Section 0 port.o(i.xPortSysTickHandler) + i.xQueueGenericCreateStatic 0x08008d40 Section 0 queue.o(i.xQueueGenericCreateStatic) + i.xQueueGenericReset 0x08008e20 Section 0 queue.o(i.xQueueGenericReset) + i.xQueueGenericSend 0x08008eb8 Section 0 queue.o(i.xQueueGenericSend) + i.xQueueGenericSendFromISR 0x08009060 Section 0 queue.o(i.xQueueGenericSendFromISR) + i.xQueueReceive 0x0800915c Section 0 queue.o(i.xQueueReceive) + i.xTaskCheckForTimeOut 0x080092c4 Section 0 tasks.o(i.xTaskCheckForTimeOut) + i.xTaskCreate 0x08009350 Section 0 tasks.o(i.xTaskCreate) + i.xTaskCreateStatic 0x080093b4 Section 0 tasks.o(i.xTaskCreateStatic) + i.xTaskGetSchedulerState 0x08009470 Section 0 tasks.o(i.xTaskGetSchedulerState) + i.xTaskGetTickCount 0x08009490 Section 0 tasks.o(i.xTaskGetTickCount) + i.xTaskIncrementTick 0x0800949c Section 0 tasks.o(i.xTaskIncrementTick) + i.xTaskPriorityDisinherit 0x080095e0 Section 0 tasks.o(i.xTaskPriorityDisinherit) + i.xTaskRemoveFromEventList 0x08009684 Section 0 tasks.o(i.xTaskRemoveFromEventList) + i.xTaskResumeAll 0x0800971c Section 0 tasks.o(i.xTaskResumeAll) + i.xTimerCreateTimerTask 0x08009820 Section 0 timers.o(i.xTimerCreateTimerTask) + i.xTimerGenericCommand 0x08009898 Section 0 timers.o(i.xTimerGenericCommand) + .constdata 0x0800991c Section 112 stepmotor.o(.constdata) + .constdata 0x0800998c Section 36 main.o(.constdata) + .constdata 0x080099b0 Section 40 yousuan.o(.constdata) + .constdata 0x080099d8 Section 18 stm32f1xx_hal_rcc.o(.constdata) + aPLLMULFactorTable 0x080099d8 Data 16 stm32f1xx_hal_rcc.o(.constdata) + aPredivFactorTable 0x080099e8 Data 2 stm32f1xx_hal_rcc.o(.constdata) + .constdata 0x080099ea Section 18 stm32f1xx_hal_rcc_ex.o(.constdata) + aPLLMULFactorTable 0x080099ea Data 16 stm32f1xx_hal_rcc_ex.o(.constdata) + aPredivFactorTable 0x080099fa Data 2 stm32f1xx_hal_rcc_ex.o(.constdata) + .constdata 0x080099fc Section 24 system_stm32f1xx.o(.constdata) + .constdata 0x08009a14 Section 512 mbcrc.o(.constdata) + aucCRCHi 0x08009a14 Data 256 mbcrc.o(.constdata) + aucCRCLo 0x08009b14 Data 256 mbcrc.o(.constdata) + .constdata 0x08009c14 Section 36 modbus-port-stm32.o(.constdata) + .constdata 0x08009c38 Section 56 log.o(.constdata) + Lg2 0x08009c38 Data 24 log.o(.constdata) + Lg 0x08009c50 Data 32 log.o(.constdata) + .constdata 0x08009c70 Section 8 qnan.o(.constdata) + .conststring 0x08009c78 Section 12 main.o(.conststring) + .conststring 0x08009c84 Section 14 yousuan.o(.conststring) + .conststring 0x08009c94 Section 10 modbus-port-stm32.o(.conststring) + .data 0x20000000 Section 288 stepmotor.o(.data) + ArmInitIsRuning 0x20000108 Data 7 stepmotor.o(.data) + .data 0x20000120 Section 4 main.o(.data) + .data 0x20000124 Section 87 yousuan.o(.data) + .data 0x2000017c Section 9 stm32f1xx_hal.o(.data) + .data 0x20000188 Section 4 system_stm32f1xx.o(.data) + .data 0x2000018c Section 60 tasks.o(.data) + pxDelayedTaskList 0x20000190 Data 4 tasks.o(.data) + pxOverflowDelayedTaskList 0x20000194 Data 4 tasks.o(.data) + uxDeletedTasksWaitingCleanUp 0x20000198 Data 4 tasks.o(.data) + uxCurrentNumberOfTasks 0x2000019c Data 4 tasks.o(.data) + xTickCount 0x200001a0 Data 4 tasks.o(.data) + uxTopReadyPriority 0x200001a4 Data 4 tasks.o(.data) + xSchedulerRunning 0x200001a8 Data 4 tasks.o(.data) + xPendedTicks 0x200001ac Data 4 tasks.o(.data) + xYieldPending 0x200001b0 Data 4 tasks.o(.data) + xNumOfOverflows 0x200001b4 Data 4 tasks.o(.data) + uxTaskNumber 0x200001b8 Data 4 tasks.o(.data) + xNextTaskUnblockTime 0x200001bc Data 4 tasks.o(.data) + xIdleTaskHandle 0x200001c0 Data 4 tasks.o(.data) + uxSchedulerSuspended 0x200001c4 Data 4 tasks.o(.data) + .data 0x200001c8 Section 20 timers.o(.data) + pxCurrentTimerList 0x200001c8 Data 4 timers.o(.data) + pxOverflowTimerList 0x200001cc Data 4 timers.o(.data) + xTimerQueue 0x200001d0 Data 4 timers.o(.data) + xTimerTaskHandle 0x200001d4 Data 4 timers.o(.data) + xLastTime 0x200001d8 Data 4 timers.o(.data) + .data 0x200001dc Section 4 cmsis_os2.o(.data) + KernelState 0x200001dc Data 4 cmsis_os2.o(.data) + .data 0x200001e0 Section 32 heap_4.o(.data) + xStart 0x200001e0 Data 8 heap_4.o(.data) + pxEnd 0x200001e8 Data 4 heap_4.o(.data) + xFreeBytesRemaining 0x200001ec Data 4 heap_4.o(.data) + xMinimumEverFreeBytesRemaining 0x200001f0 Data 4 heap_4.o(.data) + xNumberOfSuccessfulAllocations 0x200001f4 Data 4 heap_4.o(.data) + xNumberOfSuccessfulFrees 0x200001f8 Data 4 heap_4.o(.data) + xBlockAllocatedBit 0x200001fc Data 4 heap_4.o(.data) + .data 0x20000200 Section 12 port.o(.data) + uxCriticalNesting 0x20000200 Data 4 port.o(.data) + ucMaxSysCallPriority 0x20000204 Data 1 port.o(.data) + ulMaxPRIGROUPValue 0x20000208 Data 4 port.o(.data) + .data 0x2000020c Section 2 mbfuncother.o(.data) + usMBSlaveIDLen 0x2000020c Data 2 mbfuncother.o(.data) + .data 0x20000210 Section 12 mbrtu.o(.data) + eSndState 0x20000210 Data 1 mbrtu.o(.data) + eRcvState 0x20000211 Data 1 mbrtu.o(.data) + pucSndBufferCur 0x20000214 Data 4 mbrtu.o(.data) + usSndBufferCount 0x20000218 Data 2 mbrtu.o(.data) + usRcvBufferPos 0x2000021a Data 2 mbrtu.o(.data) + .data 0x2000021c Section 181 mb.o(.data) + ucMBAddress 0x2000021c Data 1 mb.o(.data) + eMBCurrentMode 0x2000021d Data 1 mb.o(.data) + eMBState 0x2000021e Data 1 mb.o(.data) + peMBFrameSendCur 0x20000220 Data 4 mb.o(.data) + pvMBFrameStartCur 0x20000224 Data 4 mb.o(.data) + pvMBFrameStopCur 0x20000228 Data 4 mb.o(.data) + peMBFrameReceiveCur 0x2000022c Data 4 mb.o(.data) + pvMBFrameCloseCur 0x20000230 Data 4 mb.o(.data) + xFuncHandlers 0x20000248 Data 128 mb.o(.data) + ucMBFrame 0x200002c8 Data 4 mb.o(.data) + ucRcvAddress 0x200002cc Data 1 mb.o(.data) + ucFunctionCode 0x200002cd Data 1 mb.o(.data) + usLength 0x200002ce Data 2 mb.o(.data) + eException 0x200002d0 Data 1 mb.o(.data) + .data 0x200002d4 Section 16 modbus-port-stm32.o(.data) + eQueuedEvent 0x200002d4 Data 1 modbus-port-stm32.o(.data) + xEventInQueue 0x200002d5 Data 1 modbus-port-stm32.o(.data) + .data 0x200002e4 Section 4 stdout.o(.data) + .data 0x200002e8 Section 4 errno.o(.data) + _errno 0x200002e8 Data 4 errno.o(.data) + .bss 0x200002ec Section 324 stepmotor.o(.bss) + SpeedOld 0x200003e8 Data 14 stepmotor.o(.bss) + .bss 0x20000430 Section 588 main.o(.bss) + .bss 0x2000067c Section 1736 yousuan.o(.bss) + .bss 0x20000d44 Section 72 stm32f1xx_hal_timebase_tim.o(.bss) + .bss 0x20000d8c Section 64 queue.o(.bss) + .bss 0x20000dcc Section 1220 tasks.o(.bss) + pxReadyTasksLists 0x20000dcc Data 1120 tasks.o(.bss) + xDelayedTaskList1 0x2000122c Data 20 tasks.o(.bss) + xDelayedTaskList2 0x20001240 Data 20 tasks.o(.bss) + xPendingReadyList 0x20001254 Data 20 tasks.o(.bss) + xTasksWaitingTermination 0x20001268 Data 20 tasks.o(.bss) + xSuspendedTaskList 0x2000127c Data 20 tasks.o(.bss) + .bss 0x20001290 Section 280 timers.o(.bss) + xActiveTimerList1 0x20001290 Data 20 timers.o(.bss) + xActiveTimerList2 0x200012a4 Data 20 timers.o(.bss) + xStaticTimerQueue 0x200012b8 Data 80 timers.o(.bss) + ucStaticTimerQueueStorage 0x20001308 Data 160 timers.o(.bss) + .bss 0x200013a8 Section 1720 cmsis_os2.o(.bss) + Idle_TCB 0x200013a8 Data 92 cmsis_os2.o(.bss) + Idle_Stack 0x20001404 Data 512 cmsis_os2.o(.bss) + Timer_TCB 0x20001604 Data 92 cmsis_os2.o(.bss) + Timer_Stack 0x20001660 Data 1024 cmsis_os2.o(.bss) + .bss 0x20001a60 Section 7680 heap_4.o(.bss) + ucHeap 0x20001a60 Data 7680 heap_4.o(.bss) + .bss 0x20003860 Section 32 mbfuncother.o(.bss) + ucMBSlaveID 0x20003860 Data 32 mbfuncother.o(.bss) + .bss 0x20003880 Section 256 mbrtu.o(.bss) + .bss 0x20003980 Section 340 modbus-port-stm32.o(.bss) + STACK 0x20003ad8 Section 1024 startup_stm32f103xe.o(STACK) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$IEEEX$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + __ARM_use_no_argv 0x00000000 Number 0 main.o ABSOLUTE + _printf_a 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_c 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_charcount 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_d 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_e 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_f 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_flags 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_fp_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_fp_hex 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_g 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_i 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_int_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_l 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_ll 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lld 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lli 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llo 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llu 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llx 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_hex 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_oct 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_ls 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_mbtowc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_n 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_o 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_p 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_percent 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_pre_padding 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_return_value 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_s 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_sizespec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_str 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_truncate_signed 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_truncate_unsigned 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_u 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_wc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_wctomb 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_widthprec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_x 0x00000000 Number 0 stubs.o ABSOLUTE + __arm_fini_ - Undefined Weak Reference + __cpp_initialize__aeabi_ - Undefined Weak Reference + __cxa_finalize - Undefined Weak Reference + _clock_init - Undefined Weak Reference + _microlib_exit - Undefined Weak Reference + __Vectors_Size 0x00000130 Number 0 startup_stm32f103xe.o ABSOLUTE + __Vectors 0x08000000 Data 4 startup_stm32f103xe.o(RESET) + __Vectors_End 0x08000130 Data 0 startup_stm32f103xe.o(RESET) + __main 0x08000131 Thumb Code 0 entry.o(.ARM.Collect$$$$00000000) + _main_stk 0x08000131 Thumb Code 0 entry2.o(.ARM.Collect$$$$00000001) + _main_scatterload 0x08000135 Thumb Code 0 entry5.o(.ARM.Collect$$$$00000004) + __main_after_scatterload 0x08000139 Thumb Code 0 entry5.o(.ARM.Collect$$$$00000004) + _main_clock 0x08000139 Thumb Code 0 entry7b.o(.ARM.Collect$$$$00000008) + _main_cpp_init 0x08000139 Thumb Code 0 entry8b.o(.ARM.Collect$$$$0000000A) + _main_init 0x08000139 Thumb Code 0 entry9a.o(.ARM.Collect$$$$0000000B) + __rt_lib_shutdown_fini 0x08000141 Thumb Code 0 entry12b.o(.ARM.Collect$$$$0000000E) + __rt_final_cpp 0x08000145 Thumb Code 0 entry10a.o(.ARM.Collect$$$$0000000F) + __rt_final_exit 0x08000145 Thumb Code 0 entry11a.o(.ARM.Collect$$$$00000011) + SVC_Handler 0x08000149 Thumb Code 32 port.o(.emb_text) + __asm___6_port_c_39a90d8d__prvStartFirstTask 0x0800016d Thumb Code 28 port.o(.emb_text) + PendSV_Handler 0x0800018d Thumb Code 72 port.o(.emb_text) + vPortGetIPSR 0x080001d9 Thumb Code 6 port.o(.emb_text) + Reset_Handler 0x080001e1 Thumb Code 8 startup_stm32f103xe.o(.text) + ADC1_2_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + ADC3_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + CAN1_RX1_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + CAN1_SCE_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA1_Channel2_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA1_Channel3_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA1_Channel4_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA1_Channel5_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA1_Channel6_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA1_Channel7_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA2_Channel1_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA2_Channel2_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA2_Channel3_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + DMA2_Channel4_5_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + EXTI15_10_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + EXTI1_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + EXTI2_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + EXTI3_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + EXTI4_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + EXTI9_5_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + FLASH_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + FSMC_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + I2C1_ER_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + I2C1_EV_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + I2C2_ER_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + I2C2_EV_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + PVD_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + RCC_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + RTC_Alarm_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + RTC_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + SDIO_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + SPI1_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + SPI2_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + SPI3_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TAMPER_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM1_BRK_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM1_CC_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM1_TRG_COM_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM4_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM6_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM8_BRK_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM8_CC_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM8_TRG_COM_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + TIM8_UP_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + UART4_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + UART5_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + USART2_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + USART3_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + USBWakeUp_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + USB_HP_CAN1_TX_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + USB_LP_CAN1_RX0_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + WWDG_IRQHandler 0x080001fb Thumb Code 0 startup_stm32f103xe.o(.text) + __aeabi_llsr 0x08000205 Thumb Code 32 llushr.o(.text) + _ll_ushift_r 0x08000205 Thumb Code 0 llushr.o(.text) + __aeabi_memcpy 0x08000225 Thumb Code 36 memcpya.o(.text) + __aeabi_memcpy4 0x08000225 Thumb Code 0 memcpya.o(.text) + __aeabi_memcpy8 0x08000225 Thumb Code 0 memcpya.o(.text) + __aeabi_memset 0x08000249 Thumb Code 14 memseta.o(.text) + __aeabi_memset4 0x08000249 Thumb Code 0 memseta.o(.text) + __aeabi_memset8 0x08000249 Thumb Code 0 memseta.o(.text) + __aeabi_memclr 0x08000257 Thumb Code 4 memseta.o(.text) + __aeabi_memclr4 0x08000257 Thumb Code 0 memseta.o(.text) + __aeabi_memclr8 0x08000257 Thumb Code 0 memseta.o(.text) + memset 0x0800025b Thumb Code 18 memseta.o(.text) + __aeabi_fadd 0x0800026d Thumb Code 164 fadd.o(.text) + __aeabi_fsub 0x08000311 Thumb Code 6 fadd.o(.text) + __aeabi_frsub 0x08000317 Thumb Code 6 fadd.o(.text) + __aeabi_fmul 0x0800031d Thumb Code 100 fmul.o(.text) + __aeabi_fdiv 0x08000381 Thumb Code 124 fdiv.o(.text) + __aeabi_dmul 0x080003fd Thumb Code 228 dmul.o(.text) + __aeabi_ddiv 0x080004e1 Thumb Code 222 ddiv.o(.text) + __aeabi_i2f 0x080005bf Thumb Code 18 fflti.o(.text) + __aeabi_ui2f 0x080005d1 Thumb Code 10 ffltui.o(.text) + __aeabi_f2iz 0x080005db Thumb Code 50 ffixi.o(.text) + __aeabi_f2uiz 0x0800060d Thumb Code 40 ffixui.o(.text) + __aeabi_d2iz 0x08000635 Thumb Code 62 dfixi.o(.text) + __aeabi_d2uiz 0x08000673 Thumb Code 50 dfixui.o(.text) + __aeabi_f2d 0x080006a5 Thumb Code 38 f2d.o(.text) + __aeabi_cdcmpeq 0x080006cd Thumb Code 0 cdcmple.o(.text) + __aeabi_cdcmple 0x080006cd Thumb Code 48 cdcmple.o(.text) + __aeabi_d2f 0x080006fd Thumb Code 56 d2f.o(.text) + __aeabi_cfcmpeq 0x08000735 Thumb Code 0 cfcmple.o(.text) + __aeabi_cfcmple 0x08000735 Thumb Code 20 cfcmple.o(.text) + __aeabi_cfrcmple 0x08000749 Thumb Code 20 cfrcmple.o(.text) + __aeabi_uidiv 0x0800075d Thumb Code 0 uidiv.o(.text) + __aeabi_uidivmod 0x0800075d Thumb Code 44 uidiv.o(.text) + __aeabi_uldivmod 0x08000789 Thumb Code 98 uldiv.o(.text) + __I$use$fp 0x080007eb Thumb Code 0 iusefp.o(.text) + _float_round 0x080007eb Thumb Code 18 fepilogue.o(.text) + _float_epilogue 0x080007fd Thumb Code 92 fepilogue.o(.text) + _double_round 0x08000859 Thumb Code 30 depilogue.o(.text) + _double_epilogue 0x08000877 Thumb Code 156 depilogue.o(.text) + __aeabi_dadd 0x08000913 Thumb Code 322 dadd.o(.text) + __aeabi_dsub 0x08000a55 Thumb Code 6 dadd.o(.text) + __aeabi_drsub 0x08000a5b Thumb Code 6 dadd.o(.text) + __ARM_scalbn 0x08000a61 Thumb Code 46 dscalb.o(.text) + scalbn 0x08000a61 Thumb Code 0 dscalb.o(.text) + _dsqrt 0x08000a8f Thumb Code 162 dsqrt.o(.text) + __aeabi_i2d 0x08000b31 Thumb Code 34 dflti.o(.text) + __aeabi_d2ulz 0x08000b53 Thumb Code 48 dfixul.o(.text) + __aeabi_cdrcmple 0x08000b85 Thumb Code 48 cdrcmple.o(.text) + __scatterload 0x08000bb5 Thumb Code 28 init.o(.text) + __scatterload_rt2 0x08000bb5 Thumb Code 0 init.o(.text) + __aeabi_llsl 0x08000bd9 Thumb Code 30 llshl.o(.text) + _ll_shift_l 0x08000bd9 Thumb Code 0 llshl.o(.text) + __aeabi_lasr 0x08000bf7 Thumb Code 36 llsshr.o(.text) + _ll_sshift_r 0x08000bf7 Thumb Code 0 llsshr.o(.text) + __decompress 0x08000c1b Thumb Code 0 __dczerorl2.o(.text) + __decompress1 0x08000c1b Thumb Code 86 __dczerorl2.o(.text) + ADC_ConversionStop_Disable 0x08000c71 Thumb Code 92 stm32f1xx_hal_adc.o(i.ADC_ConversionStop_Disable) + ADC_DMAConvCplt 0x08000ccd Thumb Code 82 stm32f1xx_hal_adc.o(i.ADC_DMAConvCplt) + ADC_DMAError 0x08000d1f Thumb Code 30 stm32f1xx_hal_adc.o(i.ADC_DMAError) + ADC_DMAHalfConvCplt 0x08000d3d Thumb Code 14 stm32f1xx_hal_adc.o(i.ADC_DMAHalfConvCplt) + ADC_Enable 0x08000d4d Thumb Code 134 stm32f1xx_hal_adc.o(i.ADC_Enable) + ArmSoftCtrl 0x08000ddd Thumb Code 1208 stepmotor.o(i.ArmSoftCtrl) + AverageData 0x080012b1 Thumb Code 80 yousuan.o(i.AverageData) + BusFault_Handler 0x08001305 Thumb Code 4 stm32f1xx_it.o(i.BusFault_Handler) + DMA1_Channel1_IRQHandler 0x08001309 Thumb Code 10 stm32f1xx_it.o(i.DMA1_Channel1_IRQHandler) + DebugMon_Handler 0x08001345 Thumb Code 2 stm32f1xx_it.o(i.DebugMon_Handler) + EXTI0_IRQHandler 0x08001347 Thumb Code 10 stm32f1xx_it.o(i.EXTI0_IRQHandler) + EXTIx_IRQ_Disable 0x08001351 Thumb Code 34 stepmotor.o(i.EXTIx_IRQ_Disable) + EXTIx_IRQ_Enable 0x08001379 Thumb Code 34 stepmotor.o(i.EXTIx_IRQ_Enable) + Error_Handler 0x080013a1 Thumb Code 6 main.o(i.Error_Handler) + Exti_IOStateRead 0x080013a9 Thumb Code 24 stepmotor.o(i.Exti_IOStateRead) + Exti_IRQ_Ctrl 0x080013c5 Thumb Code 34 stepmotor.o(i.Exti_IRQ_Ctrl) + HAL_ADCEx_Calibration_Start 0x080013e9 Thumb Code 278 stm32f1xx_hal_adc_ex.o(i.HAL_ADCEx_Calibration_Start) + HAL_ADC_ConfigChannel 0x08001505 Thumb Code 338 stm32f1xx_hal_adc.o(i.HAL_ADC_ConfigChannel) + HAL_ADC_ConvCpltCallback 0x08001665 Thumb Code 2 stm32f1xx_hal_adc.o(i.HAL_ADC_ConvCpltCallback) + HAL_ADC_ConvHalfCpltCallback 0x08001667 Thumb Code 2 stm32f1xx_hal_adc.o(i.HAL_ADC_ConvHalfCpltCallback) + HAL_ADC_ErrorCallback 0x08001669 Thumb Code 2 stm32f1xx_hal_adc.o(i.HAL_ADC_ErrorCallback) + HAL_ADC_Init 0x0800166d Thumb Code 340 stm32f1xx_hal_adc.o(i.HAL_ADC_Init) + HAL_ADC_MspInit 0x080017cd Thumb Code 152 stm32f1xx_hal_msp.o(i.HAL_ADC_MspInit) + HAL_ADC_Start_DMA 0x08001879 Thumb Code 362 stm32f1xx_hal_adc.o(i.HAL_ADC_Start_DMA) + HAL_DMA_IRQHandler 0x080019f9 Thumb Code 910 stm32f1xx_hal_dma.o(i.HAL_DMA_IRQHandler) + HAL_DMA_Init 0x08001d91 Thumb Code 132 stm32f1xx_hal_dma.o(i.HAL_DMA_Init) + HAL_DMA_Start_IT 0x08001e1d Thumb Code 156 stm32f1xx_hal_dma.o(i.HAL_DMA_Start_IT) + HAL_GPIO_EXTI_Callback 0x08001eb9 Thumb Code 132 stepmotor.o(i.HAL_GPIO_EXTI_Callback) + HAL_GPIO_EXTI_IRQHandler 0x08001f55 Thumb Code 24 stm32f1xx_hal_gpio.o(i.HAL_GPIO_EXTI_IRQHandler) + HAL_GPIO_Init 0x08001f71 Thumb Code 792 stm32f1xx_hal_gpio.o(i.HAL_GPIO_Init) + HAL_GPIO_WritePin 0x080022b1 Thumb Code 12 stm32f1xx_hal_gpio.o(i.HAL_GPIO_WritePin) + HAL_GetTick 0x080022bd Thumb Code 6 stm32f1xx_hal.o(i.HAL_GetTick) + HAL_IncTick 0x080022c9 Thumb Code 16 stm32f1xx_hal.o(i.HAL_IncTick) + HAL_Init 0x080022e1 Thumb Code 34 stm32f1xx_hal.o(i.HAL_Init) + HAL_InitTick 0x08002309 Thumb Code 138 stm32f1xx_hal_timebase_tim.o(i.HAL_InitTick) + HAL_MspInit 0x080023a9 Thumb Code 86 stm32f1xx_hal_msp.o(i.HAL_MspInit) + HAL_NVIC_EnableIRQ 0x08002409 Thumb Code 32 stm32f1xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ) + HAL_NVIC_SetPriority 0x08002429 Thumb Code 124 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriority) + HAL_NVIC_SetPriorityGrouping 0x080024a5 Thumb Code 32 stm32f1xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping) + HAL_RCCEx_GetPeriphCLKFreq 0x080024cd Thumb Code 260 stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_GetPeriphCLKFreq) + HAL_RCCEx_PeriphCLKConfig 0x080025e5 Thumb Code 290 stm32f1xx_hal_rcc_ex.o(i.HAL_RCCEx_PeriphCLKConfig) + HAL_RCC_ClockConfig 0x08002715 Thumb Code 376 stm32f1xx_hal_rcc.o(i.HAL_RCC_ClockConfig) + HAL_RCC_GetClockConfig 0x080028a1 Thumb Code 58 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetClockConfig) + HAL_RCC_GetHCLKFreq 0x080028e5 Thumb Code 6 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq) + HAL_RCC_GetPCLK1Freq 0x080028f1 Thumb Code 22 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq) + HAL_RCC_GetPCLK2Freq 0x08002911 Thumb Code 22 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq) + HAL_RCC_GetSysClockFreq 0x08002931 Thumb Code 92 stm32f1xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq) + HAL_RCC_OscConfig 0x080029a1 Thumb Code 1114 stm32f1xx_hal_rcc.o(i.HAL_RCC_OscConfig) + HAL_TIMEx_BreakCallback 0x08002e05 Thumb Code 2 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_BreakCallback) + HAL_TIMEx_CommutCallback 0x08002e07 Thumb Code 2 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_CommutCallback) + HAL_TIMEx_ConfigBreakDeadTime 0x08002e09 Thumb Code 116 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_ConfigBreakDeadTime) + HAL_TIMEx_MasterConfigSynchronization 0x08002e7d Thumb Code 134 stm32f1xx_hal_tim_ex.o(i.HAL_TIMEx_MasterConfigSynchronization) + HAL_TIM_Base_Init 0x08002f19 Thumb Code 102 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Init) + HAL_TIM_Base_MspInit 0x08002f81 Thumb Code 150 stm32f1xx_hal_msp.o(i.HAL_TIM_Base_MspInit) + HAL_TIM_Base_Start_IT 0x08003025 Thumb Code 122 stm32f1xx_hal_tim.o(i.HAL_TIM_Base_Start_IT) + HAL_TIM_ConfigClockSource 0x080030b5 Thumb Code 268 stm32f1xx_hal_tim.o(i.HAL_TIM_ConfigClockSource) + HAL_TIM_IC_CaptureCallback 0x080031c1 Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_IC_CaptureCallback) + HAL_TIM_IRQHandler 0x080031c3 Thumb Code 364 stm32f1xx_hal_tim.o(i.HAL_TIM_IRQHandler) + HAL_TIM_MspPostInit 0x08003331 Thumb Code 240 stm32f1xx_hal_msp.o(i.HAL_TIM_MspPostInit) + HAL_TIM_OC_DelayElapsedCallback 0x08003439 Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_OC_DelayElapsedCallback) + HAL_TIM_PWM_ConfigChannel 0x0800343b Thumb Code 260 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_ConfigChannel) + HAL_TIM_PWM_Init 0x0800353f Thumb Code 102 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Init) + HAL_TIM_PWM_MspInit 0x080035a5 Thumb Code 58 stm32f1xx_hal_msp.o(i.HAL_TIM_PWM_MspInit) + HAL_TIM_PWM_PulseFinishedCallback 0x080035e9 Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_PulseFinishedCallback) + HAL_TIM_PWM_Start 0x080035ed Thumb Code 222 stm32f1xx_hal_tim.o(i.HAL_TIM_PWM_Start) + HAL_TIM_PeriodElapsedCallback 0x080036e1 Thumb Code 18 main.o(i.HAL_TIM_PeriodElapsedCallback) + HAL_TIM_TriggerCallback 0x080036f9 Thumb Code 2 stm32f1xx_hal_tim.o(i.HAL_TIM_TriggerCallback) + HAL_UART_Init 0x080036fb Thumb Code 118 stm32f1xx_hal_uart.o(i.HAL_UART_Init) + HAL_UART_MspInit 0x08003771 Thumb Code 248 stm32f1xx_hal_msp.o(i.HAL_UART_MspInit) + HAL_UART_Transmit 0x08003881 Thumb Code 190 stm32f1xx_hal_uart.o(i.HAL_UART_Transmit) + HardFault_Handler 0x0800393f Thumb Code 4 stm32f1xx_it.o(i.HardFault_Handler) + HasSampleCheck 0x08003945 Thumb Code 278 yousuan.o(i.HasSampleCheck) + MB_485_Direct_Receive 0x08003aa1 Thumb Code 38 modbus-port-stm32.o(i.MB_485_Direct_Receive) + MB_485_Direct_Transmit 0x08003acd Thumb Code 14 modbus-port-stm32.o(i.MB_485_Direct_Transmit) + MODBUS_Init 0x08003ae1 Thumb Code 40 modbus-port-stm32.o(i.MODBUS_Init) + MemManage_Handler 0x08004111 Thumb Code 4 stm32f1xx_it.o(i.MemManage_Handler) + ModbusPoll 0x08004115 Thumb Code 14 modbus-port-stm32.o(i.ModbusPoll) + MotorCTRLInitiate 0x08004125 Thumb Code 110 stepmotor.o(i.MotorCTRLInitiate) + MotorCtrl 0x080041cd Thumb Code 38 stepmotor.o(i.MotorCtrl) + MotorZero_Init 0x080041f5 Thumb Code 244 stepmotor.o(i.MotorZero_Init) + Motor_Dir 0x0800430d Thumb Code 108 stepmotor.o(i.Motor_Dir) + Motor_En 0x0800437d Thumb Code 10 stepmotor.o(i.Motor_En) + Motor_IECMD 0x08004387 Thumb Code 48 stepmotor.o(i.Motor_IECMD) + Motor_PWM 0x080043b7 Thumb Code 78 stepmotor.o(i.Motor_PWM) + Motor_PWMCmd 0x08004405 Thumb Code 48 stepmotor.o(i.Motor_PWMCmd) + NMI_Handler 0x08004435 Thumb Code 4 stm32f1xx_it.o(i.NMI_Handler) + SamplePumpCtrl 0x08004461 Thumb Code 884 stepmotor.o(i.SamplePumpCtrl) + SamplePumpSpeed_AcceleratedConver 0x08004825 Thumb Code 66 stepmotor.o(i.SamplePumpSpeed_AcceleratedConver) + SampleRunTask 0x08004875 Thumb Code 1546 yousuan.o(i.SampleRunTask) + StartDefaultTask 0x08004ed9 Thumb Code 26 main.o(i.StartDefaultTask) + StirrerCtrl 0x08004efd Thumb Code 8 main.o(i.StirrerCtrl) + SysTick_Handler 0x08004f09 Thumb Code 22 cmsis_os2.o(i.SysTick_Handler) + SystemClock_Config 0x08004f1f Thumb Code 130 main.o(i.SystemClock_Config) + SystemInit 0x08004fa1 Thumb Code 2 system_stm32f1xx.o(i.SystemInit) + TIM1_UP_IRQHandler 0x08004fa5 Thumb Code 10 stm32f1xx_it.o(i.TIM1_UP_IRQHandler) + TIM2_CH2_CMD 0x08004fb5 Thumb Code 58 tim.o(i.TIM2_CH2_CMD) + TIM2_CH2_CTRL 0x08004fef Thumb Code 10 tim.o(i.TIM2_CH2_CTRL) + TIM2_IECMD 0x08004ff9 Thumb Code 58 tim.o(i.TIM2_IECMD) + TIM2_IRQHandler 0x08005035 Thumb Code 76 stm32f1xx_it.o(i.TIM2_IRQHandler) + TIM3_CH1_CMD 0x08005091 Thumb Code 62 tim.o(i.TIM3_CH1_CMD) + TIM3_CH1_CTRL 0x080050d5 Thumb Code 12 tim.o(i.TIM3_CH1_CTRL) + TIM3_IECMD 0x080050e5 Thumb Code 54 tim.o(i.TIM3_IECMD) + TIM3_IRQHandler 0x08005121 Thumb Code 70 stm32f1xx_it.o(i.TIM3_IRQHandler) + TIM5_CH3_CMD 0x0800517d Thumb Code 62 tim.o(i.TIM5_CH3_CMD) + TIM5_CH3_CTRL 0x080051c1 Thumb Code 12 tim.o(i.TIM5_CH3_CTRL) + TIM5_IECMD 0x080051d1 Thumb Code 54 tim.o(i.TIM5_IECMD) + TIM5_IRQHandler 0x0800520d Thumb Code 70 stm32f1xx_it.o(i.TIM5_IRQHandler) + TIM7_IRQHandler 0x08005269 Thumb Code 30 modbus-port-stm32.o(i.TIM7_IRQHandler) + TIM_Base_SetConfig 0x0800528d Thumb Code 150 stm32f1xx_hal_tim.o(i.TIM_Base_SetConfig) + TIM_CCxChannelCmd 0x08005339 Thumb Code 34 stm32f1xx_hal_tim.o(i.TIM_CCxChannelCmd) + TIM_ETR_SetConfig 0x0800535b Thumb Code 22 stm32f1xx_hal_tim.o(i.TIM_ETR_SetConfig) + TIM_OC2_SetConfig 0x080053f5 Thumb Code 114 stm32f1xx_hal_tim.o(i.TIM_OC2_SetConfig) + USART1_IRQHandler 0x08005781 Thumb Code 150 modbus-port-stm32.o(i.USART1_IRQHandler) + UsageFault_Handler 0x08005825 Thumb Code 4 stm32f1xx_it.o(i.UsageFault_Handler) + YouSuanRun 0x08005829 Thumb Code 276 yousuan.o(i.YouSuanRun) + __0printf 0x080059a1 Thumb Code 22 printfa.o(i.__0printf) + __1printf 0x080059a1 Thumb Code 0 printfa.o(i.__0printf) + __2printf 0x080059a1 Thumb Code 0 printfa.o(i.__0printf) + __c89printf 0x080059a1 Thumb Code 0 printfa.o(i.__0printf) + printf 0x080059a1 Thumb Code 0 printfa.o(i.__0printf) + __0sprintf 0x080059c1 Thumb Code 34 printfa.o(i.__0sprintf) + __1sprintf 0x080059c1 Thumb Code 0 printfa.o(i.__0sprintf) + __2sprintf 0x080059c1 Thumb Code 0 printfa.o(i.__0sprintf) + __c89sprintf 0x080059c1 Thumb Code 0 printfa.o(i.__0sprintf) + sprintf 0x080059c1 Thumb Code 0 printfa.o(i.__0sprintf) + __kernel_poly 0x08005a43 Thumb Code 170 poly.o(i.__kernel_poly) + __mathlib_dbl_divzero 0x08005aed Thumb Code 12 dunder.o(i.__mathlib_dbl_divzero) + __mathlib_dbl_infnan 0x08005afd Thumb Code 6 dunder.o(i.__mathlib_dbl_infnan) + __mathlib_dbl_invalid 0x08005b03 Thumb Code 12 dunder.o(i.__mathlib_dbl_invalid) + __scatterload_copy 0x08005b0f Thumb Code 14 handlers.o(i.__scatterload_copy) + __scatterload_null 0x08005b1d Thumb Code 2 handlers.o(i.__scatterload_null) + __scatterload_zeroinit 0x08005b1f Thumb Code 14 handlers.o(i.__scatterload_zeroinit) + __set_errno 0x08005b2d Thumb Code 6 errno.o(i.__set_errno) + _task_MotorCTRL 0x080063cd Thumb Code 10 stepmotor.o(i._task_MotorCTRL) + delay_us 0x080063d7 Thumb Code 134 delay.o(i.delay_us) + eMBEnable 0x0800645d Thumb Code 32 mb.o(i.eMBEnable) + eMBFuncReadCoils 0x08006485 Thumb Code 174 mbfunccoils.o(i.eMBFuncReadCoils) + eMBFuncReadDiscreteInputs 0x08006533 Thumb Code 172 mbfuncdisc.o(i.eMBFuncReadDiscreteInputs) + eMBFuncReadHoldingRegister 0x080065df Thumb Code 140 mbfuncholding.o(i.eMBFuncReadHoldingRegister) + eMBFuncReadInputRegister 0x0800666b Thumb Code 140 mbfuncinput.o(i.eMBFuncReadInputRegister) + eMBFuncReadWriteMultipleHoldingRegister 0x080066f7 Thumb Code 212 mbfuncholding.o(i.eMBFuncReadWriteMultipleHoldingRegister) + eMBFuncReportSlaveID 0x080067cd Thumb Code 30 mbfuncother.o(i.eMBFuncReportSlaveID) + eMBFuncWriteCoil 0x080067f5 Thumb Code 112 mbfunccoils.o(i.eMBFuncWriteCoil) + eMBFuncWriteHoldingRegister 0x08006865 Thumb Code 66 mbfuncholding.o(i.eMBFuncWriteHoldingRegister) + eMBFuncWriteMultipleCoils 0x080068a7 Thumb Code 144 mbfunccoils.o(i.eMBFuncWriteMultipleCoils) + eMBFuncWriteMultipleHoldingRegister 0x08006937 Thumb Code 110 mbfuncholding.o(i.eMBFuncWriteMultipleHoldingRegister) + eMBInit 0x080069a5 Thumb Code 150 mb.o(i.eMBInit) + eMBPoll 0x08006a85 Thumb Code 258 mb.o(i.eMBPoll) + eMBRTUInit 0x08006bb1 Thumb Code 72 mbrtu.o(i.eMBRTUInit) + eMBRTUReceive 0x08006bfd Thumb Code 62 mbrtu.o(i.eMBRTUReceive) + eMBRTUSend 0x08006c45 Thumb Code 122 mbrtu.o(i.eMBRTUSend) + eMBRTUStart 0x08006cd5 Thumb Code 22 mbrtu.o(i.eMBRTUStart) + eMBRTUStop 0x08006cf1 Thumb Code 16 mbrtu.o(i.eMBRTUStop) + eMBRegCoilsCB 0x08006d01 Thumb Code 150 modbus-port-stm32.o(i.eMBRegCoilsCB) + eMBRegDiscreteCB 0x08006d9d Thumb Code 94 modbus-port-stm32.o(i.eMBRegDiscreteCB) + eMBRegHoldingCB 0x08006e01 Thumb Code 184 modbus-port-stm32.o(i.eMBRegHoldingCB) + eMBRegInputCB 0x08006ebd Thumb Code 82 modbus-port-stm32.o(i.eMBRegInputCB) + fputc 0x08006f15 Thumb Code 22 main.o(i.fputc) + log 0x08006f31 Thumb Code 808 log.o(i.log) + log10 0x0800728d Thumb Code 198 log10.o(i.log10) + main 0x08007371 Thumb Code 86 main.o(i.main) + osDelay 0x080073d9 Thumb Code 30 cmsis_os2.o(i.osDelay) + osKernelInitialize 0x080073f9 Thumb Code 38 cmsis_os2.o(i.osKernelInitialize) + osKernelStart 0x08007425 Thumb Code 82 cmsis_os2.o(i.osKernelStart) + osThreadNew 0x08007485 Thumb Code 184 cmsis_os2.o(i.osThreadNew) + prveMBError2Exception 0x08007f61 Thumb Code 34 mbutils.o(i.prveMBError2Exception) + pvPortMalloc 0x08007fb5 Thumb Code 306 heap_4.o(i.pvPortMalloc) + pxPortInitialiseStack 0x08008101 Thumb Code 30 port.o(i.pxPortInitialiseStack) + sqrt 0x08008125 Thumb Code 76 sqrt.o(i.sqrt) + usMBCRC16 0x08008171 Thumb Code 48 mbcrc.o(i.usMBCRC16) + uxListRemove 0x080081a9 Thumb Code 40 list.o(i.uxListRemove) + vApplicationGetIdleTaskMemory 0x080081d1 Thumb Code 14 cmsis_os2.o(i.vApplicationGetIdleTaskMemory) + vApplicationGetTimerTaskMemory 0x080081e9 Thumb Code 16 cmsis_os2.o(i.vApplicationGetTimerTaskMemory) + vListInitialise 0x08008201 Thumb Code 26 list.o(i.vListInitialise) + vListInitialiseItem 0x0800821b Thumb Code 6 list.o(i.vListInitialiseItem) + vListInsert 0x08008221 Thumb Code 52 list.o(i.vListInsert) + vListInsertEnd 0x08008255 Thumb Code 24 list.o(i.vListInsertEnd) + vMBPortSerialEnable 0x0800826d Thumb Code 78 modbus-port-stm32.o(i.vMBPortSerialEnable) + vMBPortTimersDisable 0x080082c1 Thumb Code 50 modbus-port-stm32.o(i.vMBPortTimersDisable) + vMBPortTimersEnable 0x080082f9 Thumb Code 50 modbus-port-stm32.o(i.vMBPortTimersEnable) + vPortEnterCritical 0x08008331 Thumb Code 76 port.o(i.vPortEnterCritical) + vPortExitCritical 0x08008385 Thumb Code 56 port.o(i.vPortExitCritical) + vPortFree 0x080083c1 Thumb Code 150 heap_4.o(i.vPortFree) + vPortSetupTimerInterrupt 0x08008465 Thumb Code 36 port.o(i.vPortSetupTimerInterrupt) + vPortValidateInterruptPriority 0x0800848d Thumb Code 106 port.o(i.vPortValidateInterruptPriority) + vQueueAddToRegistry 0x08008505 Thumb Code 38 queue.o(i.vQueueAddToRegistry) + vQueueWaitForMessageRestricted 0x08008531 Thumb Code 74 queue.o(i.vQueueWaitForMessageRestricted) + vTaskDelay 0x0800857d Thumb Code 82 tasks.o(i.vTaskDelay) + vTaskDelete 0x080085d9 Thumb Code 168 tasks.o(i.vTaskDelete) + vTaskInternalSetTimeOutState 0x080086a1 Thumb Code 14 tasks.o(i.vTaskInternalSetTimeOutState) + vTaskMissedYield 0x080086b9 Thumb Code 8 tasks.o(i.vTaskMissedYield) + vTaskPlaceOnEventList 0x080086c5 Thumb Code 52 tasks.o(i.vTaskPlaceOnEventList) + vTaskPlaceOnEventListRestricted 0x080086fd Thumb Code 60 tasks.o(i.vTaskPlaceOnEventListRestricted) + vTaskStartScheduler 0x0800873d Thumb Code 156 tasks.o(i.vTaskStartScheduler) + vTaskSuspendAll 0x080087f5 Thumb Code 12 tasks.o(i.vTaskSuspendAll) + vTaskSwitchContext 0x08008805 Thumb Code 122 tasks.o(i.vTaskSwitchContext) + xMBPortEventGet 0x08008895 Thumb Code 26 modbus-port-stm32.o(i.xMBPortEventGet) + xMBPortEventInit 0x080088b9 Thumb Code 10 modbus-port-stm32.o(i.xMBPortEventInit) + xMBPortEventPost 0x080088c9 Thumb Code 16 modbus-port-stm32.o(i.xMBPortEventPost) + xMBPortSerialGetByte 0x080088e1 Thumb Code 18 modbus-port-stm32.o(i.xMBPortSerialGetByte) + xMBPortSerialInit 0x080088f9 Thumb Code 228 modbus-port-stm32.o(i.xMBPortSerialInit) + xMBPortSerialPutByte 0x080089ed Thumb Code 16 modbus-port-stm32.o(i.xMBPortSerialPutByte) + xMBPortTimersInit 0x08008a01 Thumb Code 70 modbus-port-stm32.o(i.xMBPortTimersInit) + xMBRTUReceiveFSM 0x08008a55 Thumb Code 122 mbrtu.o(i.xMBRTUReceiveFSM) + xMBRTUTimerT35Expired 0x08008add Thumb Code 60 mbrtu.o(i.xMBRTUTimerT35Expired) + xMBRTUTransmitFSM 0x08008b1d Thumb Code 94 mbrtu.o(i.xMBRTUTransmitFSM) + xMBUtilGetBits 0x08008b89 Thumb Code 42 mbutils.o(i.xMBUtilGetBits) + xMBUtilSetBits 0x08008bb3 Thumb Code 96 mbutils.o(i.xMBUtilSetBits) + xPortStartScheduler 0x08008c15 Thumb Code 228 port.o(i.xPortStartScheduler) + xPortSysTickHandler 0x08008d0d Thumb Code 46 port.o(i.xPortSysTickHandler) + xQueueGenericCreateStatic 0x08008d41 Thumb Code 224 queue.o(i.xQueueGenericCreateStatic) + xQueueGenericReset 0x08008e21 Thumb Code 146 queue.o(i.xQueueGenericReset) + xQueueGenericSend 0x08008eb9 Thumb Code 420 queue.o(i.xQueueGenericSend) + xQueueGenericSendFromISR 0x08009061 Thumb Code 252 queue.o(i.xQueueGenericSendFromISR) + xQueueReceive 0x0800915d Thumb Code 356 queue.o(i.xQueueReceive) + xTaskCheckForTimeOut 0x080092c5 Thumb Code 132 tasks.o(i.xTaskCheckForTimeOut) + xTaskCreate 0x08009351 Thumb Code 100 tasks.o(i.xTaskCreate) + xTaskCreateStatic 0x080093b5 Thumb Code 186 tasks.o(i.xTaskCreateStatic) + xTaskGetSchedulerState 0x08009471 Thumb Code 24 tasks.o(i.xTaskGetSchedulerState) + xTaskGetTickCount 0x08009491 Thumb Code 6 tasks.o(i.xTaskGetTickCount) + xTaskIncrementTick 0x0800949d Thumb Code 280 tasks.o(i.xTaskIncrementTick) + xTaskPriorityDisinherit 0x080095e1 Thumb Code 152 tasks.o(i.xTaskPriorityDisinherit) + xTaskRemoveFromEventList 0x08009685 Thumb Code 126 tasks.o(i.xTaskRemoveFromEventList) + xTaskResumeAll 0x0800971d Thumb Code 222 tasks.o(i.xTaskResumeAll) + xTimerCreateTimerTask 0x08009821 Thumb Code 100 timers.o(i.xTimerCreateTimerTask) + xTimerGenericCommand 0x08009899 Thumb Code 128 timers.o(i.xTimerGenericCommand) + FullCoordinate 0x0800991c Data 28 stepmotor.o(.constdata) + ShiftPluse 0x08009938 Data 28 stepmotor.o(.constdata) + VelocityH 0x08009954 Data 28 stepmotor.o(.constdata) + VelocityL 0x08009970 Data 28 stepmotor.o(.constdata) + defaultTask_attributes 0x0800998c Data 36 main.o(.constdata) + SampleCupMax 0x080099b0 Data 1 yousuan.o(.constdata) + SingelCupStep 0x080099b2 Data 2 yousuan.o(.constdata) + SampleRunTask_attributes 0x080099b4 Data 36 yousuan.o(.constdata) + AHBPrescTable 0x080099fc Data 16 system_stm32f1xx.o(.constdata) + APBPrescTable 0x08009a0c Data 8 system_stm32f1xx.o(.constdata) + MBRunTask_attributes 0x08009c14 Data 36 modbus-port-stm32.o(.constdata) + __mathlib_zero 0x08009c70 Data 8 qnan.o(.constdata) + Region$$Table$$Base 0x08009ca0 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08009cc0 Number 0 anon$$obj.o(Region$$Table) + PumpSelect 0x20000000 Data 7 stepmotor.o(.data) + CountOver 0x20000007 Data 7 stepmotor.o(.data) + SamplePumpCountOver 0x2000000e Data 7 stepmotor.o(.data) + SpeedSet 0x20000018 Data 28 stepmotor.o(.data) + TaskisRunning 0x20000034 Data 7 stepmotor.o(.data) + IdelEn 0x2000003b Data 7 stepmotor.o(.data) + Shifting 0x20000044 Data 28 stepmotor.o(.data) + period 0x20000060 Data 28 stepmotor.o(.data) + Speeda 0x2000007c Data 28 stepmotor.o(.data) + Velocity 0x20000098 Data 28 stepmotor.o(.data) + VelocityMax 0x200000b4 Data 28 stepmotor.o(.data) + Direction 0x200000d0 Data 7 stepmotor.o(.data) + PumpShutDown 0x200000d7 Data 7 stepmotor.o(.data) + DirectionSet 0x200000de Data 7 stepmotor.o(.data) + ENSet 0x200000e5 Data 7 stepmotor.o(.data) + SpeedMode 0x200000ec Data 7 stepmotor.o(.data) + PositionMode 0x200000f3 Data 7 stepmotor.o(.data) + FindZero 0x200000fa Data 7 stepmotor.o(.data) + FindedZero 0x20000101 Data 7 stepmotor.o(.data) + iz 0x20000110 Data 2 stepmotor.o(.data) + temp1 0x20000114 Data 4 stepmotor.o(.data) + temp2 0x20000118 Data 4 stepmotor.o(.data) + temp3 0x2000011c Data 4 stepmotor.o(.data) + defaultTaskHandle 0x20000120 Data 4 main.o(.data) + ADCData 0x20000124 Data 4 yousuan.o(.data) + slope1 0x20000128 Data 4 yousuan.o(.data) + slope2 0x2000012c Data 4 yousuan.o(.data) + SetmL 0x20000130 Data 4 yousuan.o(.data) + UseuL 0x20000134 Data 4 yousuan.o(.data) + CuiQuFlag 0x20000138 Data 1 yousuan.o(.data) + ZhongHeFlag 0x20000139 Data 1 yousuan.o(.data) + CCRV 0x2000013a Data 2 yousuan.o(.data) + Blank 0x2000013c Data 4 yousuan.o(.data) + ABSB 0x20000140 Data 4 yousuan.o(.data) + BufIndex 0x20000144 Data 2 yousuan.o(.data) + step 0x20000148 Data 4 yousuan.o(.data) + AllStep 0x2000014c Data 4 yousuan.o(.data) + ADCRef 0x20000150 Data 4 yousuan.o(.data) + HasSample 0x20000154 Data 8 yousuan.o(.data) + SetSample 0x2000015c Data 8 yousuan.o(.data) + uL_Blank 0x20000164 Data 4 yousuan.o(.data) + SampleRunFlag 0x20000168 Data 1 yousuan.o(.data) + SampleRunTaskHandle 0x2000016c Data 4 yousuan.o(.data) + j 0x20000170 Data 2 yousuan.o(.data) + dlteamin 0x20000174 Data 4 yousuan.o(.data) + dlteaminCount 0x20000178 Data 2 yousuan.o(.data) + FillFlag 0x2000017a Data 1 yousuan.o(.data) + uwTick 0x2000017c Data 4 stm32f1xx_hal.o(.data) + uwTickPrio 0x20000180 Data 4 stm32f1xx_hal.o(.data) + uwTickFreq 0x20000184 Data 1 stm32f1xx_hal.o(.data) + SystemCoreClock 0x20000188 Data 4 system_stm32f1xx.o(.data) + pxCurrentTCB 0x2000018c Data 4 tasks.o(.data) + pxMBFrameCBByteReceived 0x20000234 Data 4 mb.o(.data) + pxMBFrameCBTransmitterEmpty 0x20000238 Data 4 mb.o(.data) + pxMBPortCBTimerExpired 0x2000023c Data 4 mb.o(.data) + pxMBFrameCBReceiveFSMCur 0x20000240 Data 4 mb.o(.data) + pxMBFrameCBTransmitFSMCur 0x20000244 Data 4 mb.o(.data) + Errcount 0x200002d8 Data 4 modbus-port-stm32.o(.data) + ucByte 0x200002dc Data 2 modbus-port-stm32.o(.data) + MBRunTaskHandle 0x200002e0 Data 4 modbus-port-stm32.o(.data) + __stdout 0x200002e4 Data 4 stdout.o(.data) + SetPluseCount 0x200002ec Data 28 stepmotor.o(.bss) + PluseCount 0x20000308 Data 28 stepmotor.o(.bss) + SamplePumpSetPluseCount 0x20000324 Data 28 stepmotor.o(.bss) + SamplePumpPluseCount 0x20000340 Data 28 stepmotor.o(.bss) + CoordinateSet 0x2000035c Data 28 stepmotor.o(.bss) + CoordinatePosition 0x20000378 Data 28 stepmotor.o(.bss) + Differ 0x20000394 Data 28 stepmotor.o(.bss) + CoordinateSetOld 0x200003b0 Data 28 stepmotor.o(.bss) + Position 0x200003cc Data 28 stepmotor.o(.bss) + MName 0x200003f8 Data 28 stepmotor.o(.bss) + xTaskHandles 0x20000414 Data 28 stepmotor.o(.bss) + hadc1 0x20000430 Data 48 main.o(.bss) + hdma_adc1 0x20000460 Data 68 main.o(.bss) + htim2 0x200004a4 Data 72 main.o(.bss) + htim3 0x200004ec Data 72 main.o(.bss) + htim5 0x20000534 Data 72 main.o(.bss) + htim8 0x2000057c Data 72 main.o(.bss) + huart1 0x200005c4 Data 72 main.o(.bss) + huart3 0x2000060c Data 72 main.o(.bss) + StateString 0x20000654 Data 40 main.o(.bss) + ABSBuf 0x2000067c Data 800 yousuan.o(.bss) + UseuLBuf 0x2000099c Data 800 yousuan.o(.bss) + ADCDataBuf 0x20000cbc Data 40 yousuan.o(.bss) + WeigthSample 0x20000ce4 Data 32 yousuan.o(.bss) + UseduL 0x20000d04 Data 32 yousuan.o(.bss) + mg_g 0x20000d24 Data 32 yousuan.o(.bss) + htim1 0x20000d44 Data 72 stm32f1xx_hal_timebase_tim.o(.bss) + xQueueRegistry 0x20000d8c Data 64 queue.o(.bss) + ucRTUBuf 0x20003880 Data 256 mbrtu.o(.bss) + usRegInputBuf 0x20003980 Data 160 modbus-port-stm32.o(.bss) + usRegHoldingBuf 0x20003a20 Data 160 modbus-port-stm32.o(.bss) + ucRegDiscBuf 0x20003ac0 Data 10 modbus-port-stm32.o(.bss) + ucRegCoilsBuf 0x20003aca Data 10 modbus-port-stm32.o(.bss) + __initial_sp 0x20003ed8 Data 0 startup_stm32f103xe.o(STACK) + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x08000131 + + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00009fac, Max: 0x00040000, ABSOLUTE, COMPRESSED[0x00009d50]) + + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00009cc0, Max: 0x00040000, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x08000000 0x08000000 0x00000130 Data RO 3 RESET startup_stm32f103xe.o + 0x08000130 0x08000130 0x00000000 Code RO 5811 * .ARM.Collect$$$$00000000 mc_w.l(entry.o) + 0x08000130 0x08000130 0x00000004 Code RO 6141 .ARM.Collect$$$$00000001 mc_w.l(entry2.o) + 0x08000134 0x08000134 0x00000004 Code RO 6144 .ARM.Collect$$$$00000004 mc_w.l(entry5.o) + 0x08000138 0x08000138 0x00000000 Code RO 6146 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o) + 0x08000138 0x08000138 0x00000000 Code RO 6148 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o) + 0x08000138 0x08000138 0x00000008 Code RO 6149 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o) + 0x08000140 0x08000140 0x00000004 Code RO 6156 .ARM.Collect$$$$0000000E mc_w.l(entry12b.o) + 0x08000144 0x08000144 0x00000000 Code RO 6151 .ARM.Collect$$$$0000000F mc_w.l(entry10a.o) + 0x08000144 0x08000144 0x00000000 Code RO 6153 .ARM.Collect$$$$00000011 mc_w.l(entry11a.o) + 0x08000144 0x08000144 0x00000004 Code RO 6142 .ARM.Collect$$$$00002712 mc_w.l(entry2.o) + 0x08000148 0x08000148 0x00000096 Code RO 5251 .emb_text port.o + 0x080001de 0x080001de 0x00000002 PAD + 0x080001e0 0x080001e0 0x00000024 Code RO 4 .text startup_stm32f103xe.o + 0x08000204 0x08000204 0x00000020 Code RO 5814 .text mc_w.l(llushr.o) + 0x08000224 0x08000224 0x00000024 Code RO 5816 .text mc_w.l(memcpya.o) + 0x08000248 0x08000248 0x00000024 Code RO 5820 .text mc_w.l(memseta.o) + 0x0800026c 0x0800026c 0x000000b0 Code RO 6085 .text mf_w.l(fadd.o) + 0x0800031c 0x0800031c 0x00000064 Code RO 6087 .text mf_w.l(fmul.o) + 0x08000380 0x08000380 0x0000007c Code RO 6089 .text mf_w.l(fdiv.o) + 0x080003fc 0x080003fc 0x000000e4 Code RO 6091 .text mf_w.l(dmul.o) + 0x080004e0 0x080004e0 0x000000de Code RO 6093 .text mf_w.l(ddiv.o) + 0x080005be 0x080005be 0x00000012 Code RO 6095 .text mf_w.l(fflti.o) + 0x080005d0 0x080005d0 0x0000000a Code RO 6097 .text mf_w.l(ffltui.o) + 0x080005da 0x080005da 0x00000032 Code RO 6099 .text mf_w.l(ffixi.o) + 0x0800060c 0x0800060c 0x00000028 Code RO 6101 .text mf_w.l(ffixui.o) + 0x08000634 0x08000634 0x0000003e Code RO 6103 .text mf_w.l(dfixi.o) + 0x08000672 0x08000672 0x00000032 Code RO 6105 .text mf_w.l(dfixui.o) + 0x080006a4 0x080006a4 0x00000026 Code RO 6107 .text mf_w.l(f2d.o) + 0x080006ca 0x080006ca 0x00000002 PAD + 0x080006cc 0x080006cc 0x00000030 Code RO 6109 .text mf_w.l(cdcmple.o) + 0x080006fc 0x080006fc 0x00000038 Code RO 6111 .text mf_w.l(d2f.o) + 0x08000734 0x08000734 0x00000014 Code RO 6113 .text mf_w.l(cfcmple.o) + 0x08000748 0x08000748 0x00000014 Code RO 6115 .text mf_w.l(cfrcmple.o) + 0x0800075c 0x0800075c 0x0000002c Code RO 6158 .text mc_w.l(uidiv.o) + 0x08000788 0x08000788 0x00000062 Code RO 6160 .text mc_w.l(uldiv.o) + 0x080007ea 0x080007ea 0x00000000 Code RO 6169 .text mc_w.l(iusefp.o) + 0x080007ea 0x080007ea 0x0000006e Code RO 6170 .text mf_w.l(fepilogue.o) + 0x08000858 0x08000858 0x000000ba Code RO 6172 .text mf_w.l(depilogue.o) + 0x08000912 0x08000912 0x0000014e Code RO 6174 .text mf_w.l(dadd.o) + 0x08000a60 0x08000a60 0x0000002e Code RO 6176 .text mf_w.l(dscalb.o) + 0x08000a8e 0x08000a8e 0x000000a2 Code RO 6178 .text mf_w.l(dsqrt.o) + 0x08000b30 0x08000b30 0x00000022 Code RO 6180 .text mf_w.l(dflti.o) + 0x08000b52 0x08000b52 0x00000030 Code RO 6182 .text mf_w.l(dfixul.o) + 0x08000b82 0x08000b82 0x00000002 PAD + 0x08000b84 0x08000b84 0x00000030 Code RO 6184 .text mf_w.l(cdrcmple.o) + 0x08000bb4 0x08000bb4 0x00000024 Code RO 6189 .text mc_w.l(init.o) + 0x08000bd8 0x08000bd8 0x0000001e Code RO 6191 .text mc_w.l(llshl.o) + 0x08000bf6 0x08000bf6 0x00000024 Code RO 6193 .text mc_w.l(llsshr.o) + 0x08000c1a 0x08000c1a 0x00000056 Code RO 6203 .text mc_w.l(__dczerorl2.o) + 0x08000c70 0x08000c70 0x0000005c Code RO 1831 i.ADC_ConversionStop_Disable stm32f1xx_hal_adc.o + 0x08000ccc 0x08000ccc 0x00000052 Code RO 1832 i.ADC_DMAConvCplt stm32f1xx_hal_adc.o + 0x08000d1e 0x08000d1e 0x0000001e Code RO 1833 i.ADC_DMAError stm32f1xx_hal_adc.o + 0x08000d3c 0x08000d3c 0x0000000e Code RO 1834 i.ADC_DMAHalfConvCplt stm32f1xx_hal_adc.o + 0x08000d4a 0x08000d4a 0x00000002 PAD + 0x08000d4c 0x08000d4c 0x00000090 Code RO 1835 i.ADC_Enable stm32f1xx_hal_adc.o + 0x08000ddc 0x08000ddc 0x000004d4 Code RO 148 i.ArmSoftCtrl stepmotor.o + 0x080012b0 0x080012b0 0x00000054 Code RO 501 i.AverageData yousuan.o + 0x08001304 0x08001304 0x00000004 Code RO 575 i.BusFault_Handler stm32f1xx_it.o + 0x08001308 0x08001308 0x00000010 Code RO 576 i.DMA1_Channel1_IRQHandler stm32f1xx_it.o + 0x08001318 0x08001318 0x0000002c Code RO 2492 i.DMA_SetConfig stm32f1xx_hal_dma.o + 0x08001344 0x08001344 0x00000002 Code RO 577 i.DebugMon_Handler stm32f1xx_it.o + 0x08001346 0x08001346 0x0000000a Code RO 578 i.EXTI0_IRQHandler stm32f1xx_it.o + 0x08001350 0x08001350 0x00000028 Code RO 149 i.EXTIx_IRQ_Disable stepmotor.o + 0x08001378 0x08001378 0x00000028 Code RO 150 i.EXTIx_IRQ_Enable stepmotor.o + 0x080013a0 0x080013a0 0x00000006 Code RO 307 i.Error_Handler main.o + 0x080013a6 0x080013a6 0x00000002 PAD + 0x080013a8 0x080013a8 0x0000001c Code RO 151 i.Exti_IOStateRead stepmotor.o + 0x080013c4 0x080013c4 0x00000022 Code RO 152 i.Exti_IRQ_Ctrl stepmotor.o + 0x080013e6 0x080013e6 0x00000002 PAD + 0x080013e8 0x080013e8 0x0000011c Code RO 2011 i.HAL_ADCEx_Calibration_Start stm32f1xx_hal_adc_ex.o + 0x08001504 0x08001504 0x00000160 Code RO 1837 i.HAL_ADC_ConfigChannel stm32f1xx_hal_adc.o + 0x08001664 0x08001664 0x00000002 Code RO 1838 i.HAL_ADC_ConvCpltCallback stm32f1xx_hal_adc.o + 0x08001666 0x08001666 0x00000002 Code RO 1839 i.HAL_ADC_ConvHalfCpltCallback stm32f1xx_hal_adc.o + 0x08001668 0x08001668 0x00000002 Code RO 1841 i.HAL_ADC_ErrorCallback stm32f1xx_hal_adc.o + 0x0800166a 0x0800166a 0x00000002 PAD + 0x0800166c 0x0800166c 0x00000160 Code RO 1846 i.HAL_ADC_Init stm32f1xx_hal_adc.o + 0x080017cc 0x080017cc 0x000000ac Code RO 670 i.HAL_ADC_MspInit stm32f1xx_hal_msp.o + 0x08001878 0x08001878 0x00000180 Code RO 1853 i.HAL_ADC_Start_DMA stm32f1xx_hal_adc.o + 0x080019f8 0x080019f8 0x00000398 Code RO 2498 i.HAL_DMA_IRQHandler stm32f1xx_hal_dma.o + 0x08001d90 0x08001d90 0x0000008c Code RO 2499 i.HAL_DMA_Init stm32f1xx_hal_dma.o + 0x08001e1c 0x08001e1c 0x0000009c Code RO 2503 i.HAL_DMA_Start_IT stm32f1xx_hal_dma.o + 0x08001eb8 0x08001eb8 0x0000009c Code RO 153 i.HAL_GPIO_EXTI_Callback stepmotor.o + 0x08001f54 0x08001f54 0x0000001c Code RO 2428 i.HAL_GPIO_EXTI_IRQHandler stm32f1xx_hal_gpio.o + 0x08001f70 0x08001f70 0x00000340 Code RO 2429 i.HAL_GPIO_Init stm32f1xx_hal_gpio.o + 0x080022b0 0x080022b0 0x0000000c Code RO 2433 i.HAL_GPIO_WritePin stm32f1xx_hal_gpio.o + 0x080022bc 0x080022bc 0x0000000c Code RO 2118 i.HAL_GetTick stm32f1xx_hal.o + 0x080022c8 0x080022c8 0x00000018 Code RO 2124 i.HAL_IncTick stm32f1xx_hal.o + 0x080022e0 0x080022e0 0x00000028 Code RO 2125 i.HAL_Init stm32f1xx_hal.o + 0x08002308 0x08002308 0x000000a0 Code RO 748 i.HAL_InitTick stm32f1xx_hal_timebase_tim.o + 0x080023a8 0x080023a8 0x00000060 Code RO 671 i.HAL_MspInit stm32f1xx_hal_msp.o + 0x08002408 0x08002408 0x00000020 Code RO 2589 i.HAL_NVIC_EnableIRQ stm32f1xx_hal_cortex.o + 0x08002428 0x08002428 0x0000007c Code RO 2595 i.HAL_NVIC_SetPriority stm32f1xx_hal_cortex.o + 0x080024a4 0x080024a4 0x00000028 Code RO 2596 i.HAL_NVIC_SetPriorityGrouping stm32f1xx_hal_cortex.o + 0x080024cc 0x080024cc 0x00000118 Code RO 2390 i.HAL_RCCEx_GetPeriphCLKFreq stm32f1xx_hal_rcc_ex.o + 0x080025e4 0x080025e4 0x00000130 Code RO 2391 i.HAL_RCCEx_PeriphCLKConfig stm32f1xx_hal_rcc_ex.o + 0x08002714 0x08002714 0x0000018c Code RO 2282 i.HAL_RCC_ClockConfig stm32f1xx_hal_rcc.o + 0x080028a0 0x080028a0 0x00000044 Code RO 2286 i.HAL_RCC_GetClockConfig stm32f1xx_hal_rcc.o + 0x080028e4 0x080028e4 0x0000000c Code RO 2287 i.HAL_RCC_GetHCLKFreq stm32f1xx_hal_rcc.o + 0x080028f0 0x080028f0 0x00000020 Code RO 2289 i.HAL_RCC_GetPCLK1Freq stm32f1xx_hal_rcc.o + 0x08002910 0x08002910 0x00000020 Code RO 2290 i.HAL_RCC_GetPCLK2Freq stm32f1xx_hal_rcc.o + 0x08002930 0x08002930 0x00000070 Code RO 2291 i.HAL_RCC_GetSysClockFreq stm32f1xx_hal_rcc.o + 0x080029a0 0x080029a0 0x00000464 Code RO 2294 i.HAL_RCC_OscConfig stm32f1xx_hal_rcc.o + 0x08002e04 0x08002e04 0x00000002 Code RO 1564 i.HAL_TIMEx_BreakCallback stm32f1xx_hal_tim_ex.o + 0x08002e06 0x08002e06 0x00000002 Code RO 1565 i.HAL_TIMEx_CommutCallback stm32f1xx_hal_tim_ex.o + 0x08002e08 0x08002e08 0x00000074 Code RO 1567 i.HAL_TIMEx_ConfigBreakDeadTime stm32f1xx_hal_tim_ex.o + 0x08002e7c 0x08002e7c 0x0000009c Code RO 1583 i.HAL_TIMEx_MasterConfigSynchronization stm32f1xx_hal_tim_ex.o + 0x08002f18 0x08002f18 0x00000066 Code RO 849 i.HAL_TIM_Base_Init stm32f1xx_hal_tim.o + 0x08002f7e 0x08002f7e 0x00000002 PAD + 0x08002f80 0x08002f80 0x000000a4 Code RO 673 i.HAL_TIM_Base_MspInit stm32f1xx_hal_msp.o + 0x08003024 0x08003024 0x00000090 Code RO 854 i.HAL_TIM_Base_Start_IT stm32f1xx_hal_tim.o + 0x080030b4 0x080030b4 0x0000010c Code RO 858 i.HAL_TIM_ConfigClockSource stm32f1xx_hal_tim.o + 0x080031c0 0x080031c0 0x00000002 Code RO 883 i.HAL_TIM_IC_CaptureCallback stm32f1xx_hal_tim.o + 0x080031c2 0x080031c2 0x0000016c Code RO 897 i.HAL_TIM_IRQHandler stm32f1xx_hal_tim.o + 0x0800332e 0x0800332e 0x00000002 PAD + 0x08003330 0x08003330 0x00000108 Code RO 674 i.HAL_TIM_MspPostInit stm32f1xx_hal_msp.o + 0x08003438 0x08003438 0x00000002 Code RO 900 i.HAL_TIM_OC_DelayElapsedCallback stm32f1xx_hal_tim.o + 0x0800343a 0x0800343a 0x00000104 Code RO 921 i.HAL_TIM_PWM_ConfigChannel stm32f1xx_hal_tim.o + 0x0800353e 0x0800353e 0x00000066 Code RO 924 i.HAL_TIM_PWM_Init stm32f1xx_hal_tim.o + 0x080035a4 0x080035a4 0x00000044 Code RO 676 i.HAL_TIM_PWM_MspInit stm32f1xx_hal_msp.o + 0x080035e8 0x080035e8 0x00000002 Code RO 927 i.HAL_TIM_PWM_PulseFinishedCallback stm32f1xx_hal_tim.o + 0x080035ea 0x080035ea 0x00000002 PAD + 0x080035ec 0x080035ec 0x000000f4 Code RO 929 i.HAL_TIM_PWM_Start stm32f1xx_hal_tim.o + 0x080036e0 0x080036e0 0x00000018 Code RO 308 i.HAL_TIM_PeriodElapsedCallback main.o + 0x080036f8 0x080036f8 0x00000002 Code RO 940 i.HAL_TIM_TriggerCallback stm32f1xx_hal_tim.o + 0x080036fa 0x080036fa 0x00000076 Code RO 3145 i.HAL_UART_Init stm32f1xx_hal_uart.o + 0x08003770 0x08003770 0x00000110 Code RO 678 i.HAL_UART_MspInit stm32f1xx_hal_msp.o + 0x08003880 0x08003880 0x000000be Code RO 3153 i.HAL_UART_Transmit stm32f1xx_hal_uart.o + 0x0800393e 0x0800393e 0x00000004 Code RO 579 i.HardFault_Handler stm32f1xx_it.o + 0x08003942 0x08003942 0x00000002 PAD + 0x08003944 0x08003944 0x0000015c Code RO 502 i.HasSampleCheck yousuan.o + 0x08003aa0 0x08003aa0 0x0000002c Code RO 5608 i.MB_485_Direct_Receive modbus-port-stm32.o + 0x08003acc 0x08003acc 0x00000014 Code RO 5609 i.MB_485_Direct_Transmit modbus-port-stm32.o + 0x08003ae0 0x08003ae0 0x00000034 Code RO 5610 i.MODBUS_Init modbus-port-stm32.o + 0x08003b14 0x08003b14 0x00000170 Code RO 309 i.MX_ADC1_Init main.o + 0x08003c84 0x08003c84 0x00000034 Code RO 310 i.MX_DMA_Init main.o + 0x08003cb8 0x08003cb8 0x00000134 Code RO 311 i.MX_GPIO_Init main.o + 0x08003dec 0x08003dec 0x000000a8 Code RO 312 i.MX_TIM2_Init main.o + 0x08003e94 0x08003e94 0x000000ac Code RO 313 i.MX_TIM3_Init main.o + 0x08003f40 0x08003f40 0x00000084 Code RO 314 i.MX_TIM5_Init main.o + 0x08003fc4 0x08003fc4 0x000000dc Code RO 315 i.MX_TIM8_Init main.o + 0x080040a0 0x080040a0 0x00000038 Code RO 316 i.MX_USART1_UART_Init main.o + 0x080040d8 0x080040d8 0x00000038 Code RO 317 i.MX_USART3_UART_Init main.o + 0x08004110 0x08004110 0x00000004 Code RO 580 i.MemManage_Handler stm32f1xx_it.o + 0x08004114 0x08004114 0x0000000e Code RO 5611 i.ModbusPoll modbus-port-stm32.o + 0x08004122 0x08004122 0x00000002 PAD + 0x08004124 0x08004124 0x000000a8 Code RO 154 i.MotorCTRLInitiate stepmotor.o + 0x080041cc 0x080041cc 0x00000026 Code RO 155 i.MotorCtrl stepmotor.o + 0x080041f2 0x080041f2 0x00000002 PAD + 0x080041f4 0x080041f4 0x00000118 Code RO 156 i.MotorZero_Init stepmotor.o + 0x0800430c 0x0800430c 0x00000070 Code RO 157 i.Motor_Dir stepmotor.o + 0x0800437c 0x0800437c 0x0000000a Code RO 158 i.Motor_En stepmotor.o + 0x08004386 0x08004386 0x00000030 Code RO 159 i.Motor_IECMD stepmotor.o + 0x080043b6 0x080043b6 0x0000004e Code RO 160 i.Motor_PWM stepmotor.o + 0x08004404 0x08004404 0x00000030 Code RO 161 i.Motor_PWMCmd stepmotor.o + 0x08004434 0x08004434 0x00000004 Code RO 581 i.NMI_Handler stm32f1xx_it.o + 0x08004438 0x08004438 0x00000028 Code RO 2295 i.RCC_Delay stm32f1xx_hal_rcc.o + 0x08004460 0x08004460 0x000003c4 Code RO 162 i.SamplePumpCtrl stepmotor.o + 0x08004824 0x08004824 0x00000050 Code RO 163 i.SamplePumpSpeed_AcceleratedConver stepmotor.o + 0x08004874 0x08004874 0x00000664 Code RO 503 i.SampleRunTask yousuan.o + 0x08004ed8 0x08004ed8 0x00000024 Code RO 318 i.StartDefaultTask main.o + 0x08004efc 0x08004efc 0x0000000c Code RO 319 i.StirrerCtrl main.o + 0x08004f08 0x08004f08 0x00000016 Code RO 4669 i.SysTick_Handler cmsis_os2.o + 0x08004f1e 0x08004f1e 0x00000082 Code RO 320 i.SystemClock_Config main.o + 0x08004fa0 0x08004fa0 0x00000002 Code RO 3489 i.SystemInit system_stm32f1xx.o + 0x08004fa2 0x08004fa2 0x00000002 PAD + 0x08004fa4 0x08004fa4 0x00000010 Code RO 582 i.TIM1_UP_IRQHandler stm32f1xx_it.o + 0x08004fb4 0x08004fb4 0x0000003a Code RO 13 i.TIM2_CH2_CMD tim.o + 0x08004fee 0x08004fee 0x0000000a Code RO 14 i.TIM2_CH2_CTRL tim.o + 0x08004ff8 0x08004ff8 0x0000003a Code RO 15 i.TIM2_IECMD tim.o + 0x08005032 0x08005032 0x00000002 PAD + 0x08005034 0x08005034 0x0000005c Code RO 583 i.TIM2_IRQHandler stm32f1xx_it.o + 0x08005090 0x08005090 0x00000044 Code RO 16 i.TIM3_CH1_CMD tim.o + 0x080050d4 0x080050d4 0x00000010 Code RO 17 i.TIM3_CH1_CTRL tim.o + 0x080050e4 0x080050e4 0x0000003c Code RO 18 i.TIM3_IECMD tim.o + 0x08005120 0x08005120 0x0000005c Code RO 584 i.TIM3_IRQHandler stm32f1xx_it.o + 0x0800517c 0x0800517c 0x00000044 Code RO 19 i.TIM5_CH3_CMD tim.o + 0x080051c0 0x080051c0 0x00000010 Code RO 20 i.TIM5_CH3_CTRL tim.o + 0x080051d0 0x080051d0 0x0000003c Code RO 21 i.TIM5_IECMD tim.o + 0x0800520c 0x0800520c 0x0000005c Code RO 585 i.TIM5_IRQHandler stm32f1xx_it.o + 0x08005268 0x08005268 0x00000024 Code RO 5612 i.TIM7_IRQHandler modbus-port-stm32.o + 0x0800528c 0x0800528c 0x000000ac Code RO 942 i.TIM_Base_SetConfig stm32f1xx_hal_tim.o + 0x08005338 0x08005338 0x00000022 Code RO 943 i.TIM_CCxChannelCmd stm32f1xx_hal_tim.o + 0x0800535a 0x0800535a 0x00000016 Code RO 953 i.TIM_ETR_SetConfig stm32f1xx_hal_tim.o + 0x08005370 0x08005370 0x00000012 Code RO 954 i.TIM_ITRx_SetConfig stm32f1xx_hal_tim.o + 0x08005382 0x08005382 0x00000002 PAD + 0x08005384 0x08005384 0x00000070 Code RO 955 i.TIM_OC1_SetConfig stm32f1xx_hal_tim.o + 0x080053f4 0x080053f4 0x0000007c Code RO 956 i.TIM_OC2_SetConfig stm32f1xx_hal_tim.o + 0x08005470 0x08005470 0x00000078 Code RO 957 i.TIM_OC3_SetConfig stm32f1xx_hal_tim.o + 0x080054e8 0x080054e8 0x00000054 Code RO 958 i.TIM_OC4_SetConfig stm32f1xx_hal_tim.o + 0x0800553c 0x0800553c 0x00000026 Code RO 960 i.TIM_TI1_ConfigInputStage stm32f1xx_hal_tim.o + 0x08005562 0x08005562 0x00000028 Code RO 962 i.TIM_TI2_ConfigInputStage stm32f1xx_hal_tim.o + 0x0800558a 0x0800558a 0x0000006c Code RO 3168 i.UART_EndRxTransfer stm32f1xx_hal_uart.o + 0x080055f6 0x080055f6 0x00000002 PAD + 0x080055f8 0x080055f8 0x000000fc Code RO 3172 i.UART_SetConfig stm32f1xx_hal_uart.o + 0x080056f4 0x080056f4 0x0000008c Code RO 3176 i.UART_WaitOnFlagUntilTimeout stm32f1xx_hal_uart.o + 0x08005780 0x08005780 0x000000a4 Code RO 5613 i.USART1_IRQHandler modbus-port-stm32.o + 0x08005824 0x08005824 0x00000004 Code RO 586 i.UsageFault_Handler stm32f1xx_it.o + 0x08005828 0x08005828 0x00000178 Code RO 504 i.YouSuanRun yousuan.o + 0x080059a0 0x080059a0 0x00000020 Code RO 6057 i.__0printf mc_w.l(printfa.o) + 0x080059c0 0x080059c0 0x00000028 Code RO 6059 i.__0sprintf mc_w.l(printfa.o) + 0x080059e8 0x080059e8 0x0000001a Code RO 5614 i.__NVIC_EnableIRQ modbus-port-stm32.o + 0x08005a02 0x08005a02 0x00000002 PAD + 0x08005a04 0x08005a04 0x00000010 Code RO 2602 i.__NVIC_GetPriorityGrouping stm32f1xx_hal_cortex.o + 0x08005a14 0x08005a14 0x00000028 Code RO 2603 i.__NVIC_SetPriority stm32f1xx_hal_cortex.o + 0x08005a3c 0x08005a3c 0x00000006 Code RO 4671 i.__get_IPSR cmsis_os2.o + 0x08005a42 0x08005a42 0x000000aa Code RO 6186 i.__kernel_poly m_ws.l(poly.o) + 0x08005aec 0x08005aec 0x00000010 Code RO 6117 i.__mathlib_dbl_divzero m_ws.l(dunder.o) + 0x08005afc 0x08005afc 0x00000006 Code RO 6118 i.__mathlib_dbl_infnan m_ws.l(dunder.o) + 0x08005b02 0x08005b02 0x0000000c Code RO 6120 i.__mathlib_dbl_invalid m_ws.l(dunder.o) + 0x08005b0e 0x08005b0e 0x0000000e Code RO 6197 i.__scatterload_copy mc_w.l(handlers.o) + 0x08005b1c 0x08005b1c 0x00000002 Code RO 6198 i.__scatterload_null mc_w.l(handlers.o) + 0x08005b1e 0x08005b1e 0x0000000e Code RO 6199 i.__scatterload_zeroinit mc_w.l(handlers.o) + 0x08005b2c 0x08005b2c 0x0000000c Code RO 6164 i.__set_errno mc_w.l(errno.o) + 0x08005b38 0x08005b38 0x00000184 Code RO 6064 i._fp_digits mc_w.l(printfa.o) + 0x08005cbc 0x08005cbc 0x000006b4 Code RO 6065 i._printf_core mc_w.l(printfa.o) + 0x08006370 0x08006370 0x00000024 Code RO 6066 i._printf_post_padding mc_w.l(printfa.o) + 0x08006394 0x08006394 0x0000002e Code RO 6067 i._printf_pre_padding mc_w.l(printfa.o) + 0x080063c2 0x080063c2 0x0000000a Code RO 6069 i._sputc mc_w.l(printfa.o) + 0x080063cc 0x080063cc 0x0000000a Code RO 164 i._task_MotorCTRL stepmotor.o + 0x080063d6 0x080063d6 0x00000086 Code RO 787 i.delay_us delay.o + 0x0800645c 0x0800645c 0x00000028 Code RO 5556 i.eMBEnable mb.o + 0x08006484 0x08006484 0x000000ae Code RO 5328 i.eMBFuncReadCoils mbfunccoils.o + 0x08006532 0x08006532 0x000000ac Code RO 5377 i.eMBFuncReadDiscreteInputs mbfuncdisc.o + 0x080065de 0x080065de 0x0000008c Code RO 5389 i.eMBFuncReadHoldingRegister mbfuncholding.o + 0x0800666a 0x0800666a 0x0000008c Code RO 5419 i.eMBFuncReadInputRegister mbfuncinput.o + 0x080066f6 0x080066f6 0x000000d4 Code RO 5390 i.eMBFuncReadWriteMultipleHoldingRegister mbfuncholding.o + 0x080067ca 0x080067ca 0x00000002 PAD + 0x080067cc 0x080067cc 0x00000028 Code RO 5431 i.eMBFuncReportSlaveID mbfuncother.o + 0x080067f4 0x080067f4 0x00000070 Code RO 5329 i.eMBFuncWriteCoil mbfunccoils.o + 0x08006864 0x08006864 0x00000042 Code RO 5391 i.eMBFuncWriteHoldingRegister mbfuncholding.o + 0x080068a6 0x080068a6 0x00000090 Code RO 5330 i.eMBFuncWriteMultipleCoils mbfunccoils.o + 0x08006936 0x08006936 0x0000006e Code RO 5392 i.eMBFuncWriteMultipleHoldingRegister mbfuncholding.o + 0x080069a4 0x080069a4 0x000000e0 Code RO 5557 i.eMBInit mb.o + 0x08006a84 0x08006a84 0x0000012c Code RO 5558 i.eMBPoll mb.o + 0x08006bb0 0x08006bb0 0x0000004c Code RO 5490 i.eMBRTUInit mbrtu.o + 0x08006bfc 0x08006bfc 0x00000048 Code RO 5491 i.eMBRTUReceive mbrtu.o + 0x08006c44 0x08006c44 0x00000090 Code RO 5492 i.eMBRTUSend mbrtu.o + 0x08006cd4 0x08006cd4 0x0000001c Code RO 5493 i.eMBRTUStart mbrtu.o + 0x08006cf0 0x08006cf0 0x00000010 Code RO 5494 i.eMBRTUStop mbrtu.o + 0x08006d00 0x08006d00 0x0000009c Code RO 5615 i.eMBRegCoilsCB modbus-port-stm32.o + 0x08006d9c 0x08006d9c 0x00000064 Code RO 5616 i.eMBRegDiscreteCB modbus-port-stm32.o + 0x08006e00 0x08006e00 0x000000bc Code RO 5617 i.eMBRegHoldingCB modbus-port-stm32.o + 0x08006ebc 0x08006ebc 0x00000058 Code RO 5618 i.eMBRegInputCB modbus-port-stm32.o + 0x08006f14 0x08006f14 0x0000001c Code RO 321 i.fputc main.o + 0x08006f30 0x08006f30 0x0000035c Code RO 6132 i.log m_ws.l(log.o) + 0x0800728c 0x0800728c 0x000000e4 Code RO 5796 i.log10 m_ws.l(log10.o) + 0x08007370 0x08007370 0x00000068 Code RO 322 i.main main.o + 0x080073d8 0x080073d8 0x0000001e Code RO 4672 i.osDelay cmsis_os2.o + 0x080073f6 0x080073f6 0x00000002 PAD + 0x080073f8 0x080073f8 0x0000002c Code RO 4686 i.osKernelInitialize cmsis_os2.o + 0x08007424 0x08007424 0x00000060 Code RO 4689 i.osKernelStart cmsis_os2.o + 0x08007484 0x08007484 0x000000b8 Code RO 4731 i.osThreadNew cmsis_os2.o + 0x0800753c 0x0800753c 0x0000007c Code RO 4106 i.prvAddCurrentTaskToDelayedList tasks.o + 0x080075b8 0x080075b8 0x000000b8 Code RO 4107 i.prvAddNewTaskToReadyList tasks.o + 0x08007670 0x08007670 0x00000074 Code RO 4482 i.prvCheckForValidListAndQueue timers.o + 0x080076e4 0x080076e4 0x00000048 Code RO 4108 i.prvCheckTasksWaitingTermination tasks.o + 0x0800772c 0x0800772c 0x0000002a Code RO 3693 i.prvCopyDataFromQueue queue.o + 0x08007756 0x08007756 0x0000007e Code RO 3694 i.prvCopyDataToQueue queue.o + 0x080077d4 0x080077d4 0x00000050 Code RO 4109 i.prvDeleteTCB tasks.o + 0x08007824 0x08007824 0x00000028 Code RO 4483 i.prvGetNextExpireTime timers.o + 0x0800784c 0x0800784c 0x0000007c Code RO 5196 i.prvHeapInit heap_4.o + 0x080078c8 0x080078c8 0x00000028 Code RO 4110 i.prvIdleTask tasks.o + 0x080078f0 0x080078f0 0x0000002a Code RO 3697 i.prvInitialiseNewQueue queue.o + 0x0800791a 0x0800791a 0x000000be Code RO 4111 i.prvInitialiseNewTask tasks.o + 0x080079d8 0x080079d8 0x00000068 Code RO 4112 i.prvInitialiseTaskLists tasks.o + 0x08007a40 0x08007a40 0x00000068 Code RO 5197 i.prvInsertBlockIntoFreeList heap_4.o + 0x08007aa8 0x08007aa8 0x00000058 Code RO 4485 i.prvInsertTimerInActiveList timers.o + 0x08007b00 0x08007b00 0x0000001a Code RO 3698 i.prvIsQueueEmpty queue.o + 0x08007b1a 0x08007b1a 0x0000001e Code RO 3699 i.prvIsQueueFull queue.o + 0x08007b38 0x08007b38 0x00000074 Code RO 4486 i.prvProcessExpiredTimer timers.o + 0x08007bac 0x08007bac 0x00000164 Code RO 4487 i.prvProcessReceivedCommands timers.o + 0x08007d10 0x08007d10 0x00000074 Code RO 4488 i.prvProcessTimerOrBlockTask timers.o + 0x08007d84 0x08007d84 0x00000034 Code RO 4114 i.prvResetNextTaskUnblockTime tasks.o + 0x08007db8 0x08007db8 0x0000002c Code RO 4489 i.prvSampleTimeNow timers.o + 0x08007de4 0x08007de4 0x000000a4 Code RO 4490 i.prvSwitchTimerLists timers.o + 0x08007e88 0x08007e88 0x00000040 Code RO 5252 i.prvTaskExitError port.o + 0x08007ec8 0x08007ec8 0x0000001a Code RO 4491 i.prvTimerTask timers.o + 0x08007ee2 0x08007ee2 0x0000007e Code RO 3700 i.prvUnlockQueue queue.o + 0x08007f60 0x08007f60 0x00000022 Code RO 5452 i.prveMBError2Exception mbutils.o + 0x08007f82 0x08007f82 0x00000002 PAD + 0x08007f84 0x08007f84 0x00000010 Code RO 5619 i.prvvTIMERExpiredISR modbus-port-stm32.o + 0x08007f94 0x08007f94 0x00000010 Code RO 5620 i.prvvUARTRxISR modbus-port-stm32.o + 0x08007fa4 0x08007fa4 0x00000010 Code RO 5621 i.prvvUARTTxReadyISR modbus-port-stm32.o + 0x08007fb4 0x08007fb4 0x0000014c Code RO 5198 i.pvPortMalloc heap_4.o + 0x08008100 0x08008100 0x00000024 Code RO 5253 i.pxPortInitialiseStack port.o + 0x08008124 0x08008124 0x0000004c Code RO 5804 i.sqrt m_ws.l(sqrt.o) + 0x08008170 0x08008170 0x00000038 Code RO 5476 i.usMBCRC16 mbcrc.o + 0x080081a8 0x080081a8 0x00000028 Code RO 3653 i.uxListRemove list.o + 0x080081d0 0x080081d0 0x00000018 Code RO 4743 i.vApplicationGetIdleTaskMemory cmsis_os2.o + 0x080081e8 0x080081e8 0x00000018 Code RO 4744 i.vApplicationGetTimerTaskMemory cmsis_os2.o + 0x08008200 0x08008200 0x0000001a Code RO 3654 i.vListInitialise list.o + 0x0800821a 0x0800821a 0x00000006 Code RO 3655 i.vListInitialiseItem list.o + 0x08008220 0x08008220 0x00000034 Code RO 3656 i.vListInsert list.o + 0x08008254 0x08008254 0x00000018 Code RO 3657 i.vListInsertEnd list.o + 0x0800826c 0x0800826c 0x00000054 Code RO 5622 i.vMBPortSerialEnable modbus-port-stm32.o + 0x080082c0 0x080082c0 0x00000038 Code RO 5623 i.vMBPortTimersDisable modbus-port-stm32.o + 0x080082f8 0x080082f8 0x00000038 Code RO 5624 i.vMBPortTimersEnable modbus-port-stm32.o + 0x08008330 0x08008330 0x00000054 Code RO 5255 i.vPortEnterCritical port.o + 0x08008384 0x08008384 0x0000003c Code RO 5256 i.vPortExitCritical port.o + 0x080083c0 0x080083c0 0x000000a4 Code RO 5199 i.vPortFree heap_4.o + 0x08008464 0x08008464 0x00000028 Code RO 5257 i.vPortSetupTimerInterrupt port.o + 0x0800848c 0x0800848c 0x00000078 Code RO 5258 i.vPortValidateInterruptPriority port.o + 0x08008504 0x08008504 0x0000002c Code RO 3706 i.vQueueAddToRegistry queue.o + 0x08008530 0x08008530 0x0000004a Code RO 3710 i.vQueueWaitForMessageRestricted queue.o + 0x0800857a 0x0800857a 0x00000002 PAD + 0x0800857c 0x0800857c 0x0000005c Code RO 4127 i.vTaskDelay tasks.o + 0x080085d8 0x080085d8 0x000000c8 Code RO 4129 i.vTaskDelete tasks.o + 0x080086a0 0x080086a0 0x00000018 Code RO 4132 i.vTaskInternalSetTimeOutState tasks.o + 0x080086b8 0x080086b8 0x0000000c Code RO 4133 i.vTaskMissedYield tasks.o + 0x080086c4 0x080086c4 0x00000038 Code RO 4135 i.vTaskPlaceOnEventList tasks.o + 0x080086fc 0x080086fc 0x00000040 Code RO 4136 i.vTaskPlaceOnEventListRestricted tasks.o + 0x0800873c 0x0800873c 0x000000b8 Code RO 4144 i.vTaskStartScheduler tasks.o + 0x080087f4 0x080087f4 0x00000010 Code RO 4146 i.vTaskSuspendAll tasks.o + 0x08008804 0x08008804 0x00000090 Code RO 4147 i.vTaskSwitchContext tasks.o + 0x08008894 0x08008894 0x00000024 Code RO 5625 i.xMBPortEventGet modbus-port-stm32.o + 0x080088b8 0x080088b8 0x00000010 Code RO 5626 i.xMBPortEventInit modbus-port-stm32.o + 0x080088c8 0x080088c8 0x00000018 Code RO 5627 i.xMBPortEventPost modbus-port-stm32.o + 0x080088e0 0x080088e0 0x00000018 Code RO 5628 i.xMBPortSerialGetByte modbus-port-stm32.o + 0x080088f8 0x080088f8 0x000000f4 Code RO 5629 i.xMBPortSerialInit modbus-port-stm32.o + 0x080089ec 0x080089ec 0x00000014 Code RO 5630 i.xMBPortSerialPutByte modbus-port-stm32.o + 0x08008a00 0x08008a00 0x00000054 Code RO 5631 i.xMBPortTimersInit modbus-port-stm32.o + 0x08008a54 0x08008a54 0x00000088 Code RO 5495 i.xMBRTUReceiveFSM mbrtu.o + 0x08008adc 0x08008adc 0x00000040 Code RO 5496 i.xMBRTUTimerT35Expired mbrtu.o + 0x08008b1c 0x08008b1c 0x0000006c Code RO 5497 i.xMBRTUTransmitFSM mbrtu.o + 0x08008b88 0x08008b88 0x0000002a Code RO 5453 i.xMBUtilGetBits mbutils.o + 0x08008bb2 0x08008bb2 0x00000060 Code RO 5454 i.xMBUtilSetBits mbutils.o + 0x08008c12 0x08008c12 0x00000002 PAD + 0x08008c14 0x08008c14 0x000000f8 Code RO 5259 i.xPortStartScheduler port.o + 0x08008d0c 0x08008d0c 0x00000034 Code RO 5260 i.xPortSysTickHandler port.o + 0x08008d40 0x08008d40 0x000000e0 Code RO 3716 i.xQueueGenericCreateStatic queue.o + 0x08008e20 0x08008e20 0x00000098 Code RO 3717 i.xQueueGenericReset queue.o + 0x08008eb8 0x08008eb8 0x000001a8 Code RO 3718 i.xQueueGenericSend queue.o + 0x08009060 0x08009060 0x000000fc Code RO 3719 i.xQueueGenericSendFromISR queue.o + 0x0800915c 0x0800915c 0x00000168 Code RO 3728 i.xQueueReceive queue.o + 0x080092c4 0x080092c4 0x0000008c Code RO 4149 i.xTaskCheckForTimeOut tasks.o + 0x08009350 0x08009350 0x00000064 Code RO 4150 i.xTaskCreate tasks.o + 0x080093b4 0x080093b4 0x000000ba Code RO 4151 i.xTaskCreateStatic tasks.o + 0x0800946e 0x0800946e 0x00000002 PAD + 0x08009470 0x08009470 0x00000020 Code RO 4155 i.xTaskGetSchedulerState tasks.o + 0x08009490 0x08009490 0x0000000c Code RO 4156 i.xTaskGetTickCount tasks.o + 0x0800949c 0x0800949c 0x00000144 Code RO 4158 i.xTaskIncrementTick tasks.o + 0x080095e0 0x080095e0 0x000000a4 Code RO 4161 i.xTaskPriorityDisinherit tasks.o + 0x08009684 0x08009684 0x00000098 Code RO 4163 i.xTaskRemoveFromEventList tasks.o + 0x0800971c 0x0800971c 0x00000104 Code RO 4164 i.xTaskResumeAll tasks.o + 0x08009820 0x08009820 0x00000078 Code RO 4500 i.xTimerCreateTimerTask timers.o + 0x08009898 0x08009898 0x00000084 Code RO 4501 i.xTimerGenericCommand timers.o + 0x0800991c 0x0800991c 0x00000070 Data RO 166 .constdata stepmotor.o + 0x0800998c 0x0800998c 0x00000024 Data RO 324 .constdata main.o + 0x080099b0 0x080099b0 0x00000028 Data RO 506 .constdata yousuan.o + 0x080099d8 0x080099d8 0x00000012 Data RO 2296 .constdata stm32f1xx_hal_rcc.o + 0x080099ea 0x080099ea 0x00000012 Data RO 2392 .constdata stm32f1xx_hal_rcc_ex.o + 0x080099fc 0x080099fc 0x00000018 Data RO 3490 .constdata system_stm32f1xx.o + 0x08009a14 0x08009a14 0x00000200 Data RO 5477 .constdata mbcrc.o + 0x08009c14 0x08009c14 0x00000024 Data RO 5633 .constdata modbus-port-stm32.o + 0x08009c38 0x08009c38 0x00000038 Data RO 6133 .constdata m_ws.l(log.o) + 0x08009c70 0x08009c70 0x00000008 Data RO 6188 .constdata m_ws.l(qnan.o) + 0x08009c78 0x08009c78 0x0000000c Data RO 325 .conststring main.o + 0x08009c84 0x08009c84 0x0000000e Data RO 507 .conststring yousuan.o + 0x08009c92 0x08009c92 0x00000002 PAD + 0x08009c94 0x08009c94 0x0000000a Data RO 5634 .conststring modbus-port-stm32.o + 0x08009c9e 0x08009c9e 0x00000002 PAD + 0x08009ca0 0x08009ca0 0x00000020 Data RO 6195 Region$$Table anon$$obj.o + + + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08009cc0, Size: 0x00003ed8, Max: 0x0000c000, ABSOLUTE, COMPRESSED[0x00000090]) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000000 COMPRESSED 0x00000120 Data RW 167 .data stepmotor.o + 0x20000120 COMPRESSED 0x00000004 Data RW 326 .data main.o + 0x20000124 COMPRESSED 0x00000057 Data RW 508 .data yousuan.o + 0x2000017b COMPRESSED 0x00000001 PAD + 0x2000017c COMPRESSED 0x00000009 Data RW 2132 .data stm32f1xx_hal.o + 0x20000185 COMPRESSED 0x00000003 PAD + 0x20000188 COMPRESSED 0x00000004 Data RW 3491 .data system_stm32f1xx.o + 0x2000018c COMPRESSED 0x0000003c Data RW 4167 .data tasks.o + 0x200001c8 COMPRESSED 0x00000014 Data RW 4509 .data timers.o + 0x200001dc COMPRESSED 0x00000004 Data RW 4746 .data cmsis_os2.o + 0x200001e0 COMPRESSED 0x00000020 Data RW 5205 .data heap_4.o + 0x20000200 COMPRESSED 0x0000000c Data RW 5261 .data port.o + 0x2000020c COMPRESSED 0x00000002 Data RW 5434 .data mbfuncother.o + 0x2000020e COMPRESSED 0x00000002 PAD + 0x20000210 COMPRESSED 0x0000000c Data RW 5499 .data mbrtu.o + 0x2000021c COMPRESSED 0x000000b5 Data RW 5560 .data mb.o + 0x200002d1 COMPRESSED 0x00000003 PAD + 0x200002d4 COMPRESSED 0x00000010 Data RW 5635 .data modbus-port-stm32.o + 0x200002e4 COMPRESSED 0x00000004 Data RW 6157 .data mc_w.l(stdout.o) + 0x200002e8 COMPRESSED 0x00000004 Data RW 6165 .data mc_w.l(errno.o) + 0x200002ec - 0x00000144 Zero RW 165 .bss stepmotor.o + 0x20000430 - 0x0000024c Zero RW 323 .bss main.o + 0x2000067c - 0x000006c8 Zero RW 505 .bss yousuan.o + 0x20000d44 - 0x00000048 Zero RW 751 .bss stm32f1xx_hal_timebase_tim.o + 0x20000d8c - 0x00000040 Zero RW 3732 .bss queue.o + 0x20000dcc - 0x000004c4 Zero RW 4166 .bss tasks.o + 0x20001290 - 0x00000118 Zero RW 4508 .bss timers.o + 0x200013a8 - 0x000006b8 Zero RW 4745 .bss cmsis_os2.o + 0x20001a60 - 0x00001e00 Zero RW 5204 .bss heap_4.o + 0x20003860 - 0x00000020 Zero RW 5433 .bss mbfuncother.o + 0x20003880 - 0x00000100 Zero RW 5498 .bss mbrtu.o + 0x20003980 - 0x00000154 Zero RW 5632 .bss modbus-port-stm32.o + 0x20003ad4 COMPRESSED 0x00000004 PAD + 0x20003ad8 - 0x00000400 Zero RW 1 STACK startup_stm32f103xe.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 430 38 0 4 1720 54535 cmsis_os2.o + 134 0 0 0 0 487 delay.o + 0 0 0 0 0 19608 event_groups.o + 724 74 0 32 7680 4655 heap_4.o + 148 0 0 0 0 3310 list.o + 1872 132 48 4 588 514323 main.o + 564 124 0 181 0 3996 mb.o + 56 8 512 0 0 1152 mbcrc.o + 430 0 0 0 0 7439 mbfunccoils.o + 172 0 0 0 0 1604 mbfuncdisc.o + 528 0 0 0 0 4939 mbfuncholding.o + 140 0 0 0 0 1555 mbfuncinput.o + 40 10 0 2 32 1367 mbfuncother.o + 644 74 0 12 256 6023 mbrtu.o + 172 0 0 0 0 2550 mbutils.o + 1580 166 46 16 340 42452 modbus-port-stm32.o + 854 78 0 12 0 10613 port.o + 1922 20 0 0 64 16652 queue.o + 36 8 304 0 1024 780 startup_stm32f103xe.o + 3370 356 112 288 324 18438 stepmotor.o + 76 20 0 9 0 5098 stm32f1xx_hal.o + 1456 58 0 0 0 8066 stm32f1xx_hal_adc.o + 284 6 0 0 0 1410 stm32f1xx_hal_adc_ex.o + 252 22 0 0 0 28562 stm32f1xx_hal_cortex.o + 1260 18 0 0 0 3651 stm32f1xx_hal_dma.o + 872 44 0 0 0 3195 stm32f1xx_hal_gpio.o + 1036 102 0 0 0 4494 stm32f1xx_hal_msp.o + 1816 108 18 0 0 6365 stm32f1xx_hal_rcc.o + 584 34 18 0 0 2317 stm32f1xx_hal_rcc_ex.o + 2256 102 0 0 0 14746 stm32f1xx_hal_tim.o + 276 22 0 0 0 3101 stm32f1xx_hal_tim_ex.o + 160 22 0 0 72 1355 stm32f1xx_hal_timebase_tim.o + 808 4 0 0 0 4224 stm32f1xx_hal_uart.o + 340 72 0 0 0 5174 stm32f1xx_it.o + 0 0 0 0 0 472 stream_buffer.o + 2 0 24 4 0 1047 system_stm32f1xx.o + 3008 378 0 60 1220 26808 tasks.o + 414 32 0 0 0 227296 tim.o + 1318 124 0 20 280 32311 timers.o + 2444 428 54 87 1736 4720 yousuan.o + + ---------------------------------------------------------------------- + 32522 2684 1172 740 15340 1100890 Object Totals + 0 0 32 0 0 0 (incl. Generated) + 44 0 4 9 4 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name + + 34 4 0 0 0 204 dunder.o + 860 52 56 0 0 256 log.o + 228 30 0 0 0 120 log10.o + 170 0 0 0 0 96 poly.o + 0 0 8 0 0 0 qnan.o + 76 0 0 0 0 84 sqrt.o + 86 0 0 0 0 0 __dczerorl2.o + 0 0 0 0 0 0 entry.o + 0 0 0 0 0 0 entry10a.o + 0 0 0 0 0 0 entry11a.o + 4 0 0 0 0 0 entry12b.o + 8 4 0 0 0 0 entry2.o + 4 0 0 0 0 0 entry5.o + 0 0 0 0 0 0 entry7b.o + 0 0 0 0 0 0 entry8b.o + 8 4 0 0 0 0 entry9a.o + 12 6 0 4 0 68 errno.o + 30 0 0 0 0 0 handlers.o + 36 8 0 0 0 68 init.o + 0 0 0 0 0 0 iusefp.o + 30 0 0 0 0 68 llshl.o + 36 0 0 0 0 68 llsshr.o + 32 0 0 0 0 68 llushr.o + 36 0 0 0 0 68 memcpya.o + 36 0 0 0 0 108 memseta.o + 2268 96 0 0 0 616 printfa.o + 0 0 0 4 0 0 stdout.o + 44 0 0 0 0 80 uidiv.o + 98 0 0 0 0 92 uldiv.o + 48 0 0 0 0 68 cdcmple.o + 48 0 0 0 0 68 cdrcmple.o + 20 0 0 0 0 68 cfcmple.o + 20 0 0 0 0 68 cfrcmple.o + 56 0 0 0 0 88 d2f.o + 334 0 0 0 0 148 dadd.o + 222 0 0 0 0 100 ddiv.o + 186 0 0 0 0 176 depilogue.o + 62 0 0 0 0 80 dfixi.o + 50 0 0 0 0 76 dfixui.o + 48 0 0 0 0 68 dfixul.o + 34 0 0 0 0 76 dflti.o + 228 0 0 0 0 96 dmul.o + 46 0 0 0 0 80 dscalb.o + 162 0 0 0 0 100 dsqrt.o + 38 0 0 0 0 68 f2d.o + 176 0 0 0 0 140 fadd.o + 124 0 0 0 0 88 fdiv.o + 110 0 0 0 0 168 fepilogue.o + 50 0 0 0 0 68 ffixi.o + 40 0 0 0 0 68 ffixui.o + 18 0 0 0 0 68 fflti.o + 10 0 0 0 0 68 ffltui.o + 100 0 0 0 0 76 fmul.o + + ---------------------------------------------------------------------- + 6370 204 64 8 0 4236 Library Totals + 4 0 0 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 1368 86 64 0 0 760 m_ws.l + 2768 118 0 8 0 1304 mc_w.l + 2230 0 0 0 0 2172 mf_w.l + + ---------------------------------------------------------------------- + 6370 204 64 8 0 4236 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 38892 2888 1236 748 15340 1089810 Grand Totals + 38892 2888 1236 144 15340 1089810 ELF Image Totals (compressed) + 38892 2888 1236 144 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 40128 ( 39.19kB) + Total RW Size (RW Data + ZI Data) 16088 ( 15.71kB) + Total ROM Size (Code + RO Data + RW Data) 40272 ( 39.33kB) + +============================================================================== + diff --git a/YouSuan.ioc b/YouSuan.ioc new file mode 100644 index 0000000..c6e9b06 --- /dev/null +++ b/YouSuan.ioc @@ -0,0 +1,329 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-10\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-11\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-12\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-13\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-14\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-15\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-16\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-6\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-7\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-8\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC1.Channel-9\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.ContinuousConvMode=ENABLE +ADC1.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,NbrOfConversionFlag,master,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,NbrOfConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,Rank-6\#ChannelRegularConversion,Channel-6\#ChannelRegularConversion,SamplingTime-6\#ChannelRegularConversion,Rank-7\#ChannelRegularConversion,Channel-7\#ChannelRegularConversion,SamplingTime-7\#ChannelRegularConversion,Rank-8\#ChannelRegularConversion,Channel-8\#ChannelRegularConversion,SamplingTime-8\#ChannelRegularConversion,Rank-9\#ChannelRegularConversion,Channel-9\#ChannelRegularConversion,SamplingTime-9\#ChannelRegularConversion,Rank-10\#ChannelRegularConversion,Channel-10\#ChannelRegularConversion,SamplingTime-10\#ChannelRegularConversion,Rank-11\#ChannelRegularConversion,Channel-11\#ChannelRegularConversion,SamplingTime-11\#ChannelRegularConversion,Rank-12\#ChannelRegularConversion,Channel-12\#ChannelRegularConversion,SamplingTime-12\#ChannelRegularConversion,Rank-13\#ChannelRegularConversion,Channel-13\#ChannelRegularConversion,SamplingTime-13\#ChannelRegularConversion,Rank-14\#ChannelRegularConversion,Channel-14\#ChannelRegularConversion,SamplingTime-14\#ChannelRegularConversion,Rank-15\#ChannelRegularConversion,Channel-15\#ChannelRegularConversion,SamplingTime-15\#ChannelRegularConversion,Rank-16\#ChannelRegularConversion,Channel-16\#ChannelRegularConversion,SamplingTime-16\#ChannelRegularConversion,ContinuousConvMode +ADC1.NbrOfConversion=16 +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-1\#ChannelRegularConversion=1 +ADC1.Rank-10\#ChannelRegularConversion=10 +ADC1.Rank-11\#ChannelRegularConversion=11 +ADC1.Rank-12\#ChannelRegularConversion=12 +ADC1.Rank-13\#ChannelRegularConversion=13 +ADC1.Rank-14\#ChannelRegularConversion=14 +ADC1.Rank-15\#ChannelRegularConversion=15 +ADC1.Rank-16\#ChannelRegularConversion=16 +ADC1.Rank-2\#ChannelRegularConversion=2 +ADC1.Rank-3\#ChannelRegularConversion=3 +ADC1.Rank-4\#ChannelRegularConversion=4 +ADC1.Rank-5\#ChannelRegularConversion=5 +ADC1.Rank-6\#ChannelRegularConversion=6 +ADC1.Rank-7\#ChannelRegularConversion=7 +ADC1.Rank-8\#ChannelRegularConversion=8 +ADC1.Rank-9\#ChannelRegularConversion=9 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-10\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-11\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-12\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-13\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-14\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-15\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-16\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-6\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-7\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-8\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.SamplingTime-9\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5 +ADC1.master=1 +CAD.formats= +CAD.pinconfig= +CAD.provider= +Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC1.0.Instance=DMA1_Channel1 +Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.ADC1.0.MemInc=DMA_MINC_ENABLE +Dma.ADC1.0.Mode=DMA_CIRCULAR +Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE +Dma.ADC1.0.Priority=DMA_PRIORITY_LOW +Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority +Dma.Request0=ADC1 +Dma.RequestsNb=1 +FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE +FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.configTOTAL_HEAP_SIZE=7680 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.CPN=STM32F103RCT6 +Mcu.Family=STM32F1 +Mcu.IP0=ADC1 +Mcu.IP1=DMA +Mcu.IP10=USART1 +Mcu.IP11=USART3 +Mcu.IP2=FREERTOS +Mcu.IP3=NVIC +Mcu.IP4=RCC +Mcu.IP5=SYS +Mcu.IP6=TIM2 +Mcu.IP7=TIM3 +Mcu.IP8=TIM5 +Mcu.IP9=TIM8 +Mcu.IPNb=12 +Mcu.Name=STM32F103R(C-D-E)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PD0-OSC_IN +Mcu.Pin1=PD1-OSC_OUT +Mcu.Pin10=PA6 +Mcu.Pin11=PA7 +Mcu.Pin12=PC4 +Mcu.Pin13=PC5 +Mcu.Pin14=PB0 +Mcu.Pin15=PB1 +Mcu.Pin16=PB10 +Mcu.Pin17=PB11 +Mcu.Pin18=PB12 +Mcu.Pin19=PC6 +Mcu.Pin2=PC0 +Mcu.Pin20=PA8 +Mcu.Pin21=PA9 +Mcu.Pin22=PA10 +Mcu.Pin23=PA13 +Mcu.Pin24=PA14 +Mcu.Pin25=PC10 +Mcu.Pin26=PC11 +Mcu.Pin27=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin28=VP_SYS_VS_tim1 +Mcu.Pin29=VP_TIM2_VS_ClockSourceINT +Mcu.Pin3=PC1 +Mcu.Pin30=VP_TIM3_VS_ClockSourceINT +Mcu.Pin31=VP_TIM8_VS_ClockSourceINT +Mcu.Pin4=PC2 +Mcu.Pin5=PA0-WKUP +Mcu.Pin6=PA1 +Mcu.Pin7=PA2 +Mcu.Pin8=PA3 +Mcu.Pin9=PA5 +Mcu.PinsNb=32 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F103RCTx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Channel1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.EXTI0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM1_UP_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TIM2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.TIM3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.TIM5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.TimeBase=TIM1_UP_IRQn +NVIC.TimeBaseIP=TIM1 +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA0-WKUP.Locked=true +PA0-WKUP.Signal=GPIO_Output +PA1.Locked=true +PA1.Signal=S_TIM2_CH2 +PA10.Locked=true +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 +PA2.Locked=true +PA2.Signal=S_TIM5_CH3 +PA3.Locked=true +PA3.Signal=GPIO_Output +PA5.Locked=true +PA5.Signal=GPIO_Output +PA6.Locked=true +PA6.Signal=S_TIM3_CH1 +PA7.Locked=true +PA7.Signal=GPIO_Output +PA8.Locked=true +PA8.Signal=GPIO_Output +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB0.Locked=true +PB0.Signal=ADCx_IN8 +PB1.Locked=true +PB1.Signal=ADCx_IN9 +PB10.Locked=true +PB10.Signal=GPIO_Output +PB11.Locked=true +PB11.Signal=GPIO_Output +PB12.Locked=true +PB12.Signal=GPIO_Output +PC0.GPIOParameters=GPIO_ModeDefaultEXTI +PC0.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC0.Locked=true +PC0.Signal=GPXTI0 +PC1.Locked=true +PC1.Signal=GPIO_Input +PC10.Locked=true +PC10.Mode=Asynchronous +PC10.Signal=USART3_TX +PC11.Locked=true +PC11.Mode=Asynchronous +PC11.Signal=USART3_RX +PC2.Locked=true +PC2.Signal=GPIO_Input +PC4.Locked=true +PC4.Signal=GPIO_Output +PC5.Locked=true +PC5.Signal=GPIO_Output +PC6.Locked=true +PC6.Signal=S_TIM8_CH1 +PD0-OSC_IN.Mode=HSE-External-Oscillator +PD0-OSC_IN.Signal=RCC_OSC_IN +PD1-OSC_OUT.Mode=HSE-External-Oscillator +PD1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F103RCTx +ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.8.6 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=YouSuan.ioc +ProjectManager.ProjectName=YouSuan +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5.32 +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM5_Init-TIM5-false-HAL-true,8-MX_TIM8_Init-TIM8-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_USART3_UART_Init-USART3-false-HAL-true +RCC.ADCFreqValue=12000000 +RCC.ADCPresc=RCC_ADCPCLK2_DIV6 +RCC.AHBFreq_Value=72000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=72000000 +RCC.FCLKCortexFreq_Value=72000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=72000000 +RCC.I2S2Freq_Value=72000000 +RCC.I2S3Freq_Value=72000000 +RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=72000000 +RCC.PLLMCOFreq_Value=36000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.SDIOFreq_Value=72000000 +RCC.SDIOHCLKDiv2FreqValue=36000000 +RCC.SYSCLKFreq_VALUE=72000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TimSysFreq_Value=72000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=8000000 +SH.ADCx_IN8.0=ADC1_IN8,IN8 +SH.ADCx_IN8.ConfNb=1 +SH.ADCx_IN9.0=ADC1_IN9,IN9 +SH.ADCx_IN9.ConfNb=1 +SH.GPXTI0.0=GPIO_EXTI0 +SH.GPXTI0.ConfNb=1 +SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 +SH.S_TIM2_CH2.ConfNb=1 +SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1 +SH.S_TIM3_CH1.ConfNb=1 +SH.S_TIM5_CH3.0=TIM5_CH3,PWM Generation3 CH3 +SH.S_TIM5_CH3.ConfNb=1 +SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1 +SH.S_TIM8_CH1.ConfNb=1 +TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM2.IPParameters=Channel-PWM Generation2 CH2,Prescaler,Period,AutoReloadPreload,Pulse-PWM Generation2 CH2,TIM_MasterOutputTrigger +TIM2.Period=999 +TIM2.Prescaler=72 +TIM2.Pulse-PWM\ Generation2\ CH2=499 +TIM2.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM3.IPParameters=Prescaler,Period,AutoReloadPreload,TIM_MasterOutputTrigger,Channel-PWM Generation1 CH1,Pulse-PWM Generation1 CH1 +TIM3.Period=999 +TIM3.Prescaler=72 +TIM3.Pulse-PWM\ Generation1\ CH1=499 +TIM3.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM5.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM5.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM5.IPParameters=Channel-PWM Generation3 CH3,Prescaler,Period,TIM_MasterOutputTrigger,AutoReloadPreload,Pulse-PWM Generation3 CH3 +TIM5.Period=999 +TIM5.Prescaler=72 +TIM5.Pulse-PWM\ Generation3\ CH3=499 +TIM5.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +TIM8.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM8.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM8.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,AutoReloadPreload,Pulse-PWM Generation1 CH1,TIM_MasterOutputTrigger +TIM8.Period=999 +TIM8.Prescaler=72 +TIM8.Pulse-PWM\ Generation1\ CH1=0 +TIM8.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +USART3.IPParameters=VirtualMode,Mode +USART3.Mode=MODE_TX +USART3.VirtualMode=VM_ASYNC +VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 +VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 +VP_SYS_VS_tim1.Mode=TIM1 +VP_SYS_VS_tim1.Signal=SYS_VS_tim1 +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 +VP_TIM8_VS_ClockSourceINT.Mode=Internal +VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT +board=custom +rtos.0.ip=FREERTOS