# Static Call Graph for image .\Objects\Ringzle.axf

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Wed Oct 25 17:45:18 2023

### Maximum Stack Usage = 1280 bytes + Unknown(Cycles, Untraceable Function Pointers)

### Call chain for Maximum Stack Depth:

main ⇒ MQTT_Alarm_clock ⇒ parseMQTTData ⇒ dlt645_read_data ⇒ dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round

### Mutually Recursive functions

- ADC0_1_IRQHandler ⇒ ADC0_1_IRQHandler
- cJSON_Delete ⇒ cJSON_Delete
- parse_object ⇒ parse_value
- parse_array ⇒ parse_value

  ### Function Pointers

  - ADC0_1_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - ADC2_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - BusFault_Handler from gd32f10x_it.o(i.BusFault_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - CAN0_EWMC_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - CAN0_RX1_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel0_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel1_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel2_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel3_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel4_IRQHandler from gd32f10x_it.o(i.DMA0_Channel4_IRQHandler) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel5_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA0_Channel6_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA1_Channel0_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA1_Channel1_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA1_Channel2_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DMA1_Channel3_4_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - DebugMon_Handler from gd32f10x_it.o(i.DebugMon_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - EXMC_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI0_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI10_15_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI1_IRQHandler from key.o(i.EXTI1_IRQHandler) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI2_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI3_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI4_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - EXTI5_9_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - FMC_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - HardFault_Handler from gd32f10x_it.o(i.HardFault_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - I2C0_ER_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - I2C0_EV_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - I2C1_ER_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - I2C1_EV_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - LVD_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - MemManage_Handler from gd32f10x_it.o(i.MemManage_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - NMI_Handler from gd32f10x_it.o(i.NMI_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - PendSV_Handler from gd32f10x_it.o(i.PendSV_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - RCU_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - RTC_Alarm_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - RTC_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - Reset_Handler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - SDIO_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - SPI0_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - SPI1_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - SPI2_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - SVC_Handler from gd32f10x_it.o(i.SVC_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - SysTick_Handler from gd32f10x_it.o(i.SysTick_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - SystemInit from system_gd32f10x.o(i.SystemInit) referenced from startup_gd32f10x_xd.o(.text)
  - TAMPER_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER0_BRK_TIMER8_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER0_Channel_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER0_TRG_CMT_TIMER10_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER0_UP_TIMER9_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER1_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER2_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER3_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER4_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER5_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER6_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER7_BRK_TIMER11_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER7_Channel_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER7_TRG_CMT_TIMER13_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - TIMER7_UP_TIMER12_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - UART3_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - UART4_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - USART0_IRQHandler from gd32f10x_it.o(i.USART0_IRQHandler) referenced from startup_gd32f10x_xd.o(RESET)
  - USART1_IRQHandler from gd32f10x_it.o(i.USART1_IRQHandler) referenced from startup_gd32f10x_xd.o(RESET)
  - USART2_IRQHandler from pc.o(i.USART2_IRQHandler) referenced from startup_gd32f10x_xd.o(RESET)
  - USBD_HP_CAN0_TX_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - USBD_LP_CAN0_RX0_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - USBD_WKUP_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - UsageFault_Handler from gd32f10x_it.o(i.UsageFault_Handler) referenced from startup_gd32f10x_xd.o(RESET)
  - WWDGT_IRQHandler from startup_gd32f10x_xd.o(.text) referenced from startup_gd32f10x_xd.o(RESET)
  - __main from entry.o(.ARM.Collect$$$$00000000) referenced from startup_gd32f10x_xd.o(.text)
  - _sbackspace from _sgetc.o(.text) referenced 2 times from __0sscanf.o(.text)
  - _scanf_char_input from scanf_char.o(.text) referenced from scanf_char.o(.text)
  - _sgetc from _sgetc.o(.text) referenced 2 times from __0sscanf.o(.text)
  - _snputc from printfa.o(i._snputc) referenced from printfa.o(i.__0vsnprintf)
  - _sputc from printfa.o(i._sputc) referenced from printfa.o(i.__0sprintf)
  - dlt645_hw_read from dlt645_port.o(i.dlt645_hw_read) referenced from dlt645_port.o(.data)
  - dlt645_hw_write from dlt645_port.o(i.dlt645_hw_write) referenced from dlt645_port.o(.data)
  - fputc from log.o(i.fputc) referenced from printfa.o(i.__0printf)
  - free from mallocr.o(i.__free$realloc) referenced from cjson.o(.data)
  - isspace from isspace_o.o(.text) referenced 2 times from scanf_char.o(.text)
  - main from main.o(i.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B)
  - malloc from mallocr.o(i.__malloc$realloc) referenced from cjson.o(.data)
  - realloc from mallocr.o(i.realloc) referenced from cjson.o(.data)

  ### Global Symbols

  __main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(.text)

  _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))

  _main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
  [Calls]

  - >> __scatterload

  __main_after_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
  [Called By]

  - >> __scatterload

  _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))

  _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))

  _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))

  __rt_lib_shutdown_fini (Thumb, 0 bytes, Stack size unknown bytes, entry12b.o(.ARM.Collect$$$$0000000E))

  __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000F))

  __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$00000011))

  Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  ADC0_1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Calls]

  - >> ADC0_1_IRQHandler
  [Called By]
  - >> ADC0_1_IRQHandler
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

  ADC2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  CAN0_EWMC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  CAN0_RX1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA0_Channel0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA0_Channel1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA0_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA0_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA0_Channel5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA0_Channel6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA1_Channel0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA1_Channel1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA1_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  DMA1_Channel3_4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXMC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXTI0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXTI10_15_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXTI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXTI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXTI4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  EXTI5_9_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  FMC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  I2C0_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  I2C0_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  I2C1_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  I2C1_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  LVD_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  RCU_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  RTC_Alarm_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  RTC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  SDIO_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  SPI0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  SPI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  SPI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TAMPER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER0_BRK_TIMER8_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER0_Channel_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER0_TRG_CMT_TIMER10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER0_UP_TIMER9_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER7_BRK_TIMER11_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER7_Channel_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER7_TRG_CMT_TIMER13_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  TIMER7_UP_TIMER12_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  UART3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  UART4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  USBD_HP_CAN0_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  USBD_LP_CAN0_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  USBD_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  WWDGT_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_gd32f10x_xd.o(.text))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  tolower (Thumb, 12 bytes, Stack size 0 bytes, tolower.o(.text))
  [Called By]

  - >> case_insensitive_strcmp

  __aeabi_memcpy (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text))
  [Called By]

  - >> mmodbus_readCoils
  - >> xmodem
  - >> mmodbus_readHoldingRegisters8i
  - >> dlt645_hw_read
  - >> internal_alloc

  __aeabi_memcpy4 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text))
  [Called By]

  - >> Read_Data

  __aeabi_memcpy8 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)

  __aeabi_memset (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text))
  [Called By]

  - >> _memset$wrapper
  - >> __aeabi_memclr

  __aeabi_memset4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)

  __aeabi_memset8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)

  __aeabi_memclr (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text))
  [Calls]

  - >> __aeabi_memset
  [Called By]
  - >> MQTT_BUFFER_READ
  - >> Clear_DMA_Buffer
  - >> xmodem
  - >> USART2_IRQHandler
  - >> main
  - >> mmodbus_sendRaw

  __aeabi_memclr4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
  [Called By]

  - >> parseMQTTData
  - >> mmodbus_init
  - >> dlt645_hw_write
  - >> dlt645_2007_read_data
  - >> dlt645_1997_read_data
  - >> cJSON_ParseWithLengthOpts
  - >> cJSON_New_Item

  __aeabi_memclr8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)

  _memset$wrapper (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_memset

  strstr (Thumb, 36 bytes, Stack size 12 bytes, strstr.o(.text))
  [Stack]

  - Max Depth = 12
  - Call Chain = strstr
  [Called By]
  - >> extract_data_from_buffer
  - >> parseStringField
  - >> parseIntField
  - >> addGatewayParams
  - >> addDevice
  - >> WaitResponse
  - >> Receive_MQTT_DataPack

  strchr (Thumb, 20 bytes, Stack size 0 bytes, strchr.o(.text))
  [Called By]

  - >> extract_data_from_buffer

  strlen (Thumb, 14 bytes, Stack size 0 bytes, strlen.o(.text))
  [Called By]

  - >> parseMQTTData
  - >> parseStringField
  - >> parseIntField
  - >> MQTTSubTopic
  - >> MQTTPublish
  - >> EC800MGetUrl
  - >> ConnectMQTTSever
  - >> Receive_MQTT_DataPack
  - >> dlt645_data_parse_by_format_to_float
  - >> cJSON_ParseWithOpts

  strcmp (Thumb, 28 bytes, Stack size 8 bytes, strcmp.o(.text))
  [Stack]

  - Max Depth = 8
  - Call Chain = strcmp
  [Called By]
  - >> parseMQTTData
  - >> get_object_item

  memcmp (Thumb, 26 bytes, Stack size 12 bytes, memcmp.o(.text))
  [Stack]

  - Max Depth = 12
  - Call Chain = memcmp
  [Called By]
  - >> mmodbus_writeHoldingRegister16i
  - >> mmodbus_writeCoil
  - >> dlt645_common_check

  strcpy (Thumb, 18 bytes, Stack size 0 bytes, strcpy.o(.text))
  [Called By]

  - >> MQTT_BUFFER_READ
  - >> parseMQTTData
  - >> main

  strncmp (Thumb, 30 bytes, Stack size 12 bytes, strncmp.o(.text))
  [Stack]

  - Max Depth = 12
  - Call Chain = strncmp
  [Called By]
  - >> skip_utf8_bom
  - >> parse_value

  __0sscanf (Thumb, 48 bytes, Stack size 72 bytes, __0sscanf.o(.text))
  [Stack]

  - Max Depth = 264
  - Call Chain = __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> __vfscanf_char
  [Called By]
  - >> extract_data_from_buffer
  - >> parseStringField
  - >> addSensorListParams

  _scanf_int (Thumb, 332 bytes, Stack size 56 bytes, _scanf_int.o(.text))
  [Stack]

  - Max Depth = 56
  - Call Chain = _scanf_int
  [Calls]
  - >> _chval
  [Called By]
  - >> __vfscanf

  _scanf_string (Thumb, 224 bytes, Stack size 56 bytes, _scanf_str.o(.text))
  [Stack]

  - Max Depth = 56
  - Call Chain = _scanf_string
  [Called By]
  - >> __vfscanf

  _scanf_real (Thumb, 0 bytes, Stack size 104 bytes, scanf_fp.o(.text))
  [Stack]

  - Max Depth = 104
  - Call Chain = _scanf_real
  [Called By]
  - >> __vfscanf
  - >> _local_sscanf

  _scanf_really_real (Thumb, 556 bytes, Stack size 104 bytes, scanf_fp.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_d2f
  - >> _is_digit
  - >> _fp_value

  strtol (Thumb, 112 bytes, Stack size 32 bytes, strtol.o(.text))
  [Stack]

  - Max Depth = 72
  - Call Chain = strtol ⇒ _strtoul
  [Calls]
  - >> _strtoul
  - >> __aeabi_errno_addr
  - >> __rt_ctype_table
  [Called By]
  - >> parseIntField

  __aeabi_dadd (Thumb, 322 bytes, Stack size 48 bytes, dadd.o(.text))
  [Stack]

  - Max Depth = 88
  - Call Chain = __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_llsl
  - >> _double_round
  - >> _double_epilogue
  - >> __aeabi_lasr
  [Called By]
  - >> __aeabi_drsub
  - >> pow
  - >> data_package_translate_to_int
  - >> __aeabi_dsub
  - >> __kernel_poly
  - >> __mathlib_dbl_infnan2
  - >> _fp_digits

  __aeabi_dsub (Thumb, 6 bytes, Stack size 0 bytes, dadd.o(.text))
  [Stack]

  - Max Depth = 88
  - Call Chain = __aeabi_dsub ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_dadd
  [Called By]
  - >> pow

  __aeabi_drsub (Thumb, 6 bytes, Stack size 0 bytes, dadd.o(.text))
  [Stack]

  - Max Depth = 88
  - Call Chain = __aeabi_drsub ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_dadd
  [Called By]
  - >> pow

  __aeabi_dmul (Thumb, 228 bytes, Stack size 48 bytes, dmul.o(.text))
  [Stack]

  - Max Depth = 88
  - Call Chain = __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> _double_epilogue
  [Called By]
  - >> pow
  - >> data_package_translate_to_int
  - >> __kernel_poly
  - >> _fp_value
  - >> _fp_digits

  __aeabi_ddiv (Thumb, 222 bytes, Stack size 32 bytes, ddiv.o(.text))
  [Stack]

  - Max Depth = 40
  - Call Chain = __aeabi_ddiv ⇒ _double_round
  [Calls]
  - >> _double_round
  [Called By]
  - >> Read_Data
  - >> pow
  - >> dlt645_data_parse_by_format_to_float
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_divzero
  - >> _fp_value
  - >> _fp_digits

  __aeabi_ui2f (Thumb, 10 bytes, Stack size 0 bytes, ffltui.o(.text))
  [Stack]

  - Max Depth = 4
  - Call Chain = __aeabi_ui2f ⇒ _float_epilogue
  [Calls]
  - >> _float_epilogue
  [Called By]
  - >> Read_Data

  __aeabi_i2d (Thumb, 34 bytes, Stack size 16 bytes, dflti.o(.text))
  [Stack]

  - Max Depth = 56
  - Call Chain = __aeabi_i2d ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> _double_epilogue
  [Called By]
  - >> pow
  - >> data_package_translate_to_int
  - >> dlt645_data_parse_by_format_to_float

  __aeabi_ui2d (Thumb, 26 bytes, Stack size 16 bytes, dfltui.o(.text))
  [Stack]

  - Max Depth = 56
  - Call Chain = __aeabi_ui2d ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> _double_epilogue
  [Called By]
  - >> Read_Data
  - >> data_package_translate_to_int

  __aeabi_d2iz (Thumb, 62 bytes, Stack size 16 bytes, dfixi.o(.text))
  [Stack]

  - Max Depth = 16
  - Call Chain = __aeabi_d2iz
  [Calls]
  - >> __aeabi_llsr
  [Called By]
  - >> data_package_translate_to_int
  - >> parse_number

  __aeabi_f2d (Thumb, 38 bytes, Stack size 0 bytes, f2d.o(.text))
  [Called By]

  - >> parseMQTTData
  - >> Read_Data
  - >> MQTTPublish

  __aeabi_cdcmpeq (Thumb, 0 bytes, Stack size 0 bytes, cdcmple.o(.text), UNUSED)

  __aeabi_cdcmple (Thumb, 48 bytes, Stack size 0 bytes, cdcmple.o(.text))
  [Called By]

  - >> parse_number

  __aeabi_cdrcmple (Thumb, 48 bytes, Stack size 0 bytes, cdrcmple.o(.text))
  [Called By]

  - >> pow
  - >> parse_number
  - >> _fp_digits

  __aeabi_d2f (Thumb, 56 bytes, Stack size 8 bytes, d2f.o(.text))
  [Stack]

  - Max Depth = 8
  - Call Chain = __aeabi_d2f
  [Calls]
  - >> _float_round
  [Called By]
  - >> Read_Data
  - >> dlt645_data_parse_by_format_to_float
  - >> _scanf_really_real

  __aeabi_uidiv (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)

  __aeabi_uidivmod (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
  [Called By]

  - >> _printf_core

  __aeabi_uldivmod (Thumb, 98 bytes, Stack size 40 bytes, uldiv.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_llsl
  - >> __aeabi_llsr
  [Called By]
  - >> _printf_core
  - >> _fp_digits

  __aeabi_llsl (Thumb, 30 bytes, Stack size 0 bytes, llshl.o(.text))
  [Called By]

  - >> __aeabi_dadd
  - >> __aeabi_uldivmod
  - >> _double_epilogue
  - >> __aeabi_d2ulz

  _ll_shift_l (Thumb, 0 bytes, Stack size 0 bytes, llshl.o(.text), UNUSED)

  __aeabi_llsr (Thumb, 32 bytes, Stack size 0 bytes, llushr.o(.text))
  [Called By]

  - >> __aeabi_d2iz
  - >> __aeabi_uldivmod
  - >> _dsqrt
  - >> _double_epilogue
  - >> __aeabi_d2ulz

  _ll_ushift_r (Thumb, 0 bytes, Stack size 0 bytes, llushr.o(.text), UNUSED)

  __aeabi_lasr (Thumb, 36 bytes, Stack size 0 bytes, llsshr.o(.text))
  [Called By]

  - >> __aeabi_dadd

  _ll_sshift_r (Thumb, 0 bytes, Stack size 0 bytes, llsshr.o(.text), UNUSED)

  __rt_ctype_table (Thumb, 4 bytes, Stack size 0 bytes, ctype_o.o(.text))
  [Called By]

  - >> strtol
  - >> isspace

  isspace (Thumb, 18 bytes, Stack size 8 bytes, isspace_o.o(.text))
  [Stack]

  - Max Depth = 8
  - Call Chain = isspace
  [Calls]
  - >> __rt_ctype_table
  [Address Reference Count : 2]
  - scanf_char.o(.text)
  - strtod.o(.text)

  _chval (Thumb, 28 bytes, Stack size 0 bytes, _chval.o(.text))
  [Called By]

  - >> _scanf_int
  - >> _strtoul

  __vfscanf_char (Thumb, 20 bytes, Stack size 0 bytes, scanf_char.o(.text))
  [Stack]

  - Max Depth = 192
  - Call Chain = __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> __vfscanf
  [Called By]
  - >> __0sscanf

  _sgetc (Thumb, 30 bytes, Stack size 0 bytes, _sgetc.o(.text))
  [Address Reference Count : 2]

  - __0sscanf.o(.text)
  - strtod.o(.text)

  _sbackspace (Thumb, 34 bytes, Stack size 0 bytes, _sgetc.o(.text))
  [Address Reference Count : 2]

  - __0sscanf.o(.text)
  - strtod.o(.text)

  _strtoul (Thumb, 158 bytes, Stack size 40 bytes, _strtoul.o(.text))
  [Stack]

  - Max Depth = 40
  - Call Chain = _strtoul
  [Calls]
  - >> _chval
  - >> __aeabi_errno_addr
  [Called By]
  - >> strtol

  __strtod_int (Thumb, 90 bytes, Stack size 40 bytes, strtod.o(.text))
  [Stack]

  - Max Depth = 200
  - Call Chain = __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> _local_sscanf
  [Called By]
  - >> strtod

  __I$use$fp (Thumb, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED)

  _float_round (Thumb, 18 bytes, Stack size 0 bytes, fepilogue.o(.text))
  [Called By]

  - >> __aeabi_d2f

  _float_epilogue (Thumb, 92 bytes, Stack size 4 bytes, fepilogue.o(.text))
  [Stack]

  - Max Depth = 4
  - Call Chain = _float_epilogue
  [Called By]
  - >> __aeabi_ui2f

  _double_round (Thumb, 30 bytes, Stack size 8 bytes, depilogue.o(.text))
  [Stack]

  - Max Depth = 8
  - Call Chain = _double_round
  [Called By]
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> _dsqrt
  - >> _double_epilogue

  _double_epilogue (Thumb, 156 bytes, Stack size 32 bytes, depilogue.o(.text))
  [Stack]

  - Max Depth = 40
  - Call Chain = _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_llsl
  - >> _double_round
  - >> __aeabi_llsr
  [Called By]
  - >> __aeabi_ui2d
  - >> __aeabi_dadd
  - >> __aeabi_i2d
  - >> __aeabi_dmul
  - >> __aeabi_ul2d

  __ARM_scalbn (Thumb, 46 bytes, Stack size 16 bytes, dscalb.o(.text))
  [Stack]

  - Max Depth = 16
  - Call Chain = __ARM_scalbn
  [Called By]
  - >> pow
  - >> __mathlib_dbl_underflow
  - >> __mathlib_dbl_overflow

  scalbn (Thumb, 0 bytes, Stack size 16 bytes, dscalb.o(.text), UNUSED)

  __aeabi_ul2d (Thumb, 24 bytes, Stack size 16 bytes, dfltul.o(.text), UNUSED)
  [Calls]

  - >> _double_epilogue
  [Called By]
  - >> _fp_value

  __aeabi_d2ulz (Thumb, 48 bytes, Stack size 0 bytes, dfixul.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_llsl
  - >> __aeabi_llsr
  [Called By]
  - >> _fp_digits

  __scatterload (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text))
  [Calls]

  - >> __main_after_scatterload
  [Called By]
  - >> _main_scatterload

  __scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)

  __vfscanf (Thumb, 810 bytes, Stack size 88 bytes, _scanf.o(.text))
  [Stack]

  - Max Depth = 192
  - Call Chain = __vfscanf ⇒ _scanf_real
  [Calls]
  - >> _scanf_real
  - >> _scanf_string
  - >> _scanf_int
  [Called By]
  - >> __vfscanf_char

  _dsqrt (Thumb, 162 bytes, Stack size 32 bytes, dsqrt.o(.text))
  [Stack]

  - Max Depth = 40
  - Call Chain = _dsqrt ⇒ _double_round
  [Calls]
  - >> _double_round
  - >> __aeabi_llsr
  [Called By]
  - >> sqrt

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

  - startup_gd32f10x_xd.o(RESET)

  Clear_DMA_Buffer (Thumb, 20 bytes, Stack size 8 bytes, usart.o(i.Clear_DMA_Buffer))
  [Stack]

  - Max Depth = 8
  - Call Chain = Clear_DMA_Buffer
  [Calls]
  - >> __aeabi_memclr
  [Called By]
  - >> WaitResponse
  - >> Receive_MQTT_DataPack

  ConnectMQTTSever (Thumb, 196 bytes, Stack size 192 bytes, ec800m.o(i.ConnectMQTTSever))
  [Stack]

  - Max Depth = 228
  - Call Chain = ConnectMQTTSever ⇒ WaitResponse ⇒ strstr
  [Calls]
  - >> WaitResponse
  - >> EC800MSendCmd
  - >> __2sprintf
  - >> strlen
  [Called By]
  - >> main

  DMA0_Channel4_IRQHandler (Thumb, 14 bytes, Stack size 8 bytes, gd32f10x_it.o(i.DMA0_Channel4_IRQHandler))
  [Stack]

  - Max Depth = 16
  - Call Chain = DMA0_Channel4_IRQHandler ⇒ dma_interrupt_flag_clear
  [Calls]
  - >> dma_interrupt_flag_clear
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

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

  - startup_gd32f10x_xd.o(RESET)

  EC800MGetUrl (Thumb, 196 bytes, Stack size 120 bytes, ec800m.o(i.EC800MGetUrl))
  [Stack]

  - Max Depth = 184
  - Call Chain = EC800MGetUrl ⇒ dma_config_change ⇒ dma_init
  [Calls]
  - >> dma_config_change
  - >> WaitResponse
  - >> EC800MSendCmd
  - >> delay_1ms
  - >> __2sprintf
  - >> strlen
  [Called By]
  - >> http_load_config

  EC800MPwoerOn (Thumb, 82 bytes, Stack size 8 bytes, ec800m.o(i.EC800MPwoerOn))
  [Stack]

  - Max Depth = 28
  - Call Chain = EC800MPwoerOn ⇒ gpio_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> gpio_bit_set
  - >> gd_pull_EC800M_rst_up
  - >> gd_pull_EC800M_rst_down
  - >> gd_pull_EC800M_pwr_up
  - >> gd_pull_EC800M_pwr_down
  - >> delay_1ms
  [Called By]
  - >> main

  EC800MSendCmd (Thumb, 48 bytes, Stack size 24 bytes, ec800m.o(i.EC800MSendCmd))
  [Stack]

  - Max Depth = 32
  - Call Chain = EC800MSendCmd ⇒ usart_flag_get
  [Calls]
  - >> usart_flag_get
  - >> usart_data_transmit
  [Called By]
  - >> parseMQTTData
  - >> MQTTSubTopic
  - >> MQTTPublish
  - >> EC800MSetPDP
  - >> EC800MGetUrl
  - >> ConnectMQTTSever
  - >> http_load_config

  EC800MSetPDP (Thumb, 58 bytes, Stack size 8 bytes, ec800m.o(i.EC800MSetPDP))
  [Stack]

  - Max Depth = 44
  - Call Chain = EC800MSetPDP ⇒ WaitResponse ⇒ strstr
  [Calls]
  - >> WaitResponse
  - >> EC800MSendCmd
  - >> delay_1ms
  [Called By]
  - >> main

  EC800MWaitReady (Thumb, 12 bytes, Stack size 8 bytes, ec800m.o(i.EC800MWaitReady))
  [Stack]

  - Max Depth = 44
  - Call Chain = EC800MWaitReady ⇒ WaitResponse ⇒ strstr
  [Calls]
  - >> WaitResponse
  [Called By]
  - >> main

  EXTI1_IRQHandler (Thumb, 72 bytes, Stack size 8 bytes, key.o(i.EXTI1_IRQHandler))
  [Stack]

  - Max Depth = 8
  - Call Chain = EXTI1_IRQHandler
  [Calls]
  - >> delay_1ms
  - >> exti_interrupt_flag_get
  - >> exti_interrupt_flag_clear
  - >> gpio_input_bit_get
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

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

  - startup_gd32f10x_xd.o(RESET)

  LogPrint (Thumb, 136 bytes, Stack size 296 bytes, log.o(i.LogPrint))
  [Stack]

  - Max Depth = 320
  - Call Chain = LogPrint ⇒ vsnprintf
  [Calls]
  - >> vsnprintf
  - >> __2printf
  [Called By]
  - >> parseMQTTData

  MQTTPublish (Thumb, 606 bytes, Stack size 272 bytes, ec800m.o(i.MQTTPublish))
  [Stack]

  - Max Depth = 328
  - Call Chain = MQTTPublish ⇒ malloc ⇒ internal_alloc
  [Calls]
  - >> get_gateway_config_params
  - >> __aeabi_f2d
  - >> WaitResponse
  - >> EC800MSendCmd
  - >> delay_1ms
  - >> malloc
  - >> free
  - >> __2sprintf
  - >> strlen
  [Called By]
  - >> MQTT_Alarm_clock

  MQTTSubTopic (Thumb, 64 bytes, Stack size 120 bytes, ec800m.o(i.MQTTSubTopic))
  [Stack]

  - Max Depth = 156
  - Call Chain = MQTTSubTopic ⇒ WaitResponse ⇒ strstr
  [Calls]
  - >> WaitResponse
  - >> EC800MSendCmd
  - >> __2sprintf
  - >> strlen
  [Called By]
  - >> main

  MQTT_Alarm_clock (Thumb, 58 bytes, Stack size 16 bytes, main.o(i.MQTT_Alarm_clock))
  [Stack]

  - Max Depth = 1272
  - Call Chain = MQTT_Alarm_clock ⇒ parseMQTTData ⇒ dlt645_read_data ⇒ dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> task_fwdgt_reload
  - >> parseMQTTData
  - >> Read_Data
  - >> MQTTPublish
  - >> delay_1ms
  - >> gd_eval_led_toggle
  - >> check_ota_event
  [Called By]
  - >> main

  MQTT_BUFFER_READ (Thumb, 114 bytes, Stack size 24 bytes, mqttrecv.o(i.MQTT_BUFFER_READ))
  [Stack]

  - Max Depth = 24
  - Call Chain = MQTT_BUFFER_READ
  [Calls]
  - >> ring_buffer_read
  - >> strcpy
  - >> __aeabi_memclr
  [Called By]
  - >> parseMQTTData

  MemManage_Handler (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_it.o(i.MemManage_Handler))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

  NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, gd32f10x_it.o(i.NMI_Handler))
  [Address Reference Count : 1]

  - startup_gd32f10x_xd.o(RESET)

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

  - startup_gd32f10x_xd.o(RESET)

  Read_Data (Thumb, 588 bytes, Stack size 72 bytes, parsedevicemessage.o(i.Read_Data))
  [Stack]

  - Max Depth = 616
  - Call Chain = Read_Data ⇒ dlt645_read_data ⇒ dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> task_fwdgt_reload
  - >> mmodbus_set16bitOrder
  - >> mmodbus_readHoldingRegisters16i
  - >> mmodbus_readCoils
  - >> dlt645_set_addr
  - >> dlt645_read_data
  - >> __aeabi_ui2f
  - >> __aeabi_ui2d
  - >> __aeabi_ddiv
  - >> __aeabi_d2f
  - >> get_gateway_config_params
  - >> __aeabi_f2d
  - >> delay_1ms
  - >> pow
  - >> malloc
  - >> free
  - >> __aeabi_memcpy4
  [Called By]
  - >> MQTT_Alarm_clock

  Receive_MQTT_DataPack (Thumb, 120 bytes, Stack size 8 bytes, mqttrecv.o(i.Receive_MQTT_DataPack))
  [Stack]

  - Max Depth = 20
  - Call Chain = Receive_MQTT_DataPack ⇒ strstr
  [Calls]
  - >> Clear_DMA_Buffer
  - >> ring_buffer_write
  - >> strlen
  - >> strstr
  [Called By]
  - >> USART0_IRQHandler

  SPI0_Init (Thumb, 94 bytes, Stack size 32 bytes, spi.o(i.SPI0_Init))
  [Stack]

  - Max Depth = 52
  - Call Chain = SPI0_Init ⇒ gpio_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> spi_init
  - >> spi_i2s_deinit
  - >> spi_enable
  [Called By]
  - >> W25Q32_Init

  SPI0_ReadWriteByte (Thumb, 50 bytes, Stack size 8 bytes, spi.o(i.SPI0_ReadWriteByte))
  [Stack]

  - Max Depth = 8
  - Call Chain = SPI0_ReadWriteByte
  [Calls]
  - >> spi_i2s_flag_get
  - >> spi_i2s_data_transmit
  - >> spi_i2s_data_receive
  [Called By]
  - >> W25Q32_WaitBusy
  - >> W25Q32_Enable
  - >> SPI0_Write

  SPI0_Write (Thumb, 26 bytes, Stack size 16 bytes, spi.o(i.SPI0_Write))
  [Stack]

  - Max Depth = 24
  - Call Chain = SPI0_Write ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> SPI0_ReadWriteByte
  [Called By]
  - >> W25Q32_PageWrite
  - >> W25Q32_Erase64K

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

  - startup_gd32f10x_xd.o(RESET)

  SysTick_Handler (Thumb, 12 bytes, Stack size 8 bytes, gd32f10x_it.o(i.SysTick_Handler))
  [Stack]

  - Max Depth = 8
  - Call Chain = SysTick_Handler
  [Calls]
  - >> runtime_increment
  - >> delay_decrement
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

  SystemInit (Thumb, 198 bytes, Stack size 8 bytes, system_gd32f10x.o(i.SystemInit))
  [Stack]

  - Max Depth = 16
  - Call Chain = SystemInit ⇒ system_clock_config
  [Calls]
  - >> nvic_vector_table_set
  - >> system_clock_config
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(.text)

  USART0_IRQHandler (Thumb, 54 bytes, Stack size 8 bytes, gd32f10x_it.o(i.USART0_IRQHandler))
  [Stack]

  - Max Depth = 28
  - Call Chain = USART0_IRQHandler ⇒ Receive_MQTT_DataPack ⇒ strstr
  [Calls]
  - >> usart_interrupt_flag_get
  - >> usart_interrupt_flag_clear
  - >> usart_data_receive
  - >> dma_channel_enable
  - >> dma_channel_disable
  - >> Receive_MQTT_DataPack
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

  USART1_IRQHandler (Thumb, 30 bytes, Stack size 8 bytes, gd32f10x_it.o(i.USART1_IRQHandler))
  [Stack]

  - Max Depth = 32
  - Call Chain = USART1_IRQHandler ⇒ mmodbus_callback ⇒ usart_interrupt_flag_get
  [Calls]
  - >> mmodbus_callback
  - >> dlt_callback
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

  USART2_IRQHandler (Thumb, 374 bytes, Stack size 16 bytes, pc.o(i.USART2_IRQHandler))
  [Stack]

  - Max Depth = 72
  - Call Chain = USART2_IRQHandler ⇒ malloc ⇒ internal_alloc
  [Calls]
  - >> usart_interrupt_flag_get
  - >> usart_interrupt_flag_clear
  - >> usart_data_receive
  - >> malloc
  - >> __aeabi_memclr
  [Address Reference Count : 1]
  - startup_gd32f10x_xd.o(RESET)

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

  - startup_gd32f10x_xd.o(RESET)

  W25Q32_Enable (Thumb, 30 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_Enable))
  [Stack]

  - Max Depth = 24
  - Call Chain = W25Q32_Enable ⇒ W25Q32_WaitBusy ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> gpio_bit_set
  - >> gpio_bit_reset
  - >> W25Q32_WaitBusy
  - >> SPI0_ReadWriteByte
  [Called By]
  - >> W25Q32_PageWrite
  - >> W25Q32_Erase64K

  W25Q32_Erase64K (Thumb, 70 bytes, Stack size 16 bytes, w25q32.o(i.W25Q32_Erase64K))
  [Stack]

  - Max Depth = 40
  - Call Chain = W25Q32_Erase64K ⇒ W25Q32_Enable ⇒ W25Q32_WaitBusy ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> gpio_bit_set
  - >> gpio_bit_reset
  - >> W25Q32_WaitBusy
  - >> W25Q32_Enable
  - >> SPI0_Write
  [Called By]
  - >> xmodem
  - >> check_ota_event

  W25Q32_Init (Thumb, 36 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_Init))
  [Stack]

  - Max Depth = 60
  - Call Chain = W25Q32_Init ⇒ SPI0_Init ⇒ gpio_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> gpio_bit_set
  - >> SPI0_Init
  [Called By]
  - >> main

  W25Q32_PageWrite (Thumb, 80 bytes, Stack size 16 bytes, w25q32.o(i.W25Q32_PageWrite))
  [Stack]

  - Max Depth = 40
  - Call Chain = W25Q32_PageWrite ⇒ W25Q32_Enable ⇒ W25Q32_WaitBusy ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> gpio_bit_set
  - >> gpio_bit_reset
  - >> W25Q32_WaitBusy
  - >> W25Q32_Enable
  - >> SPI0_Write
  [Called By]
  - >> xmodem

  W25Q32_WaitBusy (Thumb, 44 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_WaitBusy))
  [Stack]

  - Max Depth = 16
  - Call Chain = W25Q32_WaitBusy ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> gpio_bit_set
  - >> gpio_bit_reset
  - >> SPI0_ReadWriteByte
  [Called By]
  - >> W25Q32_PageWrite
  - >> W25Q32_Erase64K
  - >> W25Q32_Enable

  WaitForUpData (Thumb, 66 bytes, Stack size 24 bytes, parsedevicemessage.o(i.WaitForUpData))
  [Stack]

  - Max Depth = 376
  - Call Chain = WaitForUpData ⇒ addGatewayParams ⇒ addDevice ⇒ addSensorListParams ⇒ parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> extract_data_from_buffer
  - >> checksum
  - >> addGatewayParams
  [Called By]
  - >> http_load_config

  WaitResponse (Thumb, 82 bytes, Stack size 24 bytes, ec800m.o(i.WaitResponse))
  [Stack]

  - Max Depth = 36
  - Call Chain = WaitResponse ⇒ strstr
  [Calls]
  - >> Clear_DMA_Buffer
  - >> delay_1ms
  - >> strstr
  [Called By]
  - >> parseMQTTData
  - >> MQTTSubTopic
  - >> MQTTPublish
  - >> EC800MWaitReady
  - >> EC800MSetPDP
  - >> EC800MGetUrl
  - >> ConnectMQTTSever

  Xmodem_CRC16 (Thumb, 68 bytes, Stack size 16 bytes, otaevent.o(i.Xmodem_CRC16))
  [Stack]

  - Max Depth = 16
  - Call Chain = Xmodem_CRC16
  [Called By]
  - >> xmodem

  __0printf (Thumb, 22 bytes, Stack size 24 bytes, printfa.o(i.__0printf), UNUSED)
  [Calls]

  - >> _printf_core

  __1printf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0printf), UNUSED)

  __2printf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0printf))
  [Stack]

  - Max Depth = 24
  - Call Chain = __2printf
  [Called By]
  - >> LogPrint

  __c89printf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0printf), UNUSED)

  printf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0printf), UNUSED)

  __0sprintf (Thumb, 34 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED)
  [Calls]

  - >> _sputc
  - >> _printf_core

  __1sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED)

  __2sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf))
  [Stack]

  - Max Depth = 24
  - Call Chain = __2sprintf
  [Called By]
  - >> parseMQTTData
  - >> MQTTSubTopic
  - >> MQTTPublish
  - >> EC800MGetUrl
  - >> ConnectMQTTSever
  - >> main

  __c89sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED)

  sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED)

  __0vsnprintf (Thumb, 46 bytes, Stack size 24 bytes, printfa.o(i.__0vsnprintf), UNUSED)
  [Calls]

  - >> _printf_core

  __1vsnprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0vsnprintf), UNUSED)

  __2vsnprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0vsnprintf), UNUSED)

  __c89vsnprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0vsnprintf), UNUSED)

  vsnprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0vsnprintf))
  [Stack]

  - Max Depth = 24
  - Call Chain = vsnprintf
  [Called By]
  - >> LogPrint

  __ARM_fpclassify (Thumb, 40 bytes, Stack size 0 bytes, fpclassify.o(i.__ARM_fpclassify))
  [Called By]

  - >> pow

  __aeabi_errno_addr (Thumb, 4 bytes, Stack size 0 bytes, errno.o(i.__aeabi_errno_addr))
  [Called By]

  - >> strtol
  - >> _strtoul

  __rt_errno_addr (Thumb, 0 bytes, Stack size 0 bytes, errno.o(i.__aeabi_errno_addr), UNUSED)

  free (Thumb, 88 bytes, Stack size 12 bytes, mallocr.o(i.__free$realloc))
  [Stack]

  - Max Depth = 12
  - Call Chain = free
  [Called By]
  - >> Read_Data
  - >> addSensorListParams
  - >> MQTTPublish
  - >> main
  - >> http_load_config
  - >> realloc
  [Address Reference Count : 1]
  - cjson.o(.data)

  __kernel_poly (Thumb, 170 bytes, Stack size 24 bytes, poly.o(i.__kernel_poly))
  [Stack]

  - Max Depth = 112
  - Call Chain = __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_dadd
  - >> __aeabi_dmul
  [Called By]
  - >> pow

  malloc (Thumb, 64 bytes, Stack size 32 bytes, mallocr.o(i.__malloc$realloc))
  [Stack]

  - Max Depth = 56
  - Call Chain = malloc ⇒ internal_alloc
  [Calls]
  - >> internal_alloc
  [Called By]
  - >> Read_Data
  - >> addSensorListParams
  - >> addDevice
  - >> addCommandListParams
  - >> MQTTPublish
  - >> USART2_IRQHandler
  - >> main
  - >> http_load_config
  - >> realloc
  [Address Reference Count : 1]
  - cjson.o(.data)

  __mathlib_dbl_divzero (Thumb, 12 bytes, Stack size 0 bytes, dunder.o(i.__mathlib_dbl_divzero))
  [Stack]

  - Max Depth = 40
  - Call Chain = __mathlib_dbl_divzero ⇒ __aeabi_ddiv ⇒ _double_round
  [Calls]
  - >> __aeabi_ddiv
  [Called By]
  - >> pow

  __mathlib_dbl_infnan2 (Thumb, 4 bytes, Stack size 0 bytes, dunder.o(i.__mathlib_dbl_infnan2))
  [Stack]

  - Max Depth = 88
  - Call Chain = __mathlib_dbl_infnan2 ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_dadd
  [Called By]
  - >> pow

  __mathlib_dbl_invalid (Thumb, 12 bytes, Stack size 0 bytes, dunder.o(i.__mathlib_dbl_invalid))
  [Stack]

  - Max Depth = 40
  - Call Chain = __mathlib_dbl_invalid ⇒ __aeabi_ddiv ⇒ _double_round
  [Calls]
  - >> __aeabi_ddiv
  [Called By]
  - >> pow

  __mathlib_dbl_overflow (Thumb, 14 bytes, Stack size 0 bytes, dunder.o(i.__mathlib_dbl_overflow))
  [Stack]

  - Max Depth = 16
  - Call Chain = __mathlib_dbl_overflow ⇒ __ARM_scalbn
  [Calls]
  - >> __ARM_scalbn
  [Called By]
  - >> pow

  __mathlib_dbl_underflow (Thumb, 10 bytes, Stack size 0 bytes, dunder.o(i.__mathlib_dbl_underflow))
  [Stack]

  - Max Depth = 16
  - Call Chain = __mathlib_dbl_underflow ⇒ __ARM_scalbn
  [Calls]
  - >> __ARM_scalbn
  [Called By]
  - >> pow

  __scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)

  __scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)

  __scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)

  __set_errno (Thumb, 6 bytes, Stack size 0 bytes, errno.o(i.__set_errno))
  [Called By]

  - >> pow
  - >> sqrt

  _crc (Thumb, 26 bytes, Stack size 8 bytes, dlt645_data.o(i._crc))
  [Stack]

  - Max Depth = 8
  - Call Chain = _crc
  [Called By]
  - >> dlt645_common_check
  - >> dlt645_send_msg

  _is_digit (Thumb, 14 bytes, Stack size 0 bytes, scanf_fp.o(i._is_digit), UNUSED)
  [Called By]

  - >> _scanf_really_real

  addCommandListParams (Thumb, 96 bytes, Stack size 16 bytes, device_message.o(i.addCommandListParams))
  [Stack]

  - Max Depth = 304
  - Call Chain = addCommandListParams ⇒ parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> parseStringField
  - >> parseIntField
  - >> malloc
  [Called By]
  - >> addDevice

  addDevice (Thumb, 216 bytes, Stack size 16 bytes, device_message.o(i.addDevice))
  [Stack]

  - Max Depth = 336
  - Call Chain = addDevice ⇒ addSensorListParams ⇒ parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> parseStringField
  - >> parseIntField
  - >> addSensorListParams
  - >> addCommandListParams
  - >> malloc
  - >> strstr
  [Called By]
  - >> addGatewayParams

  addGatewayParams (Thumb, 210 bytes, Stack size 16 bytes, device_message.o(i.addGatewayParams))
  [Stack]

  - Max Depth = 352
  - Call Chain = addGatewayParams ⇒ addDevice ⇒ addSensorListParams ⇒ parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> parseStringField
  - >> parseIntField
  - >> addDevice
  - >> strstr
  [Called By]
  - >> WaitForUpData

  addSensorListParams (Thumb, 256 bytes, Stack size 32 bytes, device_message.o(i.addSensorListParams))
  [Stack]

  - Max Depth = 320
  - Call Chain = addSensorListParams ⇒ parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> parseStringField
  - >> parseIntField
  - >> __0sscanf
  - >> malloc
  - >> free
  [Called By]
  - >> addDevice

  cJSON_Delete (Thumb, 84 bytes, Stack size 16 bytes, cjson.o(i.cJSON_Delete))
  [Stack]

  - Max Depth = 16 + In Cycle
  - Call Chain = cJSON_Delete ⇒ cJSON_Delete (Cycle)
  [Calls]
  - >> cJSON_Delete
  [Called By]
  - >> cJSON_Delete
  - >> parseMQTTData
  - >> cJSON_ParseWithLengthOpts
  - >> parse_object
  - >> parse_array

  cJSON_GetObjectItemCaseSensitive (Thumb, 18 bytes, Stack size 16 bytes, cjson.o(i.cJSON_GetObjectItemCaseSensitive))
  [Stack]

  - Max Depth = 56
  - Call Chain = cJSON_GetObjectItemCaseSensitive ⇒ get_object_item ⇒ case_insensitive_strcmp
  [Calls]
  - >> get_object_item
  [Called By]
  - >> processStringData
  - >> processIntData

  cJSON_IsNumber (Thumb, 22 bytes, Stack size 0 bytes, cjson.o(i.cJSON_IsNumber))
  [Called By]

  - >> processIntData

  cJSON_IsString (Thumb, 22 bytes, Stack size 0 bytes, cjson.o(i.cJSON_IsString))
  [Called By]

  - >> processStringData

  cJSON_Parse (Thumb, 16 bytes, Stack size 8 bytes, cjson.o(i.cJSON_Parse))
  [Stack]

  - Max Depth = 432
  - Call Chain = cJSON_Parse ⇒ cJSON_ParseWithOpts ⇒ cJSON_ParseWithLengthOpts ⇒ parse_value ⇒ parse_number ⇒ strtod ⇒ __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> cJSON_ParseWithOpts
  [Called By]
  - >> parseMQTTData

  cJSON_ParseWithLengthOpts (Thumb, 204 bytes, Stack size 72 bytes, cjson.o(i.cJSON_ParseWithLengthOpts))
  [Stack]

  - Max Depth = 400
  - Call Chain = cJSON_ParseWithLengthOpts ⇒ parse_value ⇒ parse_number ⇒ strtod ⇒ __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> cJSON_Delete
  - >> skip_utf8_bom
  - >> parse_value
  - >> cJSON_New_Item
  - >> buffer_skip_whitespace
  - >> __aeabi_memclr4
  [Called By]
  - >> cJSON_ParseWithOpts

  cJSON_ParseWithOpts (Thumb, 40 bytes, Stack size 24 bytes, cjson.o(i.cJSON_ParseWithOpts))
  [Stack]

  - Max Depth = 424
  - Call Chain = cJSON_ParseWithOpts ⇒ cJSON_ParseWithLengthOpts ⇒ parse_value ⇒ parse_number ⇒ strtod ⇒ __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> cJSON_ParseWithLengthOpts
  - >> strlen
  [Called By]
  - >> cJSON_Parse

  check_ota_event (Thumb, 72 bytes, Stack size 8 bytes, otaevent.o(i.check_ota_event))
  [Stack]

  - Max Depth = 80
  - Call Chain = check_ota_event ⇒ xmodem ⇒ W25Q32_PageWrite ⇒ W25Q32_Enable ⇒ W25Q32_WaitBusy ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> W25Q32_Erase64K
  - >> xmodem
  [Called By]
  - >> main
  - >> MQTT_Alarm_clock

  config_485_port (Thumb, 240 bytes, Stack size 32 bytes, usart.o(i.config_485_port))
  [Stack]

  - Max Depth = 144
  - Call Chain = config_485_port ⇒ usart_baudrate_set ⇒ rcu_clock_freq_get
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> usart_word_length_set
  - >> usart_transmit_config
  - >> usart_stop_bit_set
  - >> usart_receive_config
  - >> usart_parity_config
  - >> usart_interrupt_enable
  - >> usart_hardware_flow_rts_config
  - >> usart_hardware_flow_cts_config
  - >> usart_flag_clear
  - >> usart_enable
  - >> usart_baudrate_set
  [Called By]
  - >> main

  data_package_translate_to_int (Thumb, 254 bytes, Stack size 80 bytes, dlt645_data.o(i.data_package_translate_to_int))
  [Stack]

  - Max Depth = 320
  - Call Chain = data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_ui2d
  - >> pow
  - >> __aeabi_dadd
  - >> __aeabi_i2d
  - >> __aeabi_dmul
  - >> __aeabi_d2iz
  [Called By]
  - >> dlt645_data_parse_by_format_to_float

  delay_1ms (Thumb, 16 bytes, Stack size 0 bytes, systick.o(i.delay_1ms))
  [Called By]

  - >> Read_Data
  - >> WaitResponse
  - >> MQTTPublish
  - >> EC800MSetPDP
  - >> EC800MPwoerOn
  - >> EC800MGetUrl
  - >> xmodem
  - >> http_load_config
  - >> MQTT_Alarm_clock
  - >> mmodbus_sendRaw
  - >> mmodbus_receiveRaw
  - >> EXTI1_IRQHandler

  delay_decrement (Thumb, 18 bytes, Stack size 0 bytes, systick.o(i.delay_decrement))
  [Called By]

  - >> SysTick_Handler

  dlt645_1997_read_data (Thumb, 152 bytes, Stack size 104 bytes, dlt645_1997.o(i.dlt645_1997_read_data))
  [Stack]

  - Max Depth = 520
  - Call Chain = dlt645_1997_read_data ⇒ dlt645_1997_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> dlt645_1997_parsing_data
  - >> dlt645_send_msg
  - >> dlt645_receive_msg
  - >> __aeabi_memclr4
  [Called By]
  - >> dlt645_read_data

  dlt645_1997_recv_check (Thumb, 82 bytes, Stack size 40 bytes, dlt645_1997.o(i.dlt645_1997_recv_check))
  [Stack]

  - Max Depth = 76
  - Call Chain = dlt645_1997_recv_check ⇒ dlt645_common_check ⇒ memcmp
  [Calls]
  - >> dlt645_common_check
  [Called By]
  - >> dlt645_receive_msg

  dlt645_2007_parsing_data (Thumb, 888 bytes, Stack size 24 bytes, dlt645_2007.o(i.dlt645_2007_parsing_data))
  [Stack]

  - Max Depth = 416
  - Call Chain = dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> dlt645_data_parse_by_format_to_float
  [Called By]
  - >> dlt645_2007_read_data

  dlt645_2007_read_data (Thumb, 174 bytes, Stack size 104 bytes, dlt645_2007.o(i.dlt645_2007_read_data))
  [Stack]

  - Max Depth = 520
  - Call Chain = dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> dlt645_2007_parsing_data
  - >> dlt645_send_msg
  - >> dlt645_receive_msg
  - >> __aeabi_memclr4
  [Called By]
  - >> dlt645_read_data

  dlt645_2007_recv_check (Thumb, 84 bytes, Stack size 40 bytes, dlt645_2007.o(i.dlt645_2007_recv_check))
  [Stack]

  - Max Depth = 76
  - Call Chain = dlt645_2007_recv_check ⇒ dlt645_common_check ⇒ memcmp
  [Calls]
  - >> dlt645_common_check
  [Called By]
  - >> dlt645_receive_msg

  dlt645_common_check (Thumb, 124 bytes, Stack size 24 bytes, dlt645_data.o(i.dlt645_common_check))
  [Stack]

  - Max Depth = 36
  - Call Chain = dlt645_common_check ⇒ memcmp
  [Calls]
  - >> _crc
  - >> memcmp
  [Called By]
  - >> dlt645_2007_recv_check
  - >> dlt645_1997_recv_check

  dlt645_data_parse_by_format_to_float (Thumb, 136 bytes, Stack size 72 bytes, dlt645_data.o(i.dlt645_data_parse_by_format_to_float))
  [Stack]

  - Max Depth = 392
  - Call Chain = dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_ddiv
  - >> __aeabi_d2f
  - >> pow
  - >> data_package_translate_to_int
  - >> __aeabi_i2d
  - >> strlen
  [Called By]
  - >> dlt645_1997_parsing_data
  - >> dlt645_2007_parsing_data

  dlt645_init (Thumb, 30 bytes, Stack size 8 bytes, dlt645_port.o(i.dlt645_init))
  [Stack]

  - Max Depth = 8
  - Call Chain = dlt645_init
  [Calls]
  - >> gpio_bit_set
  [Called By]
  - >> main

  dlt645_read_data (Thumb, 62 bytes, Stack size 24 bytes, dlt645.o(i.dlt645_read_data))
  [Stack]

  - Max Depth = 544
  - Call Chain = dlt645_read_data ⇒ dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> dlt645_2007_read_data
  - >> dlt645_1997_read_data
  [Called By]
  - >> parseMQTTData
  - >> Read_Data

  dlt645_receive_msg (Thumb, 70 bytes, Stack size 32 bytes, dlt645.o(i.dlt645_receive_msg))
  [Stack]

  - Max Depth = 108
  - Call Chain = dlt645_receive_msg ⇒ dlt645_2007_recv_check ⇒ dlt645_common_check ⇒ memcmp
  [Calls]
  - >> dlt645_2007_recv_check
  - >> dlt645_1997_recv_check
  [Called By]
  - >> dlt645_2007_read_data
  - >> dlt645_1997_read_data

  dlt645_send_msg (Thumb, 46 bytes, Stack size 16 bytes, dlt645.o(i.dlt645_send_msg))
  [Stack]

  - Max Depth = 24
  - Call Chain = dlt645_send_msg ⇒ _crc
  [Calls]
  - >> _crc
  [Called By]
  - >> dlt645_2007_read_data
  - >> dlt645_1997_read_data

  dlt645_set_addr (Thumb, 42 bytes, Stack size 20 bytes, dlt645.o(i.dlt645_set_addr))
  [Stack]

  - Max Depth = 20
  - Call Chain = dlt645_set_addr
  [Called By]
  - >> parseMQTTData
  - >> Read_Data

  dlt_callback (Thumb, 118 bytes, Stack size 8 bytes, dlt645_port.o(i.dlt_callback))
  [Stack]

  - Max Depth = 24
  - Call Chain = dlt_callback ⇒ usart_interrupt_flag_get
  [Calls]
  - >> usart_interrupt_flag_get
  - >> usart_interrupt_flag_clear
  - >> usart_data_receive
  [Called By]
  - >> USART1_IRQHandler

  dma_channel_disable (Thumb, 50 bytes, Stack size 16 bytes, gd32f10x_dma.o(i.dma_channel_disable))
  [Stack]

  - Max Depth = 16
  - Call Chain = dma_channel_disable
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> USART0_IRQHandler

  dma_channel_enable (Thumb, 50 bytes, Stack size 16 bytes, gd32f10x_dma.o(i.dma_channel_enable))
  [Stack]

  - Max Depth = 16
  - Call Chain = dma_channel_enable
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> dma_config_change
  - >> USART0_IRQHandler
  - >> dma_config

  dma_circulation_disable (Thumb, 50 bytes, Stack size 16 bytes, gd32f10x_dma.o(i.dma_circulation_disable))
  [Stack]

  - Max Depth = 16
  - Call Chain = dma_circulation_disable
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> dma_config_change
  - >> dma_config

  dma_config (Thumb, 122 bytes, Stack size 32 bytes, usart.o(i.dma_config))
  [Stack]

  - Max Depth = 56
  - Call Chain = dma_config ⇒ dma_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> dma_channel_enable
  - >> dma_memory_to_memory_disable
  - >> dma_interrupt_enable
  - >> dma_init
  - >> dma_deinit
  - >> dma_circulation_disable
  - >> usart_dma_transmit_config
  [Called By]
  - >> main
  - >> http_load_config

  dma_config_change (Thumb, 120 bytes, Stack size 40 bytes, usart.o(i.dma_config_change))
  [Stack]

  - Max Depth = 64
  - Call Chain = dma_config_change ⇒ dma_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> dma_channel_enable
  - >> dma_memory_to_memory_disable
  - >> dma_interrupt_enable
  - >> dma_init
  - >> dma_deinit
  - >> dma_circulation_disable
  - >> usart_dma_transmit_config
  [Called By]
  - >> EC800MGetUrl
  - >> http_load_config

  dma_deinit (Thumb, 112 bytes, Stack size 16 bytes, gd32f10x_dma.o(i.dma_deinit))
  [Stack]

  - Max Depth = 16
  - Call Chain = dma_deinit
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> dma_config_change
  - >> dma_config

  dma_init (Thumb, 302 bytes, Stack size 24 bytes, gd32f10x_dma.o(i.dma_init))
  [Stack]

  - Max Depth = 24
  - Call Chain = dma_init
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> dma_config_change
  - >> dma_config

  dma_interrupt_enable (Thumb, 50 bytes, Stack size 16 bytes, gd32f10x_dma.o(i.dma_interrupt_enable))
  [Stack]

  - Max Depth = 16
  - Call Chain = dma_interrupt_enable
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> dma_config_change
  - >> dma_config

  dma_interrupt_flag_clear (Thumb, 16 bytes, Stack size 8 bytes, gd32f10x_dma.o(i.dma_interrupt_flag_clear))
  [Stack]

  - Max Depth = 8
  - Call Chain = dma_interrupt_flag_clear
  [Called By]
  - >> DMA0_Channel4_IRQHandler

  dma_memory_to_memory_disable (Thumb, 50 bytes, Stack size 16 bytes, gd32f10x_dma.o(i.dma_memory_to_memory_disable))
  [Stack]

  - Max Depth = 16
  - Call Chain = dma_memory_to_memory_disable
  [Calls]
  - >> dma_periph_and_channel_check
  [Called By]
  - >> dma_config_change
  - >> dma_config

  exti_init (Thumb, 184 bytes, Stack size 8 bytes, gd32f10x_exti.o(i.exti_init))
  [Stack]

  - Max Depth = 8
  - Call Chain = exti_init
  [Called By]
  - >> gd_eval_key_init

  exti_interrupt_flag_clear (Thumb, 6 bytes, Stack size 0 bytes, gd32f10x_exti.o(i.exti_interrupt_flag_clear))
  [Called By]

  - >> gd_eval_key_init
  - >> EXTI1_IRQHandler

  exti_interrupt_flag_get (Thumb, 18 bytes, Stack size 0 bytes, gd32f10x_exti.o(i.exti_interrupt_flag_get))
  [Called By]

  - >> EXTI1_IRQHandler

  fputc (Thumb, 32 bytes, Stack size 16 bytes, log.o(i.fputc))
  [Stack]

  - Max Depth = 24
  - Call Chain = fputc ⇒ usart_flag_get
  [Calls]
  - >> usart_flag_get
  - >> usart_data_transmit
  [Address Reference Count : 1]
  - printfa.o(i.__0printf)

  fwdgt_counter_reload (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_fwdgt.o(i.fwdgt_counter_reload))
  [Called By]

  - >> task_fwdgt_reload

  fwdgt_write_enable (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_fwdgt.o(i.fwdgt_write_enable))
  [Called By]

  - >> task_fwdgt_reload

  gd_485_DE_pin_init (Thumb, 36 bytes, Stack size 8 bytes, usart.o(i.gd_485_DE_pin_init))
  [Stack]

  - Max Depth = 28
  - Call Chain = gd_485_DE_pin_init ⇒ gpio_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  [Called By]
  - >> main

  gd_485_DE_tx (Thumb, 10 bytes, Stack size 0 bytes, usart.o(i.gd_485_DE_tx))
  [Called By]

  - >> main

  gd_EC800M_pin_init (Thumb, 62 bytes, Stack size 8 bytes, usart.o(i.gd_EC800M_pin_init))
  [Stack]

  - Max Depth = 28
  - Call Chain = gd_EC800M_pin_init ⇒ gpio_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  [Called By]
  - >> main

  gd_com_init (Thumb, 210 bytes, Stack size 16 bytes, usart.o(i.gd_com_init))
  [Stack]

  - Max Depth = 128
  - Call Chain = gd_com_init ⇒ usart_baudrate_set ⇒ rcu_clock_freq_get
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> gpio_pin_remap_config
  - >> usart_word_length_set
  - >> usart_transmit_config
  - >> usart_stop_bit_set
  - >> usart_receive_config
  - >> usart_parity_config
  - >> usart_interrupt_enable
  - >> usart_hardware_flow_rts_config
  - >> usart_hardware_flow_cts_config
  - >> usart_enable
  - >> usart_deinit
  - >> usart_baudrate_set
  [Called By]
  - >> main

  gd_eval_key_init (Thumb, 98 bytes, Stack size 16 bytes, key.o(i.gd_eval_key_init))
  [Stack]

  - Max Depth = 40
  - Call Chain = gd_eval_key_init ⇒ nvic_irq_enable
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> exti_interrupt_flag_clear
  - >> exti_init
  - >> nvic_irq_enable
  - >> gpio_exti_source_select
  [Called By]
  - >> main

  gd_eval_led_init (Thumb, 60 bytes, Stack size 8 bytes, led.o(i.gd_eval_led_init))
  [Stack]

  - Max Depth = 28
  - Call Chain = gd_eval_led_init ⇒ gpio_init
  [Calls]
  - >> rcu_periph_clock_enable
  - >> gpio_init
  - >> gpio_bit_set
  [Called By]
  - >> main

  gd_eval_led_toggle (Thumb, 46 bytes, Stack size 16 bytes, led.o(i.gd_eval_led_toggle))
  [Stack]

  - Max Depth = 16
  - Call Chain = gd_eval_led_toggle
  [Calls]
  - >> gpio_input_bit_get
  - >> gpio_bit_write
  [Called By]
  - >> MQTT_Alarm_clock

  gd_pull_EC800M_pwr_down (Thumb, 8 bytes, Stack size 0 bytes, usart.o(i.gd_pull_EC800M_pwr_down))
  [Called By]

  - >> EC800MPwoerOn

  gd_pull_EC800M_pwr_up (Thumb, 8 bytes, Stack size 0 bytes, usart.o(i.gd_pull_EC800M_pwr_up))
  [Called By]

  - >> EC800MPwoerOn

  gd_pull_EC800M_rst_down (Thumb, 10 bytes, Stack size 0 bytes, usart.o(i.gd_pull_EC800M_rst_down))
  [Called By]

  - >> EC800MPwoerOn

  gd_pull_EC800M_rst_up (Thumb, 10 bytes, Stack size 0 bytes, usart.o(i.gd_pull_EC800M_rst_up))
  [Called By]

  - >> EC800MPwoerOn

  get_gateway_config_params (Thumb, 4 bytes, Stack size 0 bytes, device_message.o(i.get_gateway_config_params))
  [Called By]

  - >> Read_Data
  - >> MQTTPublish
  - >> main

  gettick (Thumb, 6 bytes, Stack size 0 bytes, systick.o(i.gettick))
  [Called By]

  - >> mmodbus_callback
  - >> xmodem
  - >> mmodbus_sendRaw
  - >> mmodbus_receiveRaw
  - >> dlt645_hw_read

  gpio_bit_reset (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_bit_reset))
  [Called By]

  - >> W25Q32_PageWrite
  - >> W25Q32_Erase64K
  - >> mmodbus_sendRaw
  - >> mmodbus_init
  - >> W25Q32_WaitBusy
  - >> W25Q32_Enable
  - >> dlt645_hw_write

  gpio_bit_set (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_bit_set))
  [Called By]

  - >> EC800MPwoerOn
  - >> W25Q32_PageWrite
  - >> W25Q32_Erase64K
  - >> gd_eval_led_init
  - >> dlt645_init
  - >> W25Q32_Init
  - >> mmodbus_sendRaw
  - >> W25Q32_WaitBusy
  - >> W25Q32_Enable
  - >> dlt645_hw_write

  gpio_bit_write (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_bit_write))
  [Called By]

  - >> gd_eval_led_toggle

  gpio_exti_source_select (Thumb, 146 bytes, Stack size 8 bytes, gd32f10x_gpio.o(i.gpio_exti_source_select))
  [Stack]

  - Max Depth = 8
  - Call Chain = gpio_exti_source_select
  [Called By]
  - >> gd_eval_key_init

  gpio_init (Thumb, 172 bytes, Stack size 20 bytes, gd32f10x_gpio.o(i.gpio_init))
  [Stack]

  - Max Depth = 20
  - Call Chain = gpio_init
  [Called By]
  - >> EC800MPwoerOn
  - >> gd_eval_led_init
  - >> gd_eval_key_init
  - >> gd_com_init
  - >> gd_EC800M_pin_init
  - >> gd_485_DE_pin_init
  - >> config_485_port
  - >> W25Q32_Init
  - >> SPI0_Init

  gpio_input_bit_get (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_input_bit_get))
  [Called By]

  - >> gd_eval_led_toggle
  - >> EXTI1_IRQHandler

  gpio_pin_remap_config (Thumb, 138 bytes, Stack size 20 bytes, gd32f10x_gpio.o(i.gpio_pin_remap_config))
  [Stack]

  - Max Depth = 20
  - Call Chain = gpio_pin_remap_config
  [Called By]
  - >> gd_com_init

  http_load_config (Thumb, 92 bytes, Stack size 16 bytes, main.o(i.http_load_config))
  [Stack]

  - Max Depth = 392
  - Call Chain = http_load_config ⇒ WaitForUpData ⇒ addGatewayParams ⇒ addDevice ⇒ addSensorListParams ⇒ parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> WaitForUpData
  - >> dma_config_change
  - >> EC800MSendCmd
  - >> EC800MGetUrl
  - >> delay_1ms
  - >> dma_config
  - >> malloc
  - >> free
  [Called By]
  - >> main

  main (Thumb, 286 bytes, Stack size 8 bytes, main.o(i.main))
  [Stack]

  - Max Depth = 1280
  - Call Chain = main ⇒ MQTT_Alarm_clock ⇒ parseMQTTData ⇒ dlt645_read_data ⇒ dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> get_gateway_config_params
  - >> MQTTSubTopic
  - >> EC800MWaitReady
  - >> EC800MSetPDP
  - >> EC800MPwoerOn
  - >> ConnectMQTTSever
  - >> systick_config
  - >> ring_buffer_init
  - >> rcu_osci_on
  - >> nvic_config
  - >> gd_eval_led_init
  - >> gd_eval_key_init
  - >> gd_com_init
  - >> gd_EC800M_pin_init
  - >> gd_485_DE_tx
  - >> gd_485_DE_pin_init
  - >> dma_config
  - >> dlt645_init
  - >> config_485_port
  - >> check_ota_event
  - >> W25Q32_Init
  - >> readID
  - >> http_load_config
  - >> MQTT_Alarm_clock
  - >> mmodbus_init
  - >> malloc
  - >> free
  - >> __2sprintf
  - >> strcpy
  - >> __aeabi_memclr
  [Address Reference Count : 1]
  - entry9a.o(.ARM.Collect$$$$0000000B)

  mmodbus_callback (Thumb, 108 bytes, Stack size 8 bytes, mmodbus.o(i.mmodbus_callback))
  [Stack]

  - Max Depth = 24
  - Call Chain = mmodbus_callback ⇒ usart_interrupt_flag_get
  [Calls]
  - >> gettick
  - >> usart_interrupt_flag_get
  - >> usart_interrupt_flag_clear
  - >> usart_data_receive
  [Called By]
  - >> USART1_IRQHandler

  mmodbus_crc16 (Thumb, 42 bytes, Stack size 12 bytes, mmodbus.o(i.mmodbus_crc16))
  [Stack]

  - Max Depth = 12
  - Call Chain = mmodbus_crc16
  [Called By]
  - >> mmodbus_writeHoldingRegister16i
  - >> mmodbus_writeCoil
  - >> mmodbus_readCoils
  - >> mmodbus_readHoldingRegisters8i

  mmodbus_init (Thumb, 30 bytes, Stack size 8 bytes, mmodbus.o(i.mmodbus_init))
  [Stack]

  - Max Depth = 8
  - Call Chain = mmodbus_init
  [Calls]
  - >> gpio_bit_reset
  - >> __aeabi_memclr4
  [Called By]
  - >> main

  mmodbus_readCoils (Thumb, 210 bytes, Stack size 32 bytes, mmodbus.o(i.mmodbus_readCoils))
  [Stack]

  - Max Depth = 64
  - Call Chain = mmodbus_readCoils ⇒ mmodbus_sendRaw ⇒ usart_flag_get
  [Calls]
  - >> mmodbus_sendRaw
  - >> mmodbus_receiveRaw
  - >> mmodbus_crc16
  - >> __aeabi_memcpy
  [Called By]
  - >> parseMQTTData
  - >> Read_Data

  mmodbus_readHoldingRegisters16i (Thumb, 138 bytes, Stack size 32 bytes, mmodbus.o(i.mmodbus_readHoldingRegisters16i))
  [Stack]

  - Max Depth = 96
  - Call Chain = mmodbus_readHoldingRegisters16i ⇒ mmodbus_readHoldingRegisters8i ⇒ mmodbus_sendRaw ⇒ usart_flag_get
  [Calls]
  - >> mmodbus_readHoldingRegisters8i
  [Called By]
  - >> Read_Data

  mmodbus_readHoldingRegisters8i (Thumb, 256 bytes, Stack size 32 bytes, mmodbus.o(i.mmodbus_readHoldingRegisters8i))
  [Stack]

  - Max Depth = 64
  - Call Chain = mmodbus_readHoldingRegisters8i ⇒ mmodbus_sendRaw ⇒ usart_flag_get
  [Calls]
  - >> mmodbus_sendRaw
  - >> mmodbus_receiveRaw
  - >> mmodbus_crc16
  - >> __aeabi_memcpy
  [Called By]
  - >> mmodbus_readHoldingRegisters16i

  mmodbus_receiveRaw (Thumb, 90 bytes, Stack size 16 bytes, mmodbus.o(i.mmodbus_receiveRaw))
  [Stack]

  - Max Depth = 32
  - Call Chain = mmodbus_receiveRaw ⇒ usart_interrupt_flag_get
  [Calls]
  - >> gettick
  - >> delay_1ms
  - >> usart_interrupt_flag_get
  - >> usart_data_receive
  [Called By]
  - >> mmodbus_writeHoldingRegister16i
  - >> mmodbus_writeCoil
  - >> mmodbus_readCoils
  - >> mmodbus_readHoldingRegisters8i

  mmodbus_sendRaw (Thumb, 236 bytes, Stack size 24 bytes, mmodbus.o(i.mmodbus_sendRaw))
  [Stack]

  - Max Depth = 32
  - Call Chain = mmodbus_sendRaw ⇒ usart_flag_get
  [Calls]
  - >> gpio_bit_set
  - >> usart_flag_get
  - >> usart_data_transmit
  - >> gettick
  - >> delay_1ms
  - >> gpio_bit_reset
  - >> __aeabi_memclr
  [Called By]
  - >> mmodbus_writeHoldingRegister16i
  - >> mmodbus_writeCoil
  - >> mmodbus_readCoils
  - >> mmodbus_readHoldingRegisters8i

  mmodbus_set16bitOrder (Thumb, 8 bytes, Stack size 0 bytes, mmodbus.o(i.mmodbus_set16bitOrder))
  [Called By]

  - >> parseMQTTData
  - >> Read_Data

  mmodbus_writeCoil (Thumb, 134 bytes, Stack size 32 bytes, mmodbus.o(i.mmodbus_writeCoil))
  [Stack]

  - Max Depth = 64
  - Call Chain = mmodbus_writeCoil ⇒ mmodbus_sendRaw ⇒ usart_flag_get
  [Calls]
  - >> mmodbus_sendRaw
  - >> mmodbus_receiveRaw
  - >> mmodbus_crc16
  - >> memcmp
  [Called By]
  - >> parseMQTTData

  mmodbus_writeHoldingRegister16i (Thumb, 124 bytes, Stack size 32 bytes, mmodbus.o(i.mmodbus_writeHoldingRegister16i))
  [Stack]

  - Max Depth = 64
  - Call Chain = mmodbus_writeHoldingRegister16i ⇒ mmodbus_sendRaw ⇒ usart_flag_get
  [Calls]
  - >> mmodbus_sendRaw
  - >> mmodbus_receiveRaw
  - >> mmodbus_crc16
  - >> memcmp
  [Called By]
  - >> parseMQTTData

  nvic_config (Thumb, 52 bytes, Stack size 8 bytes, usart.o(i.nvic_config))
  [Stack]

  - Max Depth = 32
  - Call Chain = nvic_config ⇒ nvic_irq_enable
  [Calls]
  - >> nvic_priority_group_set
  - >> nvic_irq_enable
  [Called By]
  - >> main

  nvic_irq_enable (Thumb, 162 bytes, Stack size 24 bytes, gd32f10x_misc.o(i.nvic_irq_enable))
  [Stack]

  - Max Depth = 24
  - Call Chain = nvic_irq_enable
  [Calls]
  - >> nvic_priority_group_set
  [Called By]
  - >> nvic_config
  - >> gd_eval_key_init

  nvic_priority_group_set (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_misc.o(i.nvic_priority_group_set))
  [Called By]

  - >> nvic_config
  - >> nvic_irq_enable

  nvic_vector_table_set (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_misc.o(i.nvic_vector_table_set))
  [Called By]

  - >> SystemInit

  parseIntField (Thumb, 42 bytes, Stack size 24 bytes, device_message.o(i.parseIntField))
  [Stack]

  - Max Depth = 96
  - Call Chain = parseIntField ⇒ strtol ⇒ _strtoul
  [Calls]
  - >> strtol
  - >> strlen
  - >> strstr
  [Called By]
  - >> addSensorListParams
  - >> addGatewayParams
  - >> addDevice
  - >> addCommandListParams

  parseMQTTData (Thumb, 1168 bytes, Stack size 712 bytes, parsedevicemessage.o(i.parseMQTTData))
  [Stack]

  - Max Depth = 1256
  - Call Chain = parseMQTTData ⇒ dlt645_read_data ⇒ dlt645_2007_read_data ⇒ dlt645_2007_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> mmodbus_writeHoldingRegister16i
  - >> mmodbus_writeCoil
  - >> mmodbus_set16bitOrder
  - >> mmodbus_readCoils
  - >> dlt645_set_addr
  - >> dlt645_read_data
  - >> cJSON_Parse
  - >> cJSON_Delete
  - >> MQTT_BUFFER_READ
  - >> processStringData
  - >> processIntData
  - >> __aeabi_f2d
  - >> WaitResponse
  - >> EC800MSendCmd
  - >> LogPrint
  - >> __2sprintf
  - >> strcpy
  - >> strcmp
  - >> strlen
  - >> __aeabi_memclr4
  [Called By]
  - >> MQTT_Alarm_clock

  parseStringField (Thumb, 44 bytes, Stack size 24 bytes, device_message.o(i.parseStringField))
  [Stack]

  - Max Depth = 288
  - Call Chain = parseStringField ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> __0sscanf
  - >> strlen
  - >> strstr
  [Called By]
  - >> addSensorListParams
  - >> addGatewayParams
  - >> addDevice
  - >> addCommandListParams

  pow (Thumb, 2512 bytes, Stack size 128 bytes, pow.o(i.pow))
  [Stack]

  - Max Depth = 240
  - Call Chain = pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> __aeabi_ddiv
  - >> __aeabi_drsub
  - >> __ARM_scalbn
  - >> __aeabi_dadd
  - >> __aeabi_i2d
  - >> __aeabi_dsub
  - >> __aeabi_dmul
  - >> __aeabi_cdrcmple
  - >> sqrt
  - >> __kernel_poly
  - >> __ARM_fpclassify
  - >> __mathlib_dbl_underflow
  - >> __mathlib_dbl_overflow
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan2
  - >> __mathlib_dbl_divzero
  - >> __set_errno
  [Called By]
  - >> Read_Data
  - >> data_package_translate_to_int
  - >> dlt645_data_parse_by_format_to_float

  processIntData (Thumb, 34 bytes, Stack size 16 bytes, parsedevicemessage.o(i.processIntData))
  [Stack]

  - Max Depth = 72
  - Call Chain = processIntData ⇒ cJSON_GetObjectItemCaseSensitive ⇒ get_object_item ⇒ case_insensitive_strcmp
  [Calls]
  - >> cJSON_IsNumber
  - >> cJSON_GetObjectItemCaseSensitive
  [Called By]
  - >> parseMQTTData

  processStringData (Thumb, 36 bytes, Stack size 16 bytes, parsedevicemessage.o(i.processStringData))
  [Stack]

  - Max Depth = 72
  - Call Chain = processStringData ⇒ cJSON_GetObjectItemCaseSensitive ⇒ get_object_item ⇒ case_insensitive_strcmp
  [Calls]
  - >> cJSON_IsString
  - >> cJSON_GetObjectItemCaseSensitive
  [Called By]
  - >> parseMQTTData

  rcu_clock_freq_get (Thumb, 264 bytes, Stack size 80 bytes, gd32f10x_rcu.o(i.rcu_clock_freq_get))
  [Stack]

  - Max Depth = 80
  - Call Chain = rcu_clock_freq_get
  [Called By]
  - >> usart_baudrate_set

  rcu_osci_on (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_osci_on))
  [Called By]

  - >> main

  rcu_periph_clock_enable (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_clock_enable))
  [Called By]

  - >> dma_config_change
  - >> EC800MPwoerOn
  - >> gd_eval_led_init
  - >> gd_eval_key_init
  - >> gd_com_init
  - >> gd_EC800M_pin_init
  - >> gd_485_DE_pin_init
  - >> dma_config
  - >> config_485_port
  - >> W25Q32_Init
  - >> SPI0_Init

  rcu_periph_reset_disable (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_reset_disable))
  [Called By]

  - >> spi_i2s_deinit
  - >> usart_deinit

  rcu_periph_reset_enable (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_reset_enable))
  [Called By]

  - >> spi_i2s_deinit
  - >> usart_deinit

  readID (Thumb, 232 bytes, Stack size 52 bytes, main.o(i.readID))
  [Stack]

  - Max Depth = 52
  - Call Chain = readID
  [Called By]
  - >> main

  realloc (Thumb, 102 bytes, Stack size 32 bytes, mallocr.o(i.realloc))
  [Stack]

  - Max Depth = 88
  - Call Chain = realloc ⇒ malloc ⇒ internal_alloc
  [Calls]
  - >> malloc
  - >> free
  - >> internal_alloc
  [Address Reference Count : 1]
  - cjson.o(.data)

  ring_buffer_init (Thumb, 8 bytes, Stack size 0 bytes, ring_buffer.o(i.ring_buffer_init))
  [Called By]

  - >> main

  ring_buffer_read (Thumb, 40 bytes, Stack size 0 bytes, ring_buffer.o(i.ring_buffer_read))
  [Called By]

  - >> MQTT_BUFFER_READ

  ring_buffer_write (Thumb, 28 bytes, Stack size 8 bytes, ring_buffer.o(i.ring_buffer_write))
  [Stack]

  - Max Depth = 8
  - Call Chain = ring_buffer_write
  [Called By]
  - >> Receive_MQTT_DataPack

  runtime_increment (Thumb, 30 bytes, Stack size 0 bytes, systick.o(i.runtime_increment))
  [Called By]

  - >> SysTick_Handler

  spi_enable (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_enable))
  [Called By]

  - >> SPI0_Init

  spi_i2s_data_receive (Thumb, 8 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_i2s_data_receive))
  [Called By]

  - >> SPI0_ReadWriteByte

  spi_i2s_data_transmit (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_i2s_data_transmit))
  [Called By]

  - >> SPI0_ReadWriteByte

  spi_i2s_deinit (Thumb, 82 bytes, Stack size 8 bytes, gd32f10x_spi.o(i.spi_i2s_deinit))
  [Stack]

  - Max Depth = 8
  - Call Chain = spi_i2s_deinit
  [Calls]
  - >> rcu_periph_reset_enable
  - >> rcu_periph_reset_disable
  [Called By]
  - >> SPI0_Init

  spi_i2s_flag_get (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_i2s_flag_get))
  [Called By]

  - >> SPI0_ReadWriteByte

  spi_init (Thumb, 50 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_init))
  [Called By]

  - >> SPI0_Init

  sqrt (Thumb, 76 bytes, Stack size 24 bytes, sqrt.o(i.sqrt))
  [Stack]

  - Max Depth = 64
  - Call Chain = sqrt ⇒ _dsqrt ⇒ _double_round
  [Calls]
  - >> _dsqrt
  - >> __set_errno
  [Called By]
  - >> pow

  strtod (Thumb, 28 bytes, Stack size 16 bytes, strtod.o(i.strtod))
  [Stack]

  - Max Depth = 216
  - Call Chain = strtod ⇒ __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> __strtod_int
  [Called By]
  - >> parse_number

  systick_config (Thumb, 74 bytes, Stack size 8 bytes, systick.o(i.systick_config))
  [Stack]

  - Max Depth = 16
  - Call Chain = systick_config ⇒ NVIC_SetPriority
  [Calls]
  - >> NVIC_SetPriority
  [Called By]
  - >> main

  task_fwdgt_reload (Thumb, 12 bytes, Stack size 8 bytes, main.o(i.task_fwdgt_reload))
  [Stack]

  - Max Depth = 8
  - Call Chain = task_fwdgt_reload
  [Calls]
  - >> fwdgt_write_enable
  - >> fwdgt_counter_reload
  [Called By]
  - >> Read_Data
  - >> xmodem
  - >> MQTT_Alarm_clock

  usart_baudrate_set (Thumb, 136 bytes, Stack size 32 bytes, gd32f10x_usart.o(i.usart_baudrate_set))
  [Stack]

  - Max Depth = 112
  - Call Chain = usart_baudrate_set ⇒ rcu_clock_freq_get
  [Calls]
  - >> rcu_clock_freq_get
  [Called By]
  - >> gd_com_init
  - >> config_485_port

  usart_data_receive (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_data_receive))
  [Called By]

  - >> mmodbus_callback
  - >> dlt_callback
  - >> USART0_IRQHandler
  - >> USART2_IRQHandler
  - >> mmodbus_receiveRaw

  usart_data_transmit (Thumb, 8 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_data_transmit))
  [Called By]

  - >> EC800MSendCmd
  - >> fputc
  - >> xmodem
  - >> mmodbus_sendRaw
  - >> dlt645_hw_write

  usart_deinit (Thumb, 136 bytes, Stack size 8 bytes, gd32f10x_usart.o(i.usart_deinit))
  [Stack]

  - Max Depth = 8
  - Call Chain = usart_deinit
  [Calls]
  - >> rcu_periph_reset_enable
  - >> rcu_periph_reset_disable
  [Called By]
  - >> gd_com_init

  usart_dma_transmit_config (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_dma_transmit_config))
  [Called By]

  - >> dma_config_change
  - >> dma_config

  usart_enable (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_enable))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_flag_clear (Thumb, 26 bytes, Stack size 8 bytes, gd32f10x_usart.o(i.usart_flag_clear))
  [Stack]

  - Max Depth = 8
  - Call Chain = usart_flag_clear
  [Called By]
  - >> config_485_port

  usart_flag_get (Thumb, 30 bytes, Stack size 8 bytes, gd32f10x_usart.o(i.usart_flag_get))
  [Stack]

  - Max Depth = 8
  - Call Chain = usart_flag_get
  [Called By]
  - >> EC800MSendCmd
  - >> fputc
  - >> mmodbus_sendRaw
  - >> dlt645_hw_write

  usart_hardware_flow_cts_config (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_hardware_flow_cts_config))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_hardware_flow_rts_config (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_hardware_flow_rts_config))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_interrupt_enable (Thumb, 26 bytes, Stack size 8 bytes, gd32f10x_usart.o(i.usart_interrupt_enable))
  [Stack]

  - Max Depth = 8
  - Call Chain = usart_interrupt_enable
  [Called By]
  - >> gd_com_init
  - >> config_485_port

  usart_interrupt_flag_clear (Thumb, 26 bytes, Stack size 8 bytes, gd32f10x_usart.o(i.usart_interrupt_flag_clear))
  [Stack]

  - Max Depth = 8
  - Call Chain = usart_interrupt_flag_clear
  [Called By]
  - >> mmodbus_callback
  - >> dlt_callback
  - >> USART0_IRQHandler
  - >> USART2_IRQHandler

  usart_interrupt_flag_get (Thumb, 56 bytes, Stack size 16 bytes, gd32f10x_usart.o(i.usart_interrupt_flag_get))
  [Stack]

  - Max Depth = 16
  - Call Chain = usart_interrupt_flag_get
  [Called By]
  - >> mmodbus_callback
  - >> dlt_callback
  - >> USART0_IRQHandler
  - >> USART2_IRQHandler
  - >> mmodbus_receiveRaw

  usart_parity_config (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_parity_config))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_receive_config (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_receive_config))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_stop_bit_set (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_stop_bit_set))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_transmit_config (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_transmit_config))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  usart_word_length_set (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_usart.o(i.usart_word_length_set))
  [Called By]

  - >> gd_com_init
  - >> config_485_port

  xmodem (Thumb, 460 bytes, Stack size 32 bytes, otaevent.o(i.xmodem))
  [Stack]

  - Max Depth = 72
  - Call Chain = xmodem ⇒ W25Q32_PageWrite ⇒ W25Q32_Enable ⇒ W25Q32_WaitBusy ⇒ SPI0_ReadWriteByte
  [Calls]
  - >> task_fwdgt_reload
  - >> usart_data_transmit
  - >> gettick
  - >> delay_1ms
  - >> W25Q32_PageWrite
  - >> W25Q32_Erase64K
  - >> Xmodem_CRC16
  - >> __aeabi_memclr
  - >> __aeabi_memcpy
  [Called By]
  - >> check_ota_event

  ### Local Symbols

  system_clock_108m_hxtal (Thumb, 182 bytes, Stack size 0 bytes, system_gd32f10x.o(i.system_clock_108m_hxtal))
  [Called By]

  - >> system_clock_config

  system_clock_config (Thumb, 8 bytes, Stack size 8 bytes, system_gd32f10x.o(i.system_clock_config))
  [Stack]

  - Max Depth = 8
  - Call Chain = system_clock_config
  [Calls]
  - >> system_clock_108m_hxtal
  [Called By]
  - >> SystemInit

  NVIC_SetPriority (Thumb, 32 bytes, Stack size 8 bytes, systick.o(i.NVIC_SetPriority))
  [Stack]

  - Max Depth = 8
  - Call Chain = NVIC_SetPriority
  [Called By]
  - >> systick_config

  checksum (Thumb, 66 bytes, Stack size 16 bytes, parsedevicemessage.o(i.checksum))
  [Stack]

  - Max Depth = 16
  - Call Chain = checksum
  [Called By]
  - >> WaitForUpData

  extract_data_from_buffer (Thumb, 78 bytes, Stack size 32 bytes, parsedevicemessage.o(i.extract_data_from_buffer))
  [Stack]

  - Max Depth = 296
  - Call Chain = extract_data_from_buffer ⇒ __0sscanf ⇒ __vfscanf_char ⇒ __vfscanf ⇒ _scanf_real
  [Calls]
  - >> __0sscanf
  - >> strchr
  - >> strstr
  [Called By]
  - >> WaitForUpData

  dma_periph_and_channel_check (Thumb, 18 bytes, Stack size 0 bytes, gd32f10x_dma.o(i.dma_periph_and_channel_check))
  [Called By]

  - >> dma_channel_enable
  - >> dma_channel_disable
  - >> dma_memory_to_memory_disable
  - >> dma_interrupt_enable
  - >> dma_init
  - >> dma_deinit
  - >> dma_circulation_disable

  buffer_skip_whitespace (Thumb, 72 bytes, Stack size 0 bytes, cjson.o(i.buffer_skip_whitespace))
  [Called By]

  - >> cJSON_ParseWithLengthOpts
  - >> parse_object
  - >> parse_array

  cJSON_New_Item (Thumb, 26 bytes, Stack size 16 bytes, cjson.o(i.cJSON_New_Item))
  [Stack]

  - Max Depth = 16
  - Call Chain = cJSON_New_Item
  [Calls]
  - >> __aeabi_memclr4
  [Called By]
  - >> cJSON_ParseWithLengthOpts
  - >> parse_object
  - >> parse_array

  case_insensitive_strcmp (Thumb, 72 bytes, Stack size 16 bytes, cjson.o(i.case_insensitive_strcmp))
  [Stack]

  - Max Depth = 16
  - Call Chain = case_insensitive_strcmp
  [Calls]
  - >> tolower
  [Called By]
  - >> get_object_item

  get_decimal_point (Thumb, 4 bytes, Stack size 0 bytes, cjson.o(i.get_decimal_point))
  [Called By]

  - >> parse_number

  get_object_item (Thumb, 82 bytes, Stack size 24 bytes, cjson.o(i.get_object_item))
  [Stack]

  - Max Depth = 40
  - Call Chain = get_object_item ⇒ case_insensitive_strcmp
  [Calls]
  - >> case_insensitive_strcmp
  - >> strcmp
  [Called By]
  - >> cJSON_GetObjectItemCaseSensitive

  parse_array (Thumb, 248 bytes, Stack size 24 bytes, cjson.o(i.parse_array))
  [Stack]

  - Max Depth = 40 + In Cycle
  - Call Chain = parse_array ⇒ parse_value (Cycle)
  [Calls]
  - >> cJSON_Delete
  - >> parse_value
  - >> cJSON_New_Item
  - >> buffer_skip_whitespace
  [Called By]
  - >> parse_value

  parse_hex4 (Thumb, 90 bytes, Stack size 0 bytes, cjson.o(i.parse_hex4))
  [Called By]

  - >> utf16_literal_to_utf8

  parse_number (Thumb, 298 bytes, Stack size 96 bytes, cjson.o(i.parse_number))
  [Stack]

  - Max Depth = 312
  - Call Chain = parse_number ⇒ strtod ⇒ __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> __aeabi_d2iz
  - >> __aeabi_cdrcmple
  - >> __aeabi_cdcmple
  - >> get_decimal_point
  - >> strtod
  [Called By]
  - >> parse_value

  parse_object (Thumb, 318 bytes, Stack size 24 bytes, cjson.o(i.parse_object))
  [Stack]

  - Max Depth = 120 + In Cycle
  - Call Chain = parse_object ⇒ parse_value (Cycle)
  [Calls]
  - >> cJSON_Delete
  - >> parse_value
  - >> parse_string
  - >> cJSON_New_Item
  - >> buffer_skip_whitespace
  [Called By]
  - >> parse_value

  parse_string (Thumb, 396 bytes, Stack size 40 bytes, cjson.o(i.parse_string))
  [Stack]

  - Max Depth = 96
  - Call Chain = parse_string ⇒ utf16_literal_to_utf8
  [Calls]
  - >> utf16_literal_to_utf8
  [Called By]
  - >> parse_value
  - >> parse_object

  parse_value (Thumb, 290 bytes, Stack size 16 bytes, cjson.o(i.parse_value))
  [Stack]

  - Max Depth = 328
  - Call Chain = parse_value ⇒ parse_number ⇒ strtod ⇒ __strtod_int ⇒ _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> parse_string
  - >> parse_object
  - >> parse_number
  - >> parse_array
  - >> strncmp
  [Called By]
  - >> cJSON_ParseWithLengthOpts
  - >> parse_object
  - >> parse_array

  skip_utf8_bom (Thumb, 56 bytes, Stack size 8 bytes, cjson.o(i.skip_utf8_bom))
  [Stack]

  - Max Depth = 20
  - Call Chain = skip_utf8_bom ⇒ strncmp
  [Calls]
  - >> strncmp
  [Called By]
  - >> cJSON_ParseWithLengthOpts

  utf16_literal_to_utf8 (Thumb, 300 bytes, Stack size 56 bytes, cjson.o(i.utf16_literal_to_utf8))
  [Stack]

  - Max Depth = 56
  - Call Chain = utf16_literal_to_utf8
  [Calls]
  - >> parse_hex4
  [Called By]
  - >> parse_string

  dlt645_hw_read (Thumb, 92 bytes, Stack size 24 bytes, dlt645_port.o(i.dlt645_hw_read))
  [Stack]

  - Max Depth = 24
  - Call Chain = dlt645_hw_read
  [Calls]
  - >> gettick
  - >> __aeabi_memcpy
  [Address Reference Count : 1]
  - dlt645_port.o(.data)

  dlt645_hw_write (Thumb, 92 bytes, Stack size 24 bytes, dlt645_port.o(i.dlt645_hw_write))
  [Stack]

  - Max Depth = 32
  - Call Chain = dlt645_hw_write ⇒ usart_flag_get
  [Calls]
  - >> gpio_bit_set
  - >> usart_flag_get
  - >> usart_data_transmit
  - >> gpio_bit_reset
  - >> __aeabi_memclr4
  [Address Reference Count : 1]
  - dlt645_port.o(.data)

  dlt645_1997_parsing_data (Thumb, 206 bytes, Stack size 24 bytes, dlt645_1997.o(i.dlt645_1997_parsing_data))
  [Stack]

  - Max Depth = 416
  - Call Chain = dlt645_1997_parsing_data ⇒ dlt645_data_parse_by_format_to_float ⇒ data_package_translate_to_int ⇒ pow ⇒ __kernel_poly ⇒ __aeabi_dadd ⇒ _double_epilogue ⇒ _double_round
  [Calls]
  - >> dlt645_data_parse_by_format_to_float
  [Called By]
  - >> dlt645_1997_read_data

  _fp_digits (Thumb, 366 bytes, Stack size 64 bytes, printfa.o(i._fp_digits), UNUSED)
  [Calls]

  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> __aeabi_dmul
  - >> __aeabi_cdrcmple
  - >> __aeabi_uldivmod
  - >> __aeabi_d2ulz
  [Called By]
  - >> _printf_core

  _printf_core (Thumb, 1704 bytes, Stack size 136 bytes, printfa.o(i._printf_core), UNUSED)
  [Calls]

  - >> __aeabi_uldivmod
  - >> __aeabi_uidivmod
  - >> _printf_pre_padding
  - >> _printf_post_padding
  - >> _fp_digits
  [Called By]
  - >> __0vsnprintf
  - >> __0sprintf
  - >> __0printf

  _printf_post_padding (Thumb, 36 bytes, Stack size 24 bytes, printfa.o(i._printf_post_padding), UNUSED)
  [Called By]

  - >> _printf_core

  _printf_pre_padding (Thumb, 46 bytes, Stack size 24 bytes, printfa.o(i._printf_pre_padding), UNUSED)
  [Called By]

  - >> _printf_core

  _snputc (Thumb, 22 bytes, Stack size 0 bytes, printfa.o(i._snputc))
  [Address Reference Count : 1]

  - printfa.o(i.__0vsnprintf)

  _sputc (Thumb, 10 bytes, Stack size 0 bytes, printfa.o(i._sputc))
  [Called By]

  - >> __0sprintf
  [Address Reference Count : 1]
  - printfa.o(i.__0sprintf)

  internal_alloc (Thumb, 76 bytes, Stack size 24 bytes, mallocr.o(i.internal_alloc))
  [Stack]

  - Max Depth = 24
  - Call Chain = internal_alloc
  [Calls]
  - >> __aeabi_memcpy
  [Called By]
  - >> realloc
  - >> malloc

  _fp_value (Thumb, 296 bytes, Stack size 64 bytes, scanf_fp.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_ddiv
  - >> __aeabi_dmul
  - >> __aeabi_ul2d
  [Called By]
  - >> _scanf_really_real

  _scanf_char_input (Thumb, 12 bytes, Stack size 0 bytes, scanf_char.o(.text))
  [Address Reference Count : 1]

  - scanf_char.o(.text)

  _local_sscanf (Thumb, 54 bytes, Stack size 56 bytes, strtod.o(.text))
  [Stack]

  - Max Depth = 160
  - Call Chain = _local_sscanf ⇒ _scanf_real
  [Calls]
  - >> _scanf_real
  [Called By]
  - >> __strtod_int

  ### Undefined Global Symbols