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 0000000..7efbe01 Binary files /dev/null and b/MDK-ARM/OutPut/YouSuan.axf differ 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