# Static Call Graph for image .\Objects\1pr.axf

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Sat May 14 21:59:23 2022

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

### Call chain for Maximum Stack Depth:

__rt_entry_main ⇒ main ⇒ Robot::Init() ⇒ Laser::Init() ⇒ VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax

### Functions with no stack information

- __user_initial_stackheap

### Mutually Recursive functions

- NMI_Handler ⇒ NMI_Handler
- HardFault_Handler ⇒ HardFault_Handler
- MemManage_Handler ⇒ MemManage_Handler
- BusFault_Handler ⇒ BusFault_Handler
- UsageFault_Handler ⇒ UsageFault_Handler
- SVC_Handler ⇒ SVC_Handler
- DebugMon_Handler ⇒ DebugMon_Handler
- PendSV_Handler ⇒ PendSV_Handler
- ADC_IRQHandler ⇒ ADC_IRQHandler
- quickSortY(Point*, unsigned char, unsigned char) ⇒ quickSortY(Point*, unsigned char, unsigned char)
- quickSortX(Point*, unsigned char, unsigned char) ⇒ quickSortX(Point*, unsigned char, unsigned char)

  ### Function Pointers

  - ADC_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - BusFault_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN1_RX0_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN1_RX1_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN1_SCE_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN1_TX_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN2_RX0_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN2_RX1_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN2_SCE_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - CAN2_TX_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DCMI_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream0_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream1_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream2_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream3_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream4_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream5_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream6_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA1_Stream7_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream0_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream1_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream2_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream3_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream4_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream5_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream6_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DMA2_Stream7_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - DebugMon_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - ETH_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - ETH_WKUP_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - EXTI0_IRQHandler from irq_handlers.o(i.EXTI0_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - EXTI15_10_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - EXTI1_IRQHandler from irq_handlers.o(i.EXTI1_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - EXTI2_IRQHandler from irq_handlers.o(i.EXTI2_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - EXTI3_IRQHandler from irq_handlers.o(i.EXTI3_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - EXTI4_IRQHandler from irq_handlers.o(i.EXTI4_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - EXTI9_5_IRQHandler from irq_handlers.o(i.EXTI9_5_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - FLASH_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - FMC_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - FPU_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - HASH_RNG_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - HardFault_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - I2C1_ER_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - I2C1_EV_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - I2C2_ER_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - I2C2_EV_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - I2C3_ER_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - I2C3_EV_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - MemManage_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - NMI_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - OTG_FS_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - OTG_FS_WKUP_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - OTG_HS_EP1_IN_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - OTG_HS_EP1_OUT_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - OTG_HS_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - OTG_HS_WKUP_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - PVD_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - PendSV_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - RCC_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - RTC_Alarm_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - RTC_WKUP_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - Reset_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - SDIO_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - SPI1_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - SPI2_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - SPI3_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - SVC_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - SysTick_Handler from time_service.o(i.SysTick_Handler) referenced from startup_stm32f407xx.o(RESET)
  - SystemInit from system_stm32f4xx.o(i.SystemInit) referenced from startup_stm32f407xx.o(.text)
  - TAMP_STAMP_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM1_BRK_TIM9_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM1_CC_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM1_TRG_COM_TIM11_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM1_UP_TIM10_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM2_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM3_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM4_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM5_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM6_DAC_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM7_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM8_BRK_TIM12_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM8_CC_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM8_TRG_COM_TIM14_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - TIM8_UP_TIM13_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - UART4_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - UART5_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - USART1_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - USART2_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - USART3_IRQHandler from uart3.o(i.USART3_IRQHandler) referenced from startup_stm32f407xx.o(RESET)
  - USART6_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - UsageFault_Handler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - WWDG_IRQHandler from startup_stm32f407xx.o(.text) referenced from startup_stm32f407xx.o(RESET)
  - __main from __main.o(!!!main) referenced from startup_stm32f407xx.o(.text)

  ### Global Symbols

  __main (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main))
  [Calls]

  - >> __scatterload
  - >> __rt_entry

  __scatterload (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter))
  [Called By]

  - >> __main

  __scatterload_rt2 (Thumb, 44 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
  [Calls]

  - >> __rt_entry

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

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

  __decompress (Thumb, 100 bytes, Stack size unknown bytes, __dclz77c.o(!!dclz77c), UNUSED)

  __decompress2 (Thumb, 0 bytes, Stack size unknown bytes, __dclz77c.o(!!dclz77c), UNUSED)

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

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

  - >> __rt_entry_li

  __rt_lib_init_fp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000001))
  [Calls]

  - >> _fp_init

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  - >> __rt_exit_ls

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

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

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

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

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

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

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

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

  __rt_entry (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000))
  [Called By]

  - >> __main
  - >> __scatterload_rt2

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

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

  - Max Depth = 8 + Unknown Stack Size
  - Call Chain = __rt_entry_sh ⇒ __user_setup_stackheap
  [Calls]
  - >> __user_setup_stackheap

  __rt_entry_li (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000A))
  [Calls]

  - >> __rt_lib_init

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

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

  - Max Depth = 1100 + Unknown Stack Size
  - Call Chain = __rt_entry_main ⇒ main ⇒ Robot::Init() ⇒ Laser::Init() ⇒ VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> main
  - >> exit

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

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

  - >> exit

  __rt_exit_ls (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000003))
  [Calls]

  - >> __rt_lib_shutdown

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

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

  - >> _sys_exit

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

  - startup_stm32f407xx.o(RESET)

  NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  HardFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  MemManage_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  BusFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  UsageFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

  ADC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f407xx.o(.text))
  [Calls]

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

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

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

  - startup_stm32f407xx.o(RESET)

  __user_initial_stackheap (Thumb, 0 bytes, Stack size unknown bytes, startup_stm32f407xx.o(.text))
  [Called By]

  - >> __user_setup_stackheap

  __semihosting$guard (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)

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

  __aeabi_uldivmod (Thumb, 0 bytes, Stack size 48 bytes, lludivv7m.o(.text))
  [Stack]

  - Max Depth = 48
  - Call Chain = __aeabi_uldivmod
  [Called By]
  - >> time_service::delayus(unsigned long long)
  - >> time_service::millis()
  - >> wall_reg(LineSensors*, bool*)

  _ll_udiv (Thumb, 238 bytes, Stack size 48 bytes, lludivv7m.o(.text), UNUSED)

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

  - >> std::abs(long long)

  strcpy (Thumb, 72 bytes, Stack size 12 bytes, strcpy.o(.text))
  [Stack]

  - Max Depth = 12
  - Call Chain = strcpy
  [Called By]
  - >> VL53L0X_get_info_from_device

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

  - >> MovementController::MovementController(Motors&, Servos&, Lidar&)
  - >> VL53L0X_WriteMulti

  __rt_memcpy (Thumb, 138 bytes, Stack size 0 bytes, rt_memcpy_v6.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_memcpy4

  _memcpy_lastbytes (Thumb, 0 bytes, Stack size unknown bytes, rt_memcpy_v6.o(.text), UNUSED)

  __aeabi_memcpy4 (Thumb, 0 bytes, Stack size 8 bytes, rt_memcpy_w.o(.text))
  [Stack]

  - Max Depth = 8
  - Call Chain = __aeabi_memcpy4
  [Called By]
  - >> MovementController::MovementController(Motors&, Servos&, Lidar&)
  - >> VL53L0X_perform_ref_spad_management
  - >> VL53L0X_StaticInit
  - >> VL53L0X_GetRangingMeasurementData
  - >> VL53L0X_DataInit
  - >> __rt_memcpy

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

  __rt_memcpy_w (Thumb, 100 bytes, Stack size 8 bytes, rt_memcpy_w.o(.text), UNUSED)

  _memcpy_lastbytes_aligned (Thumb, 0 bytes, Stack size unknown bytes, rt_memcpy_w.o(.text), UNUSED)

  __aeabi_memclr4 (Thumb, 0 bytes, Stack size 4 bytes, rt_memclr_w.o(.text))
  [Stack]

  - Max Depth = 4
  - Call Chain = __aeabi_memclr4
  [Called By]
  - >> VL53L0X_StaticInit

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

  __rt_memclr_w (Thumb, 78 bytes, Stack size 4 bytes, rt_memclr_w.o(.text), UNUSED)

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

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

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

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

  __read_errno (Thumb, 10 bytes, Stack size 8 bytes, _rserrno.o(.text), UNUSED)
  [Calls]

  - >> __aeabi_errno_addr

  __set_errno (Thumb, 12 bytes, Stack size 8 bytes, _rserrno.o(.text))
  [Stack]

  - Max Depth = 8
  - Call Chain = __set_errno
  [Calls]
  - >> __aeabi_errno_addr
  [Called By]
  - >> __hardfp_asinf
  - >> __hardfp_acos
  - >> __hardfp_log
  - >> sqrtf
  - >> __hardfp_sqrtf
  - >> sqrt
  - >> __hardfp_sqrt
  - >> __hardfp_sin
  - >> __hardfp_pow
  - >> __hardfp_log10
  - >> __hardfp_cos
  - >> __hardfp_atan2f
  - >> __hardfp_atan2

  __aeabi_errno_addr (Thumb, 8 bytes, Stack size 0 bytes, rt_errno_addr_intlibspace.o(.text))
  [Called By]

  - >> __set_errno
  - >> __read_errno

  __errno$intlibspace (Thumb, 0 bytes, Stack size 0 bytes, rt_errno_addr_intlibspace.o(.text), UNUSED)

  __rt_errno_addr$intlibspace (Thumb, 0 bytes, Stack size 0 bytes, rt_errno_addr_intlibspace.o(.text), UNUSED)

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

  __user_perproc_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text))
  [Called By]

  - >> __user_setup_stackheap

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

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

  - Max Depth = 8 + Unknown Stack Size
  - Call Chain = __user_setup_stackheap
  [Calls]
  - >> __user_initial_stackheap
  - >> __user_perproc_libspace
  [Called By]
  - >> __rt_entry_sh

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

  - Max Depth = 8 + Unknown Stack Size
  - Call Chain = exit
  [Calls]
  - >> __rt_exit
  [Called By]
  - >> __rt_entry_main

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

  - >> LineSensors::start()

  ADC_CommonInit (Thumb, 34 bytes, Stack size 0 bytes, stm32f4xx_adc.o(i.ADC_CommonInit))
  [Called By]

  - >> LineSensors::LineSensors()

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

  - >> LineSensors::start()

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

  - >> LineSensors::LineSensors()

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

  - >> LineSensors::LineSensors()

  ADC_Init (Thumb, 74 bytes, Stack size 12 bytes, stm32f4xx_adc.o(i.ADC_Init))
  [Stack]

  - Max Depth = 12
  - Call Chain = ADC_Init
  [Called By]
  - >> LineSensors::LineSensors()

  ADC_RegularChannelConfig (Thumb, 184 bytes, Stack size 20 bytes, stm32f4xx_adc.o(i.ADC_RegularChannelConfig))
  [Stack]

  - Max Depth = 20
  - Call Chain = ADC_RegularChannelConfig
  [Called By]
  - >> LineSensors::LineSensors()

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

  - >> LineSensors::start()

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

  - >> LineSensors::LineSensors()

  DMA_DeInit (Thumb, 324 bytes, Stack size 0 bytes, stm32f4xx_dma.o(i.DMA_DeInit))
  [Called By]

  - >> LineSensors::LineSensors()

  DMA_Init (Thumb, 82 bytes, Stack size 8 bytes, stm32f4xx_dma.o(i.DMA_Init))
  [Stack]

  - Max Depth = 8
  - Call Chain = DMA_Init
  [Called By]
  - >> LineSensors::LineSensors()

  EXTI0_IRQHandler (Thumb, 50 bytes, Stack size 0 bytes, irq_handlers.o(i.EXTI0_IRQHandler))
  [Address Reference Count : 1]

  - startup_stm32f407xx.o(RESET)

  EXTI1_IRQHandler (Thumb, 50 bytes, Stack size 0 bytes, irq_handlers.o(i.EXTI1_IRQHandler))
  [Address Reference Count : 1]

  - startup_stm32f407xx.o(RESET)

  EXTI2_IRQHandler (Thumb, 50 bytes, Stack size 0 bytes, irq_handlers.o(i.EXTI2_IRQHandler))
  [Address Reference Count : 1]

  - startup_stm32f407xx.o(RESET)

  EXTI3_IRQHandler (Thumb, 50 bytes, Stack size 0 bytes, irq_handlers.o(i.EXTI3_IRQHandler))
  [Address Reference Count : 1]

  - startup_stm32f407xx.o(RESET)

  EXTI4_IRQHandler (Thumb, 50 bytes, Stack size 0 bytes, irq_handlers.o(i.EXTI4_IRQHandler))
  [Address Reference Count : 1]

  - startup_stm32f407xx.o(RESET)

  EXTI9_5_IRQHandler (Thumb, 170 bytes, Stack size 8 bytes, irq_handlers.o(i.EXTI9_5_IRQHandler))
  [Stack]

  - Max Depth = 8
  - Call Chain = EXTI9_5_IRQHandler
  [Calls]
  - >> EXTI_GetITStatus
  - >> EXTI_ClearITPendingBit
  [Address Reference Count : 1]
  - startup_stm32f407xx.o(RESET)

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

  - >> EXTI9_5_IRQHandler

  EXTI_GetITStatus (Thumb, 20 bytes, Stack size 0 bytes, stm32f4xx_exti.o(i.EXTI_GetITStatus))
  [Called By]

  - >> EXTI9_5_IRQHandler

  EXTI_Init (Thumb, 142 bytes, Stack size 0 bytes, stm32f4xx_exti.o(i.EXTI_Init))
  [Called By]

  - >> Sonar::Init()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

  GPIO_Init (Thumb, 144 bytes, Stack size 20 bytes, stm32f4xx_gpio.o(i.GPIO_Init))
  [Stack]

  - Max Depth = 20
  - Call Chain = GPIO_Init
  [Called By]
  - >> Usart3::Init()
  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Sonar::Init()
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> LineSensors::LineSensors()
  - >> main
  - >> Robot::Init()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

  GPIO_PinAFConfig (Thumb, 70 bytes, Stack size 20 bytes, stm32f4xx_gpio.o(i.GPIO_PinAFConfig))
  [Stack]

  - Max Depth = 20
  - Call Chain = GPIO_PinAFConfig
  [Called By]
  - >> Usart3::Init()
  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Sonar::Init()
  - >> Robot::Init()

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

  - >> main
  - >> I2c::m_sdaRead()
  - >> I2c::m_sclRead()

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

  - >> Robot::Init()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()

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

  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()

  NVIC_Init (Thumb, 106 bytes, Stack size 16 bytes, misc.o(i.NVIC_Init))
  [Stack]

  - Max Depth = 16
  - Call Chain = NVIC_Init
  [Called By]
  - >> Sonar::Init()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

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

  - >> Sonar::Init()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

  RCC_AHB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_AHB1PeriphClockCmd))
  [Called By]

  - >> Usart3::Init()
  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Sonar::Init()
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> LineSensors::LineSensors()
  - >> main
  - >> Robot::Init()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

  RCC_APB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_APB1PeriphClockCmd))
  [Called By]

  - >> Usart3::Init()
  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)

  RCC_APB2PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_APB2PeriphClockCmd))
  [Called By]

  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Sonar::Init()
  - >> time_service::Init()
  - >> LineSensors::LineSensors()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

  RCC_GetClocksFreq (Thumb, 214 bytes, Stack size 20 bytes, stm32f4xx_rcc.o(i.RCC_GetClocksFreq))
  [Stack]

  - Max Depth = 20
  - Call Chain = RCC_GetClocksFreq
  [Called By]
  - >> USART_Init

  SYSCFG_EXTILineConfig (Thumb, 60 bytes, Stack size 12 bytes, stm32f4xx_syscfg.o(i.SYSCFG_EXTILineConfig))
  [Stack]

  - Max Depth = 12
  - Call Chain = SYSCFG_EXTILineConfig
  [Called By]
  - >> Sonar::Init()
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()

  SysTick_Handler (Thumb, 20 bytes, Stack size 0 bytes, time_service.o(i.SysTick_Handler))
  [Address Reference Count : 1]

  - startup_stm32f407xx.o(RESET)

  SystemInit (Thumb, 88 bytes, Stack size 8 bytes, system_stm32f4xx.o(i.SystemInit))
  [Stack]

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

  TIM_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_Cmd))
  [Called By]

  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Sonar::Init()
  - >> Robot::Init()

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

  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)

  TIM_ICInit (Thumb, 110 bytes, Stack size 16 bytes, stm32f4xx_tim.o(i.TIM_ICInit))
  [Stack]

  - Max Depth = 36
  - Call Chain = TIM_ICInit ⇒ TI4_Config
  [Calls]
  - >> TI4_Config
  - >> TI3_Config
  - >> TI2_Config
  - >> TI1_Config
  - >> TIM_SetIC4Prescaler
  - >> TIM_SetIC3Prescaler
  - >> TIM_SetIC2Prescaler
  - >> TIM_SetIC1Prescaler
  [Called By]
  - >> Sonar::Init()

  TIM_OC1Init (Thumb, 114 bytes, Stack size 16 bytes, stm32f4xx_tim.o(i.TIM_OC1Init))
  [Stack]

  - Max Depth = 16
  - Call Chain = TIM_OC1Init
  [Called By]
  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Robot::Init()

  TIM_OC2Init (Thumb, 154 bytes, Stack size 16 bytes, stm32f4xx_tim.o(i.TIM_OC2Init))
  [Stack]

  - Max Depth = 16
  - Call Chain = TIM_OC2Init
  [Called By]
  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)

  TIM_OC3Init (Thumb, 150 bytes, Stack size 16 bytes, stm32f4xx_tim.o(i.TIM_OC3Init))
  [Stack]

  - Max Depth = 16
  - Call Chain = TIM_OC3Init
  [Called By]
  - >> Motors::Motors(MPU9250_*)

  TIM_OC4Init (Thumb, 112 bytes, Stack size 16 bytes, stm32f4xx_tim.o(i.TIM_OC4Init))
  [Stack]

  - Max Depth = 16
  - Call Chain = TIM_OC4Init
  [Called By]
  - >> Motors::Motors(MPU9250_*)

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

  - >> Servos::s1_stop()
  - >> Servos::s1(float)
  - >> Motors::m1(short)
  - >> Robot::LED_write(unsigned short)
  - >> Motors::m3(short)

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

  - >> Servos::s2_stop()
  - >> Servos::s3(float)
  - >> Servos::s2(float)
  - >> Motors::m1(short)
  - >> Servos::s4(float)
  - >> Motors::m3(short)

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

  - >> Motors::m4(short)
  - >> Motors::m2(short)

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

  - >> Motors::m4(short)
  - >> Motors::m2(short)

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

  - >> TIM_ICInit

  TIM_SetIC2Prescaler (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_SetIC2Prescaler))
  [Called By]

  - >> TIM_ICInit

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

  - >> TIM_ICInit

  TIM_SetIC4Prescaler (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_SetIC4Prescaler))
  [Called By]

  - >> TIM_ICInit

  TIM_TimeBaseInit (Thumb, 104 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_TimeBaseInit))
  [Called By]

  - >> Servos::Servos()
  - >> Motors::Motors(MPU9250_*)
  - >> Sonar::Init()
  - >> Robot::Init()

  USART3_IRQHandler (Thumb, 148 bytes, Stack size 16 bytes, uart3.o(i.USART3_IRQHandler))
  [Stack]

  - Max Depth = 24
  - Call Chain = USART3_IRQHandler ⇒ USART_ClearITPendingBit
  [Calls]
  - >> USART_ClearITPendingBit
  [Address Reference Count : 1]
  - startup_stm32f407xx.o(RESET)

  USART_ClearITPendingBit (Thumb, 30 bytes, Stack size 8 bytes, stm32f4xx_usart.o(i.USART_ClearITPendingBit))
  [Stack]

  - Max Depth = 8
  - Call Chain = USART_ClearITPendingBit
  [Called By]
  - >> USART3_IRQHandler

  USART_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_Cmd))
  [Called By]

  - >> Usart3::Init()

  USART_ITConfig (Thumb, 74 bytes, Stack size 20 bytes, stm32f4xx_usart.o(i.USART_ITConfig))
  [Stack]

  - Max Depth = 20
  - Call Chain = USART_ITConfig
  [Called By]
  - >> Usart3::Init()

  USART_Init (Thumb, 204 bytes, Stack size 48 bytes, stm32f4xx_usart.o(i.USART_Init))
  [Stack]

  - Max Depth = 68
  - Call Chain = USART_Init ⇒ RCC_GetClocksFreq
  [Calls]
  - >> RCC_GetClocksFreq
  [Called By]
  - >> Usart3::Init()

  VL53L0X_CheckAndLoadInterruptSettings (Thumb, 126 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_CheckAndLoadInterruptSettings))
  [Stack]

  - Max Depth = 176
  - Call Chain = VL53L0X_CheckAndLoadInterruptSettings ⇒ VL53L0X_load_tuning_settings ⇒ VL53L0X_WriteMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_load_tuning_settings
  - >> VL53L0X_WrByte
  - >> VL53L0X_GetInterruptThresholds
  [Called By]
  - >> VL53L0X_StartMeasurement

  VL53L0X_ClearInterruptMask (Thumb, 82 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_ClearInterruptMask))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_ClearInterruptMask ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdByte
  [Called By]
  - >> Laser::read()
  - >> VL53L0X_perform_single_ref_calibration
  - >> VL53L0X_SetGpioConfig
  - >> VL53L0X_PerformSingleRangingMeasurement

  VL53L0X_DataInit (Thumb, 406 bytes, Stack size 88 bytes, vl53l0x_api.o(i.VL53L0X_DataInit))
  [Stack]

  - Max Depth = 392
  - Call Chain = VL53L0X_DataInit ⇒ VL53L0X_GetDeviceParameters ⇒ VL53L0X_GetMeasurementTimingBudgetMicroSeconds ⇒ VL53L0X_get_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdByte
  - >> VL53L0X_SetLimitCheckValue
  - >> VL53L0X_SetLimitCheckEnable
  - >> VL53L0X_GetDeviceParameters
  - >> __aeabi_memcpy4
  [Called By]
  - >> Laser::Init()

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

  - >> VL53L0X_StartMeasurement
  - >> VL53L0X_PerformSingleMeasurement
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetDeviceParameters (Thumb, 160 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetDeviceParameters))
  [Stack]

  - Max Depth = 304
  - Call Chain = VL53L0X_GetDeviceParameters ⇒ VL53L0X_GetMeasurementTimingBudgetMicroSeconds ⇒ VL53L0X_get_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_GetXTalkCompensationRateMegaCps
  - >> VL53L0X_GetWrapAroundCheckEnable
  - >> VL53L0X_GetOffsetCalibrationDataMicroMeter
  - >> VL53L0X_GetMeasurementTimingBudgetMicroSeconds
  - >> VL53L0X_GetLimitCheckValue
  - >> VL53L0X_GetLimitCheckEnable
  - >> VL53L0X_GetInterMeasurementPeriodMilliSeconds
  - >> VL53L0X_GetDeviceMode
  [Called By]
  - >> VL53L0X_StaticInit
  - >> VL53L0X_DataInit

  VL53L0X_GetFractionEnable (Thumb, 34 bytes, Stack size 16 bytes, vl53l0x_api.o(i.VL53L0X_GetFractionEnable))
  [Stack]

  - Max Depth = 104
  - Call Chain = VL53L0X_GetFractionEnable ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdByte
  [Called By]
  - >> VL53L0X_StaticInit

  VL53L0X_GetInterMeasurementPeriodMilliSeconds (Thumb, 62 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetInterMeasurementPeriodMilliSeconds))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_GetInterMeasurementPeriodMilliSeconds ⇒ VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdWord
  - >> VL53L0X_RdDWord
  [Called By]
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetInterruptMaskStatus (Thumb, 48 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetInterruptMaskStatus))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdByte
  [Called By]
  - >> VL53L0X_GetMeasurementDataReady

  VL53L0X_GetInterruptThresholds (Thumb, 66 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_GetInterruptThresholds))
  [Stack]

  - Max Depth = 120
  - Call Chain = VL53L0X_GetInterruptThresholds ⇒ VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdWord
  [Called By]
  - >> VL53L0X_CheckAndLoadInterruptSettings

  VL53L0X_GetLimitCheckEnable (Thumb, 28 bytes, Stack size 12 bytes, vl53l0x_api.o(i.VL53L0X_GetLimitCheckEnable))
  [Stack]

  - Max Depth = 12
  - Call Chain = VL53L0X_GetLimitCheckEnable
  [Called By]
  - >> VL53L0X_get_pal_range_status
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetLimitCheckValue (Thumb, 182 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_GetLimitCheckValue))
  [Stack]

  - Max Depth = 120
  - Call Chain = VL53L0X_GetLimitCheckValue ⇒ VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdWord
  [Called By]
  - >> VL53L0X_get_pal_range_status
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetMeasurementDataReady (Thumb, 86 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_GetMeasurementDataReady))
  [Stack]

  - Max Depth = 144
  - Call Chain = VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdByte
  - >> VL53L0X_GetInterruptMaskStatus
  [Called By]
  - >> VL53L0X_measurement_poll_for_completion

  VL53L0X_GetMeasurementTimingBudgetMicroSeconds (Thumb, 22 bytes, Stack size 16 bytes, vl53l0x_api.o(i.VL53L0X_GetMeasurementTimingBudgetMicroSeconds))
  [Stack]

  - Max Depth = 280
  - Call Chain = VL53L0X_GetMeasurementTimingBudgetMicroSeconds ⇒ VL53L0X_get_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_get_measurement_timing_budget_micro_seconds
  [Called By]
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetOffsetCalibrationDataMicroMeter (Thumb, 22 bytes, Stack size 16 bytes, vl53l0x_api.o(i.VL53L0X_GetOffsetCalibrationDataMicroMeter))
  [Stack]

  - Max Depth = 136
  - Call Chain = VL53L0X_GetOffsetCalibrationDataMicroMeter ⇒ VL53L0X_get_offset_calibration_data_micro_meter ⇒ VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_get_offset_calibration_data_micro_meter
  [Called By]
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetRangingMeasurementData (Thumb, 366 bytes, Stack size 112 bytes, vl53l0x_api.o(i.VL53L0X_GetRangingMeasurementData))
  [Stack]

  - Max Depth = 564
  - Call Chain = VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_get_pal_range_status
  - >> VL53L0X_ReadMulti
  - >> __aeabi_memcpy4
  [Called By]
  - >> VL53L0X_PerformSingleRangingMeasurement

  VL53L0X_GetSequenceStepEnables (Thumb, 118 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetSequenceStepEnables))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_GetSequenceStepEnables ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdByte
  - >> sequence_step_enabled
  [Called By]
  - >> set_sequence_step_timeout
  - >> get_sequence_step_timeout
  - >> VL53L0X_set_measurement_timing_budget_micro_seconds
  - >> VL53L0X_get_measurement_timing_budget_micro_seconds

  VL53L0X_GetVcselPulsePeriod (Thumb, 30 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetVcselPulsePeriod))
  [Stack]

  - Max Depth = 136
  - Call Chain = VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_get_vcsel_pulse_period
  [Called By]
  - >> set_sequence_step_timeout
  - >> get_sequence_step_timeout
  - >> VL53L0X_StaticInit

  VL53L0X_GetWrapAroundCheckEnable (Thumb, 62 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetWrapAroundCheckEnable))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_GetWrapAroundCheckEnable ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdByte
  [Called By]
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_GetXTalkCompensationEnable (Thumb, 12 bytes, Stack size 8 bytes, vl53l0x_api.o(i.VL53L0X_GetXTalkCompensationEnable))
  [Stack]

  - Max Depth = 8
  - Call Chain = VL53L0X_GetXTalkCompensationEnable
  [Called By]
  - >> VL53L0X_get_total_xtalk_rate

  VL53L0X_GetXTalkCompensationRateMegaCps (Thumb, 56 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_GetXTalkCompensationRateMegaCps))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_GetXTalkCompensationRateMegaCps ⇒ VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdWord
  [Called By]
  - >> VL53L0X_GetDeviceParameters

  VL53L0X_PerformRefCalibration (Thumb, 32 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_PerformRefCalibration))
  [Stack]

  - Max Depth = 296
  - Call Chain = VL53L0X_PerformRefCalibration ⇒ VL53L0X_perform_ref_calibration ⇒ VL53L0X_perform_vhv_calibration ⇒ VL53L0X_perform_single_ref_calibration ⇒ VL53L0X_measurement_poll_for_completion ⇒ VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_perform_ref_calibration
  [Called By]
  - >> Laser::Init()

  VL53L0X_PerformRefSpadManagement (Thumb, 30 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_PerformRefSpadManagement))
  [Stack]

  - Max Depth = 780
  - Call Chain = VL53L0X_PerformRefSpadManagement ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_perform_ref_spad_management
  [Called By]
  - >> Laser::Init()

  VL53L0X_PerformSingleMeasurement (Thumb, 60 bytes, Stack size 16 bytes, vl53l0x_api.o(i.VL53L0X_PerformSingleMeasurement))
  [Stack]

  - Max Depth = 224
  - Call Chain = VL53L0X_PerformSingleMeasurement ⇒ VL53L0X_StartMeasurement ⇒ VL53L0X_CheckAndLoadInterruptSettings ⇒ VL53L0X_load_tuning_settings ⇒ VL53L0X_WriteMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_measurement_poll_for_completion
  - >> VL53L0X_StartMeasurement
  - >> VL53L0X_GetDeviceMode
  [Called By]
  - >> VL53L0X_PerformSingleRangingMeasurement

  VL53L0X_PerformSingleRangingMeasurement (Thumb, 56 bytes, Stack size 16 bytes, vl53l0x_api.o(i.VL53L0X_PerformSingleRangingMeasurement))
  [Stack]

  - Max Depth = 580
  - Call Chain = VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_SetDeviceMode
  - >> VL53L0X_PerformSingleMeasurement
  - >> VL53L0X_GetRangingMeasurementData
  - >> VL53L0X_ClearInterruptMask
  [Called By]
  - >> Laser::read()
  - >> perform_ref_signal_measurement

  VL53L0X_PollingDelay (Thumb, 18 bytes, Stack size 16 bytes, vl53l0x_platform.o(i.VL53L0X_PollingDelay))
  [Stack]

  - Max Depth = 80
  - Call Chain = VL53L0X_PollingDelay ⇒ time_service::delayus(unsigned long long) ⇒ __aeabi_uldivmod
  [Calls]
  - >> time_service::delayus(unsigned long long)
  [Called By]
  - >> VL53L0X_measurement_poll_for_completion
  - >> VL53L0X_get_info_from_device

  VL53L0X_RdByte (Thumb, 52 bytes, Stack size 32 bytes, vl53l0x_platform.o(i.VL53L0X_RdByte))
  [Stack]

  - Max Depth = 88
  - Call Chain = VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> VL53L0X_ref_calibration_io
  - >> get_sequence_step_timeout
  - >> VL53L0X_get_vcsel_pulse_period
  - >> VL53L0X_get_info_from_device
  - >> VL53L0X_UpdateByte
  - >> VL53L0X_StaticInit
  - >> VL53L0X_StartMeasurement
  - >> VL53L0X_SetSequenceStepEnable
  - >> VL53L0X_GetWrapAroundCheckEnable
  - >> VL53L0X_GetSequenceStepEnables
  - >> VL53L0X_GetMeasurementDataReady
  - >> VL53L0X_GetInterruptMaskStatus
  - >> VL53L0X_GetFractionEnable
  - >> VL53L0X_DataInit
  - >> VL53L0X_ClearInterruptMask
  - >> VL53L0X_device_read_strobe

  VL53L0X_RdDWord (Thumb, 84 bytes, Stack size 32 bytes, vl53l0x_platform.o(i.VL53L0X_RdDWord))
  [Stack]

  - Max Depth = 88
  - Call Chain = VL53L0X_RdDWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> VL53L0X_get_info_from_device
  - >> VL53L0X_GetInterMeasurementPeriodMilliSeconds

  VL53L0X_RdWord (Thumb, 68 bytes, Stack size 32 bytes, vl53l0x_platform.o(i.VL53L0X_RdWord))
  [Stack]

  - Max Depth = 88
  - Call Chain = VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> perform_ref_signal_measurement
  - >> set_sequence_step_timeout
  - >> get_sequence_step_timeout
  - >> VL53L0X_get_pal_range_status
  - >> VL53L0X_get_offset_calibration_data_micro_meter
  - >> VL53L0X_StaticInit
  - >> VL53L0X_GetXTalkCompensationRateMegaCps
  - >> VL53L0X_GetLimitCheckValue
  - >> VL53L0X_GetInterruptThresholds
  - >> VL53L0X_GetInterMeasurementPeriodMilliSeconds

  VL53L0X_ReadMulti (Thumb, 62 bytes, Stack size 40 bytes, vl53l0x_platform.o(i.VL53L0X_ReadMulti))
  [Stack]

  - Max Depth = 96
  - Call Chain = VL53L0X_ReadMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> get_ref_spad_map
  - >> VL53L0X_GetRangingMeasurementData

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

  - >> Laser::Init()
  - >> VL53L0X_PerformSingleRangingMeasurement

  VL53L0X_SetGpioConfig (Thumb, 358 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_SetGpioConfig))
  [Stack]

  - Max Depth = 152
  - Call Chain = VL53L0X_SetGpioConfig ⇒ VL53L0X_UpdateByte ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_UpdateByte
  - >> VL53L0X_ClearInterruptMask
  [Called By]
  - >> VL53L0X_StaticInit

  VL53L0X_SetLimitCheckEnable (Thumb, 194 bytes, Stack size 40 bytes, vl53l0x_api.o(i.VL53L0X_SetLimitCheckEnable))
  [Stack]

  - Max Depth = 160
  - Call Chain = VL53L0X_SetLimitCheckEnable ⇒ VL53L0X_UpdateByte ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrWord
  - >> VL53L0X_UpdateByte
  [Called By]
  - >> VL53L0X_DataInit

  VL53L0X_SetLimitCheckValue (Thumb, 118 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_SetLimitCheckValue))
  [Stack]

  - Max Depth = 104
  - Call Chain = VL53L0X_SetLimitCheckValue ⇒ VL53L0X_WrWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrWord
  [Called By]
  - >> Laser::Init()
  - >> VL53L0X_DataInit

  VL53L0X_SetMeasurementTimingBudgetMicroSeconds (Thumb, 22 bytes, Stack size 16 bytes, vl53l0x_api.o(i.VL53L0X_SetMeasurementTimingBudgetMicroSeconds))
  [Stack]

  - Max Depth = 288
  - Call Chain = VL53L0X_SetMeasurementTimingBudgetMicroSeconds ⇒ VL53L0X_set_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_set_measurement_timing_budget_micro_seconds
  [Called By]
  - >> Laser::Init()
  - >> VL53L0X_SetSequenceStepEnable

  VL53L0X_SetRefCalibration (Thumb, 30 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_SetRefCalibration))
  [Stack]

  - Max Depth = 232
  - Call Chain = VL53L0X_SetRefCalibration ⇒ VL53L0X_set_ref_calibration ⇒ VL53L0X_ref_calibration_io ⇒ VL53L0X_UpdateByte ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_set_ref_calibration
  [Called By]
  - >> Laser::Init()

  VL53L0X_SetReferenceSpads (Thumb, 30 bytes, Stack size 24 bytes, vl53l0x_api.o(i.VL53L0X_SetReferenceSpads))
  [Stack]

  - Max Depth = 272
  - Call Chain = VL53L0X_SetReferenceSpads ⇒ VL53L0X_set_reference_spads ⇒ enable_ref_spads ⇒ get_ref_spad_map ⇒ VL53L0X_ReadMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_set_reference_spads
  [Called By]
  - >> Laser::Init()

  VL53L0X_SetSequenceStepEnable (Thumb, 196 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_SetSequenceStepEnable))
  [Stack]

  - Max Depth = 320
  - Call Chain = VL53L0X_SetSequenceStepEnable ⇒ VL53L0X_SetMeasurementTimingBudgetMicroSeconds ⇒ VL53L0X_set_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdByte
  - >> VL53L0X_SetMeasurementTimingBudgetMicroSeconds
  [Called By]
  - >> VL53L0X_StaticInit

  VL53L0X_StartMeasurement (Thumb, 268 bytes, Stack size 32 bytes, vl53l0x_api.o(i.VL53L0X_StartMeasurement))
  [Stack]

  - Max Depth = 208
  - Call Chain = VL53L0X_StartMeasurement ⇒ VL53L0X_CheckAndLoadInterruptSettings ⇒ VL53L0X_load_tuning_settings ⇒ VL53L0X_WriteMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdByte
  - >> VL53L0X_GetDeviceMode
  - >> VL53L0X_CheckAndLoadInterruptSettings
  [Called By]
  - >> VL53L0X_PerformSingleMeasurement

  VL53L0X_StaticInit (Thumb, 410 bytes, Stack size 120 bytes, vl53l0x_api.o(i.VL53L0X_StaticInit))
  [Stack]

  - Max Depth = 876
  - Call Chain = VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> get_sequence_step_timeout
  - >> VL53L0X_set_reference_spads
  - >> VL53L0X_perform_ref_spad_management
  - >> VL53L0X_load_tuning_settings
  - >> VL53L0X_get_info_from_device
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdWord
  - >> VL53L0X_RdByte
  - >> VL53L0X_SetSequenceStepEnable
  - >> VL53L0X_SetGpioConfig
  - >> VL53L0X_GetVcselPulsePeriod
  - >> VL53L0X_GetFractionEnable
  - >> VL53L0X_GetDeviceParameters
  - >> __aeabi_memclr4
  - >> __aeabi_memcpy4
  [Called By]
  - >> Laser::Init()

  VL53L0X_UpdateByte (Thumb, 62 bytes, Stack size 32 bytes, vl53l0x_platform.o(i.VL53L0X_UpdateByte))
  [Stack]

  - Max Depth = 120
  - Call Chain = VL53L0X_UpdateByte ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdByte
  [Called By]
  - >> VL53L0X_ref_calibration_io
  - >> VL53L0X_SetLimitCheckEnable
  - >> VL53L0X_SetGpioConfig

  VL53L0X_WrByte (Thumb, 46 bytes, Stack size 24 bytes, vl53l0x_platform.o(i.VL53L0X_WrByte))
  [Stack]

  - Max Depth = 80
  - Call Chain = VL53L0X_WrByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> perform_ref_signal_measurement
  - >> VL53L0X_ref_calibration_io
  - >> VL53L0X_perform_vhv_calibration
  - >> VL53L0X_perform_single_ref_calibration
  - >> VL53L0X_perform_phase_calibration
  - >> set_sequence_step_timeout
  - >> VL53L0X_set_reference_spads
  - >> VL53L0X_perform_ref_spad_management
  - >> VL53L0X_perform_ref_calibration
  - >> VL53L0X_get_pal_range_status
  - >> VL53L0X_get_info_from_device
  - >> VL53L0X_UpdateByte
  - >> VL53L0X_StaticInit
  - >> VL53L0X_StartMeasurement
  - >> VL53L0X_SetSequenceStepEnable
  - >> VL53L0X_SetGpioConfig
  - >> VL53L0X_DataInit
  - >> VL53L0X_ClearInterruptMask
  - >> VL53L0X_CheckAndLoadInterruptSettings
  - >> VL53L0X_device_read_strobe

  VL53L0X_WrWord (Thumb, 50 bytes, Stack size 24 bytes, vl53l0x_platform.o(i.VL53L0X_WrWord))
  [Stack]

  - Max Depth = 80
  - Call Chain = VL53L0X_WrWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> set_sequence_step_timeout
  - >> VL53L0X_SetLimitCheckValue
  - >> VL53L0X_SetLimitCheckEnable

  VL53L0X_WriteMulti (Thumb, 64 bytes, Stack size 32 bytes, vl53l0x_platform.o(i.VL53L0X_WriteMulti))
  [Stack]

  - Max Depth = 88
  - Call Chain = VL53L0X_WriteMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> __aeabi_memcpy
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  [Called By]
  - >> set_ref_spad_map
  - >> VL53L0X_load_tuning_settings

  VL53L0X_calc_dmax (Thumb, 392 bytes, Stack size 116 bytes, vl53l0x_api_core.o(i.VL53L0X_calc_dmax))
  [Stack]

  - Max Depth = 116
  - Call Chain = VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_isqrt
  [Called By]
  - >> VL53L0X_calc_sigma_estimate

  VL53L0X_calc_macro_period_ps (Thumb, 22 bytes, Stack size 16 bytes, vl53l0x_api_core.o(i.VL53L0X_calc_macro_period_ps))
  [Stack]

  - Max Depth = 16
  - Call Chain = VL53L0X_calc_macro_period_ps
  [Called By]
  - >> VL53L0X_calc_timeout_us
  - >> VL53L0X_calc_timeout_mclks

  VL53L0X_calc_sigma_estimate (Thumb, 762 bytes, Stack size 224 bytes, vl53l0x_api_core.o(i.VL53L0X_calc_sigma_estimate))
  [Stack]

  - Max Depth = 340
  - Call Chain = VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_get_total_signal_rate
  - >> VL53L0X_isqrt
  - >> VL53L0X_get_total_xtalk_rate
  - >> VL53L0X_calc_timeout_mclks
  - >> VL53L0X_calc_dmax
  [Called By]
  - >> VL53L0X_get_pal_range_status

  VL53L0X_calc_timeout_mclks (Thumb, 52 bytes, Stack size 28 bytes, vl53l0x_api_core.o(i.VL53L0X_calc_timeout_mclks))
  [Stack]

  - Max Depth = 44
  - Call Chain = VL53L0X_calc_timeout_mclks ⇒ VL53L0X_calc_macro_period_ps
  [Calls]
  - >> VL53L0X_calc_macro_period_ps
  [Called By]
  - >> set_sequence_step_timeout
  - >> VL53L0X_calc_sigma_estimate

  VL53L0X_calc_timeout_us (Thumb, 52 bytes, Stack size 28 bytes, vl53l0x_api_core.o(i.VL53L0X_calc_timeout_us))
  [Stack]

  - Max Depth = 44
  - Call Chain = VL53L0X_calc_timeout_us ⇒ VL53L0X_calc_macro_period_ps
  [Calls]
  - >> VL53L0X_calc_macro_period_ps
  [Called By]
  - >> get_sequence_step_timeout

  VL53L0X_decode_timeout (Thumb, 14 bytes, Stack size 0 bytes, vl53l0x_api_core.o(i.VL53L0X_decode_timeout))
  [Called By]

  - >> set_sequence_step_timeout
  - >> get_sequence_step_timeout

  VL53L0X_decode_vcsel_period (Thumb, 12 bytes, Stack size 0 bytes, vl53l0x_api_core.o(i.VL53L0X_decode_vcsel_period))
  [Called By]

  - >> VL53L0X_get_vcsel_pulse_period

  VL53L0X_device_read_strobe (Thumb, 82 bytes, Stack size 24 bytes, vl53l0x_api_core.o(i.VL53L0X_device_read_strobe))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_device_read_strobe ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdByte
  [Called By]
  - >> VL53L0X_get_info_from_device

  VL53L0X_encode_timeout (Thumb, 40 bytes, Stack size 8 bytes, vl53l0x_api_core.o(i.VL53L0X_encode_timeout))
  [Stack]

  - Max Depth = 8
  - Call Chain = VL53L0X_encode_timeout
  [Called By]
  - >> set_sequence_step_timeout

  VL53L0X_get_info_from_device (Thumb, 1354 bytes, Stack size 112 bytes, vl53l0x_api_core.o(i.VL53L0X_get_info_from_device))
  [Stack]

  - Max Depth = 224
  - Call Chain = VL53L0X_get_info_from_device ⇒ VL53L0X_device_read_strobe ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdDWord
  - >> VL53L0X_RdByte
  - >> VL53L0X_PollingDelay
  - >> strcpy
  - >> VL53L0X_device_read_strobe
  [Called By]
  - >> VL53L0X_StaticInit

  VL53L0X_get_measurement_timing_budget_micro_seconds (Thumb, 238 bytes, Stack size 64 bytes, vl53l0x_api_core.o(i.VL53L0X_get_measurement_timing_budget_micro_seconds))
  [Stack]

  - Max Depth = 264
  - Call Chain = VL53L0X_get_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> get_sequence_step_timeout
  - >> VL53L0X_GetSequenceStepEnables
  [Called By]
  - >> VL53L0X_GetMeasurementTimingBudgetMicroSeconds

  VL53L0X_get_offset_calibration_data_micro_meter (Thumb, 86 bytes, Stack size 32 bytes, vl53l0x_api_calibration.o(i.VL53L0X_get_offset_calibration_data_micro_meter))
  [Stack]

  - Max Depth = 120
  - Call Chain = VL53L0X_get_offset_calibration_data_micro_meter ⇒ VL53L0X_RdWord ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdWord
  [Called By]
  - >> VL53L0X_GetOffsetCalibrationDataMicroMeter

  VL53L0X_get_pal_range_status (Thumb, 564 bytes, Stack size 112 bytes, vl53l0x_api_core.o(i.VL53L0X_get_pal_range_status))
  [Stack]

  - Max Depth = 452
  - Call Chain = VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdWord
  - >> VL53L0X_GetLimitCheckValue
  - >> VL53L0X_GetLimitCheckEnable
  - >> VL53L0X_calc_sigma_estimate
  [Called By]
  - >> VL53L0X_GetRangingMeasurementData

  VL53L0X_get_total_signal_rate (Thumb, 40 bytes, Stack size 24 bytes, vl53l0x_api_core.o(i.VL53L0X_get_total_signal_rate))
  [Stack]

  - Max Depth = 64
  - Call Chain = VL53L0X_get_total_signal_rate ⇒ VL53L0X_get_total_xtalk_rate ⇒ VL53L0X_GetXTalkCompensationEnable
  [Calls]
  - >> VL53L0X_get_total_xtalk_rate
  [Called By]
  - >> VL53L0X_calc_sigma_estimate

  VL53L0X_get_total_xtalk_rate (Thumb, 58 bytes, Stack size 32 bytes, vl53l0x_api_core.o(i.VL53L0X_get_total_xtalk_rate))
  [Stack]

  - Max Depth = 40
  - Call Chain = VL53L0X_get_total_xtalk_rate ⇒ VL53L0X_GetXTalkCompensationEnable
  [Calls]
  - >> VL53L0X_GetXTalkCompensationEnable
  [Called By]
  - >> VL53L0X_get_total_signal_rate
  - >> VL53L0X_calc_sigma_estimate

  VL53L0X_get_vcsel_pulse_period (Thumb, 70 bytes, Stack size 24 bytes, vl53l0x_api_core.o(i.VL53L0X_get_vcsel_pulse_period))
  [Stack]

  - Max Depth = 112
  - Call Chain = VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdByte
  - >> VL53L0X_decode_vcsel_period
  [Called By]
  - >> VL53L0X_GetVcselPulsePeriod

  VL53L0X_isqrt (Thumb, 44 bytes, Stack size 0 bytes, vl53l0x_api_core.o(i.VL53L0X_isqrt))
  [Called By]

  - >> VL53L0X_calc_sigma_estimate
  - >> VL53L0X_calc_dmax

  VL53L0X_load_tuning_settings (Thumb, 234 bytes, Stack size 56 bytes, vl53l0x_api_core.o(i.VL53L0X_load_tuning_settings))
  [Stack]

  - Max Depth = 144
  - Call Chain = VL53L0X_load_tuning_settings ⇒ VL53L0X_WriteMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WriteMulti
  [Called By]
  - >> VL53L0X_StaticInit
  - >> VL53L0X_CheckAndLoadInterruptSettings

  VL53L0X_measurement_poll_for_completion (Thumb, 66 bytes, Stack size 24 bytes, vl53l0x_api_core.o(i.VL53L0X_measurement_poll_for_completion))
  [Stack]

  - Max Depth = 168
  - Call Chain = VL53L0X_measurement_poll_for_completion ⇒ VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_PollingDelay
  - >> VL53L0X_GetMeasurementDataReady
  [Called By]
  - >> VL53L0X_perform_single_ref_calibration
  - >> VL53L0X_PerformSingleMeasurement

  VL53L0X_perform_phase_calibration (Thumb, 124 bytes, Stack size 56 bytes, vl53l0x_api_calibration.o(i.VL53L0X_perform_phase_calibration))
  [Stack]

  - Max Depth = 240
  - Call Chain = VL53L0X_perform_phase_calibration ⇒ VL53L0X_perform_single_ref_calibration ⇒ VL53L0X_measurement_poll_for_completion ⇒ VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_ref_calibration_io
  - >> VL53L0X_perform_single_ref_calibration
  - >> VL53L0X_WrByte
  [Called By]
  - >> VL53L0X_perform_ref_calibration

  VL53L0X_perform_ref_calibration (Thumb, 76 bytes, Stack size 32 bytes, vl53l0x_api_calibration.o(i.VL53L0X_perform_ref_calibration))
  [Stack]

  - Max Depth = 272
  - Call Chain = VL53L0X_perform_ref_calibration ⇒ VL53L0X_perform_vhv_calibration ⇒ VL53L0X_perform_single_ref_calibration ⇒ VL53L0X_measurement_poll_for_completion ⇒ VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_perform_vhv_calibration
  - >> VL53L0X_perform_phase_calibration
  - >> VL53L0X_WrByte
  [Called By]
  - >> VL53L0X_perform_ref_spad_management
  - >> VL53L0X_PerformRefCalibration

  VL53L0X_perform_ref_spad_management (Thumb, 658 bytes, Stack size 128 bytes, vl53l0x_api_calibration.o(i.VL53L0X_perform_ref_spad_management))
  [Stack]

  - Max Depth = 756
  - Call Chain = VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> set_ref_spad_map
  - >> perform_ref_signal_measurement
  - >> is_aperture
  - >> get_next_good_spad
  - >> enable_spad_bit
  - >> enable_ref_spads
  - >> VL53L0X_perform_ref_calibration
  - >> VL53L0X_WrByte
  - >> __aeabi_memcpy4
  [Called By]
  - >> VL53L0X_StaticInit
  - >> VL53L0X_PerformRefSpadManagement

  VL53L0X_perform_single_ref_calibration (Thumb, 64 bytes, Stack size 16 bytes, vl53l0x_api_calibration.o(i.VL53L0X_perform_single_ref_calibration))
  [Stack]

  - Max Depth = 184
  - Call Chain = VL53L0X_perform_single_ref_calibration ⇒ VL53L0X_measurement_poll_for_completion ⇒ VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_measurement_poll_for_completion
  - >> VL53L0X_WrByte
  - >> VL53L0X_ClearInterruptMask
  [Called By]
  - >> VL53L0X_perform_vhv_calibration
  - >> VL53L0X_perform_phase_calibration

  VL53L0X_perform_vhv_calibration (Thumb, 126 bytes, Stack size 56 bytes, vl53l0x_api_calibration.o(i.VL53L0X_perform_vhv_calibration))
  [Stack]

  - Max Depth = 240
  - Call Chain = VL53L0X_perform_vhv_calibration ⇒ VL53L0X_perform_single_ref_calibration ⇒ VL53L0X_measurement_poll_for_completion ⇒ VL53L0X_GetMeasurementDataReady ⇒ VL53L0X_GetInterruptMaskStatus ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_ref_calibration_io
  - >> VL53L0X_perform_single_ref_calibration
  - >> VL53L0X_WrByte
  [Called By]
  - >> VL53L0X_perform_ref_calibration

  VL53L0X_ref_calibration_io (Thumb, 176 bytes, Stack size 40 bytes, vl53l0x_api_calibration.o(i.VL53L0X_ref_calibration_io))
  [Stack]

  - Max Depth = 160
  - Call Chain = VL53L0X_ref_calibration_io ⇒ VL53L0X_UpdateByte ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_UpdateByte
  - >> VL53L0X_RdByte
  [Called By]
  - >> VL53L0X_perform_vhv_calibration
  - >> VL53L0X_perform_phase_calibration
  - >> VL53L0X_set_ref_calibration

  VL53L0X_set_measurement_timing_budget_micro_seconds (Thumb, 294 bytes, Stack size 72 bytes, vl53l0x_api_core.o(i.VL53L0X_set_measurement_timing_budget_micro_seconds))
  [Stack]

  - Max Depth = 272
  - Call Chain = VL53L0X_set_measurement_timing_budget_micro_seconds ⇒ get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> set_sequence_step_timeout
  - >> get_sequence_step_timeout
  - >> VL53L0X_GetSequenceStepEnables
  [Called By]
  - >> VL53L0X_SetMeasurementTimingBudgetMicroSeconds

  VL53L0X_set_ref_calibration (Thumb, 46 bytes, Stack size 48 bytes, vl53l0x_api_calibration.o(i.VL53L0X_set_ref_calibration))
  [Stack]

  - Max Depth = 208
  - Call Chain = VL53L0X_set_ref_calibration ⇒ VL53L0X_ref_calibration_io ⇒ VL53L0X_UpdateByte ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_ref_calibration_io
  [Called By]
  - >> VL53L0X_SetRefCalibration

  VL53L0X_set_reference_spads (Thumb, 194 bytes, Stack size 64 bytes, vl53l0x_api_calibration.o(i.VL53L0X_set_reference_spads))
  [Stack]

  - Max Depth = 248
  - Call Chain = VL53L0X_set_reference_spads ⇒ enable_ref_spads ⇒ get_ref_spad_map ⇒ VL53L0X_ReadMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> is_aperture
  - >> enable_ref_spads
  - >> VL53L0X_WrByte
  [Called By]
  - >> VL53L0X_StaticInit
  - >> VL53L0X_SetReferenceSpads

  bubbleSort(Ball*, unsigned char, bool) (Thumb, 118 bytes, Stack size 20 bytes, lidar_1.o(i._Z10bubbleSortP4Ballhb))
  [Stack]

  - Max Depth = 20
  - Call Chain = bubbleSort(Ball*, unsigned char, bool)
  [Called By]
  - >> MovementController::doTick()

  quickSortX(Point*, unsigned char, unsigned char) (Thumb, 132 bytes, Stack size 32 bytes, lidar_1.o(i._Z10quickSortXP5Pointhh))
  [Stack]

  - Max Depth = 32 + In Cycle
  - Call Chain = quickSortX(Point*, unsigned char, unsigned char) ⇒ quickSortX(Point*, unsigned char, unsigned char) (Cycle)
  [Calls]
  - >> quickSortX(Point*, unsigned char, unsigned char)
  [Called By]
  - >> Lidar::findLines()
  - >> quickSortX(Point*, unsigned char, unsigned char)

  quickSortY(Point*, unsigned char, unsigned char) (Thumb, 144 bytes, Stack size 32 bytes, lidar_1.o(i._Z10quickSortYP5Pointhh))
  [Stack]

  - Max Depth = 32 + In Cycle
  - Call Chain = quickSortY(Point*, unsigned char, unsigned char) ⇒ quickSortY(Point*, unsigned char, unsigned char) (Cycle)
  [Calls]
  - >> quickSortY(Point*, unsigned char, unsigned char)
  [Called By]
  - >> Lidar::findLines()
  - >> quickSortY(Point*, unsigned char, unsigned char)

  silver_reg(LineSensors*) (Thumb, 72 bytes, Stack size 32 bytes, line.o(i._Z10silver_regP11LineSensors))
  [Stack]

  - Max Depth = 64
  - Call Chain = silver_reg(LineSensors*) ⇒ LineSensors::getValue(unsigned char) ⇒ map(int, int, int, int, int)
  [Calls]
  - >> LineSensors::getValue(unsigned char)
  [Called By]
  - >> main

  abs(short) (Thumb, 16 bytes, Stack size 0 bytes, motors.o(i._Z3abss))
  [Called By]

  - >> Motors::m1(short)
  - >> Motors::m4(short)
  - >> Motors::m3(short)
  - >> Motors::m2(short)

  map(int, int, int, int, int) (Thumb, 22 bytes, Stack size 16 bytes, line_sensors.o(i._Z3mapiiiii))
  [Stack]

  - Max Depth = 16
  - Call Chain = map(int, int, int, int, int)
  [Called By]
  - >> LineSensors::getValue(unsigned char)
  - >> main

  print(const char*) (Thumb, 26 bytes, Stack size 16 bytes, main.o(i._Z5printPKc))
  [Stack]

  - Max Depth = 32
  - Call Chain = print(const char*) ⇒ Usart3::write(unsigned char)
  [Calls]
  - >> Usart3::write(unsigned char)
  [Called By]
  - >> MovementController::doTick()
  - >> main
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  print(int) (Thumb, 130 bytes, Stack size 48 bytes, main.o(i._Z5printi))
  [Stack]

  - Max Depth = 240
  - Call Chain = print(int) ⇒ __hardfp_log10 ⇒ log ⇒ __hardfp_log ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> Usart3::write(unsigned char)
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __hardfp_log10
  [Called By]
  - >> MovementController::doTick()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned) (Thumb, 112 bytes, Stack size 24 bytes, vl53l0x_platform.o(i._Z8_I2CReadP13VL53L0X_Dev_tPhj))
  [Stack]

  - Max Depth = 56
  - Call Chain = _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readByte() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  - >> I2c::begin()
  [Called By]
  - >> VL53L0X_ReadMulti
  - >> VL53L0X_RdWord
  - >> VL53L0X_RdDWord
  - >> VL53L0X_RdByte

  line_reg(LineSensors*) (Thumb, 728 bytes, Stack size 136 bytes, line.o(i._Z8line_regP11LineSensors))
  [Stack]

  - Max Depth = 312
  - Call Chain = line_reg(LineSensors*) ⇒ LineSensors::isRightOnGreen() ⇒ Adafruit_TCS34725::getRGB(float*, float*, float*) ⇒ Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*) ⇒ Adafruit_TCS34725::read16(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> time_service::millis()
  - >> time_service::micros()
  - >> LineSensors::getValue(unsigned char)
  - >> LineSensors::isRightOnGreen()
  - >> LineSensors::isLeftOnGreen()
  - >> __aeabi_dmul
  - >> __aeabi_ul2d
  - >> __aeabi_l2d
  - >> __aeabi_i2d
  - >> __aeabi_d2lz
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_dadd
  [Called By]
  - >> main

  wall_reg(LineSensors*, bool*) (Thumb, 126 bytes, Stack size 40 bytes, line.o(i._Z8wall_regP11LineSensorsPb))
  [Stack]

  - Max Depth = 660
  - Call Chain = wall_reg(LineSensors*, bool*) ⇒ Laser::read() ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> Laser::read()
  - >> time_service::micros()
  - >> __aeabi_uldivmod
  [Called By]
  - >> main

  _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) (Thumb, 104 bytes, Stack size 24 bytes, vl53l0x_platform.o(i._Z9_I2CWriteP13VL53L0X_Dev_tPhj))
  [Stack]

  - Max Depth = 56
  - Call Chain = _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readAck()
  - >> I2c::end()
  - >> I2c::begin()
  [Called By]
  - >> VL53L0X_WriteMulti
  - >> VL53L0X_WrWord
  - >> VL53L0X_WrByte
  - >> VL53L0X_ReadMulti
  - >> VL53L0X_RdWord
  - >> VL53L0X_RdDWord
  - >> VL53L0X_RdByte

  constrain(float, float, float) (Thumb, 52 bytes, Stack size 0 bytes, motors.o(i._Z9constrainfff))
  [Called By]

  - >> Motors::drive(double, double, double)
  - >> main
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::buildHough()

  LineSensors::isLeftOnGreen() (Thumb, 64 bytes, Stack size 24 bytes, line_sensors.o(i._ZN11LineSensors13isLeftOnGreenEv))
  [Stack]

  - Max Depth = 176
  - Call Chain = LineSensors::isLeftOnGreen() ⇒ Adafruit_TCS34725::getRGB(float*, float*, float*) ⇒ Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*) ⇒ Adafruit_TCS34725::read16(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::getRGB(float*, float*, float*)
  [Called By]
  - >> line_reg(LineSensors*)
  - >> main

  LineSensors::isRightOnGreen() (Thumb, 64 bytes, Stack size 24 bytes, line_sensors.o(i._ZN11LineSensors14isRightOnGreenEv))
  [Stack]

  - Max Depth = 176
  - Call Chain = LineSensors::isRightOnGreen() ⇒ Adafruit_TCS34725::getRGB(float*, float*, float*) ⇒ Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*) ⇒ Adafruit_TCS34725::read16(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::getRGB(float*, float*, float*)
  [Called By]
  - >> line_reg(LineSensors*)
  - >> main

  LineSensors::start() (Thumb, 28 bytes, Stack size 8 bytes, line_sensors.o(i._ZN11LineSensors5startEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = LineSensors::start()
  [Calls]
  - >> ADC_SoftwareStartConv
  - >> ADC_DMACmd
  - >> ADC_Cmd
  [Called By]
  - >> main

  LineSensors::isCross() (Thumb, 48 bytes, Stack size 16 bytes, line_sensors.o(i._ZN11LineSensors7isCrossEv))
  [Stack]

  - Max Depth = 48
  - Call Chain = LineSensors::isCross() ⇒ LineSensors::getValue(unsigned char) ⇒ map(int, int, int, int, int)
  [Calls]
  - >> LineSensors::getValue(unsigned char)
  [Called By]
  - >> main

  LineSensors::getValue(unsigned char) (Thumb, 42 bytes, Stack size 16 bytes, line_sensors.o(i._ZN11LineSensors8getValueEh))
  [Stack]

  - Max Depth = 32
  - Call Chain = LineSensors::getValue(unsigned char) ⇒ map(int, int, int, int, int)
  [Calls]
  - >> map(int, int, int, int, int)
  [Called By]
  - >> LineSensors::isCross()
  - >> line_reg(LineSensors*)
  - >> silver_reg(LineSensors*)
  - >> main

  LineSensors::readSHARP() (Thumb, 96 bytes, Stack size 48 bytes, line_sensors.o(i._ZN11LineSensors9readSHARPEv))
  [Stack]

  - Max Depth = 312
  - Call Chain = LineSensors::readSHARP() ⇒ __hardfp_pow ⇒ sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_ui2d
  - >> __aeabi_ddiv
  - >> __hardfp_pow
  [Called By]
  - >> main

  LineSensors::LineSensors() (Thumb, 700 bytes, Stack size 136 bytes, line_sensors.o(i._ZN11LineSensorsC1Ev))
  [Stack]

  - Max Depth = 240
  - Call Chain = LineSensors::LineSensors() ⇒ Adafruit_TCS34725::begin(I2c*) ⇒ Adafruit_TCS34725::init() ⇒ Adafruit_TCS34725::setGain(tcs34725Gain_t) ⇒ Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::I2c()
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> DMA_Init
  - >> DMA_DeInit
  - >> DMA_Cmd
  - >> ADC_RegularChannelConfig
  - >> ADC_Init
  - >> ADC_EOCOnEachRegularChannelCmd
  - >> ADC_DMARequestAfterLastTransferCmd
  - >> ADC_CommonInit
  - >> Adafruit_TCS34725::Adafruit_TCS34725(unsigned char, tcs34725Gain_t)
  - >> Adafruit_TCS34725::begin(I2c*)
  [Called By]
  - >> main

  LineSensors::LineSensors__sub_object() (Thumb, 0 bytes, Stack size 136 bytes, line_sensors.o(i._ZN11LineSensorsC1Ev), UNUSED)

  time_service::Init() (Thumb, 96 bytes, Stack size 16 bytes, time_service.o(i._ZN12time_service4InitEv))
  [Stack]

  - Max Depth = 16
  - Call Chain = time_service::Init()
  [Calls]
  - >> RCC_APB2PeriphClockCmd
  [Called By]
  - >> Robot::Init()

  time_service::micros() (Thumb, 26 bytes, Stack size 12 bytes, time_service.o(i._ZN12time_service6microsEv))
  [Stack]

  - Max Depth = 12
  - Call Chain = time_service::micros()
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> wall_reg(LineSensors*, bool*)
  - >> line_reg(LineSensors*)
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()

  time_service::millis() (Thumb, 18 bytes, Stack size 8 bytes, time_service.o(i._ZN12time_service6millisEv))
  [Stack]

  - Max Depth = 56
  - Call Chain = time_service::millis() ⇒ __aeabi_uldivmod
  [Calls]
  - >> __aeabi_uldivmod
  [Called By]
  - >> MovementController::doTick()
  - >> line_reg(LineSensors*)
  - >> main
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  time_service::delayms(unsigned long long) (Thumb, 48 bytes, Stack size 20 bytes, time_service.o(i._ZN12time_service7delaymsEy))
  [Stack]

  - Max Depth = 20
  - Call Chain = time_service::delayms(unsigned long long)
  [Called By]
  - >> main
  - >> MPU9250_::set_acc_gyro_to_calibration()
  - >> MPU9250_::initMPU9250()
  - >> MPU9250_::initAK8963()
  - >> Lidar::buildHough()
  - >> Adafruit_TCS34725::enable()

  time_service::delayus(unsigned long long) (Thumb, 48 bytes, Stack size 16 bytes, time_service.o(i._ZN12time_service7delayusEy))
  [Stack]

  - Max Depth = 64
  - Call Chain = time_service::delayus(unsigned long long) ⇒ __aeabi_uldivmod
  [Calls]
  - >> __aeabi_uldivmod
  [Called By]
  - >> main
  - >> VL53L0X_PollingDelay

  time_service::startTime() (Thumb, 18 bytes, Stack size 0 bytes, time_service.o(i._ZN12time_service9startTimeEv))
  [Called By]

  - >> Robot::Init()

  MPU9250Setting::MPU9250Setting() (Thumb, 32 bytes, Stack size 0 bytes, main.o(i._ZN14MPU9250SettingC1Ev))
  [Called By]

  - >> main
  - >> MPU9250_::MPU9250_()

  MPU9250Setting::MPU9250Setting__sub_object() (Thumb, 0 bytes, Stack size 0 bytes, main.o(i._ZN14MPU9250SettingC1Ev), UNUSED)

  QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*) (Thumb, 1582 bytes, Stack size 128 bytes, main.o(i._ZN16QuaternionFilter6mahonyEfffffffffPf))
  [Stack]

  - Max Depth = 168
  - Call Chain = QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*) ⇒ std::sqrt(float) ⇒ __hardfp_sqrtf ⇒ __set_errno
  [Calls]
  - >> std::sqrt(float)
  - >> __aeabi_f2d
  - >> __aeabi_cdrcmple
  - >> __aeabi_dmul
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)

  QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*) (Thumb, 310 bytes, Stack size 80 bytes, main.o(i._ZN16QuaternionFilter6updateEfffffffffPf))
  [Stack]

  - Max Depth = 656
  - Call Chain = QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*) ⇒ QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*) ⇒ __hardfp_sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> time_service::micros()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> __aeabi_dmul
  - >> __aeabi_ul2d
  - >> __hardfp_fabs
  [Called By]
  - >> MPU9250_::update()

  QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*) (Thumb, 9394 bytes, Stack size 504 bytes, main.o(i._ZN16QuaternionFilter8madgwickEfffffffffPf))
  [Stack]

  - Max Depth = 576
  - Call Chain = QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*) ⇒ __hardfp_sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_cdcmpeq
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  - >> __aeabi_dneg
  - >> __hardfp_sqrt
  [Called By]
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)

  QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*) (Thumb, 582 bytes, Stack size 80 bytes, main.o(i._ZN16QuaternionFilter9no_filterEfffffffffPf))
  [Stack]

  - Max Depth = 120
  - Call Chain = QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*) ⇒ std::sqrt(float) ⇒ __hardfp_sqrtf ⇒ __set_errno
  [Calls]
  - >> std::sqrt(float)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)

  QuaternionFilter::QuaternionFilter() (Thumb, 156 bytes, Stack size 24 bytes, main.o(i._ZN16QuaternionFilterC1Ev))
  [Stack]

  - Max Depth = 64
  - Call Chain = QuaternionFilter::QuaternionFilter() ⇒ std::sqrt(float) ⇒ __hardfp_sqrtf ⇒ __set_errno
  [Calls]
  - >> std::sqrt(float)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  [Called By]
  - >> MPU9250_::MPU9250_()

  QuaternionFilter::QuaternionFilter__sub_object() (Thumb, 0 bytes, Stack size 24 bytes, main.o(i._ZN16QuaternionFilterC1Ev), UNUSED)

  Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*) (Thumb, 62 bytes, Stack size 24 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS3472510getRawDataEPtS0_S0_S0_))
  [Stack]

  - Max Depth = 80
  - Call Chain = Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*) ⇒ Adafruit_TCS34725::read16(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::read16(unsigned char)
  [Called By]
  - >> Adafruit_TCS34725::getRGB(float*, float*, float*)

  Adafruit_TCS34725::setIntegrationTime(unsigned char) (Thumb, 20 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS3472518setIntegrationTimeEh))
  [Stack]

  - Max Depth = 72
  - Call Chain = Adafruit_TCS34725::setIntegrationTime(unsigned char) ⇒ Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  [Called By]
  - >> Adafruit_TCS34725::init()

  Adafruit_TCS34725::init() (Thumb, 60 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347254initEv))
  [Stack]

  - Max Depth = 88
  - Call Chain = Adafruit_TCS34725::init() ⇒ Adafruit_TCS34725::setGain(tcs34725Gain_t) ⇒ Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::setGain(tcs34725Gain_t)
  - >> Adafruit_TCS34725::enable()
  - >> Adafruit_TCS34725::read8(unsigned char)
  - >> Adafruit_TCS34725::setIntegrationTime(unsigned char)
  [Called By]
  - >> Adafruit_TCS34725::begin(I2c*)

  Adafruit_TCS34725::begin(I2c*) (Thumb, 16 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347255beginEP3I2c))
  [Stack]

  - Max Depth = 104
  - Call Chain = Adafruit_TCS34725::begin(I2c*) ⇒ Adafruit_TCS34725::init() ⇒ Adafruit_TCS34725::setGain(tcs34725Gain_t) ⇒ Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::init()
  [Called By]
  - >> LineSensors::LineSensors()

  Adafruit_TCS34725::read8(unsigned char) (Thumb, 78 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347255read8Eh))
  [Stack]

  - Max Depth = 56
  - Call Chain = Adafruit_TCS34725::read8(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  [Called By]
  - >> Adafruit_TCS34725::init()

  Adafruit_TCS34725::enable() (Thumb, 62 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347256enableEv))
  [Stack]

  - Max Depth = 72
  - Call Chain = Adafruit_TCS34725::enable() ⇒ Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> time_service::delayms(unsigned long long)
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  [Called By]
  - >> Adafruit_TCS34725::init()

  Adafruit_TCS34725::getRGB(float*, float*, float*) (Thumb, 246 bytes, Stack size 72 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347256getRGBEPfS0_S0_))
  [Stack]

  - Max Depth = 152
  - Call Chain = Adafruit_TCS34725::getRGB(float*, float*, float*) ⇒ Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*) ⇒ Adafruit_TCS34725::read16(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_d2f
  [Called By]
  - >> LineSensors::isRightOnGreen()
  - >> LineSensors::isLeftOnGreen()

  Adafruit_TCS34725::read16(unsigned char) (Thumb, 94 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347256read16Eh))
  [Stack]

  - Max Depth = 56
  - Call Chain = Adafruit_TCS34725::read16(unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  [Called By]
  - >> Adafruit_TCS34725::getRawData(unsigned short*, unsigned short*, unsigned short*, unsigned short*)

  Adafruit_TCS34725::write8(unsigned char, unsigned) (Thumb, 62 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347256write8Ehj))
  [Stack]

  - Max Depth = 56
  - Call Chain = Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  [Called By]
  - >> Adafruit_TCS34725::setGain(tcs34725Gain_t)
  - >> Adafruit_TCS34725::enable()
  - >> Adafruit_TCS34725::setIntegrationTime(unsigned char)

  Adafruit_TCS34725::setGain(tcs34725Gain_t) (Thumb, 20 bytes, Stack size 16 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS347257setGainE14tcs34725Gain_t))
  [Stack]

  - Max Depth = 72
  - Call Chain = Adafruit_TCS34725::setGain(tcs34725Gain_t) ⇒ Adafruit_TCS34725::write8(unsigned char, unsigned) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  [Called By]
  - >> Adafruit_TCS34725::init()

  Adafruit_TCS34725::Adafruit_TCS34725(unsigned char, tcs34725Gain_t) (Thumb, 10 bytes, Stack size 0 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS34725C1Eh14tcs34725Gain_t))
  [Called By]

  - >> LineSensors::LineSensors()

  Adafruit_TCS34725::Adafruit_TCS34725__sub_object(unsigned char, tcs34725Gain_t) (Thumb, 0 bytes, Stack size 0 bytes, adafruit_tcs34725.o(i._ZN17Adafruit_TCS34725C1Eh14tcs34725Gain_t), UNUSED)

  MovementController::deinit() (Thumb, 6 bytes, Stack size 0 bytes, lidar_1.o(i._ZN18MovementController6deinitEv))
  [Called By]

  - >> main

  MovementController::doTick() (Thumb, 2872 bytes, Stack size 88 bytes, lidar_1.o(i._ZN18MovementController6doTickEv))
  [Stack]

  - Max Depth = 780
  - Call Chain = MovementController::doTick() ⇒ Lidar::buildHough() ⇒ Laser::read() ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> Servos::s2(float)
  - >> Motors::drive(double, double, double)
  - >> Motors::stop()
  - >> time_service::millis()
  - >> std::abs(double)
  - >> print(int)
  - >> print(const char*)
  - >> Servos::s4(float)
  - >> Lidar::findLines()
  - >> Lidar::blur()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()
  - >> bubbleSort(Ball*, unsigned char, bool)
  - >> __hardfp_acos
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ui2d
  - >> __aeabi_i2d
  - >> __aeabi_d2uiz
  - >> __aeabi_d2iz
  - >> __aeabi_cdcmpeq
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  - >> __aeabi_dneg
  - >> __hardfp_sqrt
  - >> __hardfp_sin
  - >> __hardfp_cos
  - >> __hardfp_atan2
  [Called By]
  - >> main

  MovementController::MovementController(Motors&, Servos&, Lidar&) (Thumb, 52 bytes, Stack size 24 bytes, lidar_1.o(i._ZN18MovementControllerC1ER6MotorsR6ServosR5Lidar))
  [Stack]

  - Max Depth = 32
  - Call Chain = MovementController::MovementController(Motors&, Servos&, Lidar&) ⇒ __aeabi_memcpy4
  [Calls]
  - >> __aeabi_memcpy4
  - >> __aeabi_memcpy
  [Called By]
  - >> main

  MovementController::MovementController__sub_object(Motors&, Servos&, Lidar&) (Thumb, 0 bytes, Stack size 24 bytes, lidar_1.o(i._ZN18MovementControllerC1ER6MotorsR6ServosR5Lidar), UNUSED)

  I2c::generateAck() (Thumb, 66 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c11generateAckEv))
  [Stack]

  - Max Depth = 16
  - Call Chain = I2c::generateAck() ⇒ I2c::m_sclHigh()
  [Calls]
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::generateNAck() (Thumb, 66 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c12generateNAckEv))
  [Stack]

  - Max Depth = 16
  - Call Chain = I2c::generateNAck() ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> Adafruit_TCS34725::read8(unsigned char)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::end() (Thumb, 74 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c3endEv))
  [Stack]

  - Max Depth = 24
  - Call Chain = I2c::end() ⇒ I2c::m_sclRead()
  [Calls]
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclRead()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> Adafruit_TCS34725::read8(unsigned char)
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::begin(unsigned char, bool) (Thumb, 108 bytes, Stack size 16 bytes, i2c.o(i._ZN3I2c5beginEhb))
  [Stack]

  - Max Depth = 40
  - Call Chain = I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::m_sdaRead()
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> Adafruit_TCS34725::read8(unsigned char)

  I2c::begin() (Thumb, 74 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c5beginEv))
  [Stack]

  - Max Depth = 24
  - Call Chain = I2c::begin() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> I2c::m_sdaRead()
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::m_delay() (Thumb, 28 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c7m_delayEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = I2c::m_delay()
  [Called By]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  - >> I2c::begin()

  I2c::readAck() (Thumb, 68 bytes, Stack size 16 bytes, i2c.o(i._ZN3I2c7readAckEv))
  [Stack]

  - Max Depth = 32
  - Call Chain = I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> I2c::m_sdaRead()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> Adafruit_TCS34725::read8(unsigned char)
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::m_sclLow() (Thumb, 14 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c8m_sclLowEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = I2c::m_sclLow()
  [Calls]
  - >> GPIO_ResetBits
  [Called By]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  - >> I2c::begin()

  I2c::m_sdaLow() (Thumb, 14 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c8m_sdaLowEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = I2c::m_sdaLow()
  [Calls]
  - >> GPIO_ResetBits
  [Called By]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  - >> I2c::begin()

  I2c::readByte() (Thumb, 104 bytes, Stack size 16 bytes, i2c.o(i._ZN3I2c8readByteEv))
  [Stack]

  - Max Depth = 32
  - Call Chain = I2c::readByte() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> I2c::m_sdaRead()
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> Adafruit_TCS34725::read8(unsigned char)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::m_sclHigh() (Thumb, 14 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c9m_sclHighEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = I2c::m_sclHigh()
  [Calls]
  - >> GPIO_SetBits
  [Called By]
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  - >> I2c::begin()

  I2c::m_sclRead() (Thumb, 26 bytes, Stack size 16 bytes, i2c.o(i._ZN3I2c9m_sclReadEv))
  [Stack]

  - Max Depth = 16
  - Call Chain = I2c::m_sclRead()
  [Calls]
  - >> GPIO_ReadInputDataBit
  [Called By]
  - >> I2c::end()

  I2c::m_sdaHigh() (Thumb, 14 bytes, Stack size 8 bytes, i2c.o(i._ZN3I2c9m_sdaHighEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = I2c::m_sdaHigh()
  [Calls]
  - >> GPIO_SetBits
  [Called By]
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::begin()

  I2c::m_sdaRead() (Thumb, 26 bytes, Stack size 16 bytes, i2c.o(i._ZN3I2c9m_sdaReadEv))
  [Stack]

  - Max Depth = 16
  - Call Chain = I2c::m_sdaRead()
  [Calls]
  - >> GPIO_ReadInputDataBit
  [Called By]
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::begin()

  I2c::writeByte(unsigned char) (Thumb, 92 bytes, Stack size 16 bytes, i2c.o(i._ZN3I2c9writeByteEh))
  [Stack]

  - Max Depth = 24
  - Call Chain = I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()
  - >> I2c::m_sdaLow()
  - >> I2c::m_sclLow()
  - >> I2c::m_delay()
  [Called By]
  - >> I2c::begin(unsigned char, bool)
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> Adafruit_TCS34725::write8(unsigned char, unsigned)
  - >> Adafruit_TCS34725::read16(unsigned char)
  - >> Adafruit_TCS34725::read8(unsigned char)
  - >> _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned)
  - >> _I2CRead(VL53L0X_Dev_t*, unsigned char*, unsigned)

  I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short) (Thumb, 90 bytes, Stack size 32 bytes, i2c.o(i._ZN3I2cC1EP12GPIO_TypeDeftt))
  [Stack]

  - Max Depth = 52
  - Call Chain = I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short) ⇒ GPIO_Init
  [Calls]
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_Init
  - >> I2c::m_sdaHigh()
  - >> I2c::m_sclHigh()
  [Called By]
  - >> Laser::Init()
  - >> LineSensors::LineSensors()
  - >> MPU9250_::MPU9250_()

  I2c::I2c__sub_object(GPIO_TypeDef*, unsigned short, unsigned short) (Thumb, 0 bytes, Stack size 32 bytes, i2c.o(i._ZN3I2cC1EP12GPIO_TypeDeftt), UNUSED)

  I2c::I2c() (Thumb, 2 bytes, Stack size 0 bytes, i2c.o(i._ZN3I2cC1Ev))
  [Called By]

  - >> LineSensors::LineSensors()
  - >> MPU9250_::MPU9250_()

  I2c::I2c__sub_object() (Thumb, 0 bytes, Stack size 0 bytes, i2c.o(i._ZN3I2cC1Ev), UNUSED)

  enc1::deg() (Thumb, 50 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc13degEv))
  [Stack]

  - Max Depth = 56
  - Call Chain = enc1::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::stop()
  - >> Motors::m1_pid()

  enc1::Init() (Thumb, 174 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc14InitEv))
  [Stack]

  - Max Depth = 44
  - Call Chain = enc1::Init() ⇒ GPIO_Init
  [Calls]
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> NVIC_PriorityGroupConfig
  - >> NVIC_Init
  - >> SYSCFG_EXTILineConfig
  - >> EXTI_Init
  [Called By]
  - >> Motors::Motors(MPU9250_*)

  enc2::deg() (Thumb, 50 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc23degEv))
  [Stack]

  - Max Depth = 56
  - Call Chain = enc2::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::stop()
  - >> Motors::m2_pid()

  enc2::Init() (Thumb, 144 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc24InitEv))
  [Stack]

  - Max Depth = 44
  - Call Chain = enc2::Init() ⇒ GPIO_Init
  [Calls]
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> NVIC_PriorityGroupConfig
  - >> NVIC_Init
  - >> SYSCFG_EXTILineConfig
  - >> EXTI_Init
  [Called By]
  - >> Motors::Motors(MPU9250_*)

  enc3::deg() (Thumb, 50 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc33degEv))
  [Stack]

  - Max Depth = 56
  - Call Chain = enc3::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::stop()
  - >> Motors::m3_pid()

  enc3::Init() (Thumb, 174 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc34InitEv))
  [Stack]

  - Max Depth = 44
  - Call Chain = enc3::Init() ⇒ GPIO_Init
  [Calls]
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> NVIC_PriorityGroupConfig
  - >> NVIC_Init
  - >> SYSCFG_EXTILineConfig
  - >> EXTI_Init
  [Called By]
  - >> Motors::Motors(MPU9250_*)

  enc4::deg() (Thumb, 50 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc43degEv))
  [Stack]

  - Max Depth = 56
  - Call Chain = enc4::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::stop()
  - >> Motors::m4_pid()

  enc4::Init() (Thumb, 174 bytes, Stack size 24 bytes, encoders.o(i._ZN4enc44InitEv))
  [Stack]

  - Max Depth = 44
  - Call Chain = enc4::Init() ⇒ GPIO_Init
  [Calls]
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> NVIC_PriorityGroupConfig
  - >> NVIC_Init
  - >> SYSCFG_EXTILineConfig
  - >> EXTI_Init
  [Called By]
  - >> Motors::Motors(MPU9250_*)

  Laser::Init() (Thumb, 254 bytes, Stack size 24 bytes, vl53l0x.o(i._ZN5Laser4InitEv))
  [Stack]

  - Max Depth = 900
  - Call Chain = Laser::Init() ⇒ VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> VL53L0X_StaticInit
  - >> VL53L0X_SetReferenceSpads
  - >> VL53L0X_SetRefCalibration
  - >> VL53L0X_SetMeasurementTimingBudgetMicroSeconds
  - >> VL53L0X_SetLimitCheckValue
  - >> VL53L0X_SetDeviceMode
  - >> VL53L0X_PerformRefSpadManagement
  - >> VL53L0X_PerformRefCalibration
  - >> VL53L0X_DataInit
  - >> __cxa_guard_acquire
  [Called By]
  - >> Lidar::Lidar(Servos&)
  - >> Robot::Init()

  Laser::read() (Thumb, 46 bytes, Stack size 40 bytes, vl53l0x.o(i._ZN5Laser4readEv))
  [Stack]

  - Max Depth = 620
  - Call Chain = Laser::read() ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_PerformSingleRangingMeasurement
  - >> VL53L0X_ClearInterruptMask
  [Called By]
  - >> wall_reg(LineSensors*, bool*)
  - >> main
  - >> Lidar::buildHough()

  Lidar::buildHough() (Thumb, 1846 bytes, Stack size 72 bytes, lidar_1.o(i._ZN5Lidar10buildHoughEv))
  [Stack]

  - Max Depth = 692
  - Call Chain = Lidar::buildHough() ⇒ Laser::read() ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> Servos::s3(float)
  - >> Laser::read()
  - >> time_service::delayms(unsigned long long)
  - >> time_service::millis()
  - >> constrain(float, float, float)
  - >> std::abs(double)
  - >> print(int)
  - >> print(const char*)
  - >> Lidar::blur()
  - >> __aeabi_f2d
  - >> __aeabi_cdrcmple
  - >> __aeabi_dmul
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __aeabi_d2f
  - >> __hardfp_sin
  - >> __hardfp_cos
  [Called By]
  - >> MovementController::doTick()

  Lidar::findEvacuationZone() (Thumb, 5346 bytes, Stack size 112 bytes, lidar_1.o(i._ZN5Lidar18findEvacuationZoneEv))
  [Stack]

  - Max Depth = 352
  - Call Chain = Lidar::findEvacuationZone() ⇒ print(int) ⇒ __hardfp_log10 ⇒ log ⇒ __hardfp_log ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> Servos::s3(float)
  - >> time_service::millis()
  - >> std::abs(double)
  - >> print(int)
  - >> print(const char*)
  - >> __aeabi_cdrcmple
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ui2d
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __hardfp_sin
  - >> __hardfp_cos
  - >> __hardfp_atan2
  - >> __hardfp_atan
  [Called By]
  - >> MovementController::doTick()

  Lidar::blur() (Thumb, 240 bytes, Stack size 48 bytes, lidar_1.o(i._ZN5Lidar4blurEv))
  [Stack]

  - Max Depth = 80
  - Call Chain = Lidar::blur() ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_i2d
  - >> __aeabi_d2uiz
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  [Called By]
  - >> MovementController::doTick()
  - >> Lidar::buildHough()

  Lidar::findLines() (Thumb, 1504 bytes, Stack size 104 bytes, lidar_1.o(i._ZN5Lidar9findLinesEv))
  [Stack]

  - Max Depth = 344
  - Call Chain = Lidar::findLines() ⇒ print(int) ⇒ __hardfp_log10 ⇒ log ⇒ __hardfp_log ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> std::abs(double)
  - >> print(int)
  - >> print(const char*)
  - >> quickSortY(Point*, unsigned char, unsigned char)
  - >> quickSortX(Point*, unsigned char, unsigned char)
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ui2d
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_dadd
  - >> __aeabi_dneg
  - >> __hardfp_sin
  - >> __hardfp_cos
  - >> __hardfp_atan2
  - >> __hardfp_atan
  [Called By]
  - >> MovementController::doTick()

  Lidar::Lidar(Servos&) (Thumb, 34 bytes, Stack size 16 bytes, lidar_1.o(i._ZN5LidarC1ER6Servos))
  [Stack]

  - Max Depth = 916
  - Call Chain = Lidar::Lidar(Servos&) ⇒ Laser::Init() ⇒ VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> Servos::s3(float)
  - >> Laser::Init()
  [Called By]
  - >> main

  Lidar::Lidar__sub_object(Servos&) (Thumb, 0 bytes, Stack size 16 bytes, lidar_1.o(i._ZN5LidarC1ER6Servos), UNUSED)

  Robot::Init() (Thumb, 284 bytes, Stack size 48 bytes, main.o(i._ZN5Robot4InitEv))
  [Stack]

  - Max Depth = 948
  - Call Chain = Robot::Init() ⇒ Laser::Init() ⇒ VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> Usart3::Init()
  - >> Sonar::Init()
  - >> Laser::Init()
  - >> time_service::startTime()
  - >> time_service::Init()
  - >> TIM_TimeBaseInit
  - >> TIM_OC1Init
  - >> TIM_Cmd
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_ResetBits
  - >> GPIO_PinAFConfig
  - >> GPIO_Init
  - >> Robot::LED_write(unsigned short)
  [Called By]
  - >> main

  Robot::LED_write(unsigned short) (Thumb, 20 bytes, Stack size 8 bytes, main.o(i._ZN5Robot9LED_writeEt))
  [Stack]

  - Max Depth = 8
  - Call Chain = Robot::LED_write(unsigned short)
  [Calls]
  - >> TIM_SetCompare1
  [Called By]
  - >> Robot::Init()

  Sonar::Init() (Thumb, 296 bytes, Stack size 48 bytes, sonar.o(i._ZN5Sonar4InitEv))
  [Stack]

  - Max Depth = 84
  - Call Chain = Sonar::Init() ⇒ TIM_ICInit ⇒ TI4_Config
  [Calls]
  - >> TIM_TimeBaseInit
  - >> TIM_Cmd
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_PinAFConfig
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> NVIC_PriorityGroupConfig
  - >> NVIC_Init
  - >> SYSCFG_EXTILineConfig
  - >> EXTI_Init
  - >> TIM_ICInit
  [Called By]
  - >> Robot::Init()

  Motors::calculate_pid() (Thumb, 30 bytes, Stack size 8 bytes, motors.o(i._ZN6Motors13calculate_pidEv))
  [Stack]

  - Max Depth = 136
  - Call Chain = Motors::calculate_pid() ⇒ Motors::m4_pid() ⇒ enc4::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  [Called By]
  - >> Motors::drive(double, double, double)

  Motors::m1(short) (Thumb, 62 bytes, Stack size 16 bytes, motors.o(i._ZN6Motors2m1Es))
  [Stack]

  - Max Depth = 16
  - Call Chain = Motors::m1(short)
  [Calls]
  - >> TIM_SetCompare1
  - >> abs(short)
  - >> TIM_SetCompare2
  [Called By]
  - >> Motors::stop()
  - >> Motors::m1_pid()

  Motors::m2(short) (Thumb, 62 bytes, Stack size 16 bytes, motors.o(i._ZN6Motors2m2Es))
  [Stack]

  - Max Depth = 16
  - Call Chain = Motors::m2(short)
  [Calls]
  - >> abs(short)
  - >> TIM_SetCompare4
  - >> TIM_SetCompare3
  [Called By]
  - >> Motors::stop()
  - >> Motors::m2_pid()

  Motors::m3(short) (Thumb, 62 bytes, Stack size 16 bytes, motors.o(i._ZN6Motors2m3Es))
  [Stack]

  - Max Depth = 16
  - Call Chain = Motors::m3(short)
  [Calls]
  - >> TIM_SetCompare1
  - >> abs(short)
  - >> TIM_SetCompare2
  [Called By]
  - >> Motors::stop()
  - >> Motors::m3_pid()

  Motors::m4(short) (Thumb, 62 bytes, Stack size 16 bytes, motors.o(i._ZN6Motors2m4Es))
  [Stack]

  - Max Depth = 16
  - Call Chain = Motors::m4(short)
  [Calls]
  - >> abs(short)
  - >> TIM_SetCompare4
  - >> TIM_SetCompare3
  [Called By]
  - >> Motors::stop()
  - >> Motors::m4_pid()

  Motors::stop() (Thumb, 110 bytes, Stack size 16 bytes, motors.o(i._ZN6Motors4stopEv))
  [Stack]

  - Max Depth = 72
  - Call Chain = Motors::stop() ⇒ enc4::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> Motors::m1(short)
  - >> enc4::deg()
  - >> enc3::deg()
  - >> enc2::deg()
  - >> enc1::deg()
  - >> Motors::m4(short)
  - >> Motors::m3(short)
  - >> Motors::m2(short)
  - >> __aeabi_f2d
  [Called By]
  - >> MovementController::doTick()
  - >> main

  Motors::drive(double, double, double) (Thumb, 670 bytes, Stack size 88 bytes, motors.o(i._ZN6Motors5driveEddd))
  [Stack]

  - Max Depth = 224
  - Call Chain = Motors::drive(double, double, double) ⇒ Motors::calculate_pid() ⇒ Motors::m4_pid() ⇒ enc4::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> time_service::micros()
  - >> constrain(float, float, float)
  - >> Motors::calculate_pid()
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> MovementController::doTick()
  - >> main

  Motors::m1_pid() (Thumb, 414 bytes, Stack size 72 bytes, motors.o(i._ZN6Motors6m1_pidEv))
  [Stack]

  - Max Depth = 128
  - Call Chain = Motors::m1_pid() ⇒ enc1::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> Motors::m1(short)
  - >> time_service::micros()
  - >> constrain(float, float, float)
  - >> std::abs(double)
  - >> enc1::deg()
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ul2d
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::calculate_pid()

  Motors::m2_pid() (Thumb, 414 bytes, Stack size 72 bytes, motors.o(i._ZN6Motors6m2_pidEv))
  [Stack]

  - Max Depth = 128
  - Call Chain = Motors::m2_pid() ⇒ enc2::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> time_service::micros()
  - >> constrain(float, float, float)
  - >> std::abs(double)
  - >> enc2::deg()
  - >> Motors::m2(short)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ul2d
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::calculate_pid()

  Motors::m3_pid() (Thumb, 414 bytes, Stack size 72 bytes, motors.o(i._ZN6Motors6m3_pidEv))
  [Stack]

  - Max Depth = 128
  - Call Chain = Motors::m3_pid() ⇒ enc3::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> time_service::micros()
  - >> constrain(float, float, float)
  - >> std::abs(double)
  - >> enc3::deg()
  - >> Motors::m3(short)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ul2d
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::calculate_pid()

  Motors::m4_pid() (Thumb, 414 bytes, Stack size 72 bytes, motors.o(i._ZN6Motors6m4_pidEv))
  [Stack]

  - Max Depth = 128
  - Call Chain = Motors::m4_pid() ⇒ enc4::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> time_service::micros()
  - >> constrain(float, float, float)
  - >> std::abs(double)
  - >> enc4::deg()
  - >> Motors::m4(short)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_ul2d
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::calculate_pid()

  Motors::driveGyro(double, double, double) (Thumb, 358 bytes, Stack size 128 bytes, motors.o(i._ZN6Motors9driveGyroEddd))
  [Stack]

  - Max Depth = 352
  - Call Chain = Motors::driveGyro(double, double, double) ⇒ Motors::drive(double, double, double) ⇒ Motors::calculate_pid() ⇒ Motors::m4_pid() ⇒ enc4::deg() ⇒ __aeabi_ddiv
  [Calls]
  - >> Motors::drive(double, double, double)
  - >> time_service::micros()
  - >> std::abs(double)
  - >> MPU9250_::update_accel_gyro()
  - >> MPU9250_::getGyroZ() const
  - >> MPU9250_::isConnected()
  - >> __aeabi_f2d
  - >> __aeabi_cdrcmple
  - >> __aeabi_dmul
  - >> __aeabi_ui2d
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  [Called By]
  - >> main

  Motors::Motors(MPU9250_*) (Thumb, 420 bytes, Stack size 56 bytes, motors.o(i._ZN6MotorsC1EP8MPU9250_))
  [Stack]

  - Max Depth = 100
  - Call Chain = Motors::Motors(MPU9250_*) ⇒ enc4::Init() ⇒ GPIO_Init
  [Calls]
  - >> TIM_TimeBaseInit
  - >> TIM_OC1Init
  - >> TIM_Cmd
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_PinAFConfig
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> RCC_APB1PeriphClockCmd
  - >> enc4::Init()
  - >> enc3::Init()
  - >> enc2::Init()
  - >> enc1::Init()
  - >> TIM_OC4Init
  - >> TIM_OC3Init
  - >> TIM_OC2Init
  - >> TIM_CtrlPWMOutputs
  [Called By]
  - >> main

  Motors::Motors__sub_object(MPU9250_*) (Thumb, 0 bytes, Stack size 56 bytes, motors.o(i._ZN6MotorsC1EP8MPU9250_), UNUSED)

  Servos::s1(float) (Thumb, 102 bytes, Stack size 32 bytes, motors.o(i._ZN6Servos2s1Ef))
  [Stack]

  - Max Depth = 64
  - Call Chain = Servos::s1(float) ⇒ __aeabi_dmul
  [Calls]
  - >> TIM_SetCompare1
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_d2f
  [Called By]
  - >> main

  Servos::s2(float) (Thumb, 102 bytes, Stack size 32 bytes, motors.o(i._ZN6Servos2s2Ef))
  [Stack]

  - Max Depth = 64
  - Call Chain = Servos::s2(float) ⇒ __aeabi_dmul
  [Calls]
  - >> TIM_SetCompare2
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_d2f
  [Called By]
  - >> MovementController::doTick()
  - >> main

  Servos::s3(float) (Thumb, 82 bytes, Stack size 16 bytes, motors.o(i._ZN6Servos2s3Ef))
  [Stack]

  - Max Depth = 16
  - Call Chain = Servos::s3(float)
  [Calls]
  - >> TIM_SetCompare2
  [Called By]
  - >> Lidar::Lidar(Servos&)
  - >> main
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  Servos::s4(float) (Thumb, 102 bytes, Stack size 32 bytes, motors.o(i._ZN6Servos2s4Ef))
  [Stack]

  - Max Depth = 64
  - Call Chain = Servos::s4(float) ⇒ __aeabi_dmul
  [Calls]
  - >> TIM_SetCompare2
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_d2f
  [Called By]
  - >> MovementController::doTick()

  Servos::s1_stop() (Thumb, 14 bytes, Stack size 8 bytes, motors.o(i._ZN6Servos7s1_stopEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = Servos::s1_stop()
  [Calls]
  - >> TIM_SetCompare1
  [Called By]
  - >> main

  Servos::s2_stop() (Thumb, 14 bytes, Stack size 8 bytes, motors.o(i._ZN6Servos7s2_stopEv))
  [Stack]

  - Max Depth = 8
  - Call Chain = Servos::s2_stop()
  [Calls]
  - >> TIM_SetCompare2
  [Called By]
  - >> main

  Servos::Servos() (Thumb, 316 bytes, Stack size 48 bytes, motors.o(i._ZN6ServosC1Ev))
  [Stack]

  - Max Depth = 68
  - Call Chain = Servos::Servos() ⇒ GPIO_PinAFConfig
  [Calls]
  - >> TIM_TimeBaseInit
  - >> TIM_OC1Init
  - >> TIM_Cmd
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_PinAFConfig
  - >> GPIO_Init
  - >> RCC_APB2PeriphClockCmd
  - >> RCC_APB1PeriphClockCmd
  - >> TIM_OC2Init
  - >> TIM_CtrlPWMOutputs
  [Called By]
  - >> main

  Servos::Servos__sub_object() (Thumb, 0 bytes, Stack size 48 bytes, motors.o(i._ZN6ServosC1Ev), UNUSED)

  Usart3::Init() (Thumb, 230 bytes, Stack size 32 bytes, uart3.o(i._ZN6Usart34InitEv))
  [Stack]

  - Max Depth = 100
  - Call Chain = Usart3::Init() ⇒ USART_Init ⇒ RCC_GetClocksFreq
  [Calls]
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_PinAFConfig
  - >> GPIO_Init
  - >> RCC_APB1PeriphClockCmd
  - >> USART_Init
  - >> USART_ITConfig
  - >> USART_Cmd
  [Called By]
  - >> Robot::Init()

  Usart3::write(unsigned char) (Thumb, 84 bytes, Stack size 16 bytes, uart3.o(i._ZN6Usart35writeEh))
  [Stack]

  - Max Depth = 16
  - Call Chain = Usart3::write(unsigned char)
  [Calls]
  - >> __get_PRIMASK()
  [Called By]
  - >> print(int)
  - >> print(const char*)

  MPU9250_::initAK8963() (Thumb, 284 bytes, Stack size 40 bytes, main.o(i._ZN8MPU9250_10initAK8963Ev))
  [Stack]

  - Max Depth = 112
  - Call Chain = MPU9250_::initAK8963() ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> time_service::delayms(unsigned long long)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> __aeabi_f2d
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> MPU9250_::setup(unsigned char, const MPU9250Setting&)

  MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) (Thumb, 142 bytes, Stack size 32 bytes, main.o(i._ZN8MPU9250_10read_bytesEhhhPh))
  [Stack]

  - Max Depth = 72
  - Call Chain = MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  - >> I2c::generateAck()
  [Called By]
  - >> MPU9250_::read_mag(short*)
  - >> MPU9250_::update()
  - >> MPU9250_::collect_acc_gyro_data_to(float*, float*)
  - >> MPU9250_::write_accel_offset()
  - >> MPU9250_::read_accel_gyro(short*)
  - >> MPU9250_::initAK8963()

  MPU9250_::update_mag() (Thumb, 204 bytes, Stack size 24 bytes, main.o(i._ZN8MPU9250_10update_magEv))
  [Stack]

  - Max Depth = 128
  - Call Chain = MPU9250_::update_mag() ⇒ MPU9250_::read_mag(short*) ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::get_mag_resolution(MAG_OUTPUT_BITS) const
  - >> MPU9250_::read_mag(short*)
  [Called By]
  - >> MPU9250_::update()

  MPU9250_::update_rpy(float, float, float, float) (Thumb, 426 bytes, Stack size 64 bytes, main.o(i._ZN8MPU9250_10update_rpyEffff))
  [Stack]

  - Max Depth = 104
  - Call Chain = MPU9250_::update_rpy(float, float, float, float) ⇒ __hardfp_asinf ⇒ sqrtf ⇒ __set_errno
  [Calls]
  - >> __hardfp_asinf
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_d2f
  - >> __hardfp_atan2f
  [Called By]
  - >> MPU9250_::update()

  MPU9250_::write_byte(unsigned char, unsigned char, unsigned char) (Thumb, 106 bytes, Stack size 24 bytes, main.o(i._ZN8MPU9250_10write_byteEhhh))
  [Stack]

  - Max Depth = 64
  - Call Chain = MPU9250_::write_byte(unsigned char, unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  [Called By]
  - >> MPU9250_::set_acc_gyro_to_calibration()
  - >> MPU9250_::collect_acc_gyro_data_to(float*, float*)
  - >> MPU9250_::write_accel_offset()
  - >> MPU9250_::write_gyro_offset()
  - >> MPU9250_::initMPU9250()
  - >> MPU9250_::initAK8963()

  MPU9250_::initMPU9250() (Thumb, 380 bytes, Stack size 24 bytes, main.o(i._ZN8MPU9250_11initMPU9250Ev))
  [Stack]

  - Max Depth = 88
  - Call Chain = MPU9250_::initMPU9250() ⇒ MPU9250_::read_byte(unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> time_service::delayms(unsigned long long)
  - >> MPU9250_::get_mag_resolution(MAG_OUTPUT_BITS) const
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  [Called By]
  - >> main
  - >> MPU9250_::setup(unsigned char, const MPU9250Setting&)

  MPU9250_::isConnected() (Thumb, 104 bytes, Stack size 24 bytes, motors.o(i._ZN8MPU9250_11isConnectedEv))
  [Stack]

  - Max Depth = 88
  - Call Chain = MPU9250_::isConnected() ⇒ MPU9250_::read_byte(unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  [Called By]
  - >> Motors::driveGyro(double, double, double)

  MPU9250_::read_accel_gyro(short*) (Thumb, 140 bytes, Stack size 32 bytes, main.o(i._ZN8MPU9250_15read_accel_gyroEPs))
  [Stack]

  - Max Depth = 104
  - Call Chain = MPU9250_::read_accel_gyro(short*) ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  [Called By]
  - >> MPU9250_::update_accel_gyro()

  MPU9250_::isConnectedAK8963() (Thumb, 28 bytes, Stack size 16 bytes, main.o(i._ZN8MPU9250_17isConnectedAK8963Ev))
  [Stack]

  - Max Depth = 80
  - Call Chain = MPU9250_::isConnectedAK8963() ⇒ MPU9250_::read_byte(unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  [Called By]
  - >> main
  - >> MPU9250_::setup(unsigned char, const MPU9250Setting&)

  MPU9250_::update_accel_gyro() (Thumb, 242 bytes, Stack size 48 bytes, main.o(i._ZN8MPU9250_17update_accel_gyroEv))
  [Stack]

  - Max Depth = 152
  - Call Chain = MPU9250_::update_accel_gyro() ⇒ MPU9250_::read_accel_gyro(short*) ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::read_accel_gyro(short*)
  - >> __aeabi_f2d
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> MPU9250_::update()

  MPU9250_::write_gyro_offset() (Thumb, 276 bytes, Stack size 16 bytes, main.o(i._ZN8MPU9250_17write_gyro_offsetEv))
  [Stack]

  - Max Depth = 80
  - Call Chain = MPU9250_::write_gyro_offset() ⇒ MPU9250_::write_byte(unsigned char, unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  [Called By]
  - >> main

  MPU9250_::isConnectedMPU9250() (Thumb, 56 bytes, Stack size 16 bytes, main.o(i._ZN8MPU9250_18isConnectedMPU9250Ev))
  [Stack]

  - Max Depth = 80
  - Call Chain = MPU9250_::isConnectedMPU9250() ⇒ MPU9250_::read_byte(unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  [Called By]
  - >> main
  - >> MPU9250_::setup(unsigned char, const MPU9250Setting&)

  MPU9250_::write_accel_offset() (Thumb, 400 bytes, Stack size 40 bytes, main.o(i._ZN8MPU9250_18write_accel_offsetEv))
  [Stack]

  - Max Depth = 112
  - Call Chain = MPU9250_::write_accel_offset() ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  [Called By]
  - >> main

  MPU9250_::collect_acc_gyro_data_to(float*, float*) (Thumb, 532 bytes, Stack size 64 bytes, main.o(i._ZN8MPU9250_24collect_acc_gyro_data_toEPfS0_))
  [Stack]

  - Max Depth = 136
  - Call Chain = MPU9250_::collect_acc_gyro_data_to(float*, float*) ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  [Called By]
  - >> main

  MPU9250_::set_acc_gyro_to_calibration() (Thumb, 218 bytes, Stack size 8 bytes, main.o(i._ZN8MPU9250_27set_acc_gyro_to_calibrationEv))
  [Stack]

  - Max Depth = 72
  - Call Chain = MPU9250_::set_acc_gyro_to_calibration() ⇒ MPU9250_::write_byte(unsigned char, unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> time_service::delayms(unsigned long long)
  - >> MPU9250_::write_byte(unsigned char, unsigned char, unsigned char)
  [Called By]
  - >> main

  MPU9250_::setup(unsigned char, const MPU9250Setting&) (Thumb, 106 bytes, Stack size 16 bytes, main.o(i._ZN8MPU9250_5setupEhRK14MPU9250Setting))
  [Stack]

  - Max Depth = 128
  - Call Chain = MPU9250_::setup(unsigned char, const MPU9250Setting&) ⇒ MPU9250_::initAK8963() ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::isConnectedMPU9250()
  - >> MPU9250_::isConnectedAK8963()
  - >> MPU9250_::initMPU9250()
  - >> MPU9250_::initAK8963()
  [Called By]
  - >> main

  MPU9250_::update() (Thumb, 444 bytes, Stack size 88 bytes, main.o(i._ZN8MPU9250_6updateEv))
  [Stack]

  - Max Depth = 744
  - Call Chain = MPU9250_::update() ⇒ QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*) ⇒ QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*) ⇒ __hardfp_sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::update_accel_gyro()
  - >> MPU9250_::update_rpy(float, float, float, float)
  - >> MPU9250_::update_mag()
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)
  - >> __aeabi_f2d
  - >> __aeabi_dmul
  - >> __aeabi_ddiv
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  [Called By]
  - >> main

  MPU9250_::read_mag(short*) (Thumb, 118 bytes, Stack size 32 bytes, main.o(i._ZN8MPU9250_8read_magEPs))
  [Stack]

  - Max Depth = 104
  - Call Chain = MPU9250_::read_mag(short*) ⇒ MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> MPU9250_::read_byte(unsigned char, unsigned char)
  - >> MPU9250_::read_bytes(unsigned char, unsigned char, unsigned char, unsigned char*)
  [Called By]
  - >> MPU9250_::update_mag()

  MPU9250_::read_byte(unsigned char, unsigned char) (Thumb, 102 bytes, Stack size 24 bytes, main.o(i._ZN8MPU9250_9read_byteEhh))
  [Stack]

  - Max Depth = 64
  - Call Chain = MPU9250_::read_byte(unsigned char, unsigned char) ⇒ I2c::begin(unsigned char, bool) ⇒ I2c::writeByte(unsigned char) ⇒ I2c::m_sdaHigh()
  [Calls]
  - >> I2c::writeByte(unsigned char)
  - >> I2c::readByte()
  - >> I2c::readAck()
  - >> I2c::begin(unsigned char, bool)
  - >> I2c::end()
  - >> I2c::generateNAck()
  [Called By]
  - >> MPU9250_::read_mag(short*)
  - >> MPU9250_::update()
  - >> MPU9250_::isConnectedMPU9250()
  - >> MPU9250_::isConnectedAK8963()
  - >> MPU9250_::initMPU9250()
  - >> MPU9250_::isConnected()

  MPU9250_::MPU9250_() (Thumb, 370 bytes, Stack size 16 bytes, main.o(i._ZN8MPU9250_C1Ev))
  [Stack]

  - Max Depth = 80
  - Call Chain = MPU9250_::MPU9250_() ⇒ QuaternionFilter::QuaternionFilter() ⇒ std::sqrt(float) ⇒ __hardfp_sqrtf ⇒ __set_errno
  [Calls]
  - >> I2c::I2c()
  - >> I2c::I2c(GPIO_TypeDef*, unsigned short, unsigned short)
  - >> QuaternionFilter::QuaternionFilter()
  - >> MPU9250Setting::MPU9250Setting()
  [Called By]
  - >> main

  MPU9250_::MPU9250___sub_object() (Thumb, 0 bytes, Stack size 16 bytes, main.o(i._ZN8MPU9250_C1Ev), UNUSED)

  MPU9250_::get_mag_resolution(MAG_OUTPUT_BITS) const (Thumb, 26 bytes, Stack size 0 bytes, main.o(i._ZNK8MPU9250_18get_mag_resolutionE15MAG_OUTPUT_BITS))
  [Called By]

  - >> MPU9250_::initMPU9250()
  - >> MPU9250_::update_mag()

  MPU9250_::getGyroZ() const (Thumb, 6 bytes, Stack size 0 bytes, motors.o(i._ZNK8MPU9250_8getGyroZEv))
  [Called By]

  - >> Motors::driveGyro(double, double, double)

  std::abs(double) (Thumb, 32 bytes, Stack size 16 bytes, main.o(i._ZSt3absd))
  [Stack]

  - Max Depth = 24
  - Call Chain = std::abs(double) ⇒ __hardfp_fabs
  [Calls]
  - >> __hardfp_fabs
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> MovementController::doTick()
  - >> main
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  std::abs(long long) (Thumb, 16 bytes, Stack size 16 bytes, main.o(i._ZSt3absx))
  [Stack]

  - Max Depth = 16
  - Call Chain = std::abs(long long)
  [Calls]
  - >> llabs
  [Called By]
  - >> main

  std::sqrt(float) (Thumb, 24 bytes, Stack size 16 bytes, main.o(i._ZSt4sqrtf))
  [Stack]

  - Max Depth = 40
  - Call Chain = std::sqrt(float) ⇒ __hardfp_sqrtf ⇒ __set_errno
  [Calls]
  - >> __hardfp_sqrtf
  [Called By]
  - >> QuaternionFilter::QuaternionFilter()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)

  __ARM_fpclassify (Thumb, 48 bytes, Stack size 8 bytes, fpclassify.o(i.__ARM_fpclassify))
  [Stack]

  - Max Depth = 8
  - Call Chain = __ARM_fpclassify
  [Called By]
  - >> __kernel_sin
  - >> __hardfp_pow
  - >> __hardfp_atan

  __ARM_fpclassifyf (Thumb, 38 bytes, Stack size 0 bytes, fpclassifyf.o(i.__ARM_fpclassifyf))
  [Called By]

  - >> __hardfp_asinf
  - >> __hardfp_atan2f

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

  - >> Laser::Init()
  - >> main

  __hardfp_acos (Thumb, 738 bytes, Stack size 72 bytes, acos.o(i.__hardfp_acos))
  [Stack]

  - Max Depth = 144
  - Call Chain = __hardfp_acos ⇒ sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __kernel_poly
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan
  - >> __set_errno
  - >> sqrt
  [Called By]
  - >> MovementController::doTick()

  __hardfp_asinf (Thumb, 258 bytes, Stack size 16 bytes, asinf.o(i.__hardfp_asinf))
  [Stack]

  - Max Depth = 40
  - Call Chain = __hardfp_asinf ⇒ sqrtf ⇒ __set_errno
  [Calls]
  - >> __mathlib_flt_underflow
  - >> __mathlib_flt_invalid
  - >> __mathlib_flt_infnan
  - >> __ARM_fpclassifyf
  - >> __set_errno
  - >> sqrtf
  [Called By]
  - >> MPU9250_::update_rpy(float, float, float, float)

  __hardfp_atan (Thumb, 622 bytes, Stack size 48 bytes, atan.o(i.__hardfp_atan))
  [Stack]

  - Max Depth = 104
  - Call Chain = __hardfp_atan ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_dneg
  - >> __kernel_poly
  - >> __ARM_fpclassify
  - >> __mathlib_dbl_underflow
  - >> __mathlib_dbl_infnan
  - >> fabs
  [Called By]
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> atan

  __hardfp_atan2 (Thumb, 448 bytes, Stack size 56 bytes, atan2.o(i.__hardfp_atan2))
  [Stack]

  - Max Depth = 168
  - Call Chain = __hardfp_atan2 ⇒ atan ⇒ __hardfp_atan ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_cdcmpeq
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dneg
  - >> __mathlib_dbl_infnan2
  - >> __set_errno
  - >> fabs
  - >> atan
  [Called By]
  - >> MovementController::doTick()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()

  __hardfp_atan2f (Thumb, 594 bytes, Stack size 32 bytes, atan2f.o(i.__hardfp_atan2f))
  [Stack]

  - Max Depth = 40
  - Call Chain = __hardfp_atan2f ⇒ __set_errno
  [Calls]
  - >> __mathlib_flt_underflow
  - >> __mathlib_flt_infnan2
  - >> __ARM_fpclassifyf
  - >> __set_errno
  [Called By]
  - >> MPU9250_::update_rpy(float, float, float, float)

  __hardfp_cos (Thumb, 180 bytes, Stack size 32 bytes, cos.o(i.__hardfp_cos))
  [Stack]

  - Max Depth = 184
  - Call Chain = __hardfp_cos ⇒ __ieee754_rem_pio2 ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dneg
  - >> __kernel_sin
  - >> __ieee754_rem_pio2
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan
  - >> __kernel_cos
  - >> __set_errno
  [Called By]
  - >> MovementController::doTick()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  __hardfp_fabs (Thumb, 20 bytes, Stack size 8 bytes, fabs.o(i.__hardfp_fabs))
  [Stack]

  - Max Depth = 8
  - Call Chain = __hardfp_fabs
  [Called By]
  - >> std::abs(double)
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)

  __hardfp_log (Thumb, 872 bytes, Stack size 88 bytes, log.o(i.__hardfp_log))
  [Stack]

  - Max Depth = 144
  - Call Chain = __hardfp_log ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_i2d
  - >> __aeabi_cdcmpeq
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_dneg
  - >> __kernel_poly
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan
  - >> __mathlib_dbl_divzero
  - >> __set_errno
  [Called By]
  - >> log

  __hardfp_log10 (Thumb, 260 bytes, Stack size 40 bytes, log10.o(i.__hardfp_log10))
  [Stack]

  - Max Depth = 192
  - Call Chain = __hardfp_log10 ⇒ log ⇒ __hardfp_log ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_i2d
  - >> __aeabi_dadd
  - >> __aeabi_dneg
  - >> log
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan
  - >> __mathlib_dbl_divzero
  - >> __set_errno
  [Called By]
  - >> print(int)

  __hardfp_pow (Thumb, 3072 bytes, Stack size 192 bytes, pow.o(i.__hardfp_pow))
  [Stack]

  - Max Depth = 264
  - Call Chain = __hardfp_pow ⇒ sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> __aeabi_cdrcmple
  - >> __aeabi_dmul
  - >> __aeabi_i2d
  - >> __aeabi_ddiv
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_dneg
  - >> __kernel_poly
  - >> __ARM_fpclassify
  - >> __mathlib_dbl_underflow
  - >> __mathlib_dbl_overflow
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan2
  - >> __mathlib_dbl_divzero
  - >> __ARM_scalbn
  - >> __set_errno
  - >> sqrt
  - >> fabs
  [Called By]
  - >> LineSensors::readSHARP()

  __hardfp_sin (Thumb, 180 bytes, Stack size 32 bytes, sin.o(i.__hardfp_sin))
  [Stack]

  - Max Depth = 184
  - Call Chain = __hardfp_sin ⇒ __ieee754_rem_pio2 ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dneg
  - >> __kernel_sin
  - >> __ieee754_rem_pio2
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_infnan
  - >> __kernel_cos
  - >> __set_errno
  [Called By]
  - >> MovementController::doTick()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()

  __hardfp_sqrt (Thumb, 122 bytes, Stack size 32 bytes, sqrt.o(i.__hardfp_sqrt))
  [Stack]

  - Max Depth = 72
  - Call Chain = __hardfp_sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> _dsqrt
  - >> __set_errno
  [Called By]
  - >> MovementController::doTick()
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)

  __hardfp_sqrtf (Thumb, 58 bytes, Stack size 16 bytes, sqrtf.o(i.__hardfp_sqrtf))
  [Stack]

  - Max Depth = 24
  - Call Chain = __hardfp_sqrtf ⇒ __set_errno
  [Calls]
  - >> __set_errno
  [Called By]
  - >> std::sqrt(float)

  __ieee754_rem_pio2 (Thumb, 938 bytes, Stack size 120 bytes, rred.o(i.__ieee754_rem_pio2))
  [Stack]

  - Max Depth = 152
  - Call Chain = __ieee754_rem_pio2 ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_ui2d
  - >> __aeabi_i2d
  - >> __aeabi_d2iz
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_dneg
  - >> fabs
  [Called By]
  - >> __hardfp_sin
  - >> __hardfp_cos

  __kernel_cos (Thumb, 322 bytes, Stack size 64 bytes, cos_i.o(i.__kernel_cos))
  [Stack]

  - Max Depth = 120
  - Call Chain = __kernel_cos ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_d2iz
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __kernel_poly
  [Called By]
  - >> __hardfp_sin
  - >> __hardfp_cos

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

  - Max Depth = 56
  - Call Chain = __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_dadd
  [Called By]
  - >> __hardfp_acos
  - >> __kernel_sin
  - >> __hardfp_log
  - >> __kernel_cos
  - >> __hardfp_pow
  - >> __hardfp_atan

  __kernel_sin (Thumb, 280 bytes, Stack size 72 bytes, sin_i.o(i.__kernel_sin))
  [Stack]

  - Max Depth = 128
  - Call Chain = __kernel_sin ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __kernel_poly
  - >> __ARM_fpclassify
  - >> __mathlib_dbl_underflow
  [Called By]
  - >> __hardfp_sin
  - >> __hardfp_cos

  __mathlib_dbl_divzero (Thumb, 28 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_divzero))
  [Stack]

  - Max Depth = 40
  - Call Chain = __mathlib_dbl_divzero ⇒ __aeabi_ddiv
  [Calls]
  - >> __aeabi_ddiv
  [Called By]
  - >> __hardfp_log
  - >> __hardfp_pow
  - >> __hardfp_log10

  __mathlib_dbl_infnan (Thumb, 20 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_infnan))
  [Stack]

  - Max Depth = 24
  - Call Chain = __mathlib_dbl_infnan ⇒ __aeabi_dadd
  [Calls]
  - >> __aeabi_dadd
  [Called By]
  - >> __hardfp_acos
  - >> __hardfp_log
  - >> __hardfp_sin
  - >> __hardfp_log10
  - >> __hardfp_cos
  - >> __hardfp_atan

  __mathlib_dbl_infnan2 (Thumb, 20 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_infnan2))
  [Stack]

  - Max Depth = 24
  - Call Chain = __mathlib_dbl_infnan2 ⇒ __aeabi_dadd
  [Calls]
  - >> __aeabi_dadd
  [Called By]
  - >> __hardfp_pow
  - >> __hardfp_atan2

  __mathlib_dbl_invalid (Thumb, 24 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_invalid))
  [Stack]

  - Max Depth = 40
  - Call Chain = __mathlib_dbl_invalid ⇒ __aeabi_ddiv
  [Calls]
  - >> __aeabi_ddiv
  [Called By]
  - >> __hardfp_acos
  - >> __hardfp_log
  - >> __hardfp_sin
  - >> __hardfp_pow
  - >> __hardfp_log10
  - >> __hardfp_cos

  __mathlib_dbl_overflow (Thumb, 24 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_overflow))
  [Stack]

  - Max Depth = 40
  - Call Chain = __mathlib_dbl_overflow ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  [Called By]
  - >> __hardfp_pow

  __mathlib_dbl_underflow (Thumb, 24 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_underflow))
  [Stack]

  - Max Depth = 40
  - Call Chain = __mathlib_dbl_underflow ⇒ __aeabi_dmul
  [Calls]
  - >> __aeabi_dmul
  [Called By]
  - >> __kernel_sin
  - >> __hardfp_pow
  - >> __hardfp_atan

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

  - >> __hardfp_asinf

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

  - >> __hardfp_atan2f

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

  - >> __hardfp_asinf

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

  - >> __hardfp_asinf
  - >> __hardfp_atan2f

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

  - >> __rt_exit_exit

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

  - Max Depth = 112
  - Call Chain = atan ⇒ __hardfp_atan ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __hardfp_atan
  [Called By]
  - >> __hardfp_atan2

  enable_ref_spads (Thumb, 172 bytes, Stack size 72 bytes, vl53l0x_api_calibration.o(i.enable_ref_spads))
  [Stack]

  - Max Depth = 184
  - Call Chain = enable_ref_spads ⇒ get_ref_spad_map ⇒ VL53L0X_ReadMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> set_ref_spad_map
  - >> is_aperture
  - >> get_ref_spad_map
  - >> get_next_good_spad
  - >> enable_spad_bit
  [Called By]
  - >> VL53L0X_set_reference_spads
  - >> VL53L0X_perform_ref_spad_management

  enable_spad_bit (Thumb, 50 bytes, Stack size 20 bytes, vl53l0x_api_calibration.o(i.enable_spad_bit))
  [Stack]

  - Max Depth = 20
  - Call Chain = enable_spad_bit
  [Called By]
  - >> enable_ref_spads
  - >> VL53L0X_perform_ref_spad_management

  fabs (Thumb, 24 bytes, Stack size 8 bytes, fabs.o(i.fabs))
  [Stack]

  - Max Depth = 8
  - Call Chain = fabs
  [Called By]
  - >> __ieee754_rem_pio2
  - >> __hardfp_pow
  - >> __hardfp_atan2
  - >> __hardfp_atan

  get_next_good_spad (Thumb, 104 bytes, Stack size 32 bytes, vl53l0x_api_calibration.o(i.get_next_good_spad))
  [Stack]

  - Max Depth = 32
  - Call Chain = get_next_good_spad
  [Called By]
  - >> enable_ref_spads
  - >> VL53L0X_perform_ref_spad_management

  get_ref_spad_map (Thumb, 24 bytes, Stack size 16 bytes, vl53l0x_api_calibration.o(i.get_ref_spad_map))
  [Stack]

  - Max Depth = 112
  - Call Chain = get_ref_spad_map ⇒ VL53L0X_ReadMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_ReadMulti
  [Called By]
  - >> enable_ref_spads

  get_sequence_step_timeout (Thumb, 290 bytes, Stack size 64 bytes, vl53l0x_api_core.o(i.get_sequence_step_timeout))
  [Stack]

  - Max Depth = 200
  - Call Chain = get_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_RdWord
  - >> VL53L0X_RdByte
  - >> VL53L0X_GetVcselPulsePeriod
  - >> VL53L0X_GetSequenceStepEnables
  - >> VL53L0X_decode_timeout
  - >> VL53L0X_calc_timeout_us
  [Called By]
  - >> VL53L0X_set_measurement_timing_budget_micro_seconds
  - >> VL53L0X_get_measurement_timing_budget_micro_seconds
  - >> VL53L0X_StaticInit

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

  - >> enable_ref_spads
  - >> VL53L0X_set_reference_spads
  - >> VL53L0X_perform_ref_spad_management

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

  - Max Depth = 152
  - Call Chain = log ⇒ __hardfp_log ⇒ __kernel_poly ⇒ __aeabi_dmul
  [Calls]
  - >> __hardfp_log
  [Called By]
  - >> __hardfp_log10

  main (Thumb, 3908 bytes, Stack size 152 bytes, main.o(i.main))
  [Stack]

  - Max Depth = 1100
  - Call Chain = main ⇒ Robot::Init() ⇒ Laser::Init() ⇒ VL53L0X_StaticInit ⇒ VL53L0X_perform_ref_spad_management ⇒ perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> Servos::Servos()
  - >> Servos::s2_stop()
  - >> Servos::s1_stop()
  - >> Servos::s3(float)
  - >> Servos::s2(float)
  - >> Servos::s1(float)
  - >> Motors::Motors(MPU9250_*)
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> Motors::stop()
  - >> Lidar::Lidar(Servos&)
  - >> Laser::read()
  - >> MovementController::MovementController(Motors&, Servos&, Lidar&)
  - >> MovementController::doTick()
  - >> MovementController::deinit()
  - >> time_service::delayus(unsigned long long)
  - >> time_service::delayms(unsigned long long)
  - >> time_service::millis()
  - >> LineSensors::LineSensors()
  - >> LineSensors::readSHARP()
  - >> LineSensors::getValue(unsigned char)
  - >> LineSensors::isCross()
  - >> LineSensors::start()
  - >> LineSensors::isRightOnGreen()
  - >> LineSensors::isLeftOnGreen()
  - >> constrain(float, float, float)
  - >> wall_reg(LineSensors*, bool*)
  - >> line_reg(LineSensors*)
  - >> map(int, int, int, int, int)
  - >> silver_reg(LineSensors*)
  - >> RCC_AHB1PeriphClockCmd
  - >> GPIO_ReadInputDataBit
  - >> GPIO_Init
  - >> std::abs(long long)
  - >> std::abs(double)
  - >> MPU9250_::MPU9250_()
  - >> MPU9250_::update()
  - >> MPU9250_::setup(unsigned char, const MPU9250Setting&)
  - >> MPU9250_::set_acc_gyro_to_calibration()
  - >> MPU9250_::collect_acc_gyro_data_to(float*, float*)
  - >> MPU9250_::write_accel_offset()
  - >> MPU9250_::isConnectedMPU9250()
  - >> MPU9250_::write_gyro_offset()
  - >> MPU9250_::isConnectedAK8963()
  - >> MPU9250_::initMPU9250()
  - >> Robot::Init()
  - >> MPU9250Setting::MPU9250Setting()
  - >> print(const char*)
  - >> __aeabi_f2d
  - >> __aeabi_cdrcmple
  - >> __aeabi_dmul
  - >> __aeabi_cdcmple
  - >> __aeabi_l2d
  - >> __aeabi_i2d
  - >> __aeabi_dsub
  - >> __aeabi_drsub
  - >> __aeabi_dadd
  - >> __aeabi_d2f
  - >> __cxa_guard_acquire
  [Called By]
  - >> __rt_entry_main

  perform_ref_signal_measurement (Thumb, 110 bytes, Stack size 48 bytes, vl53l0x_api_calibration.o(i.perform_ref_signal_measurement))
  [Stack]

  - Max Depth = 628
  - Call Chain = perform_ref_signal_measurement ⇒ VL53L0X_PerformSingleRangingMeasurement ⇒ VL53L0X_GetRangingMeasurementData ⇒ VL53L0X_get_pal_range_status ⇒ VL53L0X_calc_sigma_estimate ⇒ VL53L0X_calc_dmax
  [Calls]
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdWord
  - >> VL53L0X_PerformSingleRangingMeasurement
  [Called By]
  - >> VL53L0X_perform_ref_spad_management

  sequence_step_enabled (Thumb, 72 bytes, Stack size 12 bytes, vl53l0x_api.o(i.sequence_step_enabled))
  [Stack]

  - Max Depth = 12
  - Call Chain = sequence_step_enabled
  [Called By]
  - >> VL53L0X_GetSequenceStepEnables

  set_ref_spad_map (Thumb, 24 bytes, Stack size 16 bytes, vl53l0x_api_calibration.o(i.set_ref_spad_map))
  [Stack]

  - Max Depth = 104
  - Call Chain = set_ref_spad_map ⇒ VL53L0X_WriteMulti ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WriteMulti
  [Called By]
  - >> enable_ref_spads
  - >> VL53L0X_perform_ref_spad_management

  set_sequence_step_timeout (Thumb, 306 bytes, Stack size 56 bytes, vl53l0x_api_core.o(i.set_sequence_step_timeout))
  [Stack]

  - Max Depth = 192
  - Call Chain = set_sequence_step_timeout ⇒ VL53L0X_GetVcselPulsePeriod ⇒ VL53L0X_get_vcsel_pulse_period ⇒ VL53L0X_RdByte ⇒ _I2CWrite(VL53L0X_Dev_t*, unsigned char*, unsigned) ⇒ I2c::readAck() ⇒ I2c::m_sdaRead()
  [Calls]
  - >> VL53L0X_WrWord
  - >> VL53L0X_WrByte
  - >> VL53L0X_RdWord
  - >> VL53L0X_GetVcselPulsePeriod
  - >> VL53L0X_GetSequenceStepEnables
  - >> VL53L0X_encode_timeout
  - >> VL53L0X_decode_timeout
  - >> VL53L0X_calc_timeout_mclks
  [Called By]
  - >> VL53L0X_set_measurement_timing_budget_micro_seconds

  sqrt (Thumb, 110 bytes, Stack size 32 bytes, sqrt.o(i.sqrt))
  [Stack]

  - Max Depth = 72
  - Call Chain = sqrt ⇒ _dsqrt ⇒ __fpl_dnaninf
  [Calls]
  - >> _dsqrt
  - >> __set_errno
  [Called By]
  - >> __hardfp_acos
  - >> __hardfp_pow

  sqrtf (Thumb, 62 bytes, Stack size 16 bytes, sqrtf.o(i.sqrtf))
  [Stack]

  - Max Depth = 24
  - Call Chain = sqrtf ⇒ __set_errno
  [Calls]
  - >> __set_errno
  [Called By]
  - >> __hardfp_asinf

  __aeabi_dneg (Thumb, 0 bytes, Stack size 0 bytes, basic.o(x$fpl$basic))
  [Called By]

  - >> MovementController::doTick()
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> Lidar::findLines()
  - >> __ieee754_rem_pio2
  - >> __hardfp_log
  - >> __hardfp_sin
  - >> __hardfp_pow
  - >> __hardfp_log10
  - >> __hardfp_cos
  - >> __hardfp_atan2
  - >> __hardfp_atan

  _dneg (Thumb, 6 bytes, Stack size 0 bytes, basic.o(x$fpl$basic), UNUSED)

  __aeabi_fneg (Thumb, 0 bytes, Stack size 0 bytes, basic.o(x$fpl$basic), UNUSED)

  _fneg (Thumb, 6 bytes, Stack size 0 bytes, basic.o(x$fpl$basic), UNUSED)

  _dabs (Thumb, 6 bytes, Stack size 0 bytes, basic.o(x$fpl$basic), UNUSED)

  _fabs (Thumb, 6 bytes, Stack size 0 bytes, basic.o(x$fpl$basic), UNUSED)

  __aeabi_d2f (Thumb, 0 bytes, Stack size 32 bytes, d2f.o(x$fpl$d2f))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_d2f
  [Called By]
  - >> Servos::s2(float)
  - >> Servos::s1(float)
  - >> Motors::drive(double, double, double)
  - >> MovementController::doTick()
  - >> main
  - >> MPU9250_::update()
  - >> MPU9250_::update_accel_gyro()
  - >> MPU9250_::update_rpy(float, float, float, float)
  - >> MPU9250_::initAK8963()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> enc4::deg()
  - >> enc3::deg()
  - >> enc2::deg()
  - >> enc1::deg()
  - >> Servos::s4(float)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::buildHough()
  - >> Adafruit_TCS34725::getRGB(float*, float*, float*)

  _d2f (Thumb, 98 bytes, Stack size 32 bytes, d2f.o(x$fpl$d2f), UNUSED)
  [Calls]

  - >> __fpl_fretinf
  - >> __fpl_dnaninf

  __aeabi_dadd (Thumb, 0 bytes, Stack size 16 bytes, daddsub_clz.o(x$fpl$dadd))
  [Stack]

  - Max Depth = 16
  - Call Chain = __aeabi_dadd
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> MovementController::doTick()
  - >> line_reg(LineSensors*)
  - >> main
  - >> MPU9250_::update()
  - >> MPU9250_::update_accel_gyro()
  - >> MPU9250_::initAK8963()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::blur()
  - >> Lidar::findEvacuationZone()
  - >> __hardfp_acos
  - >> __kernel_sin
  - >> __ieee754_rem_pio2
  - >> __kernel_poly
  - >> __hardfp_log
  - >> __mathlib_dbl_infnan2
  - >> __mathlib_dbl_infnan
  - >> __hardfp_pow
  - >> __hardfp_log10
  - >> __hardfp_atan

  _dadd (Thumb, 332 bytes, Stack size 16 bytes, daddsub_clz.o(x$fpl$dadd), UNUSED)
  [Calls]

  - >> _dsub1
  - >> __fpl_dretinf
  - >> __fpl_dnaninf

  __fpl_dcheck_NaN1 (Thumb, 10 bytes, Stack size 0 bytes, dcheck1.o(x$fpl$dcheck1))
  [Calls]

  - >> __fpl_return_NaN
  [Called By]
  - >> __ARM_scalbn

  __fpl_dcmp_Inf (Thumb, 24 bytes, Stack size 0 bytes, dcmpi.o(x$fpl$dcmpinf), UNUSED)
  [Called By]

  - >> _dcmple
  - >> _dcmpeq

  __aeabi_ddiv (Thumb, 0 bytes, Stack size 32 bytes, ddiv.o(x$fpl$ddiv))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_ddiv
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> MovementController::doTick()
  - >> LineSensors::readSHARP()
  - >> line_reg(LineSensors*)
  - >> MPU9250_::update()
  - >> MPU9250_::update_accel_gyro()
  - >> MPU9250_::initAK8963()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> enc4::deg()
  - >> enc3::deg()
  - >> enc2::deg()
  - >> enc1::deg()
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::blur()
  - >> Lidar::findEvacuationZone()
  - >> __hardfp_acos
  - >> __hardfp_log
  - >> __mathlib_dbl_invalid
  - >> __mathlib_dbl_divzero
  - >> __hardfp_pow
  - >> __hardfp_atan2
  - >> __hardfp_atan

  _ddiv (Thumb, 552 bytes, Stack size 32 bytes, ddiv.o(x$fpl$ddiv), UNUSED)
  [Calls]

  - >> __fpl_dretinf
  - >> __fpl_dnaninf

  __aeabi_cdcmpeq (Thumb, 0 bytes, Stack size 32 bytes, deqf.o(x$fpl$deqf))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_cdcmpeq
  [Called By]
  - >> MovementController::doTick()
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> __hardfp_log
  - >> __hardfp_atan2

  _dcmpeq (Thumb, 120 bytes, Stack size 32 bytes, deqf.o(x$fpl$deqf), UNUSED)
  [Calls]

  - >> __fpl_dnaninf
  - >> __fpl_dcmp_Inf

  __aeabi_d2iz (Thumb, 0 bytes, Stack size 32 bytes, dfix.o(x$fpl$dfix))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_d2iz
  [Called By]
  - >> MovementController::doTick()
  - >> print(int)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::buildHough()
  - >> __ieee754_rem_pio2
  - >> __kernel_cos

  _dfix (Thumb, 94 bytes, Stack size 32 bytes, dfix.o(x$fpl$dfix), UNUSED)
  [Calls]

  - >> __fpl_dnaninf

  __aeabi_d2uiz (Thumb, 0 bytes, Stack size 32 bytes, dfixu.o(x$fpl$dfixu))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_d2uiz
  [Called By]
  - >> MovementController::doTick()
  - >> Lidar::blur()

  _dfixu (Thumb, 90 bytes, Stack size 32 bytes, dfixu.o(x$fpl$dfixu), UNUSED)
  [Calls]

  - >> __fpl_dnaninf

  __aeabi_i2d (Thumb, 0 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dflt))
  [Called By]

  - >> MovementController::doTick()
  - >> line_reg(LineSensors*)
  - >> main
  - >> print(int)
  - >> enc4::deg()
  - >> enc3::deg()
  - >> enc2::deg()
  - >> enc1::deg()
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::blur()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()
  - >> __ieee754_rem_pio2
  - >> __hardfp_log
  - >> __hardfp_pow
  - >> __hardfp_log10

  _dflt (Thumb, 46 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dflt), UNUSED)

  __aeabi_l2d (Thumb, 0 bytes, Stack size 8 bytes, dfltll_clz.o(x$fpl$dfltll))
  [Stack]

  - Max Depth = 8
  - Call Chain = __aeabi_l2d
  [Called By]
  - >> line_reg(LineSensors*)
  - >> main

  _ll_sto_d (Thumb, 162 bytes, Stack size 8 bytes, dfltll_clz.o(x$fpl$dfltll), UNUSED)

  __aeabi_ui2d (Thumb, 0 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dfltu))
  [Called By]

  - >> Motors::driveGyro(double, double, double)
  - >> MovementController::doTick()
  - >> LineSensors::readSHARP()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> __ieee754_rem_pio2

  _dfltu (Thumb, 38 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dfltu), UNUSED)

  __aeabi_ul2d (Thumb, 0 bytes, Stack size 8 bytes, dfltll_clz.o(x$fpl$dfltull))
  [Stack]

  - Max Depth = 8
  - Call Chain = __aeabi_ul2d
  [Called By]
  - >> line_reg(LineSensors*)
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()

  _ll_uto_d (Thumb, 138 bytes, Stack size 8 bytes, dfltll_clz.o(x$fpl$dfltull), UNUSED)

  __aeabi_cdcmple (Thumb, 0 bytes, Stack size 32 bytes, dleqf.o(x$fpl$dleqf))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_cdcmple
  [Called By]
  - >> MovementController::doTick()
  - >> main
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()

  _dcmple (Thumb, 120 bytes, Stack size 32 bytes, dleqf.o(x$fpl$dleqf), UNUSED)
  [Calls]

  - >> __fpl_dnaninf
  - >> __fpl_dcmp_Inf

  __fpl_dcmple_InfNaN (Thumb, 0 bytes, Stack size unknown bytes, dleqf.o(x$fpl$dleqf), UNUSED)
  [Called By]

  - >> _drcmple

  __aeabi_dmul (Thumb, 0 bytes, Stack size 32 bytes, dmul.o(x$fpl$dmul))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_dmul
  [Called By]
  - >> Servos::s2(float)
  - >> Servos::s1(float)
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> MovementController::doTick()
  - >> LineSensors::readSHARP()
  - >> line_reg(LineSensors*)
  - >> main
  - >> MPU9250_::update()
  - >> MPU9250_::update_rpy(float, float, float, float)
  - >> QuaternionFilter::QuaternionFilter()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::update(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> Servos::s4(float)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::blur()
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()
  - >> Adafruit_TCS34725::getRGB(float*, float*, float*)
  - >> __hardfp_acos
  - >> __kernel_sin
  - >> __ieee754_rem_pio2
  - >> __kernel_poly
  - >> __hardfp_log
  - >> __mathlib_dbl_underflow
  - >> __mathlib_dbl_overflow
  - >> __kernel_cos
  - >> __hardfp_pow
  - >> __hardfp_log10
  - >> __hardfp_atan

  _dmul (Thumb, 332 bytes, Stack size 32 bytes, dmul.o(x$fpl$dmul), UNUSED)
  [Calls]

  - >> __fpl_dretinf
  - >> __fpl_dnaninf

  __fpl_dnaninf (Thumb, 156 bytes, Stack size 16 bytes, dnaninf.o(x$fpl$dnaninf))
  [Stack]

  - Max Depth = 16
  - Call Chain = __fpl_dnaninf
  [Called By]
  - >> _dmul
  - >> _dcmple
  - >> _dfixu
  - >> _ll_sfrom_d
  - >> _dfix
  - >> _dcmpeq
  - >> _ddiv
  - >> _dsub
  - >> _dadd
  - >> _d2f
  - >> _dsqrt

  __fpl_dretinf (Thumb, 12 bytes, Stack size 0 bytes, dretinf.o(x$fpl$dretinf), UNUSED)
  [Called By]

  - >> _f2d
  - >> _dmul
  - >> _ddiv
  - >> _dadd

  __aeabi_cdrcmple (Thumb, 0 bytes, Stack size 16 bytes, drleqf.o(x$fpl$drleqf))
  [Stack]

  - Max Depth = 16
  - Call Chain = __aeabi_cdrcmple
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> main
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> Lidar::findEvacuationZone()
  - >> Lidar::buildHough()
  - >> __hardfp_pow

  _drcmple (Thumb, 108 bytes, Stack size 16 bytes, drleqf.o(x$fpl$drleqf), UNUSED)
  [Calls]

  - >> __fpl_dcmple_InfNaN

  __aeabi_drsub (Thumb, 0 bytes, Stack size 8 bytes, daddsub_clz.o(x$fpl$drsb))
  [Stack]

  - Max Depth = 8
  - Call Chain = __aeabi_drsub
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> main
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findEvacuationZone()
  - >> __hardfp_acos
  - >> __kernel_sin
  - >> __ieee754_rem_pio2
  - >> __hardfp_log
  - >> __kernel_cos
  - >> __hardfp_pow
  - >> __hardfp_atan2
  - >> __hardfp_atan

  _drsb (Thumb, 22 bytes, Stack size 8 bytes, daddsub_clz.o(x$fpl$drsb), UNUSED)
  [Calls]

  - >> _dsub1
  - >> _dadd1

  _dsqrt (Thumb, 404 bytes, Stack size 24 bytes, dsqrt_umaal.o(x$fpl$dsqrt))
  [Stack]

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

  __aeabi_dsub (Thumb, 0 bytes, Stack size 32 bytes, daddsub_clz.o(x$fpl$dsub))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_dsub
  [Called By]
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> MovementController::doTick()
  - >> line_reg(LineSensors*)
  - >> main
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::findLines()
  - >> Lidar::findEvacuationZone()
  - >> __hardfp_acos
  - >> __kernel_sin
  - >> __ieee754_rem_pio2
  - >> __hardfp_log
  - >> __kernel_cos
  - >> __hardfp_pow
  - >> __hardfp_atan2
  - >> __hardfp_atan

  _dsub (Thumb, 464 bytes, Stack size 32 bytes, daddsub_clz.o(x$fpl$dsub), UNUSED)
  [Calls]

  - >> _dadd1
  - >> __fpl_dnaninf

  __aeabi_f2d (Thumb, 0 bytes, Stack size 16 bytes, f2d.o(x$fpl$f2d))
  [Stack]

  - Max Depth = 16
  - Call Chain = __aeabi_f2d
  [Called By]
  - >> Servos::s2(float)
  - >> Servos::s1(float)
  - >> Motors::driveGyro(double, double, double)
  - >> Motors::drive(double, double, double)
  - >> Motors::stop()
  - >> main
  - >> MPU9250_::update()
  - >> MPU9250_::update_accel_gyro()
  - >> MPU9250_::update_rpy(float, float, float, float)
  - >> MPU9250_::initAK8963()
  - >> QuaternionFilter::QuaternionFilter()
  - >> QuaternionFilter::no_filter(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::madgwick(float, float, float, float, float, float, float, float, float, float*)
  - >> QuaternionFilter::mahony(float, float, float, float, float, float, float, float, float, float*)
  - >> Servos::s4(float)
  - >> Motors::m4_pid()
  - >> Motors::m3_pid()
  - >> Motors::m2_pid()
  - >> Motors::m1_pid()
  - >> Lidar::buildHough()
  - >> Adafruit_TCS34725::getRGB(float*, float*, float*)

  _f2d (Thumb, 86 bytes, Stack size 16 bytes, f2d.o(x$fpl$f2d), UNUSED)
  [Calls]

  - >> __fpl_fnaninf
  - >> __fpl_dretinf

  __fpl_fnaninf (Thumb, 140 bytes, Stack size 8 bytes, fnaninf.o(x$fpl$fnaninf), UNUSED)
  [Called By]

  - >> _f2d

  _fp_init (Thumb, 10 bytes, Stack size 0 bytes, fpinit.o(x$fpl$fpinit))
  [Called By]

  - >> __rt_lib_init_fp_1

  __fplib_config_fpu_vfp (Thumb, 0 bytes, Stack size unknown bytes, fpinit.o(x$fpl$fpinit), UNUSED)

  __fplib_config_pureend_doubles (Thumb, 0 bytes, Stack size unknown bytes, fpinit.o(x$fpl$fpinit), UNUSED)

  __fpl_fretinf (Thumb, 10 bytes, Stack size 0 bytes, fretinf.o(x$fpl$fretinf), UNUSED)
  [Called By]

  - >> _d2f

  __aeabi_d2lz (Thumb, 0 bytes, Stack size 32 bytes, dfixll.o(x$fpl$llsfromd))
  [Stack]

  - Max Depth = 32
  - Call Chain = __aeabi_d2lz
  [Called By]
  - >> line_reg(LineSensors*)

  _ll_sfrom_d (Thumb, 194 bytes, Stack size 32 bytes, dfixll.o(x$fpl$llsfromd), UNUSED)
  [Calls]

  - >> __fpl_dnaninf

  __fpl_return_NaN (Thumb, 100 bytes, Stack size 0 bytes, retnan.o(x$fpl$retnan))
  [Calls]

  - >> __fpl_cmpreturn
  [Called By]
  - >> __fpl_dcheck_NaN1

  __ARM_scalbn (Thumb, 92 bytes, Stack size 0 bytes, scalbn.o(x$fpl$scalbn))
  [Calls]

  - >> __fpl_dcheck_NaN1
  [Called By]
  - >> __hardfp_pow

  __fpl_cmpreturn (Thumb, 48 bytes, Stack size 0 bytes, trapv.o(x$fpl$trapveneer))
  [Called By]

  - >> __fpl_return_NaN

  ### Local Symbols

  SetSysClock (Thumb, 262 bytes, Stack size 8 bytes, system_stm32f4xx.o(i.SetSysClock))
  [Stack]

  - Max Depth = 8
  - Call Chain = SetSysClock
  [Called By]
  - >> SystemInit

  TI1_Config (Thumb, 58 bytes, Stack size 20 bytes, stm32f4xx_tim.o(i.TI1_Config))
  [Stack]

  - Max Depth = 20
  - Call Chain = TI1_Config
  [Called By]
  - >> TIM_ICInit

  TI2_Config (Thumb, 80 bytes, Stack size 20 bytes, stm32f4xx_tim.o(i.TI2_Config))
  [Stack]

  - Max Depth = 20
  - Call Chain = TI2_Config
  [Called By]
  - >> TIM_ICInit

  TI3_Config (Thumb, 72 bytes, Stack size 20 bytes, stm32f4xx_tim.o(i.TI3_Config))
  [Stack]

  - Max Depth = 20
  - Call Chain = TI3_Config
  [Called By]
  - >> TIM_ICInit

  TI4_Config (Thumb, 80 bytes, Stack size 20 bytes, stm32f4xx_tim.o(i.TI4_Config))
  [Stack]

  - Max Depth = 20
  - Call Chain = TI4_Config
  [Called By]
  - >> TIM_ICInit

  __get_PRIMASK() (Thumb, 6 bytes, Stack size 0 bytes, uart3.o(i._Z13__get_PRIMASKv))
  [Called By]

  - >> Usart3::write(unsigned char)

  _dadd1 (Thumb, 0 bytes, Stack size unknown bytes, daddsub_clz.o(x$fpl$dadd), UNUSED)
  [Called By]

  - >> _dsub
  - >> _drsb

  _dsub1 (Thumb, 0 bytes, Stack size unknown bytes, daddsub_clz.o(x$fpl$dsub), UNUSED)
  [Called By]

  - >> _drsb
  - >> _dadd

  ### Undefined Global Symbols