Skip to content

Instantly share code, notes, and snippets.

@chris-durand
Created May 13, 2024 22:55
Show Gist options
  • Save chris-durand/4f3deae41aacbfd0cad2c9d067df0b5a to your computer and use it in GitHub Desktop.
Save chris-durand/4f3deae41aacbfd0cad2c9d067df0b5a to your computer and use it in GitHub Desktop.
listing
architecture: armv8-m.main, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08001241
Program Header:
LOAD off 0x00010000 vaddr 0x08000000 paddr 0x08000000 align 2**16
filesz 0x00001f34 memsz 0x00001f34 flags rwx
LOAD off 0x00020c00 vaddr 0x20000c00 paddr 0x08001f34 align 2**16
filesz 0x00000018 memsz 0x00000018 flags rw-
LOAD off 0x00021f4c vaddr 0x08001f4c paddr 0x08001f4c align 2**16
filesz 0x00000064 memsz 0x00000064 flags rw-
LOAD off 0x00000c18 vaddr 0x20000c18 paddr 0x08001f4c align 2**16
filesz 0x00000000 memsz 0x000008a8 flags rw-
LOAD off 0x000014c0 vaddr 0x200014c0 paddr 0x08001f4c align 2**16
filesz 0x00000000 memsz 0x000010c0 flags rw-
LOAD off 0x00002580 vaddr 0x20002580 paddr 0x08001f4c align 2**16
filesz 0x00000000 memsz 0x0002da80 flags rw-
LOAD off 0x00000000 vaddr 0x20030000 paddr 0x08001f4c align 2**16
filesz 0x00000000 memsz 0x00010000 flags rw-
LOAD off 0x00000000 vaddr 0x20000000 paddr 0x20000000 align 2**16
filesz 0x00000000 memsz 0x00000c00 flags rw-
NOTE off 0x000101f0 vaddr 0x080001f0 paddr 0x080001f0 align 2**2
filesz 0x00000024 memsz 0x00000024 flags r--
private flags = 0x5000400: [Version5 EABI] [hard-float ABI]
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 .text 000001f0 08000000 08000000 00010000 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .build_id 00000024 080001f0 080001f0 000101f0 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .text 00001b48 08000220 08000220 00010220 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE
3 .rodata 000001cc 08001d68 08001d68 00011d68 2**2 CONTENTS, ALLOC, LOAD, DATA
4 .stack 00000c00 20000000 20000000 00030000 2**0 ALLOC
5 .data 00000004 20000c00 08001f34 00020c00 2**2 CONTENTS, ALLOC, LOAD, DATA
6 .fastdata 00000014 20000c04 08001f38 00020c04 2**2 CONTENTS, ALLOC, LOAD, DATA
7 .fastcode 00000000 20000c18 20000c18 00021fb0 2**0 CONTENTS
8 .data_sram1 00000000 20000c18 20000c18 00021fb0 2**0 CONTENTS
9 .bss 000008a8 20000c18 08001f4c 00030c18 2**2 ALLOC
10 .bss_sram1 00000000 200014c0 200014c0 00021fb0 2**0 CONTENTS
11 .noinit 00000000 200014c0 080027f4 00000000 2**0 ALLOC
12 .faststack 000010c0 200014c0 08001f4c 000314c0 2**3 ALLOC
13 .noinit_sram1 00000000 20002580 20002580 00021fb0 2**0 CONTENTS
14 .heap_sram1 0002da80 20002580 08001f4c 00022580 2**0 ALLOC
15 .data_sram2 00000000 20030000 20030000 00021fb0 2**0 CONTENTS
16 .bss_sram2 00000000 20030000 20030000 00021fb0 2**0 CONTENTS
17 .noinit_sram2 00000000 20030000 20030000 00021fb0 2**0 CONTENTS
18 .heap_sram2 00010000 20030000 08001f4c 00030000 2**0 ALLOC
19 .rodata 00000064 08001f4c 08001f4c 00021f4c 2**0 CONTENTS, ALLOC, LOAD, DATA
20 .debug_abbrev 00006aad 00000000 00000000 00021fb0 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
21 .debug_aranges 00000720 00000000 00000000 00028a60 2**3 CONTENTS, READONLY, DEBUGGING, OCTETS
22 .debug_frame 0000106c 00000000 00000000 00029180 2**2 CONTENTS, READONLY, DEBUGGING, OCTETS
23 .debug_info 000392b4 00000000 00000000 0002a1ec 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
24 .debug_line 0000dda1 00000000 00000000 000634a0 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
25 .debug_loc 000079ee 00000000 00000000 00071241 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
26 .debug_ranges 00001968 00000000 00000000 00078c2f 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
27 .debug_str 000d3ca5 00000000 00000000 0007a597 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
28 .comment 00000059 00000000 00000000 0014e23c 2**0 CONTENTS, READONLY
29 .ARM.attributes 00000038 00000000 00000000 0014e295 2**0 CONTENTS, READONLY
30 .debug_macro 00028734 00000000 00000000 0014e2cd 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
31 .debug_line_str 000000a7 00000000 00000000 00176a01 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
32 .debug_loclists 00000958 00000000 00000000 00176aa8 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
33 .debug_rnglists 0000007a 00000000 00000000 00177400 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS
SYMBOL TABLE:
08000000 l d .text 00000000 .text
080001f0 l d .build_id 00000000 .build_id
08000220 l d .text 00000000 .text
08001d68 l d .rodata 00000000 .rodata
20000000 l d .stack 00000000 .stack
20000c00 l d .data 00000000 .data
20000c04 l d .fastdata 00000000 .fastdata
20000c18 l d .fastcode 00000000 .fastcode
20000c18 l d .data_sram1 00000000 .data_sram1
20000c18 l d .bss 00000000 .bss
200014c0 l d .bss_sram1 00000000 .bss_sram1
200014c0 l d .noinit 00000000 .noinit
200014c0 l d .faststack 00000000 .faststack
20002580 l d .noinit_sram1 00000000 .noinit_sram1
20002580 l d .heap_sram1 00000000 .heap_sram1
20030000 l d .data_sram2 00000000 .data_sram2
20030000 l d .bss_sram2 00000000 .bss_sram2
20030000 l d .noinit_sram2 00000000 .noinit_sram2
20030000 l d .heap_sram2 00000000 .heap_sram2
08001f4c l d .rodata 00000000 .rodata
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_aranges 00000000 .debug_aranges
00000000 l d .debug_frame 00000000 .debug_frame
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_line 00000000 .debug_line
00000000 l d .debug_loc 00000000 .debug_loc
00000000 l d .debug_ranges 00000000 .debug_ranges
00000000 l d .debug_str 00000000 .debug_str
00000000 l d .comment 00000000 .comment
00000000 l d .ARM.attributes 00000000 .ARM.attributes
00000000 l d .debug_macro 00000000 .debug_macro
00000000 l d .debug_line_str 00000000 .debug_line_str
00000000 l d .debug_loclists 00000000 .debug_loclists
00000000 l d .debug_rnglists 00000000 .debug_rnglists
00000000 l df *ABS* 00000000 vectors.c
00000000 l df *ABS* 00000000 main.cpp
08000238 l F .text 00000028 _ZN4modm5fiber4Task5startEv.isra.0
08000260 l F .text 00000002 _ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0
0800064c l F .text 0000003c _ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_.isra.0
08000b74 l F .text 00000140 _GLOBAL__sub_I_f1counter
00000000 l df *ABS* 00000000 new_delete.cpp
00000000 l df *ABS* 00000000 board.cpp
08000e58 l F .text 00000068 _GLOBAL__sub_I_loggerDevice
00000000 l df *ABS* 00000000 iostream.cpp
08000ec0 l F .text 00000014 _ZZN4modm8IOStream8writeHexEhENKUlhE_clEh.isra.0
00000000 l df *ABS* 00000000 iostream_printf.cpp
00000000 l df *ABS* 00000000 rcc.cpp
00000000 l df *ABS* 00000000 systick_timer.cpp
20000cb4 l O .bss 00000004 _ZL10milli_time
20000cb0 l O .bss 00000004 _ZL10micro_time
20000cac l O .bss 00000001 _ZL9interrupt
00000000 l df *ABS* 00000000 assert.cpp
00000000 l df *ABS* 00000000 delay.cpp
08001f2c l O .rodata 00000004 _ZL40__modm_hardware_init_ptr_modm_dwt_enable
00000000 l df *ABS* 00000000 no_heap.c
00000000 l df *ABS* 00000000 reset_handler.o
00000000 l df *ABS* 00000000 startup.c
0800126c l F .text 0000001e table_copy
00000000 l df *ABS* 00000000 startup_platform.c
00000000 l df *ABS* 00000000 enable.cpp
08001f30 l O .rodata 00000004 _ZL41__modm_hardware_init_ptr_modm_gpio_enable
00000000 l df *ABS* 00000000 lpuart_1.cpp
20000cb8 l O .bss 00000806 _ZN12_GLOBAL__N_1L8txBufferE
08001518 l F .text 00000010 _GLOBAL__sub_I__ZN4modm8platform7Lpuart113writeBlockingEh
00000000 l df *ABS* 00000000 context_arm_m.cpp
08001528 l F .text 00000006 _ZN12_GLOBAL__N_118modm_context_entryEv
00000000 l df *ABS* 00000000 printf.c
08001602 l F .text 0000002a putchar_via_gadget
0800162c l F .text 00000060 out_rev_
00000000 l df *ABS* 00000000 _aeabi_ldivmod.o
00000000 l df *ABS* 00000000 _aeabi_uldivmod.o
00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 _dvmd_tls.o
00000000 l df *ABS* 00000000 memset.c
08000534 w F .text 00000014 _ZN4modm5fiber9Scheduler3runEv
200014c0 g .bss_sram1 00000000 __bss_sram1_end
080013a0 w F .text 00000064 EXTI2_IRQHandler
080013a0 w F .text 00000064 TIM8_TRG_COM_IRQHandler
080013a0 w F .text 00000064 TIM8_CC_IRQHandler
080013a0 w F .text 00000064 EXTI5_IRQHandler
08001424 g F .text 00000060 _ZN4modm8platform7Lpuart15writeEh
080013a0 w F .text 00000064 DebugMon_Handler
20000c38 w O .bss 00000004 _ZN4modm8platform12SysTickTimer14ms_per_NcyclesE
08001f4c g *ABS* 00000000 __fastcode_load
0800100c g F .text 00000078 _ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm
20002368 g O .faststack 00000218 fiber_y1
08000514 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_
080001f0 g .text 00000000 __vector_table_rom_end
080013a0 w F .text 00000064 FLASH_S_IRQHandler
080013a0 w F .text 00000064 EXTI13_IRQHandler
08001ef4 w O .rodata 00000020 _ZTVN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EEE
080013a0 w F .text 00000064 TIM1_CC_IRQHandler
080013a0 w F .text 00000064 TSC_IRQHandler
20030000 g .text 00000000 __sram1_end
20000c74 g O .bss 0000001c _ZN4modm3log4infoE
080013a0 w F .text 00000064 HardFault_Handler
080013a0 w F .text 00000064 TAMP_IRQHandler
08000cd6 w F .text 00000002 _ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED1Ev
08000eec g F .text 00000024 _ZN4modm8IOStream8writeBinEh
08001404 g F .text 00000020 _Z16modm_gpio_enablev
08001f4c g *ABS* 00000000 __data_sram1_load
08001f34 g *ABS* 00000000 __data_load
080013a0 w F .text 00000064 TIM6_IRQHandler
080013a0 w F .text 00000064 EXTI12_IRQHandler
080010d8 g F .text 00000028 SysTick_Handler
20000000 g .stack 00000000 __main_stack_bottom
20000c18 g .data_sram1 00000000 __data_sram1_start
08000274 w F .text 00000228 _ZN5Board10initializeEv
080013a0 w F .text 00000064 PendSV_Handler
080013a0 w F .text 00000064 NMI_Handler
080013a0 w F .text 00000064 DMA2_Channel8_IRQHandler
080015ee g F .text 00000014 modm_context_end
08000d00 w F .text 00000010 _ZN4modm8IOStream8out_charEcPv
080013a0 w F .text 00000064 EXTI3_IRQHandler
08000cb4 w F .text 00000002 operator_delete
080013a0 w F .text 00000064 EXTI8_IRQHandler
080013a0 w F .text 00000064 LPTIM2_IRQHandler
080013a0 w F .text 00000064 DFSDM1_FLT1_IRQHandler
080005ac w F .text 00000048 _ZN6fiber3MUlvE_4_FUNEv
080013a0 w F .text 00000064 USB_FS_IRQHandler
08000688 w F .text 00000018 _ZN8fiber_y2MUlvE_4_FUNEv
0800123c w F .text 00000002 __modm_initialize_memory
080013a0 w F .text 00000064 I2C3_ER_IRQHandler
08001484 g F .text 00000024 _ZN4modm8platform7Lpuart115isWriteFinishedEv
080013a0 w F .text 00000064 DFSDM1_FLT2_IRQHandler
080013a0 g F .text 00000064 Undefined_Handler
080013a0 w F .text 00000064 DMAMUX1_IRQHandler
20000c00 g O .data 00000004 loggerDevice
080013a0 w F .text 00000064 LPTIM3_IRQHandler
080011f4 g F .text 00000028 _Z15modm_dwt_enablev
0800168c g F .text 00000278 print_integer
080013a0 w F .text 00000064 EXTI0_IRQHandler
080013a0 w F .text 00000064 I2C2_EV_IRQHandler
08001f4c g .rodata 00000000 __table_zero_intern_start
080019a4 g F .text 00000000 .hidden __aeabi_uldivmod
080013a0 w F .text 00000064 FPU_IRQHandler
20000c14 g O .fastdata 00000004 SystemCoreClock
080013a0 w F .text 00000064 FDCAN1_IT1_IRQHandler
0800152e g F .text 00000016 modm_context_init
20000c90 g O .bss 0000001c _ZN4modm3log5debugE
08001fb0 g .rodata 00000000 __table_heap_end
20000c18 g .fastdata 00000000 __fastdata_end
20000c34 w O .bss 00000004 _ZN4modm8platform12SysTickTimer14us_per_NcyclesE
08000cbe w F .text 00000018 _ZN4modm8IODevice5writeEPKc
0800128c g F .text 000000ec __modm_startup
080013a0 w F .text 00000064 UsageFault_Handler
08001f34 g .rodata 00000000 __assertion_table_start
20000c18 g .data_sram1 00000000 __data_sram1_end
080013a0 w F .text 00000064 ADC1_2_IRQHandler
0800049c w F .text 00000028 _ZN4modm5fiber9Scheduler10unscheduleEv
08001100 g F .text 00000028 _ZN4modm8platform12SysTickTimer6enableEmb
080013a0 w F .text 00000064 SPI1_IRQHandler
080013a0 w F .text 00000064 OCTOSPI1_IRQHandler
080019d4 g F .text 000002ea .hidden __udivmoddi4
08001f34 g .rodata 00000000 __hardware_init_end
20000c58 g O .bss 0000001c _ZN4modm3log7warningE
20001d20 g O .faststack 00000218 fiber2
08000fe0 g F .text 0000002c _ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm
08000ce2 w F .text 00000010 _ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5writeEc
080013a0 w F .text 00000064 TIM8_UP_IRQHandler
080013a0 w F .text 00000064 RCC_S_IRQHandler
08000f92 g F .text 00000020 _ZN4modm8IOStream12writeIntegerEy
20000c04 g .fastdata 00000000 __fastdata_start
08001fb0 g .rodata 00000000 __rom_end
00000c00 g *ABS* 00000000 MAIN_STACK_SIZE
200014c0 g .bss_sram1 00000000 __bss_end
20040000 g .heap_sram2 00000000 __heap_sram2_end
080013a0 w F .text 00000064 DMA2_Channel2_IRQHandler
080014a8 g F .text 0000000c _ZN4modm8platform7Lpuart116flushWriteBufferEv
080013a0 w F .text 00000064 DMA1_Channel4_IRQHandler
080013a0 w F .text 00000064 SAI2_IRQHandler
08001f98 g .rodata 00000000 __table_copy_extern_end
20030000 g .noinit_sram2 00000000 __noinit_sram2_start
08000564 g F .text 00000048 _Z15fiber_function1v
080004f4 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_
080013a0 w F .text 00000064 DFSDM1_FLT3_IRQHandler
08000cde w F .text 00000004 _ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5flushEv
08000cd6 w F .text 00000002 _ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED2Ev
080013a0 w F .text 00000064 EXTI15_IRQHandler
080013a0 w F .text 00000064 TIM17_IRQHandler
080013a0 w F .text 00000064 USART3_IRQHandler
080013a0 w F .text 00000064 RTC_IRQHandler
080013a0 w F .text 00000064 EXTI9_IRQHandler
080013a0 w F .text 00000064 DMA1_Channel7_IRQHandler
08001240 g F .text 00000000 Reset_Handler
08001128 w F .text 00000038 _ZN4modm6chrono11milli_clock3nowEv
20002580 g .noinit_sram1 00000000 __noinit_sram1_end
08000000 g .text 00000000 __vector_table_rom_start
20000000 g .text 00000000 __sram1_start
20000000 g .stack 00000000 __stack_start
20000c12 g O .fastdata 00000002 _ZN4modm8platform14delay_fcpu_MHzE
08000fb4 g F .text 0000002c _ZN4modm8platform3Rcc24enableInternalClockMHz48Em
080013a0 w F .text 00000064 UART5_IRQHandler
08001f5c g .rodata 00000000 __table_zero_intern_end
08001f5c g .rodata 00000000 __table_copy_intern_start
08000ed4 g F .text 00000018 _ZN4modm8IOStream8writeHexEh
20002150 g O .faststack 00000218 fiber_y2
08001160 w F .text 00000038 _ZN4modm6chrono11micro_clock3nowEv
20000c2c w O .bss 00000008 _ZZN4modm5fiber9Scheduler8instanceEvE4main
08000cb6 w F .text 00000008 _ZdlPvj
080013a0 w F .text 00000064 TIM4_IRQHandler
08000708 w F .text 00000046 _ZN4modm8IOStream16writeIntegerModeImEEvT_
0800121c g F .text 00000020 _ZN4modm8delay_usEm
080013a0 w F .text 00000064 DMA2_Channel1_IRQHandler
080013a0 w F .text 00000064 I2C1_EV_IRQHandler
08001f34 g .rodata 00000000 __assertion_table_end
20030000 g .text 00000000 __sram2_start
20001b08 g O .faststack 00000218 fiber3
08001f98 g .rodata 00000000 __table_zero_extern_end
08000f64 g F .text 0000002e _ZN4modm8IOStream12writeIntegerEx
080013a0 w F .text 00000064 DMA1_Channel6_IRQHandler
080013a0 w F .text 00000064 TIM16_IRQHandler
080004e4 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_
080013a0 w F .text 00000064 UART4_IRQHandler
080013a0 w F .text 00000064 DMA2_Channel4_IRQHandler
08001f2c g .rodata 00000000 __hardware_init_start
080013a0 w F .text 00000064 TIM3_IRQHandler
080013a0 w F .text 00000064 RCC_IRQHandler
080013a0 w F .text 00000064 TIM1_TRG_COM_IRQHandler
20000c18 g O .bss 00000008 test
080013a0 w F .text 00000064 DMA1_Channel1_IRQHandler
08001f4c g *ABS* 00000000 __data_sram2_load
080013a0 w F .text 00000064 DMA2_Channel7_IRQHandler
08001378 g F .text 00000028 __modm_initialize_platform
20040000 g .text 00000000 __sram2_end
20000c18 g .fastcode 00000000 __fastcode_start
08000cf2 w F .text 0000000e _ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED0Ev
20000c04 g .data 00000000 __data_end
20030000 g .data_sram2 00000000 __data_sram2_start
080013a0 w F .text 00000064 DMA1_Channel8_IRQHandler
08001f98 g .rodata 00000000 __table_heap_start
20030000 g .bss_sram2 00000000 __bss_sram2_start
080006a0 w F .text 00000018 _ZN8fiber_y1MUlvE_4_FUNEv
08000d3c w F .text 0000011c modm_abandon
20000c00 g .stack 00000000 __main_stack_top
080013a0 w F .text 00000064 TIM7_IRQHandler
080013a0 w F .text 00000064 SDMMC1_IRQHandler
080013a0 w F .text 00000064 TIM5_IRQHandler
080013a0 w F .text 00000064 UCPD1_IRQHandler
08000f42 g F .text 00000022 _ZN4modm8IOStream12writeIntegerEm
080013a0 w F .text 00000064 TIM15_IRQHandler
080013a0 w F .text 00000064 I2C3_EV_IRQHandler
08001cc0 w F .text 00000002 .hidden __aeabi_ldiv0
20000c00 g .stack 00000000 __stack_end
08000220 w F .text 00000016 _ZN4modm4endlERNS_8IOStreamE
08000000 g .text 00000000 __vector_table_ram_load
080006fc w F .text 0000000c _ZN6fiber2MUlvE_4_FUNEv
20000c04 g O .fastdata 0000000c counter
080013a0 w F .text 00000064 PVD_PVM_IRQHandler
20001f38 g O .faststack 00000218 fiber1
080013a0 w F .text 00000064 SPI2_IRQHandler
200014c0 g .faststack 00000000 __faststack_start
08001f38 g *ABS* 00000000 __fastdata_load
20000c18 g .bss 00000000 __bss_start
08001cc4 g F .text 000000a4 memset
080014b4 g F .text 00000018 _ZN4modm8platform7Lpuart14readERh
080013a0 w F .text 00000064 MemManage_Handler
080007e0 g F .text 00000394 main
20030000 g .bss_sram2 00000000 __bss_sram2_end
20000c28 g O .bss 00000004 f1counter
080013a0 w F .text 00000064 EXTI14_IRQHandler
080013a0 w F .text 00000064 EXTI11_IRQHandler
08000798 w F .text 00000048 _ZN10fiber_pingMUlvE_4_FUNEv
080013a0 w F .text 00000064 SVC_Handler
200016d8 g O .faststack 00000218 fiber_ping
080013a0 w F .text 00000064 DMA2_Channel5_IRQHandler
080013a0 w F .text 00000064 CRS_IRQHandler
08001588 g F .text 00000024 modm_context_stack_usage
08001f2c g .rodata 00000000 __init_array_end
20030000 g .noinit_sram2 00000000 __noinit_sram2_end
08001f98 g .rodata 00000000 __table_zero_extern_start
080013a0 w F .text 00000064 DMA1_Channel5_IRQHandler
080013a0 w F .text 00000064 EXTI4_IRQHandler
08001f98 g .rodata 00000000 __table_copy_intern_end
20000c24 g O .bss 00000004 f2counter
0800128a w F .text 00000002 modm_initialize_platform
080005f4 w F .text 00000058 _ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_
08080000 g .text 00000000 __flash_end
080013a0 w F .text 00000064 RTC_S_IRQHandler
080013a0 w F .text 00000064 RNG_IRQHandler
080013a0 w F .text 00000064 DMAMUX1_S_IRQHandler
08000524 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_
20000c20 g O .bss 00000004 total_counter
08001084 g F .text 0000002c _ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm
080013a0 w F .text 00000064 DMA1_Channel3_IRQHandler
080013a0 w F .text 00000064 COMP_IRQHandler
200014c0 g .noinit 00000000 __noinit_start
080013a0 w F .text 00000064 TIM1_UP_IRQHandler
20002580 g .faststack 00000000 __faststack_end
080004d4 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_
200014c0 g .noinit 00000000 __noinit_end
080013a0 w F .text 00000064 WWDG_IRQHandler
080013a0 w F .text 00000064 I2C4_EV_IRQHandler
080014cc g F .text 0000004c LPUART1_IRQHandler
080010b0 g F .text 00000028 _ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm
080013a0 w F .text 00000064 DMA2_Channel6_IRQHandler
080013a0 w F .text 00000064 FDCAN1_IT0_IRQHandler
080013a0 w F .text 00000064 TIM2_IRQHandler
08001560 g F .text 00000028 modm_context_watermark
080013a0 w F .text 00000064 TAMP_S_IRQHandler
20002580 g .heap_sram1 00000000 __heap_sram1_start
2000006c g .stack 00000000 __main_stack_limit
20000c3c g O .bss 0000001c _ZN4modm3log5errorE
080013a0 w F .text 00000064 EXTI7_IRQHandler
08000504 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESB_
080013a0 w F .text 00000064 TIM1_BRK_IRQHandler
080013a0 w F .text 00000064 DAC_IRQHandler
08001198 g F .text 0000005c modm_assert_report
080013a0 w F .text 00000064 EXTI1_IRQHandler
08000000 g .text 00000000 __rom_start
20030000 g .heap_sram1 00000000 __heap_sram1_end
08001f98 g .rodata 00000000 __table_copy_extern_start
08000000 g .text 00000000 __flash_start
20002580 g .noinit_sram1 00000000 __noinit_sram1_start
08000750 w F .text 00000048 _ZN10fiber_pongMUlvE_4_FUNEv
200018f0 g O .faststack 00000218 fiber4
08000f10 g F .text 00000032 _ZN4modm8IOStream12writePointerEPKv
080013a0 w F .text 00000064 GTZC_IRQHandler
080013a0 w F .text 00000064 USART2_IRQHandler
080013a0 w F .text 00000064 DFSDM1_FLT0_IRQHandler
08000262 w F .text 00000010 _ZN4modm8IOStreamlsEPKc
200014c0 g .bss_sram1 00000000 __bss_sram1_start
20030000 g .data_sram2 00000000 __data_sram2_end
080015ac g F .text 00000026 modm_context_start
08000d10 w F .text 0000002c _ZN4modm8delay_msEm
080013a0 w F .text 00000064 I2C2_ER_IRQHandler
080013a0 w F .text 00000064 DMA1_Channel2_IRQHandler
080013a0 w F .text 00000064 TIM8_BRK_IRQHandler
08001cc0 w F .text 00000002 .hidden __aeabi_idiv0
08001f20 g .rodata 00000000 __init_array_start
0000006c g *ABS* 00000000 EXCEPTION_FRAME_SIZE
080013a0 w F .text 00000064 FLASH_IRQHandler
080013a0 w F .text 00000064 BusFault_Handler
080013a0 w F .text 00000064 USART1_IRQHandler
080004c4 w F .text 00000010 _ZZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_
080013a0 w F .text 00000064 EXTI10_IRQHandler
080013a0 w F .text 00000064 SPI3_IRQHandler
08000548 w F .text 0000001c _ZN4modm10this_fiber5yieldEv
080013a0 w F .text 00000064 I2C1_ER_IRQHandler
080013a0 w F .text 00000064 FMC_IRQHandler
20030000 g .heap_sram2 00000000 __heap_sram2_start
20000c10 g O .fastdata 00000002 _ZN4modm8platform17delay_ns_per_loopE
20000c00 g .data 00000000 __data_start
080013a0 w F .text 00000064 EXTI6_IRQHandler
080015d2 g F .text 0000001c modm_context_jump
20000c18 g .fastcode 00000000 __fastcode_end
200014c0 g O .faststack 00000218 fiber_pong
080013a0 w F .text 00000064 LPTIM1_IRQHandler
08000000 g O .text 000001f0 vectorsRom
080013a0 w F .text 00000064 I2C4_ER_IRQHandler
08001904 g F .text 00000000 .hidden __aeabi_ldivmod
080001f0 g .build_id 00000000 __build_id
080013a0 w F .text 00000064 ICACHE_IRQHandler
08001544 g F .text 0000001c modm_context_reset
080013a0 w F .text 00000064 SAI1_IRQHandler
080006b8 g F .text 00000044 _Z15fiber_function2m
080013a0 w F .text 00000064 HASH_IRQHandler
08000cd8 w F .text 00000006 _ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE4readERc
080013a0 w F .text 00000064 DMA2_Channel3_IRQHandler
Disassembly of section .text:
08000220 <_ZN4modm4endlERNS_8IOStreamE>:
_ZN4modm8IOStream4endlEv():
./modm/src/modm/io/iostream.hpp:108
}
inline IOStream&
endl()
{
mode = Mode::Ascii;
8000220: 2300 movs r3, #0
_ZN4modm4endlERNS_8IOStreamE():
./modm/src/modm/io/iostream.hpp:279
{ return ios.flush(); }
//// Write a newline. **DOES NOT FLUSH THE STREAM!**
inline IOStream&
endl(IOStream& ios)
{ return ios.endl(); }
8000222: b510 push {r4, lr}
8000224: 4604 mov r4, r0
_ZN4modm8IOStream4endlEv():
./modm/src/modm/io/iostream.hpp:108
mode = Mode::Ascii;
8000226: 6043 str r3, [r0, #4]
./modm/src/modm/io/iostream.hpp:109
device->write('\n');
8000228: 6800 ldr r0, [r0, #0]
800022a: 210a movs r1, #10
800022c: 6803 ldr r3, [r0, #0]
800022e: 689b ldr r3, [r3, #8]
8000230: 4798 blx r3
_ZN4modm4endlERNS_8IOStreamE():
./modm/src/modm/io/iostream.hpp:279
{ return ios.endl(); }
8000232: 4620 mov r0, r4
8000234: bd10 pop {r4, pc}
...
08000238 <_ZN4modm5fiber4Task5startEv.isra.0>:
_ZN4modm5fiber4Task5startEv():
./modm/src/modm/processing/fiber/task.hpp:225
}
inline bool
Task::start()
{
if (isRunning()) return false;
8000238: 6903 ldr r3, [r0, #16]
./modm/src/modm/processing/fiber/task.hpp:223
Task::start()
800023a: b510 push {r4, lr}
800023c: 4604 mov r4, r0
./modm/src/modm/processing/fiber/task.hpp:225
if (isRunning()) return false;
800023e: b93b cbnz r3, 8000250 <_ZN4modm5fiber4Task5startEv.isra.0+0x18>
./modm/src/modm/processing/fiber/task.hpp:226
modm_context_reset(&ctx);
8000240: f001 f980 bl 8001544 <modm_context_reset>
_ZN4modm5fiber9Scheduler3addERNS0_4TaskE():
./modm/src/modm/processing/fiber/scheduler.hpp:125
}
void
add(Task& task)
{
task.scheduler = this;
8000244: 4b05 ldr r3, [pc, #20] ; (800025c <_ZN4modm5fiber4Task5startEv.isra.0+0x24>)
./modm/src/modm/processing/fiber/scheduler.hpp:126
if (last == nullptr)
8000246: 681a ldr r2, [r3, #0]
./modm/src/modm/processing/fiber/scheduler.hpp:125
task.scheduler = this;
8000248: 6123 str r3, [r4, #16]
./modm/src/modm/processing/fiber/scheduler.hpp:126
if (last == nullptr)
800024a: b912 cbnz r2, 8000252 <_ZN4modm5fiber4Task5startEv.isra.0+0x1a>
./modm/src/modm/processing/fiber/scheduler.hpp:128
{
task.next = &task;
800024c: 60e4 str r4, [r4, #12]
_ZN4modm5fiber9Scheduler7runLastEPNS0_4TaskE():
./modm/src/modm/processing/fiber/scheduler.hpp:71
last = task;
800024e: 601c str r4, [r3, #0]
_ZN4modm5fiber4Task5startEv():
./modm/src/modm/processing/fiber/task.hpp:229
Scheduler::instance().add(*this);
return true;
}
8000250: bd10 pop {r4, pc}
_ZN4modm5fiber9Scheduler7runLastEPNS0_4TaskE():
./modm/src/modm/processing/fiber/scheduler.hpp:69
task->next = last->next;
8000252: 68d1 ldr r1, [r2, #12]
8000254: 60e1 str r1, [r4, #12]
./modm/src/modm/processing/fiber/scheduler.hpp:70
last->next = task;
8000256: 60d4 str r4, [r2, #12]
8000258: e7f9 b.n 800024e <_ZN4modm5fiber4Task5startEv.isra.0+0x16>
800025a: bf00 nop
800025c: 20000c2c .word 0x20000c2c
08000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>:
_ZN4modm8IOStreamlsEPFRS0_S1_E():
./modm/src/modm/io/iostream.hpp:209
{ return format(*this); }
8000260: 4708 bx r1
08000262 <_ZN4modm8IOStreamlsEPKc>:
_ZN4modm8IOStreamlsEPKc():
./modm/src/modm/io/iostream.hpp:193
operator << (const char* s)
8000262: b510 push {r4, lr}
8000264: 4604 mov r4, r0
./modm/src/modm/io/iostream.hpp:194
{ device->write(s); return *this; }
8000266: 6800 ldr r0, [r0, #0]
8000268: 6803 ldr r3, [r0, #0]
800026a: 68db ldr r3, [r3, #12]
800026c: 4798 blx r3
800026e: 4620 mov r0, r4
8000270: bd10 pop {r4, pc}
...
08000274 <_ZN5Board10initializeEv>:
_ZN5Board10initializeEv():
./modm/src/modm/board/board.hpp:158
/// @{
using LoggerDevice = modm::IODeviceWrapper<stlink::Uart, modm::IOBuffer::BlockIfFull>;
inline void
initialize()
{
8000274: b513 push {r0, r1, r4, lr}
_ZN5Board11SystemClock6enableEv():
./modm/src/modm/board/board.hpp:90
Rcc::setVoltageScaling(Rcc::VoltageScaling::Range0);
8000276: f44f 6100 mov.w r1, #2048 ; 0x800
800027a: 2000 movs r0, #0
800027c: f000 ff02 bl 8001084 <_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm>
./modm/src/modm/board/board.hpp:91
Rcc::enableMultiSpeedInternalClock(Rcc::MsiFrequency::MHz4);
8000280: f44f 6100 mov.w r1, #2048 ; 0x800
8000284: 2060 movs r0, #96 ; 0x60
8000286: f000 feab bl 8000fe0 <_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm>
./modm/src/modm/board/board.hpp:92
const Rcc::PllFactors pllFactors{
800028a: 4b72 ldr r3, [pc, #456] ; (8000454 <_ZN5Board10initializeEv+0x1e0>)
./modm/src/modm/board/board.hpp:98
Rcc::enablePll(Rcc::PllSource::Msi, pllFactors);
800028c: f44f 6200 mov.w r2, #2048 ; 0x800
./modm/src/modm/board/board.hpp:92
const Rcc::PllFactors pllFactors{
8000290: 6818 ldr r0, [r3, #0]
8000292: 889b ldrh r3, [r3, #4]
8000294: 9000 str r0, [sp, #0]
./modm/src/modm/board/board.hpp:98
Rcc::enablePll(Rcc::PllSource::Msi, pllFactors);
8000296: 4669 mov r1, sp
8000298: 2001 movs r0, #1
./modm/src/modm/board/board.hpp:92
const Rcc::PllFactors pllFactors{
800029a: f8ad 3004 strh.w r3, [sp, #4]
./modm/src/modm/board/board.hpp:98
Rcc::enablePll(Rcc::PllSource::Msi, pllFactors);
800029e: f000 feb5 bl 800100c <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm>
_ZN4modm8platform3Rcc15setFlashLatencyILm110000000ELt3300EEEmv():
./modm/src/modm/platform/clock/rcc_impl.hpp:69
Rcc::setFlashLatency()
{
constexpr flash_latency fl = computeFlashLatency(Core_Hz, Core_mV);
static_assert(Core_Hz <= fl.max_frequency, "CPU Frequency is too high for this core voltage!");
uint32_t acr = FLASH->ACR & ~FLASH_ACR_LATENCY;
80002a2: 4a6d ldr r2, [pc, #436] ; (8000458 <_ZN5Board10initializeEv+0x1e4>)
80002a4: 6813 ldr r3, [r2, #0]
80002a6: f023 030f bic.w r3, r3, #15
./modm/src/modm/platform/clock/rcc_impl.hpp:71
// set flash latency
acr |= fl.latency;
80002aa: f043 0304 orr.w r3, r3, #4
./modm/src/modm/platform/clock/rcc_impl.hpp:72
FLASH->ACR = acr;
80002ae: 6013 str r3, [r2, #0]
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/cmsis_gcc.h:271
\details Acts as a special kind of Data Memory Barrier.
It completes when all explicit memory accesses before this instruction complete.
*/
__STATIC_FORCEINLINE void __DSB(void)
{
__ASM volatile ("dsb 0xF":::"memory");
80002b0: f3bf 8f4f dsb sy
./modm/ext/cmsis/core/cmsis_gcc.h:260
__ASM volatile ("isb 0xF":::"memory");
80002b4: f3bf 8f6f isb sy
_ZN4modm8platform3Rcc15setAhbPrescalerENS1_12AhbPrescalerE():
./modm/src/modm/platform/clock/rcc.hpp:300
}
public:
static inline bool
setAhbPrescaler(AhbPrescaler prescaler)
{
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_HPRE) | uint32_t(prescaler);
80002b8: 4c68 ldr r4, [pc, #416] ; (800045c <_ZN5Board10initializeEv+0x1e8>)
_ZN5Board11SystemClock6enableEv():
./modm/src/modm/board/board.hpp:100
Rcc::enableSystemClock(Rcc::SystemClockSource::Pll);
80002ba: f44f 6100 mov.w r1, #2048 ; 0x800
80002be: 2003 movs r0, #3
80002c0: f000 fef6 bl 80010b0 <_ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm>
_ZN4modm8platform3Rcc15setAhbPrescalerENS1_12AhbPrescalerE():
./modm/src/modm/platform/clock/rcc.hpp:300
80002c4: 68a3 ldr r3, [r4, #8]
_ZN4modm8platform3Rcc19updateCoreFrequencyILm110000000EEEvv():
./modm/src/modm/platform/clock/rcc_impl.hpp:81
template< uint32_t Core_Hz >
void
Rcc::updateCoreFrequency()
{
SystemCoreClock = Core_Hz;
80002c6: 4a66 ldr r2, [pc, #408] ; (8000460 <_ZN5Board10initializeEv+0x1ec>)
_ZN4modm8platform3Rcc15setAhbPrescalerENS1_12AhbPrescalerE():
./modm/src/modm/platform/clock/rcc.hpp:300
80002c8: f023 03f0 bic.w r3, r3, #240 ; 0xf0
80002cc: 60a3 str r3, [r4, #8]
_ZN4modm8platform3Rcc16setApb1PrescalerENS1_13Apb1PrescalerE():
./modm/src/modm/platform/clock/rcc.hpp:307
}
static inline bool
setApb1Prescaler(Apb1Prescaler prescaler)
{
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_PPRE1) | uint32_t(prescaler);
80002ce: 68a3 ldr r3, [r4, #8]
_ZN5Board11SystemClock6enableEv():
./modm/src/modm/board/board.hpp:107
Rcc::enableInternalClockMHz48();
80002d0: f44f 6000 mov.w r0, #2048 ; 0x800
_ZN4modm8platform3Rcc16setApb1PrescalerENS1_13Apb1PrescalerE():
./modm/src/modm/platform/clock/rcc.hpp:307
80002d4: f423 63e0 bic.w r3, r3, #1792 ; 0x700
80002d8: 60a3 str r3, [r4, #8]
_ZN4modm8platform3Rcc16setApb2PrescalerENS1_13Apb2PrescalerE():
./modm/src/modm/platform/clock/rcc.hpp:314
}
static inline bool
setApb2Prescaler(Apb2Prescaler prescaler)
{
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_PPRE2) | uint32_t(prescaler);
80002da: 68a3 ldr r3, [r4, #8]
80002dc: f423 5360 bic.w r3, r3, #14336 ; 0x3800
80002e0: 60a3 str r3, [r4, #8]
_ZN4modm8platform3Rcc19updateCoreFrequencyILm110000000EEEvv():
./modm/src/modm/platform/clock/rcc_impl.hpp:81
80002e2: 4b60 ldr r3, [pc, #384] ; (8000464 <_ZN5Board10initializeEv+0x1f0>)
80002e4: 601a str r2, [r3, #0]
./modm/src/modm/platform/clock/rcc_impl.hpp:82
delay_fcpu_MHz = computeDelayMhz(Core_Hz);
80002e6: f44f 625c mov.w r2, #3520 ; 0xdc0
80002ea: 4b5f ldr r3, [pc, #380] ; (8000468 <_ZN5Board10initializeEv+0x1f4>)
80002ec: 801a strh r2, [r3, #0]
./modm/src/modm/platform/clock/rcc_impl.hpp:83
delay_ns_per_loop = computeDelayNsPerLoop(Core_Hz);
80002ee: 221b movs r2, #27
80002f0: 4b5e ldr r3, [pc, #376] ; (800046c <_ZN5Board10initializeEv+0x1f8>)
80002f2: 801a strh r2, [r3, #0]
_ZN5Board11SystemClock6enableEv():
./modm/src/modm/board/board.hpp:107
80002f4: f000 fe5e bl 8000fb4 <_ZN4modm8platform3Rcc24enableInternalClockMHz48Em>
_ZN4modm8platform3Rcc16setClock48SourceENS1_13Clock48SourceE():
./modm/src/modm/platform/clock/rcc.hpp:278
RCC->CCIPR1 = (RCC->CCIPR1 & ~RCC_CCIPR1_CLK48MSEL_Msk) | uint32_t(source);
80002f8: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88
_ZN4modm8platform12SysTickTimer10initializeIN5Board11SystemClockELf00000000EEEvv():
./modm/src/modm/platform/clock/systick_timer.hpp:58
{
constexpr auto result = Prescaler::from_linear(
SystemClock::Frequency/8, 4, 1, (1ul << 24)-1);
PeripheralDriver::assertBaudrateInTolerance< result.frequency, 4, tolerance >();
us_per_Ncycles = ((1ull << Ncycles) * 8'000'000ull) / SystemClock::Frequency;
80002fc: 4a5c ldr r2, [pc, #368] ; (8000470 <_ZN5Board10initializeEv+0x1fc>)
_ZN4modm8platform3Rcc16setClock48SourceENS1_13Clock48SourceE():
./modm/src/modm/platform/clock/rcc.hpp:278
80002fe: f023 6340 bic.w r3, r3, #201326592 ; 0xc000000
8000302: f8c4 3088 str.w r3, [r4, #136] ; 0x88
_ZN4modm8platform12SysTickTimer10initializeIN5Board11SystemClockELf00000000EEEvv():
./modm/src/modm/platform/clock/systick_timer.hpp:58
8000306: 4b5b ldr r3, [pc, #364] ; (8000474 <_ZN5Board10initializeEv+0x200>)
./modm/src/modm/platform/clock/systick_timer.hpp:60
ms_per_Ncycles = ((1ull << Ncycles) * 8'000ull) / SystemClock::Frequency;
enable(result.index, false);
8000308: 2100 movs r1, #0
./modm/src/modm/platform/clock/systick_timer.hpp:58
us_per_Ncycles = ((1ull << Ncycles) * 8'000'000ull) / SystemClock::Frequency;
800030a: 601a str r2, [r3, #0]
./modm/src/modm/platform/clock/systick_timer.hpp:59
ms_per_Ncycles = ((1ull << Ncycles) * 8'000ull) / SystemClock::Frequency;
800030c: 4b5a ldr r3, [pc, #360] ; (8000478 <_ZN5Board10initializeEv+0x204>)
800030e: 4a5b ldr r2, [pc, #364] ; (800047c <_ZN5Board10initializeEv+0x208>)
./modm/src/modm/platform/clock/systick_timer.hpp:60
enable(result.index, false);
8000310: 485b ldr r0, [pc, #364] ; (8000480 <_ZN5Board10initializeEv+0x20c>)
./modm/src/modm/platform/clock/systick_timer.hpp:59
ms_per_Ncycles = ((1ull << Ncycles) * 8'000ull) / SystemClock::Frequency;
8000312: 601a str r2, [r3, #0]
./modm/src/modm/platform/clock/systick_timer.hpp:60
enable(result.index, false);
8000314: f000 fef4 bl 8001100 <_ZN4modm8platform12SysTickTimer6enableEmb>
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataG7EEEEE9configureENS0_4Gpio10OutputTypeENS7_11OutputSpeedE():
./modm/src/modm/platform/gpio/set.hpp:115
if constexpr (mask(5)) {
GPIOF->OSPEEDR = (GPIOF->OSPEEDR & ~mask2(5)) | (i(speed) * mask2(5, 0b01));
GPIOF->OTYPER = (GPIOF->OTYPER & ~mask(5)) | (i(type) ? mask(5) : 0);
}
if constexpr (mask(6)) {
GPIOG->OSPEEDR = (GPIOG->OSPEEDR & ~mask2(6)) | (i(speed) * mask2(6, 0b01));
8000318: 4b5a ldr r3, [pc, #360] ; (8000484 <_ZN5Board10initializeEv+0x210>)
800031a: 689a ldr r2, [r3, #8]
800031c: f422 4240 bic.w r2, r2, #49152 ; 0xc000
8000320: f442 4200 orr.w r2, r2, #32768 ; 0x8000
8000324: 609a str r2, [r3, #8]
./modm/src/modm/platform/gpio/set.hpp:116
GPIOG->OTYPER = (GPIOG->OTYPER & ~mask(6)) | (i(type) ? mask(6) : 0);
8000326: 685a ldr r2, [r3, #4]
8000328: f022 0280 bic.w r2, r2, #128 ; 0x80
800032c: 605a str r2, [r3, #4]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataG7EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:72
if constexpr (mask(6)) GPIOG->MODER = (GPIOG->MODER & ~mask2(6)) | mask2(6, i(Mode::Output));
800032e: 681a ldr r2, [r3, #0]
8000330: f422 4240 bic.w r2, r2, #49152 ; 0xc000
8000334: f442 4280 orr.w r2, r2, #16384 ; 0x4000
8000338: 601a str r2, [r3, #0]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataG8EEEEE9configureENS0_4Gpio9InputTypeE():
./modm/src/modm/platform/gpio/set.hpp:207
}
if constexpr (mask(5)) {
GPIOF->PUPDR = (GPIOF->PUPDR & ~mask2(5)) | (i(type) * mask2(5, 0b01));
}
if constexpr (mask(6)) {
GPIOG->PUPDR = (GPIOG->PUPDR & ~mask2(6)) | (i(type) * mask2(6, 0b01));
800033a: 68da ldr r2, [r3, #12]
800033c: f422 3240 bic.w r2, r2, #196608 ; 0x30000
8000340: f442 3280 orr.w r2, r2, #65536 ; 0x10000
8000344: 60da str r2, [r3, #12]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataG8EEEEE8setInputEv():
./modm/src/modm/platform/gpio/set.hpp:157
GPIOG->MODER &= ~mask2(6);
8000346: 681a ldr r2, [r3, #0]
8000348: f422 3240 bic.w r2, r2, #196608 ; 0x30000
800034c: 601a str r2, [r3, #0]
./modm/src/modm/platform/gpio/set.hpp:158
GPIOG->OTYPER &= ~mask(6);
800034e: 685a ldr r2, [r3, #4]
8000350: f422 7280 bic.w r2, r2, #256 ; 0x100
8000354: 605a str r2, [r3, #4]
./modm/src/modm/platform/gpio/set.hpp:159
GPIOG->OSPEEDR &= ~mask2(6);
8000356: 689a ldr r2, [r3, #8]
8000358: f422 3240 bic.w r2, r2, #196608 ; 0x30000
800035c: 609a str r2, [r3, #8]
_ZN4modm8platform10GpioStaticINS0_6detail6DataG7EE20setAlternateFunctionEh():
./modm/src/modm/platform/gpio/static.hpp:71
}
/// @endcond
public:
inline static void setAlternateFunction(uint8_t af) {
gport()->AFR[af_id] = (gport()->AFR[af_id] & ~af_mask) | ((af & 0xf) << af_offset);
800035e: 6a1a ldr r2, [r3, #32]
8000360: f022 4270 bic.w r2, r2, #4026531840 ; 0xf0000000
8000364: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000
8000368: 621a str r2, [r3, #32]
./modm/src/modm/platform/gpio/static.hpp:72
gport()->MODER = (gport()->MODER & ~mask2) | (i(Mode::AlternateFunction) << (pin * 2));
800036a: 681a ldr r2, [r3, #0]
800036c: f422 4240 bic.w r2, r2, #49152 ; 0xc000
8000370: f442 4200 orr.w r2, r2, #32768 ; 0x8000
8000374: 601a str r2, [r3, #0]
_ZN4modm8platform10GpioStaticINS0_6detail6DataG8EE20setAlternateFunctionEh():
./modm/src/modm/platform/gpio/static.hpp:71
gport()->AFR[af_id] = (gport()->AFR[af_id] & ~af_mask) | ((af & 0xf) << af_offset);
8000376: 6a5a ldr r2, [r3, #36] ; 0x24
8000378: f022 020f bic.w r2, r2, #15
800037c: f042 0208 orr.w r2, r2, #8
8000380: 625a str r2, [r3, #36] ; 0x24
./modm/src/modm/platform/gpio/static.hpp:72
gport()->MODER = (gport()->MODER & ~mask2) | (i(Mode::AlternateFunction) << (pin * 2));
8000382: 681a ldr r2, [r3, #0]
8000384: f422 3240 bic.w r2, r2, #196608 ; 0x30000
8000388: f442 3200 orr.w r2, r2, #131072 ; 0x20000
800038c: 601a str r2, [r3, #0]
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/cmsis_gcc.h:271
__ASM volatile ("dsb 0xF":::"memory");
800038e: f3bf 8f4f dsb sy
_ZN4modm8platform3Rcc9isEnabledILNS0_10PeripheralE29EEEbv():
./modm/src/modm/platform/clock/rcc_impl.hpp:648
if constexpr (peripheral == Peripheral::Lptim2)
return RCC->APB1ENR2 & RCC_APB1ENR2_LPTIM2EN;
if constexpr (peripheral == Peripheral::Lptim3)
return RCC->APB1ENR2 & RCC_APB1ENR2_LPTIM3EN;
if constexpr (peripheral == Peripheral::Lpuart1)
return RCC->APB1ENR2 & RCC_APB1ENR2_LPUART1EN;
8000392: 6de3 ldr r3, [r4, #92] ; 0x5c
_ZN4modm8platform3Rcc6enableILNS0_10PeripheralE29EEEvv():
./modm/src/modm/platform/clock/rcc_impl.hpp:266
if (not Rcc::isEnabled<peripheral>()) {
8000394: 07db lsls r3, r3, #31
8000396: d40f bmi.n 80003b8 <_ZN5Board10initializeEv+0x144>
./modm/src/modm/platform/clock/rcc_impl.hpp:267
RCC->APB1ENR2 |= RCC_APB1ENR2_LPUART1EN; __DSB();
8000398: 6de3 ldr r3, [r4, #92] ; 0x5c
800039a: f043 0301 orr.w r3, r3, #1
800039e: 65e3 str r3, [r4, #92] ; 0x5c
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/cmsis_gcc.h:271
80003a0: f3bf 8f4f dsb sy
_ZN4modm8platform3Rcc6enableILNS0_10PeripheralE29EEEvv():
./modm/src/modm/platform/clock/rcc_impl.hpp:268
RCC->APB1RSTR2 |= RCC_APB1RSTR2_LPUART1RST; __DSB();
80003a4: 6be3 ldr r3, [r4, #60] ; 0x3c
80003a6: f043 0301 orr.w r3, r3, #1
80003aa: 63e3 str r3, [r4, #60] ; 0x3c
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/cmsis_gcc.h:271
80003ac: f3bf 8f4f dsb sy
_ZN4modm8platform3Rcc6enableILNS0_10PeripheralE29EEEvv():
./modm/src/modm/platform/clock/rcc_impl.hpp:269
RCC->APB1RSTR2 &= ~RCC_APB1RSTR2_LPUART1RST;
80003b0: 6be3 ldr r3, [r4, #60] ; 0x3c
80003b2: f023 0301 bic.w r3, r3, #1
80003b6: 63e3 str r3, [r4, #60] ; 0x3c
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/cmsis_gcc.h:271
80003b8: f3bf 8f4f dsb sy
_ZN4modm8platform10LpuartHal116disableOperationEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:51
}
void
LpuartHal1::disableOperation()
{
LPUART1->CR1 &= ~USART_CR1_UE;
80003bc: 4b32 ldr r3, [pc, #200] ; (8000488 <_ZN5Board10initializeEv+0x214>)
_ZN4modm8platform10LpuartHal110initializeIN5Board11SystemClockELm115200ELf3c23d70aEEEvNS0_8UartBase6ParityENS5_10WordLengthE():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:74
0x300, max);
modm::PeripheralDriver::assertBaudrateInTolerance< result.frequency, baudrate, tolerance >();
uint32_t cr1 = LPUART1->CR1;
// Set baudrate
LPUART1->BRR = result.prescaler;
80003be: 4933 ldr r1, [pc, #204] ; (800048c <_ZN5Board10initializeEv+0x218>)
_ZN4modm8platform10LpuartHal116disableOperationEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:51
LPUART1->CR1 &= ~USART_CR1_UE;
80003c0: 681a ldr r2, [r3, #0]
80003c2: f022 0201 bic.w r2, r2, #1
80003c6: 601a str r2, [r3, #0]
_ZN4modm8platform10LpuartHal110initializeIN5Board11SystemClockELm115200ELf3c23d70aEEEvNS0_8UartBase6ParityENS5_10WordLengthE():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:72
uint32_t cr1 = LPUART1->CR1;
80003c8: 681a ldr r2, [r3, #0]
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:74
LPUART1->BRR = result.prescaler;
80003ca: 60d9 str r1, [r3, #12]
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/core_cm33.h:2591
*/
__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
if ((int32_t)(IRQn) >= 0)
{
NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
80003cc: 2180 movs r1, #128 ; 0x80
_ZN4modm8platform10LpuartHal110initializeIN5Board11SystemClockELm115200ELf3c23d70aEEEvNS0_8UartBase6ParityENS5_10WordLengthE():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:81
cr1 &= ~(USART_CR1_PCE | USART_CR1_PS);
cr1 |= static_cast<uint32_t>(parity);
// Set word length
#ifdef USART_CR1_M1
cr1 &= ~(USART_CR1_M0 | USART_CR1_M1);
80003ce: f022 5280 bic.w r2, r2, #268435456 ; 0x10000000
80003d2: f422 52b0 bic.w r2, r2, #5632 ; 0x1600
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:87
#else
cr1 &= ~USART_CR1_M;
#endif
cr1 |= static_cast<uint32_t>(length);
LPUART1->CR1 = cr1;
80003d6: 601a str r2, [r3, #0]
__NVIC_SetPriority():
./modm/ext/cmsis/core/core_cm33.h:2591
80003d8: 4a2d ldr r2, [pc, #180] ; (8000490 <_ZN5Board10initializeEv+0x21c>)
80003da: f882 1342 strb.w r1, [r2, #834] ; 0x342
_ZN5Board10initializeEv():
./modm/ext/cmsis/core/core_cm33.h:2395
NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
80003de: 2104 movs r1, #4
__NVIC_EnableIRQ():
./modm/ext/cmsis/core/core_cm33.h:2395
80003e0: 6091 str r1, [r2, #8]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataC7EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:236
static void reset()
{
if constexpr (mask(0)) GPIOA->BSRR = ((uint32_t(mask(0)) & ~inverted(0)) << 16) | inverted(0);
if constexpr (mask(1)) GPIOB->BSRR = ((uint32_t(mask(1)) & ~inverted(1)) << 16) | inverted(1);
if constexpr (mask(2)) GPIOC->BSRR = ((uint32_t(mask(2)) & ~inverted(2)) << 16) | inverted(2);
80003e2: f44f 0000 mov.w r0, #8388608 ; 0x800000
_ZN4modm8platform10LpuartHal120setTransmitterEnableEb():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:112
void
LpuartHal1::setTransmitterEnable(bool enable)
{
if (enable) {
LPUART1->CR1 |= USART_CR1_TE;
80003e6: 681a ldr r2, [r3, #0]
80003e8: f042 0208 orr.w r2, r2, #8
80003ec: 601a str r2, [r3, #0]
_ZN4modm8platform10LpuartHal117setReceiverEnableEb():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:122
void
LpuartHal1::setReceiverEnable(bool enable)
{
if (enable) {
LPUART1->CR1 |= USART_CR1_RE;
80003ee: 681a ldr r2, [r3, #0]
80003f0: 430a orrs r2, r1
80003f2: 601a str r2, [r3, #0]
_ZN4modm8platform10LpuartHal115enableOperationEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:45
LPUART1->CR1 |= USART_CR1_UE;
80003f4: 681a ldr r2, [r3, #0]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataB7EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:235
if constexpr (mask(1)) GPIOB->BSRR = ((uint32_t(mask(1)) & ~inverted(1)) << 16) | inverted(1);
80003f6: 4927 ldr r1, [pc, #156] ; (8000494 <_ZN5Board10initializeEv+0x220>)
_ZN4modm8platform10LpuartHal115enableOperationEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:45
80003f8: f042 0201 orr.w r2, r2, #1
80003fc: 601a str r2, [r3, #0]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataC7EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:236
if constexpr (mask(2)) GPIOC->BSRR = ((uint32_t(mask(2)) & ~inverted(2)) << 16) | inverted(2);
80003fe: 4b26 ldr r3, [pc, #152] ; (8000498 <_ZN5Board10initializeEv+0x224>)
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataA9EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:234
if constexpr (mask(0)) GPIOA->BSRR = ((uint32_t(mask(0)) & ~inverted(0)) << 16) | inverted(0);
8000400: f5a1 6180 sub.w r1, r1, #1024 ; 0x400
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataC7EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:236
if constexpr (mask(2)) GPIOC->BSRR = ((uint32_t(mask(2)) & ~inverted(2)) << 16) | inverted(2);
8000404: 6198 str r0, [r3, #24]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataC7EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:68
if constexpr (mask(2)) GPIOC->MODER = (GPIOC->MODER & ~mask2(2)) | mask2(2, i(Mode::Output));
8000406: 681a ldr r2, [r3, #0]
8000408: f422 4240 bic.w r2, r2, #49152 ; 0xc000
800040c: f442 4280 orr.w r2, r2, #16384 ; 0x4000
8000410: 601a str r2, [r3, #0]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataB7EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:235
if constexpr (mask(1)) GPIOB->BSRR = ((uint32_t(mask(1)) & ~inverted(1)) << 16) | inverted(1);
8000412: f8c1 0418 str.w r0, [r1, #1048] ; 0x418
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataB7EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:67
if constexpr (mask(1)) GPIOB->MODER = (GPIOB->MODER & ~mask2(1)) | mask2(1, i(Mode::Output));
8000416: f8d1 2400 ldr.w r2, [r1, #1024] ; 0x400
800041a: f422 4240 bic.w r2, r2, #49152 ; 0xc000
800041e: f442 4280 orr.w r2, r2, #16384 ; 0x4000
8000422: f8c1 2400 str.w r2, [r1, #1024] ; 0x400
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataA9EEEEE5resetEv():
./modm/src/modm/platform/gpio/set.hpp:234
if constexpr (mask(0)) GPIOA->BSRR = ((uint32_t(mask(0)) & ~inverted(0)) << 16) | inverted(0);
8000426: f04f 7200 mov.w r2, #33554432 ; 0x2000000
800042a: 618a str r2, [r1, #24]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataA9EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:66
if constexpr (mask(0)) GPIOA->MODER = (GPIOA->MODER & ~mask2(0)) | mask2(0, i(Mode::Output));
800042c: 680a ldr r2, [r1, #0]
800042e: f422 2240 bic.w r2, r2, #786432 ; 0xc0000
8000432: f442 2280 orr.w r2, r2, #262144 ; 0x40000
8000436: 600a str r2, [r1, #0]
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail7DataC13EEEEE8setInputEv():
./modm/src/modm/platform/gpio/set.hpp:137
GPIOC->MODER &= ~mask2(2);
8000438: 681a ldr r2, [r3, #0]
800043a: f022 6240 bic.w r2, r2, #201326592 ; 0xc000000
800043e: 601a str r2, [r3, #0]
./modm/src/modm/platform/gpio/set.hpp:138
GPIOC->OTYPER &= ~mask(2);
8000440: 685a ldr r2, [r3, #4]
8000442: f422 5200 bic.w r2, r2, #8192 ; 0x2000
8000446: 605a str r2, [r3, #4]
./modm/src/modm/platform/gpio/set.hpp:139
GPIOC->OSPEEDR &= ~mask2(2);
8000448: 689a ldr r2, [r3, #8]
800044a: f022 6240 bic.w r2, r2, #201326592 ; 0xc000000
800044e: 609a str r2, [r3, #8]
_ZN5Board10initializeEv():
./modm/src/modm/board/board.hpp:170
LedGreen::setOutput(modm::Gpio::Low);
LedBlue::setOutput(modm::Gpio::Low);
LedRed::setOutput(modm::Gpio::Low);
Button::setInput();
}
8000450: b002 add sp, #8
8000452: bd10 pop {r4, pc}
8000454: 08001ebe .word 0x08001ebe
8000458: 40022000 .word 0x40022000
800045c: 40021000 .word 0x40021000
8000460: 068e7780 .word 0x068e7780
8000464: 20000c14 .word 0x20000c14
8000468: 20000c12 .word 0x20000c12
800046c: 20000c10 .word 0x20000c10
8000470: 129e4129 .word 0x129e4129
8000474: 20000c34 .word 0x20000c34
8000478: 20000c38 .word 0x20000c38
800047c: 0004c429 .word 0x0004c429
8000480: 003473bb .word 0x003473bb
8000484: 42021800 .word 0x42021800
8000488: 40008000 .word 0x40008000
800048c: 0003badc .word 0x0003badc
8000490: e000e100 .word 0xe000e100
8000494: 42020400 .word 0x42020400
8000498: 42020800 .word 0x42020800
0800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>:
_ZN4modm5fiber9Scheduler10unscheduleEv():
./modm/src/modm/processing/fiber/scheduler.hpp:109
unschedule()
800049c: b508 push {r3, lr}
800049e: 4603 mov r3, r0
80004a0: 2200 movs r2, #0
./modm/src/modm/processing/fiber/scheduler.hpp:111
Task* next = current->next;
80004a2: 6840 ldr r0, [r0, #4]
_ZN4modm5fiber9Scheduler13removeCurrentEv():
./modm/src/modm/processing/fiber/scheduler.hpp:77
if (current == last) last = nullptr;
80004a4: 681c ldr r4, [r3, #0]
_ZN4modm5fiber9Scheduler10unscheduleEv():
./modm/src/modm/processing/fiber/scheduler.hpp:111
Task* next = current->next;
80004a6: 68c1 ldr r1, [r0, #12]
_ZN4modm5fiber9Scheduler13removeCurrentEv():
./modm/src/modm/processing/fiber/scheduler.hpp:77
if (current == last) last = nullptr;
80004a8: 42a0 cmp r0, r4
80004aa: bf0c ite eq
80004ac: 601a streq r2, [r3, #0]
./modm/src/modm/processing/fiber/scheduler.hpp:78
else last->next = current->next;
80004ae: 60e1 strne r1, [r4, #12]
./modm/src/modm/processing/fiber/scheduler.hpp:80
current->scheduler = nullptr;
80004b0: e9c0 2203 strd r2, r2, [r0, #12]
_ZN4modm5fiber9Scheduler10unscheduleEv():
./modm/src/modm/processing/fiber/scheduler.hpp:113
if (empty())
80004b4: 681a ldr r2, [r3, #0]
80004b6: b912 cbnz r2, 80004be <_ZN4modm5fiber9Scheduler10unscheduleEv+0x22>
./modm/src/modm/processing/fiber/scheduler.hpp:115
current = nullptr;
80004b8: 605a str r2, [r3, #4]
./modm/src/modm/processing/fiber/scheduler.hpp:116
modm_context_end();
80004ba: f001 f898 bl 80015ee <modm_context_end>
_ZN4modm5fiber9Scheduler4jumpERNS0_4TaskE():
./modm/src/modm/processing/fiber/scheduler.hpp:94
current = &other;
80004be: 6059 str r1, [r3, #4]
./modm/src/modm/processing/fiber/scheduler.hpp:95
modm_context_jump(&from->ctx, &other.ctx);
80004c0: f001 f887 bl 80015d2 <modm_context_jump>
080004c4 <_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
80004c4: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPFvvEE_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
80004c6: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
80004c8: 4801 ldr r0, [pc, #4] ; (80004d0 <_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_+0xc>)
80004ca: f7ff ffe7 bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
80004ce: bf00 nop
80004d0: 20000c2c .word 0x20000c2c
080004d4 <_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
80004d4: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPFvvEE_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
80004d6: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
80004d8: 4801 ldr r0, [pc, #4] ; (80004e0 <_ZZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_+0xc>)
80004da: f7ff ffdf bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
80004de: bf00 nop
80004e0: 20000c2c .word 0x20000c2c
080004e4 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
80004e4: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPFvvEE_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
80004e6: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
80004e8: 4801 ldr r0, [pc, #4] ; (80004f0 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_+0xc>)
80004ea: f7ff ffd7 bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
80004ee: bf00 nop
80004f0: 20000c2c .word 0x20000c2c
080004f4 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
80004f4: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPFvvEE_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
80004f6: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
80004f8: 4801 ldr r0, [pc, #4] ; (8000500 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_+0xc>)
80004fa: f7ff ffcf bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
80004fe: bf00 nop
8000500: 20000c2c .word 0x20000c2c
08000504 <_ZZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
8000504: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPS3_E_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
8000506: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
8000508: 4801 ldr r0, [pc, #4] ; (8000510 <_ZZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESB_+0xc>)
800050a: f7ff ffc7 bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
800050e: bf00 nop
8000510: 20000c2c .word 0x20000c2c
08000514 <_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
8000514: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPFvvEE_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
8000516: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
8000518: 4801 ldr r0, [pc, #4] ; (8000520 <_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_+0xc>)
800051a: f7ff ffbf bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
800051e: bf00 nop
8000520: 20000c2c .word 0x20000c2c
08000524 <_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_>:
_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_():
./modm/src/modm/processing/fiber/task.hpp:187
auto caller = (uintptr_t) +[](Callable fn)
8000524: b508 push {r3, lr}
_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPFvvEE_clESB_():
./modm/src/modm/processing/fiber/task.hpp:191
} else fn();
8000526: 4780 blx r0
./modm/src/modm/processing/fiber/task.hpp:192
fiber::Scheduler::instance().unschedule();
8000528: 4801 ldr r0, [pc, #4] ; (8000530 <_ZZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPFvvEE_4_FUNESB_+0xc>)
800052a: f7ff ffb7 bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
800052e: bf00 nop
8000530: 20000c2c .word 0x20000c2c
08000534 <_ZN4modm5fiber9Scheduler3runEv>:
_ZNK4modm5fiber9Scheduler5emptyEv():
./modm/src/modm/processing/fiber/scheduler.hpp:87
return last == nullptr;
8000534: 4b03 ldr r3, [pc, #12] ; (8000544 <_ZN4modm5fiber9Scheduler3runEv+0x10>)
8000536: 681a ldr r2, [r3, #0]
_ZN4modm5fiber9Scheduler5startEv():
./modm/src/modm/processing/fiber/scheduler.hpp:138
}
bool
start()
{
if (empty()) return false;
8000538: b11a cbz r2, 8000542 <_ZN4modm5fiber9Scheduler3runEv+0xe>
./modm/src/modm/processing/fiber/scheduler.hpp:139
current = last->next;
800053a: 68d0 ldr r0, [r2, #12]
800053c: 6058 str r0, [r3, #4]
./modm/src/modm/processing/fiber/scheduler.hpp:140
modm_context_start(&current->ctx);
800053e: f001 b835 b.w 80015ac <modm_context_start>
_ZN4modm5fiber9Scheduler3runEv():
./modm/src/modm/processing/fiber/scheduler.hpp:167
/// Runs the currently active scheduler.
static void
run()
{
instance().start();
}
8000542: 4770 bx lr
8000544: 20000c2c .word 0x20000c2c
08000548 <_ZN4modm10this_fiber5yieldEv>:
_ZN4modm5fiber9Scheduler5yieldEv():
./modm/src/modm/processing/fiber/scheduler.hpp:101
if (current == nullptr) return;
8000548: 4b05 ldr r3, [pc, #20] ; (8000560 <_ZN4modm10this_fiber5yieldEv+0x18>)
800054a: 6858 ldr r0, [r3, #4]
800054c: b130 cbz r0, 800055c <_ZN4modm10this_fiber5yieldEv+0x14>
./modm/src/modm/processing/fiber/scheduler.hpp:102
Task* next = current->next;
800054e: 68c1 ldr r1, [r0, #12]
./modm/src/modm/processing/fiber/scheduler.hpp:103
if (next == current) return;
8000550: 4288 cmp r0, r1
8000552: d003 beq.n 800055c <_ZN4modm10this_fiber5yieldEv+0x14>
_ZN4modm5fiber9Scheduler4jumpERNS0_4TaskE():
./modm/src/modm/processing/fiber/scheduler.hpp:94
current = &other;
8000554: e9c3 0100 strd r0, r1, [r3]
./modm/src/modm/processing/fiber/scheduler.hpp:95
modm_context_jump(&from->ctx, &other.ctx);
8000558: f001 b83b b.w 80015d2 <modm_context_jump>
_ZN4modm10this_fiber5yieldEv():
./modm/src/modm/processing/fiber/functions.hpp:44
*/
inline void
yield()
{
modm::fiber::Scheduler::instance().yield();
}
800055c: 4770 bx lr
800055e: bf00 nop
8000560: 20000c2c .word 0x20000c2c
08000564 <_Z15fiber_function1v>:
_Z15fiber_function1v():
./main.cpp:27
uint32_t total_counter=0;
modm_fastdata modm::CycleCounter counter;
void
fiber_function1()
{
8000564: b570 push {r4, r5, r6, lr}
./main.cpp:28
MODM_LOG_INFO << MODM_FILE_INFO << modm::endl;
8000566: 490b ldr r1, [pc, #44] ; (8000594 <_Z15fiber_function1v+0x30>)
8000568: 480b ldr r0, [pc, #44] ; (8000598 <_Z15fiber_function1v+0x34>)
800056a: f7ff fe7a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
800056e: 490b ldr r1, [pc, #44] ; (800059c <_Z15fiber_function1v+0x38>)
8000570: f7ff fe76 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:29
while (++f1counter < cycles) { modm::this_fiber::yield(); total_counter++; }
8000574: 4c0a ldr r4, [pc, #40] ; (80005a0 <_Z15fiber_function1v+0x3c>)
8000576: 4e0b ldr r6, [pc, #44] ; (80005a4 <_Z15fiber_function1v+0x40>)
8000578: 4d0b ldr r5, [pc, #44] ; (80005a8 <_Z15fiber_function1v+0x44>)
./main.cpp:29 (discriminator 1)
800057a: 6823 ldr r3, [r4, #0]
800057c: 3301 adds r3, #1
800057e: 42b3 cmp r3, r6
8000580: 6023 str r3, [r4, #0]
8000582: d900 bls.n 8000586 <_Z15fiber_function1v+0x22>
./main.cpp:30
}
8000584: bd70 pop {r4, r5, r6, pc}
./main.cpp:29 (discriminator 2)
while (++f1counter < cycles) { modm::this_fiber::yield(); total_counter++; }
8000586: f7ff ffdf bl 8000548 <_ZN4modm10this_fiber5yieldEv>
800058a: 682b ldr r3, [r5, #0]
800058c: 3301 adds r3, #1
800058e: 602b str r3, [r5, #0]
8000590: e7f3 b.n 800057a <_Z15fiber_function1v+0x16>
8000592: bf00 nop
8000594: 08001d68 .word 0x08001d68
8000598: 20000c74 .word 0x20000c74
800059c: 08000221 .word 0x08000221
80005a0: 20000c28 .word 0x20000c28
80005a4: 0001869f .word 0x0001869f
80005a8: 20000c20 .word 0x20000c20
080005ac <_ZN6fiber3MUlvE_4_FUNEv>:
_ZN6fiber3MUlvE_4_FUNEv():
./main.cpp:65
modm_faststack modm::Fiber<> fiber_y1([](){ modm::this_fiber::yield(); counter.stop(); });
modm_faststack modm::Fiber<> fiber_y2([](){ counter.start(); modm::this_fiber::yield(); });
modm_faststack modm::Fiber<> fiber1(fiber_function1, modm::fiber::Start::Later);
modm_faststack modm::Fiber<> fiber2([](){ fiber_function2(cycles); }, modm::fiber::Start::Later);
modm_faststack modm::Fiber<> fiber3([](){ test.fiber_function3(); }, modm::fiber::Start::Later);
80005ac: b570 push {r4, r5, r6, lr}
_ZN4Test15fiber_function3Ev():
./main.cpp:44
MODM_LOG_INFO << MODM_FILE_INFO << modm::endl;
80005ae: 490b ldr r1, [pc, #44] ; (80005dc <_ZN6fiber3MUlvE_4_FUNEv+0x30>)
80005b0: 480b ldr r0, [pc, #44] ; (80005e0 <_ZN6fiber3MUlvE_4_FUNEv+0x34>)
80005b2: f7ff fe56 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80005b6: 490b ldr r1, [pc, #44] ; (80005e4 <_ZN6fiber3MUlvE_4_FUNEv+0x38>)
80005b8: f7ff fe52 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:45
while (++f3counter < cycles) { modm::this_fiber::yield(); total_counter++; }
80005bc: 4c0a ldr r4, [pc, #40] ; (80005e8 <_ZN6fiber3MUlvE_4_FUNEv+0x3c>)
80005be: 4e0b ldr r6, [pc, #44] ; (80005ec <_ZN6fiber3MUlvE_4_FUNEv+0x40>)
80005c0: 4d0b ldr r5, [pc, #44] ; (80005f0 <_ZN6fiber3MUlvE_4_FUNEv+0x44>)
80005c2: 6823 ldr r3, [r4, #0]
80005c4: 3301 adds r3, #1
80005c6: 42b3 cmp r3, r6
80005c8: 6023 str r3, [r4, #0]
80005ca: d900 bls.n 80005ce <_ZN6fiber3MUlvE_4_FUNEv+0x22>
_ZN6fiber3MUlvE_4_FUNEv():
./main.cpp:65
modm_faststack modm::Fiber<> fiber3([](){ test.fiber_function3(); }, modm::fiber::Start::Later);
80005cc: bd70 pop {r4, r5, r6, pc}
_ZN4Test15fiber_function3Ev():
./main.cpp:45
while (++f3counter < cycles) { modm::this_fiber::yield(); total_counter++; }
80005ce: f7ff ffbb bl 8000548 <_ZN4modm10this_fiber5yieldEv>
80005d2: 682b ldr r3, [r5, #0]
80005d4: 3301 adds r3, #1
80005d6: 602b str r3, [r5, #0]
80005d8: e7f3 b.n 80005c2 <_ZN6fiber3MUlvE_4_FUNEv+0x16>
80005da: bf00 nop
80005dc: 08001d78 .word 0x08001d78
80005e0: 20000c74 .word 0x20000c74
80005e4: 08000221 .word 0x08000221
80005e8: 20000c18 .word 0x20000c18
80005ec: 0001869f .word 0x0001869f
80005f0: 20000c20 .word 0x20000c20
080005f4 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_>:
_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_():
./modm/src/modm/processing/fiber/task.hpp:209
auto caller = (uintptr_t) +[](std::decay_t<T>* closure)
80005f4: b508 push {r3, lr}
_ZN6fiber4MUlvE_clEv():
./main.cpp:67
modm_faststack modm::Fiber<> fiber4([cyc=uint32_t(0)]() mutable
{ cyc = cycles; test.fiber_function4(cyc); }, modm::fiber::Start::Later);
80005f6: 4b0d ldr r3, [pc, #52] ; (800062c <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x38>)
_ZN4Test15fiber_function4Em():
./main.cpp:51
MODM_LOG_INFO << MODM_FILE_INFO << modm::endl;
80005f8: 490d ldr r1, [pc, #52] ; (8000630 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x3c>)
_ZN6fiber4MUlvE_clEv():
./main.cpp:67
{ cyc = cycles; test.fiber_function4(cyc); }, modm::fiber::Start::Later);
80005fa: 6003 str r3, [r0, #0]
_ZN4Test15fiber_function4Em():
./main.cpp:51
MODM_LOG_INFO << MODM_FILE_INFO << modm::endl;
80005fc: 480d ldr r0, [pc, #52] ; (8000634 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x40>)
80005fe: f7ff fe30 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
8000602: 490d ldr r1, [pc, #52] ; (8000638 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x44>)
8000604: f7ff fe2c bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:52
while (++f4counter < cyc) { modm::this_fiber::yield(); total_counter++; }
8000608: 4c0c ldr r4, [pc, #48] ; (800063c <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x48>)
800060a: 4e0d ldr r6, [pc, #52] ; (8000640 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x4c>)
800060c: 4d0d ldr r5, [pc, #52] ; (8000644 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x50>)
800060e: 6863 ldr r3, [r4, #4]
8000610: 3301 adds r3, #1
8000612: 42b3 cmp r3, r6
8000614: 6063 str r3, [r4, #4]
8000616: d902 bls.n 800061e <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x2a>
_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENKUlPS3_E_clESA_():
./modm/src/modm/processing/fiber/task.hpp:214
fiber::Scheduler::instance().unschedule();
8000618: 480b ldr r0, [pc, #44] ; (8000648 <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x54>)
800061a: f7ff ff3f bl 800049c <_ZN4modm5fiber9Scheduler10unscheduleEv>
_ZN4Test15fiber_function4Em():
./main.cpp:52
800061e: f7ff ff93 bl 8000548 <_ZN4modm10this_fiber5yieldEv>
8000622: 682b ldr r3, [r5, #0]
8000624: 3301 adds r3, #1
8000626: 602b str r3, [r5, #0]
8000628: e7f1 b.n 800060e <_ZZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartEENUlPS3_E_4_FUNESA_+0x1a>
800062a: bf00 nop
800062c: 000186a0 .word 0x000186a0
8000630: 08001d88 .word 0x08001d88
8000634: 20000c74 .word 0x20000c74
8000638: 08000221 .word 0x08000221
800063c: 20000c18 .word 0x20000c18
8000640: 0001869f .word 0x0001869f
8000644: 20000c20 .word 0x20000c20
8000648: 20000c2c .word 0x20000c2c
0800064c <_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_.isra.0>:
_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_():
./modm/src/modm/processing/fiber/functions.hpp:77
*/
template< class Rep, class Period, class Function >
requires requires { std::is_invocable_r_v<bool, Function, void>; }
[[nodiscard]]
bool
poll_for(std::chrono::duration<Rep, Period> sleep_duration, Function &&condition)
800064c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
8000650: 460c mov r4, r1
8000652: 4605 mov r5, r0
./modm/src/modm/processing/fiber/functions.hpp:85
using Clock = std::conditional_t<
std::is_convertible_v<std::chrono::duration<Rep, Period>,
std::chrono::duration<Rep, std::milli>>,
modm::chrono::milli_clock, modm::chrono::micro_clock>;
const auto start = Clock::now();
8000654: f000 fd68 bl 8001128 <_ZN4modm6chrono11milli_clock3nowEv>
_ZNSt6chrono20__duration_cast_implINS_8durationIxSt5ratioILx1ELx1000EEEES2_ILx1000ELx1EExLb0ELb1EE6__castIxS2_ILx1ELx1EEEES4_RKNS1_IT_T0_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:225
8000658: f44f 777a mov.w r7, #1000 ; 0x3e8
_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_():
./modm/src/modm/processing/fiber/functions.hpp:85
800065c: 4606 mov r6, r0
_ZNSt6chrono20__duration_cast_implINS_8durationIxSt5ratioILx1ELx1000EEEES2_ILx1ELx1EExLb1ELb1EE6__castImS3_EES4_RKNS1_IT_T0_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:199
800065e: f04f 0800 mov.w r8, #0
_ZNSt6chrono20__duration_cast_implINS_8durationIxSt5ratioILx1ELx1000EEEES2_ILx1000ELx1EExLb0ELb1EE6__castIxS2_ILx1ELx1EEEES4_RKNS1_IT_T0_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:225
8000662: 437c muls r4, r7
_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_():
./modm/src/modm/processing/fiber/functions.hpp:88
do {
if (std::forward<Function>(condition)()) return true;
modm::this_fiber::yield();
8000664: f7ff ff70 bl 8000548 <_ZN4modm10this_fiber5yieldEv>
./modm/src/modm/processing/fiber/functions.hpp:90
}
while((Clock::now() - start) <= sleep_duration);
8000668: f000 fd5e bl 8001128 <_ZN4modm6chrono11milli_clock3nowEv>
_ZNSt6chrono20__duration_cast_implINS_8durationIxSt5ratioILx1ELx1000EEEES2_ILx1000ELx1EExLb0ELb1EE6__castIxS2_ILx1ELx1EEEES4_RKNS1_IT_T0_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:225
800066c: fba5 1307 umull r1, r3, r5, r7
_ZNSt6chronomiImSt5ratioILx1ELx1000EEmS2_EENSt11common_typeIJNS_8durationIT_T0_EENS4_IT1_T2_EEEE4typeERKS7_RKSA_():
././include/newlib/c++/12.2.1/bits/chrono.h:650
8000670: 1b82 subs r2, r0, r6
_ZNSt6chrono20__duration_cast_implINS_8durationIxSt5ratioILx1ELx1000EEEES2_ILx1000ELx1EExLb0ELb1EE6__castIxS2_ILx1ELx1EEEES4_RKNS1_IT_T0_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:225
8000672: 4423 add r3, r4
_ZNSt6chronossImSt5ratioILx1ELx1000EExS1_ILx1ELx1EEEEDaRKNS_8durationIT_T0_EERKNS4_IT1_T2_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:775
8000674: 4598 cmp r8, r3
8000676: bf08 it eq
8000678: 428a cmpeq r2, r1
800067a: d0f3 beq.n 8000664 <_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_.isra.0+0x18>
800067c: 428a cmp r2, r1
800067e: eb78 0303 sbcs.w r3, r8, r3
8000682: dbef blt.n 8000664 <_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_.isra.0+0x18>
_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_():
./modm/src/modm/processing/fiber/functions.hpp:92
return false;
}
8000684: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
08000688 <_ZN8fiber_y2MUlvE_4_FUNEv>:
_ZN8fiber_y2MUlvE_4_FUNEv():
./main.cpp:61
modm_faststack modm::Fiber<> fiber_y2([](){ counter.start(); modm::this_fiber::yield(); });
8000688: b508 push {r3, lr}
_ZN4modm12CycleCounter5startEv():
./modm/src/modm/driver/time/cycle_counter.hpp:36
/// Sample the timer at the start of your measurement
modm_always_inline void
start()
{
start_ = DWT->CYCCNT;
800068a: 4b03 ldr r3, [pc, #12] ; (8000698 <_ZN8fiber_y2MUlvE_4_FUNEv+0x10>)
800068c: 685a ldr r2, [r3, #4]
800068e: 4b03 ldr r3, [pc, #12] ; (800069c <_ZN8fiber_y2MUlvE_4_FUNEv+0x14>)
8000690: 601a str r2, [r3, #0]
_ZNK8fiber_y2MUlvE_clEv():
./main.cpp:61
8000692: f7ff ff59 bl 8000548 <_ZN4modm10this_fiber5yieldEv>
_ZN8fiber_y2MUlvE_4_FUNEv():
./main.cpp:61
8000696: bd08 pop {r3, pc}
8000698: e0001000 .word 0xe0001000
800069c: 20000c04 .word 0x20000c04
080006a0 <_ZN8fiber_y1MUlvE_4_FUNEv>:
_ZN8fiber_y1MUlvE_4_FUNEv():
./main.cpp:60
modm_faststack modm::Fiber<> fiber_y1([](){ modm::this_fiber::yield(); counter.stop(); });
80006a0: b508 push {r3, lr}
_ZNK8fiber_y1MUlvE_clEv():
./main.cpp:60
80006a2: f7ff ff51 bl 8000548 <_ZN4modm10this_fiber5yieldEv>
_ZN4modm12CycleCounter4stopEv():
./modm/src/modm/driver/time/cycle_counter.hpp:43
/// Sample the timer at the end of your measurement
modm_always_inline void
stop()
{
stop_ = DWT->CYCCNT;
80006a6: 4b02 ldr r3, [pc, #8] ; (80006b0 <_ZN8fiber_y1MUlvE_4_FUNEv+0x10>)
80006a8: 685a ldr r2, [r3, #4]
80006aa: 4b02 ldr r3, [pc, #8] ; (80006b4 <_ZN8fiber_y1MUlvE_4_FUNEv+0x14>)
80006ac: 605a str r2, [r3, #4]
_ZN8fiber_y1MUlvE_4_FUNEv():
./main.cpp:60
80006ae: bd08 pop {r3, pc}
80006b0: e0001000 .word 0xe0001000
80006b4: 20000c04 .word 0x20000c04
080006b8 <_Z15fiber_function2m>:
_Z15fiber_function2m():
./main.cpp:34
{
80006b8: b570 push {r4, r5, r6, lr}
./main.cpp:35
MODM_LOG_INFO << MODM_FILE_INFO << modm::endl;
80006ba: 490b ldr r1, [pc, #44] ; (80006e8 <_Z15fiber_function2m+0x30>)
./main.cpp:34
{
80006bc: 4604 mov r4, r0
./main.cpp:35
MODM_LOG_INFO << MODM_FILE_INFO << modm::endl;
80006be: 480b ldr r0, [pc, #44] ; (80006ec <_Z15fiber_function2m+0x34>)
80006c0: f7ff fdcf bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80006c4: 490a ldr r1, [pc, #40] ; (80006f0 <_Z15fiber_function2m+0x38>)
80006c6: f7ff fdcb bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:36
while (++f2counter < cyc) { modm::this_fiber::yield(); total_counter++; }
80006ca: 4d0a ldr r5, [pc, #40] ; (80006f4 <_Z15fiber_function2m+0x3c>)
80006cc: 4e0a ldr r6, [pc, #40] ; (80006f8 <_Z15fiber_function2m+0x40>)
./main.cpp:36 (discriminator 1)
80006ce: 682b ldr r3, [r5, #0]
80006d0: 3301 adds r3, #1
80006d2: 42a3 cmp r3, r4
80006d4: 602b str r3, [r5, #0]
80006d6: d300 bcc.n 80006da <_Z15fiber_function2m+0x22>
./main.cpp:37
}
80006d8: bd70 pop {r4, r5, r6, pc}
./main.cpp:36 (discriminator 2)
while (++f2counter < cyc) { modm::this_fiber::yield(); total_counter++; }
80006da: f7ff ff35 bl 8000548 <_ZN4modm10this_fiber5yieldEv>
80006de: 6833 ldr r3, [r6, #0]
80006e0: 3301 adds r3, #1
80006e2: 6033 str r3, [r6, #0]
80006e4: e7f3 b.n 80006ce <_Z15fiber_function2m+0x16>
80006e6: bf00 nop
80006e8: 08001d98 .word 0x08001d98
80006ec: 20000c74 .word 0x20000c74
80006f0: 08000221 .word 0x08000221
80006f4: 20000c24 .word 0x20000c24
80006f8: 20000c20 .word 0x20000c20
080006fc <_ZN6fiber2MUlvE_4_FUNEv>:
_ZNK6fiber2MUlvE_clEv():
./main.cpp:64
modm_faststack modm::Fiber<> fiber2([](){ fiber_function2(cycles); }, modm::fiber::Start::Later);
80006fc: 4801 ldr r0, [pc, #4] ; (8000704 <_ZN6fiber2MUlvE_4_FUNEv+0x8>)
80006fe: f7ff bfdb b.w 80006b8 <_Z15fiber_function2m>
8000702: bf00 nop
8000704: 000186a0 .word 0x000186a0
08000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>:
_ZN4modm8IOStream16writeIntegerModeImEEvT_():
./modm/src/modm/io/iostream.hpp:223
if (mode == Mode::Ascii) {
8000708: 6843 ldr r3, [r0, #4]
./modm/src/modm/io/iostream.hpp:220
writeIntegerMode(const T v)
800070a: b570 push {r4, r5, r6, lr}
800070c: 4605 mov r5, r0
800070e: 460e mov r6, r1
./modm/src/modm/io/iostream.hpp:223
if (mode == Mode::Ascii) {
8000710: b91b cbnz r3, 800071a <_ZN4modm8IOStream16writeIntegerModeImEEvT_+0x12>
./modm/src/modm/io/iostream.hpp:232
}
8000712: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
./modm/src/modm/io/iostream.hpp:224
writeInteger(v);
8000716: f000 bc14 b.w 8000f42 <_ZN4modm8IOStream12writeIntegerEm>
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
800071a: 2b02 cmp r3, #2
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
800071c: f04f 0418 mov.w r4, #24
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000720: d10a bne.n 8000738 <_ZN4modm8IOStream16writeIntegerModeImEEvT_+0x30>
./modm/src/modm/io/iostream.hpp:227
writeBin(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000722: fa26 f104 lsr.w r1, r6, r4
8000726: 3c08 subs r4, #8
8000728: 4628 mov r0, r5
800072a: b2c9 uxtb r1, r1
800072c: b2e4 uxtb r4, r4
800072e: f000 fbdd bl 8000eec <_ZN4modm8IOStream8writeBinEh>
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000732: 2cf8 cmp r4, #248 ; 0xf8
8000734: d1f5 bne.n 8000722 <_ZN4modm8IOStream16writeIntegerModeImEEvT_+0x1a>
./modm/src/modm/io/iostream.hpp:232
}
8000736: bd70 pop {r4, r5, r6, pc}
./modm/src/modm/io/iostream.hpp:230 (discriminator 3)
writeHex(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000738: fa26 f104 lsr.w r1, r6, r4
800073c: 3c08 subs r4, #8
800073e: 4628 mov r0, r5
8000740: b2c9 uxtb r1, r1
8000742: b2e4 uxtb r4, r4
8000744: f000 fbc6 bl 8000ed4 <_ZN4modm8IOStream8writeHexEh>
./modm/src/modm/io/iostream.hpp:229 (discriminator 3)
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000748: 2cf8 cmp r4, #248 ; 0xf8
800074a: d1f5 bne.n 8000738 <_ZN4modm8IOStream16writeIntegerModeImEEvT_+0x30>
800074c: e7f3 b.n 8000736 <_ZN4modm8IOStream16writeIntegerModeImEEvT_+0x2e>
...
08000750 <_ZN10fiber_pongMUlvE_4_FUNEv>:
_ZN10fiber_pongMUlvE_4_FUNEv():
./main.cpp:77
modm_faststack modm::Fiber<> fiber_ping([](){
MODM_LOG_INFO << "ping = " << fiber_ping.stack_usage() << modm::endl;
modm::this_fiber::sleep_for(1s);
fiber_pong.start();
}, modm::fiber::Start::Later);
modm_faststack modm::Fiber<> fiber_pong([](){
8000750: b510 push {r4, lr}
_ZNK10fiber_pongMUlvE_clEv():
./main.cpp:78
MODM_LOG_INFO << "pong = " << fiber_pong.stack_usage() << modm::endl;
8000752: 490c ldr r1, [pc, #48] ; (8000784 <_ZN10fiber_pongMUlvE_4_FUNEv+0x34>)
8000754: 480c ldr r0, [pc, #48] ; (8000788 <_ZN10fiber_pongMUlvE_4_FUNEv+0x38>)
8000756: f7ff fd84 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
800075a: 4604 mov r4, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
return modm_context_stack_usage(&ctx);
800075c: 480b ldr r0, [pc, #44] ; (800078c <_ZN10fiber_pongMUlvE_4_FUNEv+0x3c>)
800075e: f000 ff13 bl 8001588 <modm_context_stack_usage>
8000762: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
{ writeIntegerMode(static_cast<uint32_t>(v)); return *this; }
8000764: 4620 mov r0, r4
8000766: f7ff ffcf bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
_ZNK10fiber_pongMUlvE_clEv():
./main.cpp:78
800076a: 4620 mov r0, r4
800076c: 4908 ldr r1, [pc, #32] ; (8000790 <_ZN10fiber_pongMUlvE_4_FUNEv+0x40>)
800076e: f7ff fd77 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
_ZN4modm10this_fiber9sleep_forIxSt5ratioILx1ELx1EEEEvNSt6chrono8durationIT_T0_EE():
./modm/src/modm/processing/fiber/functions.hpp:132
*/
template< class Rep, class Period >
void
sleep_for(std::chrono::duration<Rep, Period> sleep_duration)
{
(void) poll_for(sleep_duration, []{ return false; });
8000772: 2001 movs r0, #1
8000774: 2100 movs r1, #0
8000776: f7ff ff69 bl 800064c <_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_.isra.0>
_ZN10fiber_pongMUlvE_4_FUNEv():
./main.cpp:81
modm::this_fiber::sleep_for(1s);
fiber_ping.start();
}, modm::fiber::Start::Later);
800077a: e8bd 4010 ldmia.w sp!, {r4, lr}
_ZNK10fiber_pongMUlvE_clEv():
./main.cpp:80
fiber_ping.start();
800077e: 4805 ldr r0, [pc, #20] ; (8000794 <_ZN10fiber_pongMUlvE_4_FUNEv+0x44>)
8000780: f7ff bd5a b.w 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
8000784: 08001da8 .word 0x08001da8
8000788: 20000c74 .word 0x20000c74
800078c: 200014c0 .word 0x200014c0
8000790: 08000221 .word 0x08000221
8000794: 200016d8 .word 0x200016d8
08000798 <_ZN10fiber_pingMUlvE_4_FUNEv>:
_ZN10fiber_pingMUlvE_4_FUNEv():
./main.cpp:72
modm_faststack modm::Fiber<> fiber_ping([](){
8000798: b510 push {r4, lr}
_ZNK10fiber_pingMUlvE_clEv():
./main.cpp:73
MODM_LOG_INFO << "ping = " << fiber_ping.stack_usage() << modm::endl;
800079a: 490c ldr r1, [pc, #48] ; (80007cc <_ZN10fiber_pingMUlvE_4_FUNEv+0x34>)
800079c: 480c ldr r0, [pc, #48] ; (80007d0 <_ZN10fiber_pingMUlvE_4_FUNEv+0x38>)
800079e: f7ff fd60 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80007a2: 4604 mov r4, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
80007a4: 480b ldr r0, [pc, #44] ; (80007d4 <_ZN10fiber_pingMUlvE_4_FUNEv+0x3c>)
80007a6: f000 feef bl 8001588 <modm_context_stack_usage>
80007aa: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
80007ac: 4620 mov r0, r4
80007ae: f7ff ffab bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
_ZNK10fiber_pingMUlvE_clEv():
./main.cpp:73
80007b2: 4620 mov r0, r4
80007b4: 4908 ldr r1, [pc, #32] ; (80007d8 <_ZN10fiber_pingMUlvE_4_FUNEv+0x40>)
80007b6: f7ff fd53 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
_ZN4modm10this_fiber9sleep_forIxSt5ratioILx1ELx1EEEEvNSt6chrono8durationIT_T0_EE():
./modm/src/modm/processing/fiber/functions.hpp:132
80007ba: 2001 movs r0, #1
80007bc: 2100 movs r1, #0
80007be: f7ff ff45 bl 800064c <_ZN4modm10this_fiber8poll_forIxSt5ratioILx1ELx1EEZNS0_9sleep_forIxS3_EEvNSt6chrono8durationIT_T0_EEEUlvE_EEbS9_OT1_.isra.0>
_ZN10fiber_pingMUlvE_4_FUNEv():
./main.cpp:76
}, modm::fiber::Start::Later);
80007c2: e8bd 4010 ldmia.w sp!, {r4, lr}
_ZNK10fiber_pingMUlvE_clEv():
./main.cpp:75
fiber_pong.start();
80007c6: 4805 ldr r0, [pc, #20] ; (80007dc <_ZN10fiber_pingMUlvE_4_FUNEv+0x44>)
80007c8: f7ff bd36 b.w 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
80007cc: 08001db0 .word 0x08001db0
80007d0: 20000c74 .word 0x20000c74
80007d4: 200016d8 .word 0x200016d8
80007d8: 08000221 .word 0x08000221
80007dc: 200014c0 .word 0x200014c0
080007e0 <main>:
main():
./main.cpp:87
// Blue pill (M3 72MHz): Executed 1000000 in 1098591us (910256.88 yields per second)
// Feather M0 (M0+ 48MHz): Executed 1000000 in 1944692us (514220.25 yields per second)
int
main()
{
80007e0: b580 push {r7, lr}
./main.cpp:88
Board::initialize();
80007e2: f7ff fd47 bl 8000274 <_ZN5Board10initializeEv>
_ZN4modm12CycleCounter10initializeEbh():
./modm/src/modm/driver/time/cycle_counter.hpp:29
this->overhead = overhead;
80007e6: 2304 movs r3, #4
_ZN4modm8IOStream5flushEv():
./modm/src/modm/io/iostream.hpp:101
mode = Mode::Ascii;
80007e8: f04f 0900 mov.w r9, #0
main():
./main.cpp:90
counter.initialize();
MODM_LOG_INFO << "Starting fiber modm::yield benchmark..." << modm::endl;
80007ec: 4cc3 ldr r4, [pc, #780] ; (8000afc <main+0x31c>)
_ZN4modm12CycleCounter10initializeEbh():
./modm/src/modm/driver/time/cycle_counter.hpp:29
80007ee: 4dc4 ldr r5, [pc, #784] ; (8000b00 <main+0x320>)
main():
./main.cpp:90
80007f0: 4620 mov r0, r4
80007f2: 49c4 ldr r1, [pc, #784] ; (8000b04 <main+0x324>)
_ZN4modm12CycleCounter10initializeEbh():
./modm/src/modm/driver/time/cycle_counter.hpp:29
80007f4: 722b strb r3, [r5, #8]
main():
./main.cpp:90
80007f6: f7ff fd34 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80007fa: 49c3 ldr r1, [pc, #780] ; (8000b08 <main+0x328>)
80007fc: f7ff fd30 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
_ZN4modm8IOStream5flushEv():
./modm/src/modm/io/iostream.hpp:100
device->flush();
8000800: 6820 ldr r0, [r4, #0]
8000802: 6803 ldr r3, [r0, #0]
8000804: 691b ldr r3, [r3, #16]
8000806: 4798 blx r3
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
modm_context_watermark(&ctx);
8000808: 48c0 ldr r0, [pc, #768] ; (8000b0c <main+0x32c>)
_ZN4modm8IOStream5flushEv():
./modm/src/modm/io/iostream.hpp:101
mode = Mode::Ascii;
800080a: f8c4 9004 str.w r9, [r4, #4]
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
800080e: f000 fea7 bl 8001560 <modm_context_watermark>
8000812: 48bf ldr r0, [pc, #764] ; (8000b10 <main+0x330>)
8000814: f000 fea4 bl 8001560 <modm_context_watermark>
main():
./modm/ext/cmsis/core/cmsis_gcc.h:1208
*/
__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void)
{
uint32_t result;
__ASM volatile ("MRS %0, primask" : "=r" (result) );
8000818: f3ef 8610 mrs r6, PRIMASK
./modm/ext/cmsis/core/cmsis_gcc.h:962
__ASM volatile ("cpsid i" : : : "memory");
800081c: b672 cpsid i
./main.cpp:98
fiber_y1.watermark_stack();
fiber_y2.watermark_stack();
// fiber_y1, fiber_y2 were autostarted
{
modm::atomic::Lock l;
modm::fiber::Scheduler::run();
800081e: f7ff fe89 bl 8000534 <_ZN4modm5fiber9Scheduler3runEv>
./modm/ext/cmsis/core/cmsis_gcc.h:1236
\details Assigns the given value to the Priority Mask Register.
\param [in] priMask Priority Mask
*/
__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask)
{
__ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
8000822: f386 8810 msr PRIMASK, r6
./main.cpp:101
}
MODM_LOG_INFO << "Y1 stack usage: = " << fiber_y1.stack_usage() << modm::endl;
8000826: 49bb ldr r1, [pc, #748] ; (8000b14 <main+0x334>)
8000828: 4620 mov r0, r4
800082a: f7ff fd1a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
800082e: 4606 mov r6, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
return modm_context_stack_usage(&ctx);
8000830: 48b6 ldr r0, [pc, #728] ; (8000b0c <main+0x32c>)
8000832: f000 fea9 bl 8001588 <modm_context_stack_usage>
8000836: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
{ writeIntegerMode(static_cast<uint32_t>(v)); return *this; }
8000838: 4630 mov r0, r6
800083a: f7ff ff65 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:101
800083e: 4630 mov r0, r6
8000840: 49b1 ldr r1, [pc, #708] ; (8000b08 <main+0x328>)
8000842: f7ff fd0d bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:102
MODM_LOG_INFO << "Y2 stack usage: = " << fiber_y2.stack_usage() << modm::endl;
8000846: 49b4 ldr r1, [pc, #720] ; (8000b18 <main+0x338>)
8000848: 4620 mov r0, r4
800084a: f7ff fd0a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
800084e: 4606 mov r6, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
8000850: 48af ldr r0, [pc, #700] ; (8000b10 <main+0x330>)
8000852: f000 fe99 bl 8001588 <modm_context_stack_usage>
8000856: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
8000858: 4630 mov r0, r6
800085a: f7ff ff55 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:102
800085e: 49aa ldr r1, [pc, #680] ; (8000b08 <main+0x328>)
8000860: 4630 mov r0, r6
8000862: f7ff fcfd bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
_ZN4modm8IOStream5flushEv():
./modm/src/modm/io/iostream.hpp:100
device->flush();
8000866: 6820 ldr r0, [r4, #0]
_ZN4modm8IOStreamlsERKm():
./modm/src/modm/io/iostream.hpp:164
{ writeIntegerMode(v); return *this; }
8000868: f8df 8304 ldr.w r8, [pc, #772] ; 8000b70 <main+0x390>
_ZN4modm8IOStream5flushEv():
./modm/src/modm/io/iostream.hpp:100
device->flush();
800086c: 6803 ldr r3, [r0, #0]
800086e: 691b ldr r3, [r3, #16]
8000870: 4798 blx r3
main():
./main.cpp:106
MODM_LOG_INFO.flush();
// the rest is manually started
fiber1.start(); fiber1.watermark_stack();
8000872: 48aa ldr r0, [pc, #680] ; (8000b1c <main+0x33c>)
_ZN4modm8IOStream5flushEv():
./modm/src/modm/io/iostream.hpp:101
mode = Mode::Ascii;
8000874: f8c4 9004 str.w r9, [r4, #4]
main():
./main.cpp:106
8000878: f7ff fcde bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
modm_context_watermark(&ctx);
800087c: 48a7 ldr r0, [pc, #668] ; (8000b1c <main+0x33c>)
800087e: f000 fe6f bl 8001560 <modm_context_watermark>
main():
./main.cpp:107
fiber2.start(); fiber2.watermark_stack();
8000882: 48a7 ldr r0, [pc, #668] ; (8000b20 <main+0x340>)
8000884: f7ff fcd8 bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
8000888: 48a5 ldr r0, [pc, #660] ; (8000b20 <main+0x340>)
800088a: f000 fe69 bl 8001560 <modm_context_watermark>
main():
./main.cpp:108
fiber3.start(); fiber3.watermark_stack();
800088e: 48a5 ldr r0, [pc, #660] ; (8000b24 <main+0x344>)
8000890: f7ff fcd2 bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
8000894: 48a3 ldr r0, [pc, #652] ; (8000b24 <main+0x344>)
8000896: f000 fe63 bl 8001560 <modm_context_watermark>
main():
./main.cpp:109
fiber4.start(); fiber4.watermark_stack();
800089a: 48a3 ldr r0, [pc, #652] ; (8000b28 <main+0x348>)
800089c: f7ff fccc bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
80008a0: 48a1 ldr r0, [pc, #644] ; (8000b28 <main+0x348>)
80008a2: f000 fe5d bl 8001560 <modm_context_watermark>
main():
./main.cpp:110
const modm::PreciseTimestamp start = modm::PreciseClock::now();
80008a6: f000 fc5b bl 8001160 <_ZN4modm6chrono11micro_clock3nowEv>
80008aa: 4606 mov r6, r0
./main.cpp:111
modm::fiber::Scheduler::run();
80008ac: f7ff fe42 bl 8000534 <_ZN4modm5fiber9Scheduler3runEv>
./main.cpp:112
const auto diff = (modm::PreciseClock::now() - start);
80008b0: f000 fc56 bl 8001160 <_ZN4modm6chrono11micro_clock3nowEv>
./main.cpp:114
MODM_LOG_INFO << "Benchmark done!" << modm::endl;
80008b4: 499d ldr r1, [pc, #628] ; (8000b2c <main+0x34c>)
_ZNSt6chronomiImSt5ratioILx1ELx1000000EEmS2_EENSt11common_typeIJNS_8durationIT_T0_EENS4_IT1_T2_EEEE4typeERKS7_RKSA_():
././include/newlib/c++/12.2.1/bits/chrono.h:650
80008b6: 1b86 subs r6, r0, r6
main():
./main.cpp:114
80008b8: 4620 mov r0, r4
80008ba: f7ff fcd2 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80008be: 4992 ldr r1, [pc, #584] ; (8000b08 <main+0x328>)
80008c0: f7ff fcce bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:115
MODM_LOG_INFO << "Executed " << total_counter << " yields in " << diff << modm::endl;
80008c4: 499a ldr r1, [pc, #616] ; (8000b30 <main+0x350>)
80008c6: 4620 mov r0, r4
80008c8: f7ff fccb bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80008cc: 4607 mov r7, r0
_ZN4modm8IOStreamlsERKm():
./modm/src/modm/io/iostream.hpp:164
{ writeIntegerMode(v); return *this; }
80008ce: f8d8 1000 ldr.w r1, [r8]
80008d2: f7ff ff19 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:115
80008d6: 4638 mov r0, r7
80008d8: 4996 ldr r1, [pc, #600] ; (8000b34 <main+0x354>)
80008da: f7ff fcc2 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80008de: 4607 mov r7, r0
_ZN4modm8IOStreamlsERKm():
./modm/src/modm/io/iostream.hpp:164
80008e0: 4631 mov r1, r6
80008e2: f7ff ff11 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
_ZN4modmlsImSt5ratioILx1ELx1000000EEEERNS_8IOStreamES4_RKNSt6chrono8durationIT_T0_EE():
./modm/src/modm/architecture/interface/clock.hpp:121
modm::IOStream&
operator << (modm::IOStream& s, const std::chrono::duration<T, R>& m)
{
s << m.count();
if constexpr (std::is_same_v<R, std::nano>) s << "ns";
if constexpr (std::is_same_v<R, std::micro>) s << "us";
80008e6: 4994 ldr r1, [pc, #592] ; (8000b38 <main+0x358>)
80008e8: 4638 mov r0, r7
80008ea: f7ff fcba bl 8000262 <_ZN4modm8IOStreamlsEPKc>
main():
./main.cpp:115
80008ee: 4638 mov r0, r7
80008f0: 4985 ldr r1, [pc, #532] ; (8000b08 <main+0x328>)
80008f2: f7ff fcb5 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:116
MODM_LOG_INFO << ((total_counter * 1'000'000ull) / std::chrono::microseconds(diff).count());
80008f6: f8d8 1000 ldr.w r1, [r8]
80008fa: 4890 ldr r0, [pc, #576] ; (8000b3c <main+0x35c>)
80008fc: 464b mov r3, r9
80008fe: 4632 mov r2, r6
8000900: fba1 0100 umull r0, r1, r1, r0
8000904: f001 f84e bl 80019a4 <__aeabi_uldivmod>
8000908: 460b mov r3, r1
800090a: 468a mov sl, r1
_ZN4modm8IOStream16writeIntegerModeIyEEvT_():
./modm/src/modm/io/iostream.hpp:223
if (mode == Mode::Ascii) {
800090c: 6861 ldr r1, [r4, #4]
main():
./main.cpp:116
800090e: 4602 mov r2, r0
8000910: 4681 mov r9, r0
_ZN4modm8IOStream16writeIntegerModeIyEEvT_():
./modm/src/modm/io/iostream.hpp:223
8000912: 2900 cmp r1, #0
8000914: f040 8093 bne.w 8000a3e <main+0x25e>
./modm/src/modm/io/iostream.hpp:224
writeInteger(v);
8000918: 4620 mov r0, r4
800091a: f000 fb3a bl 8000f92 <_ZN4modm8IOStream12writeIntegerEy>
main():
./main.cpp:117
MODM_LOG_INFO << " yields per second, ";
800091e: 4988 ldr r1, [pc, #544] ; (8000b40 <main+0x360>)
8000920: 4876 ldr r0, [pc, #472] ; (8000afc <main+0x31c>)
8000922: f7ff fc9e bl 8000262 <_ZN4modm8IOStreamlsEPKc>
_ZNSt6chrono20__duration_cast_implINS_8durationIxSt5ratioILx1ELx1000000000EEEES2_ILx1000ELx1EExLb0ELb1EE6__castImS2_ILx1ELx1000000EEEES4_RKNS1_IT_T0_EE():
././include/newlib/c++/12.2.1/bits/chrono.h:225
8000926: f44f 707a mov.w r0, #1000 ; 0x3e8
main():
./main.cpp:118
MODM_LOG_INFO << (std::chrono::nanoseconds(diff).count() / total_counter);
800092a: 2300 movs r3, #0
800092c: fba6 0100 umull r0, r1, r6, r0
8000930: f8d8 2000 ldr.w r2, [r8]
8000934: f000 ffe6 bl 8001904 <__aeabi_ldivmod>
8000938: 460b mov r3, r1
800093a: 460f mov r7, r1
_ZN4modm8IOStream16writeIntegerModeIxEEvT_():
./modm/src/modm/io/iostream.hpp:223
if (mode == Mode::Ascii) {
800093c: 6861 ldr r1, [r4, #4]
main():
./main.cpp:118
800093e: 4602 mov r2, r0
8000940: 4606 mov r6, r0
_ZN4modm8IOStream16writeIntegerModeIxEEvT_():
./modm/src/modm/io/iostream.hpp:223
8000942: 2900 cmp r1, #0
8000944: f040 80a9 bne.w 8000a9a <main+0x2ba>
./modm/src/modm/io/iostream.hpp:224
writeInteger(v);
8000948: 486c ldr r0, [pc, #432] ; (8000afc <main+0x31c>)
800094a: f000 fb0b bl 8000f64 <_ZN4modm8IOStream12writeIntegerEx>
main():
./main.cpp:119
MODM_LOG_INFO << "ns per yield slice" << modm::endl;
800094e: 497d ldr r1, [pc, #500] ; (8000b44 <main+0x364>)
8000950: 486a ldr r0, [pc, #424] ; (8000afc <main+0x31c>)
8000952: f7ff fc86 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
8000956: 496c ldr r1, [pc, #432] ; (8000b08 <main+0x328>)
8000958: f7ff fc82 bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
_ZN4modm12CycleCounter6cyclesEv():
./modm/src/modm/driver/time/cycle_counter.hpp:50
/// @return the difference in cycles between start and stop.
cycle_t
cycles()
{
return (stop_ - start_) - overhead;
800095c: e9d5 3100 ldrd r3, r1, [r5]
8000960: 1ac9 subs r1, r1, r3
8000962: 7a2b ldrb r3, [r5, #8]
_ZN4modm8IOStreamlsERKm():
./modm/src/modm/io/iostream.hpp:164
{ writeIntegerMode(v); return *this; }
8000964: 4865 ldr r0, [pc, #404] ; (8000afc <main+0x31c>)
8000966: 1ac9 subs r1, r1, r3
8000968: f7ff fece bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:120
MODM_LOG_INFO << counter.cycles() << " cycles = " << counter.nanoseconds();
800096c: 4976 ldr r1, [pc, #472] ; (8000b48 <main+0x368>)
800096e: 4863 ldr r0, [pc, #396] ; (8000afc <main+0x31c>)
8000970: f7ff fc77 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
_ZN4modm12CycleCounter6cyclesEv():
./modm/src/modm/driver/time/cycle_counter.hpp:50
8000974: e9d5 3100 ldrd r3, r1, [r5]
8000978: 1ac9 subs r1, r1, r3
800097a: 7a2b ldrb r3, [r5, #8]
main():
./main.cpp:120
800097c: 4604 mov r4, r0
_ZN4modm12CycleCounter6cyclesEv():
./modm/src/modm/driver/time/cycle_counter.hpp:50
800097e: 1ac9 subs r1, r1, r3
_ZN4modm12CycleCounter11nanosecondsEv():
./modm/src/modm/driver/time/cycle_counter.hpp:71
/// @return the difference in nanoseconds between start and stop.
uint32_t
nanoseconds()
{
return (cycles() * 1'000'000'000ull) / SystemCoreClock;
8000980: 4872 ldr r0, [pc, #456] ; (8000b4c <main+0x36c>)
8000982: 4b73 ldr r3, [pc, #460] ; (8000b50 <main+0x370>)
8000984: fba1 0100 umull r0, r1, r1, r0
8000988: 681a ldr r2, [r3, #0]
800098a: 2300 movs r3, #0
800098c: f001 f80a bl 80019a4 <__aeabi_uldivmod>
8000990: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKm():
./modm/src/modm/io/iostream.hpp:164
8000992: 4620 mov r0, r4
8000994: f7ff feb8 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:121
MODM_LOG_INFO << "ns per single yield" << modm::endl;
8000998: 496e ldr r1, [pc, #440] ; (8000b54 <main+0x374>)
800099a: 4858 ldr r0, [pc, #352] ; (8000afc <main+0x31c>)
800099c: f7ff fc61 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80009a0: 4959 ldr r1, [pc, #356] ; (8000b08 <main+0x328>)
80009a2: f7ff fc5d bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:123
MODM_LOG_INFO << "F1 stack usage = " << fiber1.stack_usage() << modm::endl;
80009a6: 496c ldr r1, [pc, #432] ; (8000b58 <main+0x378>)
80009a8: 4854 ldr r0, [pc, #336] ; (8000afc <main+0x31c>)
80009aa: f7ff fc5a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80009ae: 4604 mov r4, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
return modm_context_stack_usage(&ctx);
80009b0: 485a ldr r0, [pc, #360] ; (8000b1c <main+0x33c>)
80009b2: f000 fde9 bl 8001588 <modm_context_stack_usage>
80009b6: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
{ writeIntegerMode(static_cast<uint32_t>(v)); return *this; }
80009b8: 4620 mov r0, r4
80009ba: f7ff fea5 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:123
80009be: 4620 mov r0, r4
80009c0: 4951 ldr r1, [pc, #324] ; (8000b08 <main+0x328>)
80009c2: f7ff fc4d bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:124
MODM_LOG_INFO << "F2 stack usage = " << fiber2.stack_usage() << modm::endl;
80009c6: 4965 ldr r1, [pc, #404] ; (8000b5c <main+0x37c>)
80009c8: 484c ldr r0, [pc, #304] ; (8000afc <main+0x31c>)
80009ca: f7ff fc4a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80009ce: 4604 mov r4, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
80009d0: 4853 ldr r0, [pc, #332] ; (8000b20 <main+0x340>)
80009d2: f000 fdd9 bl 8001588 <modm_context_stack_usage>
80009d6: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
80009d8: 4620 mov r0, r4
80009da: f7ff fe95 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:124
80009de: 4620 mov r0, r4
80009e0: 4949 ldr r1, [pc, #292] ; (8000b08 <main+0x328>)
80009e2: f7ff fc3d bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:125
MODM_LOG_INFO << "F3 stack usage = " << fiber3.stack_usage() << modm::endl;
80009e6: 495e ldr r1, [pc, #376] ; (8000b60 <main+0x380>)
80009e8: 4844 ldr r0, [pc, #272] ; (8000afc <main+0x31c>)
80009ea: f7ff fc3a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
80009ee: 4604 mov r4, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
80009f0: 484c ldr r0, [pc, #304] ; (8000b24 <main+0x344>)
80009f2: f000 fdc9 bl 8001588 <modm_context_stack_usage>
80009f6: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
80009f8: 4620 mov r0, r4
80009fa: f7ff fe85 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:125
80009fe: 4620 mov r0, r4
8000a00: 4941 ldr r1, [pc, #260] ; (8000b08 <main+0x328>)
8000a02: f7ff fc2d bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
./main.cpp:126
MODM_LOG_INFO << "F4 stack usage = " << fiber4.stack_usage() << modm::endl;
8000a06: 4957 ldr r1, [pc, #348] ; (8000b64 <main+0x384>)
8000a08: 483c ldr r0, [pc, #240] ; (8000afc <main+0x31c>)
8000a0a: f7ff fc2a bl 8000262 <_ZN4modm8IOStreamlsEPKc>
8000a0e: 4604 mov r4, r0
_ZNK4modm5fiber4Task11stack_usageEv():
./modm/src/modm/processing/fiber/task.hpp:145
8000a10: 4845 ldr r0, [pc, #276] ; (8000b28 <main+0x348>)
8000a12: f000 fdb9 bl 8001588 <modm_context_stack_usage>
8000a16: 4601 mov r1, r0
_ZN4modm8IOStreamlsERKj():
./modm/src/modm/io/iostream.hpp:184
8000a18: 4620 mov r0, r4
8000a1a: f7ff fe75 bl 8000708 <_ZN4modm8IOStream16writeIntegerModeImEEvT_>
main():
./main.cpp:126
8000a1e: 493a ldr r1, [pc, #232] ; (8000b08 <main+0x328>)
8000a20: 4620 mov r0, r4
8000a22: f7ff fc1d bl 8000260 <_ZN4modm8IOStreamlsEPFRS0_S1_E.isra.0>
_ZN4modm5fiber4Task15watermark_stackEv():
./modm/src/modm/processing/fiber/task.hpp:137
modm_context_watermark(&ctx);
8000a26: 4850 ldr r0, [pc, #320] ; (8000b68 <main+0x388>)
8000a28: f000 fd9a bl 8001560 <modm_context_watermark>
8000a2c: 484f ldr r0, [pc, #316] ; (8000b6c <main+0x38c>)
8000a2e: f000 fd97 bl 8001560 <modm_context_watermark>
main():
./main.cpp:130
fiber_ping.watermark_stack();
fiber_pong.watermark_stack();
fiber_ping.start();
8000a32: 484d ldr r0, [pc, #308] ; (8000b68 <main+0x388>)
8000a34: f7ff fc00 bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
./main.cpp:131
modm::fiber::Scheduler::run();
8000a38: f7ff fd7c bl 8000534 <_ZN4modm5fiber9Scheduler3runEv>
./main.cpp:133 (discriminator 1)
while(1) ;
8000a3c: e7fe b.n 8000a3c <main+0x25c>
_ZN4modm8IOStream16writeIntegerModeIyEEvT_():
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000a3e: 2902 cmp r1, #2
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000a40: f04f 0738 mov.w r7, #56 ; 0x38
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000a44: d114 bne.n 8000a70 <main+0x290>
./modm/src/modm/io/iostream.hpp:227
writeBin(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000a46: f1c7 0220 rsb r2, r7, #32
8000a4a: f1a7 0320 sub.w r3, r7, #32
8000a4e: fa29 f107 lsr.w r1, r9, r7
8000a52: fa0a f202 lsl.w r2, sl, r2
8000a56: 4311 orrs r1, r2
8000a58: fa2a f303 lsr.w r3, sl, r3
8000a5c: 4319 orrs r1, r3
8000a5e: 3f08 subs r7, #8
8000a60: 4620 mov r0, r4
8000a62: b2c9 uxtb r1, r1
8000a64: b2ff uxtb r7, r7
8000a66: f000 fa41 bl 8000eec <_ZN4modm8IOStream8writeBinEh>
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000a6a: 2ff8 cmp r7, #248 ; 0xf8
8000a6c: d1eb bne.n 8000a46 <main+0x266>
8000a6e: e756 b.n 800091e <main+0x13e>
./modm/src/modm/io/iostream.hpp:230
writeHex(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000a70: f1c7 0220 rsb r2, r7, #32
8000a74: f1a7 0320 sub.w r3, r7, #32
8000a78: fa29 f107 lsr.w r1, r9, r7
8000a7c: fa0a f202 lsl.w r2, sl, r2
8000a80: 4311 orrs r1, r2
8000a82: fa2a f303 lsr.w r3, sl, r3
8000a86: 4319 orrs r1, r3
8000a88: 3f08 subs r7, #8
8000a8a: 4620 mov r0, r4
8000a8c: b2c9 uxtb r1, r1
8000a8e: b2ff uxtb r7, r7
8000a90: f000 fa20 bl 8000ed4 <_ZN4modm8IOStream8writeHexEh>
./modm/src/modm/io/iostream.hpp:229
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000a94: 2ff8 cmp r7, #248 ; 0xf8
8000a96: d1eb bne.n 8000a70 <main+0x290>
8000a98: e741 b.n 800091e <main+0x13e>
_ZN4modm8IOStream16writeIntegerModeIxEEvT_():
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000a9a: 2902 cmp r1, #2
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000a9c: f04f 0438 mov.w r4, #56 ; 0x38
./modm/src/modm/io/iostream.hpp:227
writeBin(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000aa0: f8df 8058 ldr.w r8, [pc, #88] ; 8000afc <main+0x31c>
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000aa4: d114 bne.n 8000ad0 <main+0x2f0>
./modm/src/modm/io/iostream.hpp:227
writeBin(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000aa6: f1c4 0220 rsb r2, r4, #32
8000aaa: f1a4 0320 sub.w r3, r4, #32
8000aae: fa26 f104 lsr.w r1, r6, r4
8000ab2: fa07 f202 lsl.w r2, r7, r2
8000ab6: 4311 orrs r1, r2
8000ab8: fa27 f303 lsr.w r3, r7, r3
8000abc: 4319 orrs r1, r3
8000abe: 3c08 subs r4, #8
8000ac0: 4640 mov r0, r8
8000ac2: b2c9 uxtb r1, r1
8000ac4: b2e4 uxtb r4, r4
8000ac6: f000 fa11 bl 8000eec <_ZN4modm8IOStream8writeBinEh>
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000aca: 2cf8 cmp r4, #248 ; 0xf8
8000acc: d1eb bne.n 8000aa6 <main+0x2c6>
8000ace: e73e b.n 800094e <main+0x16e>
./modm/src/modm/io/iostream.hpp:230
writeHex(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000ad0: f1c4 0220 rsb r2, r4, #32
8000ad4: f1a4 0320 sub.w r3, r4, #32
8000ad8: fa26 f104 lsr.w r1, r6, r4
8000adc: fa07 f202 lsl.w r2, r7, r2
8000ae0: 4311 orrs r1, r2
8000ae2: fa27 f303 lsr.w r3, r7, r3
8000ae6: 4319 orrs r1, r3
8000ae8: 3c08 subs r4, #8
8000aea: 4640 mov r0, r8
8000aec: b2c9 uxtb r1, r1
8000aee: b2e4 uxtb r4, r4
8000af0: f000 f9f0 bl 8000ed4 <_ZN4modm8IOStream8writeHexEh>
./modm/src/modm/io/iostream.hpp:229
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000af4: 2cf8 cmp r4, #248 ; 0xf8
8000af6: d1eb bne.n 8000ad0 <main+0x2f0>
8000af8: e729 b.n 800094e <main+0x16e>
8000afa: bf00 nop
8000afc: 20000c74 .word 0x20000c74
8000b00: 20000c04 .word 0x20000c04
8000b04: 08001db8 .word 0x08001db8
8000b08: 08000221 .word 0x08000221
8000b0c: 20002368 .word 0x20002368
8000b10: 20002150 .word 0x20002150
8000b14: 08001de0 .word 0x08001de0
8000b18: 08001df3 .word 0x08001df3
8000b1c: 20001f38 .word 0x20001f38
8000b20: 20001d20 .word 0x20001d20
8000b24: 20001b08 .word 0x20001b08
8000b28: 200018f0 .word 0x200018f0
8000b2c: 08001e06 .word 0x08001e06
8000b30: 08001e16 .word 0x08001e16
8000b34: 08001e20 .word 0x08001e20
8000b38: 08001e2c .word 0x08001e2c
8000b3c: 000f4240 .word 0x000f4240
8000b40: 08001e2f .word 0x08001e2f
8000b44: 08001e44 .word 0x08001e44
8000b48: 08001e57 .word 0x08001e57
8000b4c: 3b9aca00 .word 0x3b9aca00
8000b50: 20000c14 .word 0x20000c14
8000b54: 08001e62 .word 0x08001e62
8000b58: 08001e76 .word 0x08001e76
8000b5c: 08001e88 .word 0x08001e88
8000b60: 08001e9a .word 0x08001e9a
8000b64: 08001eac .word 0x08001eac
8000b68: 200016d8 .word 0x200016d8
8000b6c: 200014c0 .word 0x200014c0
8000b70: 20000c20 .word 0x20000c20
08000b74 <_GLOBAL__sub_I_f1counter>:
_GLOBAL__sub_I_f1counter():
./main.cpp:135
return 0;
}
8000b74: b537 push {r0, r1, r2, r4, r5, lr}
_ZN4modm12CycleCounterC4Ev():
./modm/src/modm/driver/time/cycle_counter.hpp:20
class CycleCounter
8000b76: 2204 movs r2, #4
_ZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000b78: 2400 movs r4, #0
_ZN4modm12CycleCounterC4Ev():
./modm/src/modm/driver/time/cycle_counter.hpp:20
8000b7a: 4b36 ldr r3, [pc, #216] ; (8000c54 <_GLOBAL__sub_I_f1counter+0xe0>)
_ZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
8000b7c: 4d36 ldr r5, [pc, #216] ; (8000c58 <_GLOBAL__sub_I_f1counter+0xe4>)
_ZN4modm12CycleCounterC4Ev():
./modm/src/modm/driver/time/cycle_counter.hpp:20
8000b7e: 721a strb r2, [r3, #8]
_ZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000b80: 4b36 ldr r3, [pc, #216] ; (8000c5c <_GLOBAL__sub_I_f1counter+0xe8>)
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000b82: 612c str r4, [r5, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000b84: 752c strb r4, [r5, #20]
_ZN4modm5fiber4TaskC4ILj512EN8fiber_y1MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000b86: f505 7206 add.w r2, r5, #536 ; 0x218
8000b8a: f105 0118 add.w r1, r5, #24
8000b8e: 4628 mov r0, r5
8000b90: 9300 str r3, [sp, #0]
8000b92: 4b33 ldr r3, [pc, #204] ; (8000c60 <_GLOBAL__sub_I_f1counter+0xec>)
8000b94: f000 fccb bl 800152e <modm_context_init>
./modm/src/modm/processing/fiber/task.hpp:219
if (start == Start::Now) this->start();
8000b98: 4628 mov r0, r5
8000b9a: f7ff fb4d bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
_ZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000b9e: 4d31 ldr r5, [pc, #196] ; (8000c64 <_GLOBAL__sub_I_f1counter+0xf0>)
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000ba0: 4b31 ldr r3, [pc, #196] ; (8000c68 <_GLOBAL__sub_I_f1counter+0xf4>)
8000ba2: f505 7206 add.w r2, r5, #536 ; 0x218
8000ba6: f105 0118 add.w r1, r5, #24
8000baa: 4628 mov r0, r5
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bac: 612c str r4, [r5, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000bae: 752c strb r4, [r5, #20]
_ZN4modm5fiber4TaskC4ILj512EN8fiber_y2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bb0: 9300 str r3, [sp, #0]
8000bb2: 4b2e ldr r3, [pc, #184] ; (8000c6c <_GLOBAL__sub_I_f1counter+0xf8>)
8000bb4: f000 fcbb bl 800152e <modm_context_init>
./modm/src/modm/processing/fiber/task.hpp:219
if (start == Start::Now) this->start();
8000bb8: 4628 mov r0, r5
8000bba: f7ff fb3d bl 8000238 <_ZN4modm5fiber4Task5startEv.isra.0>
_ZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bbe: 482c ldr r0, [pc, #176] ; (8000c70 <_GLOBAL__sub_I_f1counter+0xfc>)
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bc0: 4b2c ldr r3, [pc, #176] ; (8000c74 <_GLOBAL__sub_I_f1counter+0x100>)
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bc2: 6104 str r4, [r0, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000bc4: 7504 strb r4, [r0, #20]
_ZN4modm5fiber4TaskC4ILj512ERFvvEEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bc6: f500 7206 add.w r2, r0, #536 ; 0x218
8000bca: 9300 str r3, [sp, #0]
8000bcc: f100 0118 add.w r1, r0, #24
8000bd0: 4b29 ldr r3, [pc, #164] ; (8000c78 <_GLOBAL__sub_I_f1counter+0x104>)
8000bd2: f000 fcac bl 800152e <modm_context_init>
_ZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bd6: 4829 ldr r0, [pc, #164] ; (8000c7c <_GLOBAL__sub_I_f1counter+0x108>)
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bd8: 4b29 ldr r3, [pc, #164] ; (8000c80 <_GLOBAL__sub_I_f1counter+0x10c>)
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bda: 6104 str r4, [r0, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000bdc: 7504 strb r4, [r0, #20]
_ZN4modm5fiber4TaskC4ILj512EN6fiber2MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bde: f500 7206 add.w r2, r0, #536 ; 0x218
8000be2: 9300 str r3, [sp, #0]
8000be4: f100 0118 add.w r1, r0, #24
8000be8: 4b26 ldr r3, [pc, #152] ; (8000c84 <_GLOBAL__sub_I_f1counter+0x110>)
8000bea: f000 fca0 bl 800152e <modm_context_init>
_ZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bee: 4826 ldr r0, [pc, #152] ; (8000c88 <_GLOBAL__sub_I_f1counter+0x114>)
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bf0: 4b26 ldr r3, [pc, #152] ; (8000c8c <_GLOBAL__sub_I_f1counter+0x118>)
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000bf2: 6104 str r4, [r0, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000bf4: 7504 strb r4, [r0, #20]
_ZN4modm5fiber4TaskC4ILj512EN6fiber3MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000bf6: f500 7206 add.w r2, r0, #536 ; 0x218
8000bfa: 9300 str r3, [sp, #0]
8000bfc: f100 0118 add.w r1, r0, #24
8000c00: 4b23 ldr r3, [pc, #140] ; (8000c90 <_GLOBAL__sub_I_f1counter+0x11c>)
8000c02: f000 fc94 bl 800152e <modm_context_init>
_ZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000c06: 4823 ldr r0, [pc, #140] ; (8000c94 <_GLOBAL__sub_I_f1counter+0x120>)
./modm/src/modm/processing/fiber/task.hpp:217
modm_context_init(&ctx, stack.memory, (uintptr_t*)ptr, caller, ptr);
8000c08: 4b23 ldr r3, [pc, #140] ; (8000c98 <_GLOBAL__sub_I_f1counter+0x124>)
./modm/src/modm/processing/fiber/task.hpp:205
const uintptr_t ptr = uintptr_t(stack.memory + stack.words) - closure_size;
8000c0a: f500 7204 add.w r2, r0, #528 ; 0x210
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000c0e: 6104 str r4, [r0, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000c10: 7504 strb r4, [r0, #20]
_ZN4modm5fiber4TaskC4ILj512EN6fiber4MUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:207
::new ((void*)ptr) std::decay_t<T>{std::forward<T>(closure)};
8000c12: f8c0 4210 str.w r4, [r0, #528] ; 0x210
./modm/src/modm/processing/fiber/task.hpp:217
modm_context_init(&ctx, stack.memory, (uintptr_t*)ptr, caller, ptr);
8000c16: f100 0118 add.w r1, r0, #24
8000c1a: 9200 str r2, [sp, #0]
8000c1c: f000 fc87 bl 800152e <modm_context_init>
_ZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000c20: 481e ldr r0, [pc, #120] ; (8000c9c <_GLOBAL__sub_I_f1counter+0x128>)
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000c22: 4b1f ldr r3, [pc, #124] ; (8000ca0 <_GLOBAL__sub_I_f1counter+0x12c>)
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000c24: 6104 str r4, [r0, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000c26: 7504 strb r4, [r0, #20]
_ZN4modm5fiber4TaskC4ILj512EN10fiber_pingMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000c28: f500 7206 add.w r2, r0, #536 ; 0x218
8000c2c: 9300 str r3, [sp, #0]
8000c2e: f100 0118 add.w r1, r0, #24
8000c32: 4b1c ldr r3, [pc, #112] ; (8000ca4 <_GLOBAL__sub_I_f1counter+0x130>)
8000c34: f000 fc7b bl 800152e <modm_context_init>
_ZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000c38: 481b ldr r0, [pc, #108] ; (8000ca8 <_GLOBAL__sub_I_f1counter+0x134>)
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000c3a: 4b1c ldr r3, [pc, #112] ; (8000cac <_GLOBAL__sub_I_f1counter+0x138>)
./modm/src/modm/processing/fiber/task.hpp:179
Task::Task(Stack<Size>& stack, T&& closure, Start start)
8000c3c: 6104 str r4, [r0, #16]
_ZNSt13__atomic_baseIbEC4Eb():
././include/newlib/c++/12.2.1/bits/atomic_base.h:345
8000c3e: 7504 strb r4, [r0, #20]
_ZN4modm5fiber4TaskC4ILj512EN10fiber_pongMUlvE_EEERNS0_5StackIXT_EEEOT0_NS0_5StartE():
./modm/src/modm/processing/fiber/task.hpp:194
modm_context_init(&ctx, stack.memory, stack.memory + stack.words,
8000c40: f500 7206 add.w r2, r0, #536 ; 0x218
8000c44: 9300 str r3, [sp, #0]
8000c46: f100 0118 add.w r1, r0, #24
8000c4a: 4b19 ldr r3, [pc, #100] ; (8000cb0 <_GLOBAL__sub_I_f1counter+0x13c>)
8000c4c: f000 fc6f bl 800152e <modm_context_init>
_GLOBAL__sub_I_f1counter():
./main.cpp:135
8000c50: b003 add sp, #12
8000c52: bd30 pop {r4, r5, pc}
8000c54: 20000c04 .word 0x20000c04
8000c58: 20002368 .word 0x20002368
8000c5c: 080006a1 .word 0x080006a1
8000c60: 08000525 .word 0x08000525
8000c64: 20002150 .word 0x20002150
8000c68: 08000689 .word 0x08000689
8000c6c: 08000515 .word 0x08000515
8000c70: 20001f38 .word 0x20001f38
8000c74: 08000565 .word 0x08000565
8000c78: 08000505 .word 0x08000505
8000c7c: 20001d20 .word 0x20001d20
8000c80: 080006fd .word 0x080006fd
8000c84: 080004f5 .word 0x080004f5
8000c88: 20001b08 .word 0x20001b08
8000c8c: 080005ad .word 0x080005ad
8000c90: 080004e5 .word 0x080004e5
8000c94: 200018f0 .word 0x200018f0
8000c98: 080005f5 .word 0x080005f5
8000c9c: 200016d8 .word 0x200016d8
8000ca0: 08000799 .word 0x08000799
8000ca4: 080004d5 .word 0x080004d5
8000ca8: 200014c0 .word 0x200014c0
8000cac: 08000751 .word 0x08000751
8000cb0: 080004c5 .word 0x080004c5
08000cb4 <operator_delete>:
operator_delete():
./modm/ext/gcc/new_delete.cpp:63
extern "C" modm_weak
void operator_delete([[maybe_unused]] void* ptr)
{
modm_assert_continue_fail_debug(0, "delete",
"operator delete was called without heap implementation!", ptr);
}
8000cb4: 4770 bx lr
08000cb6 <_ZdlPvj>:
_ZdlPvj():
./modm/ext/gcc/new_delete.cpp:71
void operator delete (void* ptr) noexcept { operator_delete(ptr); }
modm_weak
void operator delete[](void* ptr) noexcept { operator_delete(ptr); }
modm_weak
void operator delete (void* ptr, std::size_t) noexcept { operator_delete(ptr); }
8000cb6: b508 push {r3, lr}
8000cb8: f7ff fffc bl 8000cb4 <operator_delete>
8000cbc: bd08 pop {r3, pc}
08000cbe <_ZN4modm8IODevice5writeEPKc>:
_ZN4modm8IODevice5writeEPKc():
./modm/src/modm/io/iodevice.hpp:38
virtual void
write(char c) = 0;
/// Write a C-string
virtual inline void
write(const char* str)
8000cbe: b538 push {r3, r4, r5, lr}
8000cc0: 4605 mov r5, r0
8000cc2: 460c mov r4, r1
./modm/src/modm/io/iodevice.hpp:41 (discriminator 1)
{
char c;
while ( (c = *str++) ) write(c);
8000cc4: f814 1b01 ldrb.w r1, [r4], #1
8000cc8: b901 cbnz r1, 8000ccc <_ZN4modm8IODevice5writeEPKc+0xe>
./modm/src/modm/io/iodevice.hpp:42
}
8000cca: bd38 pop {r3, r4, r5, pc}
./modm/src/modm/io/iodevice.hpp:41 (discriminator 2)
while ( (c = *str++) ) write(c);
8000ccc: 682b ldr r3, [r5, #0]
8000cce: 4628 mov r0, r5
8000cd0: 689b ldr r3, [r3, #8]
8000cd2: 4798 blx r3
8000cd4: e7f6 b.n 8000cc4 <_ZN4modm8IODevice5writeEPKc+0x6>
08000cd6 <_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED1Ev>:
_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED2Ev():
./modm/src/modm/io/iodevice_wrapper.hpp:40
* @ingroup modm_io
* @tparam Device Peripheral which should be wrapped
* @tparam behavior preferred behavior when the Device buffer is full
*/
template< class Device, IOBuffer behavior >
class IODeviceWrapper : public IODevice
8000cd6: 4770 bx lr
08000cd8 <_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE4readERc>:
_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE4readERc():
./modm/src/modm/io/iodevice_wrapper.hpp:66
}
bool
read(char& c) override
{
return Device::read(reinterpret_cast<uint8_t&>(c));
8000cd8: 4608 mov r0, r1
8000cda: f000 bbeb b.w 80014b4 <_ZN4modm8platform7Lpuart14readERh>
08000cde <_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5flushEv>:
_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5flushEv():
./modm/src/modm/io/iodevice_wrapper.hpp:60
Device::flushWriteBuffer();
8000cde: f000 bbe3 b.w 80014a8 <_ZN4modm8platform7Lpuart116flushWriteBufferEv>
08000ce2 <_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5writeEc>:
_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5writeEc():
./modm/src/modm/io/iodevice_wrapper.hpp:47
write(char c) override
8000ce2: b510 push {r4, lr}
8000ce4: 460c mov r4, r1
./modm/src/modm/io/iodevice_wrapper.hpp:52 (discriminator 1)
written = Device::write(uint8_t(c));
8000ce6: 4620 mov r0, r4
8000ce8: f000 fb9c bl 8001424 <_ZN4modm8platform7Lpuart15writeEh>
./modm/src/modm/io/iodevice_wrapper.hpp:54 (discriminator 1)
while(behavior == IOBuffer::BlockIfFull and not written);
8000cec: 2800 cmp r0, #0
8000cee: d0fa beq.n 8000ce6 <_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EE5writeEc+0x4>
./modm/src/modm/io/iodevice_wrapper.hpp:55
}
8000cf0: bd10 pop {r4, pc}
08000cf2 <_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED0Ev>:
_ZN4modm15IODeviceWrapperINS_8platform7Lpuart1ELNS_8IOBufferE1EED0Ev():
./modm/src/modm/io/iodevice_wrapper.hpp:40
class IODeviceWrapper : public IODevice
8000cf2: b510 push {r4, lr}
8000cf4: 4604 mov r4, r0
8000cf6: 2104 movs r1, #4
8000cf8: f7ff ffdd bl 8000cb6 <_ZdlPvj>
8000cfc: 4620 mov r0, r4
8000cfe: bd10 pop {r4, pc}
08000d00 <_ZN4modm8IOStream8out_charEcPv>:
_ZN4modm8IOStream8out_charEcPv():
./modm/src/modm/io/iostream.hpp:262
static void out_char(char c, void* arg)
8000d00: 460b mov r3, r1
./modm/src/modm/io/iostream.hpp:263
{ if (c) reinterpret_cast<modm::IOStream*>(arg)->write(c); }
8000d02: 4601 mov r1, r0
8000d04: b118 cbz r0, 8000d0e <_ZN4modm8IOStream8out_charEcPv+0xe>
_ZN4modm8IOStream5writeEc():
./modm/src/modm/io/iostream.hpp:71
{ device->write(c); return *this; }
8000d06: 6818 ldr r0, [r3, #0]
8000d08: 6803 ldr r3, [r0, #0]
8000d0a: 689b ldr r3, [r3, #8]
8000d0c: 4718 bx r3
_ZN4modm8IOStream8out_charEcPv():
./modm/src/modm/io/iostream.hpp:263
{ if (c) reinterpret_cast<modm::IOStream*>(arg)->write(c); }
8000d0e: 4770 bx lr
08000d10 <_ZN4modm8delay_msEm>:
_ZN4modm8delay_msEm():
./modm/src/modm/platform/core/delay_impl.hpp:49
}
void delay_us(uint32_t us);
inline void delay_ms(uint32_t ms)
{
8000d10: b538 push {r3, r4, r5, lr}
8000d12: 4604 mov r4, r0
./modm/src/modm/platform/core/delay_impl.hpp:56
{
if (ms <= 1000) {
delay_us(ms * 1000);
break;
}
delay_us(1'000'000);
8000d14: 4d08 ldr r5, [pc, #32] ; (8000d38 <_ZN4modm8delay_msEm+0x28>)
./modm/src/modm/platform/core/delay_impl.hpp:52
if (ms <= 1000) {
8000d16: f5b4 7f7a cmp.w r4, #1000 ; 0x3e8
8000d1a: d806 bhi.n 8000d2a <_ZN4modm8delay_msEm+0x1a>
./modm/src/modm/platform/core/delay_impl.hpp:53
delay_us(ms * 1000);
8000d1c: f44f 707a mov.w r0, #1000 ; 0x3e8
8000d20: 4360 muls r0, r4
./modm/src/modm/platform/core/delay_impl.hpp:59
ms -= 1000;
}
}
8000d22: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
./modm/src/modm/platform/core/delay_impl.hpp:53
delay_us(ms * 1000);
8000d26: f000 ba79 b.w 800121c <_ZN4modm8delay_usEm>
./modm/src/modm/platform/core/delay_impl.hpp:56
delay_us(1'000'000);
8000d2a: 4628 mov r0, r5
8000d2c: f000 fa76 bl 800121c <_ZN4modm8delay_usEm>
./modm/src/modm/platform/core/delay_impl.hpp:57
ms -= 1000;
8000d30: f5a4 747a sub.w r4, r4, #1000 ; 0x3e8
./modm/src/modm/platform/core/delay_impl.hpp:52
if (ms <= 1000) {
8000d34: e7ef b.n 8000d16 <_ZN4modm8delay_msEm+0x6>
8000d36: bf00 nop
8000d38: 000f4240 .word 0x000f4240
08000d3c <modm_abandon>:
modm_abandon():
./modm/src/modm/board/board.cpp:33
loggerDevice.write(c);
}
modm_extern_c void
modm_abandon(const modm::AssertionInfo &info)
{
8000d3c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
8000d40: 4605 mov r5, r0
./modm/src/modm/board/board.cpp:34
MODM_LOG_ERROR << "Assertion '" << info.name << "'";
8000d42: 493b ldr r1, [pc, #236] ; (8000e30 <modm_abandon+0xf4>)
8000d44: 483b ldr r0, [pc, #236] ; (8000e34 <modm_abandon+0xf8>)
8000d46: f7ff fa8c bl 8000262 <_ZN4modm8IOStreamlsEPKc>
8000d4a: 6829 ldr r1, [r5, #0]
8000d4c: f7ff fa89 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
8000d50: 4939 ldr r1, [pc, #228] ; (8000e38 <modm_abandon+0xfc>)
8000d52: f7ff fa86 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
./modm/src/modm/board/board.cpp:35
if (info.context != uintptr_t(-1)) {
8000d56: 686b ldr r3, [r5, #4]
8000d58: 3301 adds r3, #1
8000d5a: d017 beq.n 8000d8c <modm_abandon+0x50>
./modm/src/modm/board/board.cpp:36 (discriminator 1)
MODM_LOG_ERROR << " @ " << (void *) info.context <<
8000d5c: 4937 ldr r1, [pc, #220] ; (8000e3c <modm_abandon+0x100>)
8000d5e: 4835 ldr r0, [pc, #212] ; (8000e34 <modm_abandon+0xf8>)
8000d60: f7ff fa7f bl 8000262 <_ZN4modm8IOStreamlsEPKc>
8000d64: 4604 mov r4, r0
_ZN4modm8IOStreamlsEPKv():
./modm/src/modm/io/iostream.hpp:199 (discriminator 1)
{ writePointer(p); return *this; }
8000d66: 6869 ldr r1, [r5, #4]
8000d68: f000 f8d2 bl 8000f10 <_ZN4modm8IOStream12writePointerEPKv>
modm_abandon():
./modm/src/modm/board/board.cpp:37 (discriminator 1)
" (" << (uint32_t) info.context << ")";
8000d6c: 4620 mov r0, r4
8000d6e: 4934 ldr r1, [pc, #208] ; (8000e40 <modm_abandon+0x104>)
8000d70: f7ff fa77 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
_ZN4modm8IOStream16writeIntegerModeImEEvT_():
./modm/src/modm/io/iostream.hpp:223 (discriminator 1)
if (mode == Mode::Ascii) {
8000d74: 6843 ldr r3, [r0, #4]
modm_abandon():
./modm/src/modm/board/board.cpp:37 (discriminator 1)
8000d76: 4604 mov r4, r0
8000d78: 686e ldr r6, [r5, #4]
_ZN4modm8IOStream16writeIntegerModeImEEvT_():
./modm/src/modm/io/iostream.hpp:223 (discriminator 1)
8000d7a: 2b00 cmp r3, #0
8000d7c: d13d bne.n 8000dfa <modm_abandon+0xbe>
./modm/src/modm/io/iostream.hpp:224
writeInteger(v);
8000d7e: 4631 mov r1, r6
8000d80: f000 f8df bl 8000f42 <_ZN4modm8IOStream12writeIntegerEm>
modm_abandon():
./modm/src/modm/board/board.cpp:37
8000d84: 4620 mov r0, r4
8000d86: 492f ldr r1, [pc, #188] ; (8000e44 <modm_abandon+0x108>)
8000d88: f7ff fa6b bl 8000262 <_ZN4modm8IOStreamlsEPKc>
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:68 (discriminator 1)
if constexpr (mask(2)) GPIOC->MODER = (GPIOC->MODER & ~mask2(2)) | mask2(2, i(Mode::Output));
8000d8c: 250b movs r5, #11
_ZN4modm8platform16SoftwareGpioPortIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE5writeEh():
./modm/src/modm/platform/gpio/software_port.hpp:389 (discriminator 1)
if constexpr (28 < width) if constexpr (constexpr auto pos = shift_mask(0, 28); pos >= 0) p |= (data & (1ul << 28)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (29 < width) if constexpr (constexpr auto pos = shift_mask(0, 29); pos >= 0) p |= (data & (1ul << 29)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (30 < width) if constexpr (constexpr auto pos = shift_mask(0, 30); pos >= 0) p |= (data & (1ul << 30)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (31 < width) if constexpr (constexpr auto pos = shift_mask(0, 31); pos >= 0) p |= (data & (1ul << 31)) ? (1ul << pos) : (1ul << (pos + 16));
p ^= inverted(0);
GPIOA->BSRR = ((~p & mask(0)) << 16) | p;
8000d8e: f04f 7900 mov.w r9, #33554432 ; 0x2000000
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:66 (discriminator 1)
if constexpr (mask(0)) GPIOA->MODER = (GPIOA->MODER & ~mask2(0)) | mask2(0, i(Mode::Output));
8000d92: 4c2d ldr r4, [pc, #180] ; (8000e48 <modm_abandon+0x10c>)
modm_abandon():
./modm/src/modm/board/board.cpp:42 (discriminator 1)
}
#if MODM_ASSERTION_INFO_HAS_DESCRIPTION
MODM_LOG_ERROR << " failed!\n " << info.description << "\nAbandoning...\n";
#else
MODM_LOG_ERROR << " failed!\nAbandoning...\n";
8000d94: 492d ldr r1, [pc, #180] ; (8000e4c <modm_abandon+0x110>)
8000d96: 4827 ldr r0, [pc, #156] ; (8000e34 <modm_abandon+0xf8>)
8000d98: f7ff fa63 bl 8000262 <_ZN4modm8IOStreamlsEPKc>
_ZN4modm8platform7GpioSetIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE9setOutputEv():
./modm/src/modm/platform/gpio/set.hpp:66 (discriminator 1)
8000d9c: 6823 ldr r3, [r4, #0]
./modm/src/modm/platform/gpio/set.hpp:67 (discriminator 1)
if constexpr (mask(1)) GPIOB->MODER = (GPIOB->MODER & ~mask2(1)) | mask2(1, i(Mode::Output));
8000d9e: 4a2c ldr r2, [pc, #176] ; (8000e50 <modm_abandon+0x114>)
./modm/src/modm/platform/gpio/set.hpp:66 (discriminator 1)
if constexpr (mask(0)) GPIOA->MODER = (GPIOA->MODER & ~mask2(0)) | mask2(0, i(Mode::Output));
8000da0: f423 2340 bic.w r3, r3, #786432 ; 0xc0000
8000da4: f443 2380 orr.w r3, r3, #262144 ; 0x40000
8000da8: 6023 str r3, [r4, #0]
./modm/src/modm/platform/gpio/set.hpp:67 (discriminator 1)
if constexpr (mask(1)) GPIOB->MODER = (GPIOB->MODER & ~mask2(1)) | mask2(1, i(Mode::Output));
8000daa: 6813 ldr r3, [r2, #0]
8000dac: f423 4340 bic.w r3, r3, #49152 ; 0xc000
8000db0: f443 4380 orr.w r3, r3, #16384 ; 0x4000
8000db4: 6013 str r3, [r2, #0]
./modm/src/modm/platform/gpio/set.hpp:68 (discriminator 1)
if constexpr (mask(2)) GPIOC->MODER = (GPIOC->MODER & ~mask2(2)) | mask2(2, i(Mode::Output));
8000db6: f8d2 3400 ldr.w r3, [r2, #1024] ; 0x400
8000dba: f423 4340 bic.w r3, r3, #49152 ; 0xc000
8000dbe: f443 4380 orr.w r3, r3, #16384 ; 0x4000
8000dc2: f8c2 3400 str.w r3, [r2, #1024] ; 0x400
_ZN4modm8platform16SoftwareGpioPortIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE5writeEh():
./modm/src/modm/platform/gpio/software_port.hpp:425
if constexpr (28 < width) if constexpr (constexpr auto pos = shift_mask(1, 28); pos >= 0) p |= (data & (1ul << 28)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (29 < width) if constexpr (constexpr auto pos = shift_mask(1, 29); pos >= 0) p |= (data & (1ul << 29)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (30 < width) if constexpr (constexpr auto pos = shift_mask(1, 30); pos >= 0) p |= (data & (1ul << 30)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (31 < width) if constexpr (constexpr auto pos = shift_mask(1, 31); pos >= 0) p |= (data & (1ul << 31)) ? (1ul << pos) : (1ul << (pos + 16));
p ^= inverted(1);
GPIOB->BSRR = ((~p & mask(1)) << 16) | p;
8000dc6: f44f 0600 mov.w r6, #8388608 ; 0x800000
./modm/src/modm/platform/gpio/software_port.hpp:461
if constexpr (28 < width) if constexpr (constexpr auto pos = shift_mask(2, 28); pos >= 0) p |= (data & (1ul << 28)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (29 < width) if constexpr (constexpr auto pos = shift_mask(2, 29); pos >= 0) p |= (data & (1ul << 29)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (30 < width) if constexpr (constexpr auto pos = shift_mask(2, 30); pos >= 0) p |= (data & (1ul << 30)) ? (1ul << pos) : (1ul << (pos + 16));
if constexpr (31 < width) if constexpr (constexpr auto pos = shift_mask(2, 31); pos >= 0) p |= (data & (1ul << 31)) ? (1ul << pos) : (1ul << (pos + 16));
p ^= inverted(2);
GPIOC->BSRR = ((~p & mask(2)) << 16) | p;
8000dca: 2380 movs r3, #128 ; 0x80
./modm/src/modm/platform/gpio/software_port.hpp:425
GPIOB->BSRR = ((~p & mask(1)) << 16) | p;
8000dcc: f8df 8080 ldr.w r8, [pc, #128] ; 8000e50 <modm_abandon+0x114>
./modm/src/modm/platform/gpio/software_port.hpp:461
GPIOC->BSRR = ((~p & mask(2)) << 16) | p;
8000dd0: 4f20 ldr r7, [pc, #128] ; (8000e54 <modm_abandon+0x118>)
./modm/src/modm/platform/gpio/software_port.hpp:389
GPIOA->BSRR = ((~p & mask(0)) << 16) | p;
8000dd2: f8c4 9018 str.w r9, [r4, #24]
modm_abandon():
./modm/src/modm/board/board.cpp:48
#endif
Board::Leds::setOutput();
for(int times=10; times>=0; times--)
{
Board::Leds::write(1);
modm::delay_ms(20);
8000dd6: 2014 movs r0, #20
_ZN4modm8platform16SoftwareGpioPortIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE5writeEh():
./modm/src/modm/platform/gpio/software_port.hpp:425
GPIOB->BSRR = ((~p & mask(1)) << 16) | p;
8000dd8: f8c8 6018 str.w r6, [r8, #24]
./modm/src/modm/platform/gpio/software_port.hpp:461
GPIOC->BSRR = ((~p & mask(2)) << 16) | p;
8000ddc: 61bb str r3, [r7, #24]
modm_abandon():
./modm/src/modm/board/board.cpp:48
8000dde: f7ff ff97 bl 8000d10 <_ZN4modm8delay_msEm>
_ZN4modm8platform16SoftwareGpioPortIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE5writeEh():
./modm/src/modm/platform/gpio/software_port.hpp:389
GPIOA->BSRR = ((~p & mask(0)) << 16) | p;
8000de2: f8c4 9018 str.w r9, [r4, #24]
modm_abandon():
./modm/src/modm/board/board.cpp:50
Board::Leds::write(0);
modm::delay_ms(180);
8000de6: 20b4 movs r0, #180 ; 0xb4
_ZN4modm8platform16SoftwareGpioPortIJNS0_10GpioStaticINS0_6detail6DataA9EEENS2_INS3_6DataB7EEENS2_INS3_6DataC7EEEEE5writeEh():
./modm/src/modm/platform/gpio/software_port.hpp:425
GPIOB->BSRR = ((~p & mask(1)) << 16) | p;
8000de8: f8c8 6018 str.w r6, [r8, #24]
./modm/src/modm/platform/gpio/software_port.hpp:461
GPIOC->BSRR = ((~p & mask(2)) << 16) | p;
8000dec: 61be str r6, [r7, #24]
modm_abandon():
./modm/src/modm/board/board.cpp:50
8000dee: f7ff ff8f bl 8000d10 <_ZN4modm8delay_msEm>
./modm/src/modm/board/board.cpp:45
for(int times=10; times>=0; times--)
8000df2: 3d01 subs r5, #1
8000df4: d1e7 bne.n 8000dc6 <modm_abandon+0x8a>
./modm/src/modm/board/board.cpp:56
}
// Do not flush here otherwise you may deadlock due to waiting on the UART
// interrupt which may never be executed when abandoning in a higher
// priority Interrupt!!!
// MODM_LOG_ERROR << modm::flush;
}
8000df6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
_ZN4modm8IOStream16writeIntegerModeImEEvT_():
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000dfa: 2b02 cmp r3, #2
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000dfc: f04f 0518 mov.w r5, #24
./modm/src/modm/io/iostream.hpp:225
} else if (mode == Mode::Binary) {
8000e00: d10a bne.n 8000e18 <modm_abandon+0xdc>
./modm/src/modm/io/iostream.hpp:227
writeBin(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000e02: fa26 f105 lsr.w r1, r6, r5
8000e06: 3d08 subs r5, #8
8000e08: 4620 mov r0, r4
8000e0a: b2c9 uxtb r1, r1
8000e0c: b2ed uxtb r5, r5
8000e0e: f000 f86d bl 8000eec <_ZN4modm8IOStream8writeBinEh>
./modm/src/modm/io/iostream.hpp:226
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000e12: 2df8 cmp r5, #248 ; 0xf8
8000e14: d1f5 bne.n 8000e02 <modm_abandon+0xc6>
8000e16: e7b5 b.n 8000d84 <modm_abandon+0x48>
./modm/src/modm/io/iostream.hpp:230
writeHex(static_cast<std::make_unsigned_t<T>>(v) >> ii);
8000e18: fa26 f105 lsr.w r1, r6, r5
8000e1c: 3d08 subs r5, #8
8000e1e: 4620 mov r0, r4
8000e20: b2c9 uxtb r1, r1
8000e22: b2ed uxtb r5, r5
8000e24: f000 f856 bl 8000ed4 <_ZN4modm8IOStream8writeHexEh>
./modm/src/modm/io/iostream.hpp:229
for (uint8_t ii=t_bits-8; ii < t_bits; ii -= 8)
8000e28: 2df8 cmp r5, #248 ; 0xf8
8000e2a: d1f5 bne.n 8000e18 <modm_abandon+0xdc>
8000e2c: e7aa b.n 8000d84 <modm_abandon+0x48>
8000e2e: bf00 nop
8000e30: 08001ec4 .word 0x08001ec4
8000e34: 20000c3c .word 0x20000c3c
8000e38: 08001ece .word 0x08001ece
8000e3c: 08001ed0 .word 0x08001ed0
8000e40: 08001ed4 .word 0x08001ed4
8000e44: 08001ed7 .word 0x08001ed7
8000e48: 42020000 .word 0x42020000
8000e4c: 08001ed9 .word 0x08001ed9
8000e50: 42020400 .word 0x42020400
8000e54: 42020800 .word 0x42020800
08000e58 <_GLOBAL__sub_I_loggerDevice>:
_ZN4modm8IOStreamC4ERNS_8IODeviceE():
./modm/src/modm/io/iostream.hpp:65
device(&odevice)
8000e58: 2300 movs r3, #0
8000e5a: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000
_GLOBAL__sub_I_loggerDevice():
./modm/src/modm/board/board.cpp:56
8000e5e: b510 push {r4, lr}
_ZN4modm8IOStreamC4ERNS_8IODeviceE():
./modm/src/modm/io/iostream.hpp:65
8000e60: 4a11 ldr r2, [pc, #68] ; (8000ea8 <_GLOBAL__sub_I_loggerDevice+0x50>)
8000e62: 4c12 ldr r4, [pc, #72] ; (8000eac <_GLOBAL__sub_I_loggerDevice+0x54>)
8000e64: 4812 ldr r0, [pc, #72] ; (8000eb0 <_GLOBAL__sub_I_loggerDevice+0x58>)
8000e66: e9c2 3304 strd r3, r3, [r2, #16]
8000e6a: e9c2 0202 strd r0, r2, [r2, #8]
8000e6e: 6014 str r4, [r2, #0]
8000e70: 6053 str r3, [r2, #4]
8000e72: 6191 str r1, [r2, #24]
8000e74: 4a0f ldr r2, [pc, #60] ; (8000eb4 <_GLOBAL__sub_I_loggerDevice+0x5c>)
8000e76: e9c2 4300 strd r4, r3, [r2]
8000e7a: e9c2 0202 strd r0, r2, [r2, #8]
8000e7e: e9c2 3304 strd r3, r3, [r2, #16]
8000e82: 6191 str r1, [r2, #24]
8000e84: 4a0c ldr r2, [pc, #48] ; (8000eb8 <_GLOBAL__sub_I_loggerDevice+0x60>)
8000e86: e9c2 4300 strd r4, r3, [r2]
8000e8a: e9c2 0202 strd r0, r2, [r2, #8]
8000e8e: e9c2 3304 strd r3, r3, [r2, #16]
8000e92: 6191 str r1, [r2, #24]
8000e94: 4a09 ldr r2, [pc, #36] ; (8000ebc <_GLOBAL__sub_I_loggerDevice+0x64>)
8000e96: e9c2 4300 strd r4, r3, [r2]
8000e9a: e9c2 0202 strd r0, r2, [r2, #8]
8000e9e: e9c2 3304 strd r3, r3, [r2, #16]
8000ea2: 6191 str r1, [r2, #24]
_GLOBAL__sub_I_loggerDevice():
./modm/src/modm/board/board.cpp:56
8000ea4: bd10 pop {r4, pc}
8000ea6: bf00 nop
8000ea8: 20000c90 .word 0x20000c90
8000eac: 20000c00 .word 0x20000c00
8000eb0: 08000d01 .word 0x08000d01
8000eb4: 20000c74 .word 0x20000c74
8000eb8: 20000c58 .word 0x20000c58
8000ebc: 20000c3c .word 0x20000c3c
08000ec0 <_ZZN4modm8IOStream8writeHexEhENKUlhE_clEh.isra.0>:
_ZZN4modm8IOStream8writeHexEhENKUlhE_clEh.isra.0():
./modm/src/modm/io/iostream.cpp:66
void
IOStream::writeHex(uint8_t value)
{
const auto fn_nibble = [this](uint8_t nibble)
{
device->write( nibble + (nibble > 9 ? 'A' - 10 : '0') );
8000ec0: 6800 ldr r0, [r0, #0]
8000ec2: 2909 cmp r1, #9
8000ec4: 6803 ldr r3, [r0, #0]
8000ec6: 689a ldr r2, [r3, #8]
8000ec8: bf8c ite hi
8000eca: 2337 movhi r3, #55 ; 0x37
8000ecc: 2330 movls r3, #48 ; 0x30
8000ece: 4419 add r1, r3
8000ed0: b2c9 uxtb r1, r1
8000ed2: 4710 bx r2
08000ed4 <_ZN4modm8IOStream8writeHexEh>:
_ZN4modm8IOStream8writeHexEh():
./modm/src/modm/io/iostream.cpp:63
{
8000ed4: b538 push {r3, r4, r5, lr}
8000ed6: 4605 mov r5, r0
8000ed8: 460c mov r4, r1
./modm/src/modm/io/iostream.cpp:68
};
fn_nibble(value >> 4);
8000eda: 0909 lsrs r1, r1, #4
8000edc: f7ff fff0 bl 8000ec0 <_ZZN4modm8IOStream8writeHexEhENKUlhE_clEh.isra.0>
./modm/src/modm/io/iostream.cpp:69
fn_nibble(value & 0xF);
8000ee0: 4628 mov r0, r5
8000ee2: f004 010f and.w r1, r4, #15
8000ee6: f7ff ffeb bl 8000ec0 <_ZZN4modm8IOStream8writeHexEhENKUlhE_clEh.isra.0>
./modm/src/modm/io/iostream.cpp:70
}
8000eea: bd38 pop {r3, r4, r5, pc}
08000eec <_ZN4modm8IOStream8writeBinEh>:
_ZN4modm8IOStream8writeBinEh():
./modm/src/modm/io/iostream.cpp:75
// ----------------------------------------------------------------------------
void
IOStream::writeBin(uint8_t value)
{
8000eec: b570 push {r4, r5, r6, lr}
8000eee: 4606 mov r6, r0
8000ef0: 460c mov r4, r1
8000ef2: 2508 movs r5, #8
./modm/src/modm/io/iostream.cpp:78
for (uint_fast8_t ii = 0; ii < 8; ii++)
{
device->write(value & 0x80 ? '1' : '0');
8000ef4: 6830 ldr r0, [r6, #0]
8000ef6: f014 0f80 tst.w r4, #128 ; 0x80
8000efa: 6803 ldr r3, [r0, #0]
8000efc: bf14 ite ne
8000efe: 2131 movne r1, #49 ; 0x31
8000f00: 2130 moveq r1, #48 ; 0x30
8000f02: 689b ldr r3, [r3, #8]
8000f04: 4798 blx r3
./modm/src/modm/io/iostream.cpp:79
value <<= 1;
8000f06: 0064 lsls r4, r4, #1
./modm/src/modm/io/iostream.cpp:76
for (uint_fast8_t ii = 0; ii < 8; ii++)
8000f08: 3d01 subs r5, #1
./modm/src/modm/io/iostream.cpp:79
value <<= 1;
8000f0a: b2e4 uxtb r4, r4
./modm/src/modm/io/iostream.cpp:76
for (uint_fast8_t ii = 0; ii < 8; ii++)
8000f0c: d1f2 bne.n 8000ef4 <_ZN4modm8IOStream8writeBinEh+0x8>
./modm/src/modm/io/iostream.cpp:81
}
}
8000f0e: bd70 pop {r4, r5, r6, pc}
08000f10 <_ZN4modm8IOStream12writePointerEPKv>:
_ZN4modm8IOStream12writePointerEPKv():
./modm/src/modm/io/iostream.cpp:86
// ----------------------------------------------------------------------------
void
IOStream::writePointer(const void* p)
{
8000f10: b570 push {r4, r5, r6, lr}
8000f12: 4605 mov r5, r0
./modm/src/modm/io/iostream.cpp:87
device->write('0');
8000f14: 6800 ldr r0, [r0, #0]
./modm/src/modm/io/iostream.cpp:86
{
8000f16: 460e mov r6, r1
./modm/src/modm/io/iostream.cpp:87
device->write('0');
8000f18: 6803 ldr r3, [r0, #0]
8000f1a: 2130 movs r1, #48 ; 0x30
8000f1c: 689b ldr r3, [r3, #8]
8000f1e: 4798 blx r3
./modm/src/modm/io/iostream.cpp:88
device->write('x');
8000f20: 6828 ldr r0, [r5, #0]
8000f22: 2178 movs r1, #120 ; 0x78
8000f24: 6803 ldr r3, [r0, #0]
./modm/src/modm/io/iostream.cpp:98
writeHex(value >> 8);
writeHex(value);
#elif MODM_SIZEOF_POINTER == 4
for (uint8_t ii=24; ii < 32; ii -= 8)
8000f26: 2418 movs r4, #24
./modm/src/modm/io/iostream.cpp:88
device->write('x');
8000f28: 689b ldr r3, [r3, #8]
8000f2a: 4798 blx r3
./modm/src/modm/io/iostream.cpp:99 (discriminator 3)
writeHex(value >> ii);
8000f2c: fa26 f104 lsr.w r1, r6, r4
8000f30: 3c08 subs r4, #8
8000f32: 4628 mov r0, r5
8000f34: b2c9 uxtb r1, r1
8000f36: b2e4 uxtb r4, r4
8000f38: f7ff ffcc bl 8000ed4 <_ZN4modm8IOStream8writeHexEh>
./modm/src/modm/io/iostream.cpp:98 (discriminator 3)
for (uint8_t ii=24; ii < 32; ii -= 8)
8000f3c: 2cf8 cmp r4, #248 ; 0xf8
8000f3e: d1f5 bne.n 8000f2c <_ZN4modm8IOStream12writePointerEPKv+0x1c>
./modm/src/modm/io/iostream.cpp:107
for (uint8_t ii=56; ii < 64; ii -= 8)
writeHex(value >> ii);
#endif
}
8000f40: bd70 pop {r4, r5, r6, pc}
08000f42 <_ZN4modm8IOStream12writeIntegerEm>:
_ZN4modm8IOStream12writeIntegerEm():
./modm/src/modm/io/iostream_printf.cpp:83
value < 0, 10, 0, 0, FLAGS_LONG);
}
void
IOStream::writeInteger(uint32_t value)
{
8000f42: b57f push {r0, r1, r2, r3, r4, r5, r6, lr}
./modm/src/modm/io/iostream_printf.cpp:84
print_integer(&output_gadget, value, false, 10, 0, 0, FLAGS_LONG);
8000f44: 2300 movs r3, #0
./modm/src/modm/io/iostream_printf.cpp:83
{
8000f46: 460a mov r2, r1
./modm/src/modm/io/iostream_printf.cpp:84
print_integer(&output_gadget, value, false, 10, 0, 0, FLAGS_LONG);
8000f48: f44f 7100 mov.w r1, #512 ; 0x200
8000f4c: e9cd 3103 strd r3, r1, [sp, #12]
8000f50: 210a movs r1, #10
8000f52: 9302 str r3, [sp, #8]
8000f54: e9cd 3100 strd r3, r1, [sp]
8000f58: 3008 adds r0, #8
8000f5a: f000 fb97 bl 800168c <print_integer>
./modm/src/modm/io/iostream_printf.cpp:85
}
8000f5e: b007 add sp, #28
8000f60: f85d fb04 ldr.w pc, [sp], #4
08000f64 <_ZN4modm8IOStream12writeIntegerEx>:
_ZN4modm8IOStream12writeIntegerEx():
./modm/src/modm/io/iostream_printf.cpp:89
void
IOStream::writeInteger(int64_t value)
{
8000f64: b510 push {r4, lr}
./modm/src/modm/io/iostream_printf.cpp:90
print_integer(&output_gadget, uint64_t(value < 0 ? -value : value),
8000f66: 2b00 cmp r3, #0
./modm/src/modm/io/iostream_printf.cpp:89
{
8000f68: 4619 mov r1, r3
8000f6a: b086 sub sp, #24
./modm/src/modm/io/iostream_printf.cpp:90
print_integer(&output_gadget, uint64_t(value < 0 ? -value : value),
8000f6c: da02 bge.n 8000f74 <_ZN4modm8IOStream12writeIntegerEx+0x10>
8000f6e: 4252 negs r2, r2
8000f70: eb63 0343 sbc.w r3, r3, r3, lsl #1
8000f74: 2400 movs r4, #0
8000f76: f44f 6c80 mov.w ip, #1024 ; 0x400
8000f7a: 9402 str r4, [sp, #8]
8000f7c: e9cd 4c03 strd r4, ip, [sp, #12]
8000f80: 240a movs r4, #10
8000f82: 0fc9 lsrs r1, r1, #31
8000f84: 9401 str r4, [sp, #4]
8000f86: 9100 str r1, [sp, #0]
8000f88: 3008 adds r0, #8
8000f8a: f000 fb7f bl 800168c <print_integer>
./modm/src/modm/io/iostream_printf.cpp:92
value < 0, 10, 0, 0, FLAGS_LONG_LONG);
}
8000f8e: b006 add sp, #24
8000f90: bd10 pop {r4, pc}
08000f92 <_ZN4modm8IOStream12writeIntegerEy>:
_ZN4modm8IOStream12writeIntegerEy():
./modm/src/modm/io/iostream_printf.cpp:96
void
IOStream::writeInteger(uint64_t value)
{
8000f92: b510 push {r4, lr}
./modm/src/modm/io/iostream_printf.cpp:97
print_integer(&output_gadget, value, false, 10, 0, 0, FLAGS_LONG_LONG);
8000f94: 2100 movs r1, #0
8000f96: f44f 6480 mov.w r4, #1024 ; 0x400
./modm/src/modm/io/iostream_printf.cpp:96
{
8000f9a: b086 sub sp, #24
./modm/src/modm/io/iostream_printf.cpp:97
print_integer(&output_gadget, value, false, 10, 0, 0, FLAGS_LONG_LONG);
8000f9c: e9cd 1403 strd r1, r4, [sp, #12]
8000fa0: 240a movs r4, #10
8000fa2: 9102 str r1, [sp, #8]
8000fa4: e9cd 1400 strd r1, r4, [sp]
8000fa8: 3008 adds r0, #8
8000faa: f000 fb6f bl 800168c <print_integer>
./modm/src/modm/io/iostream_printf.cpp:98
}
8000fae: b006 add sp, #24
8000fb0: bd10 pop {r4, pc}
...
08000fb4 <_ZN4modm8platform3Rcc24enableInternalClockMHz48Em>:
_ZN4modm8platform3Rcc24enableInternalClockMHz48Em():
./modm/src/modm/platform/clock/rcc.cpp:34
// ----------------------------------------------------------------------------
bool
Rcc::enableInternalClockMHz48(uint32_t waitCycles)
{
bool retval;
RCC->CRRCR |= RCC_CRRCR_HSI48ON;
8000fb4: 4a09 ldr r2, [pc, #36] ; (8000fdc <_ZN4modm8platform3Rcc24enableInternalClockMHz48Em+0x28>)
8000fb6: f8d2 3098 ldr.w r3, [r2, #152] ; 0x98
8000fba: f043 0301 orr.w r3, r3, #1
8000fbe: f8c2 3098 str.w r3, [r2, #152] ; 0x98
./modm/src/modm/platform/clock/rcc.cpp:35 (discriminator 7)
while (not (retval = (RCC->CRRCR & RCC_CRRCR_HSI48RDY)) and --waitCycles)
8000fc2: f8d2 3098 ldr.w r3, [r2, #152] ; 0x98
8000fc6: f013 0302 ands.w r3, r3, #2
8000fca: d105 bne.n 8000fd8 <_ZN4modm8platform3Rcc24enableInternalClockMHz48Em+0x24>
./modm/src/modm/platform/clock/rcc.cpp:35 (discriminator 1)
8000fcc: 3801 subs r0, #1
8000fce: d1f8 bne.n 8000fc2 <_ZN4modm8platform3Rcc24enableInternalClockMHz48Em+0xe>
./modm/src/modm/platform/clock/rcc.cpp:38
;
return retval;
}
8000fd0: 3800 subs r0, #0
8000fd2: bf18 it ne
8000fd4: 2001 movne r0, #1
8000fd6: 4770 bx lr
./modm/src/modm/platform/clock/rcc.cpp:35
while (not (retval = (RCC->CRRCR & RCC_CRRCR_HSI48RDY)) and --waitCycles)
8000fd8: 4618 mov r0, r3
8000fda: e7f9 b.n 8000fd0 <_ZN4modm8platform3Rcc24enableInternalClockMHz48Em+0x1c>
8000fdc: 40021000 .word 0x40021000
08000fe0 <_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm>:
_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm():
./modm/src/modm/platform/clock/rcc.cpp:53
bool
Rcc::enableMultiSpeedInternalClock(MsiFrequency msi_frequency, uint32_t waitCycles)
{
bool retval;
RCC->CR = (RCC->CR & ~RCC_CR_MSIRANGE) | static_cast<uint32_t>(msi_frequency) | RCC_CR_MSIRGSEL | RCC_CR_MSION;
8000fe0: 4a09 ldr r2, [pc, #36] ; (8001008 <_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm+0x28>)
8000fe2: 6813 ldr r3, [r2, #0]
8000fe4: f023 03f0 bic.w r3, r3, #240 ; 0xf0
8000fe8: 4303 orrs r3, r0
8000fea: f043 0309 orr.w r3, r3, #9
8000fee: 6013 str r3, [r2, #0]
./modm/src/modm/platform/clock/rcc.cpp:54 (discriminator 7)
while (not (retval = (RCC->CR & RCC_CR_MSIRDY)) and --waitCycles)
8000ff0: 6813 ldr r3, [r2, #0]
8000ff2: f013 0302 ands.w r3, r3, #2
8000ff6: d105 bne.n 8001004 <_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm+0x24>
./modm/src/modm/platform/clock/rcc.cpp:54 (discriminator 1)
8000ff8: 3901 subs r1, #1
8000ffa: d1f9 bne.n 8000ff0 <_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm+0x10>
./modm/src/modm/platform/clock/rcc.cpp:57
;
return retval;
}
8000ffc: 1e08 subs r0, r1, #0
8000ffe: bf18 it ne
8001000: 2001 movne r0, #1
8001002: 4770 bx lr
./modm/src/modm/platform/clock/rcc.cpp:54
while (not (retval = (RCC->CR & RCC_CR_MSIRDY)) and --waitCycles)
8001004: 4619 mov r1, r3
8001006: e7f9 b.n 8000ffc <_ZN4modm8platform3Rcc29enableMultiSpeedInternalClockENS1_12MsiFrequencyEm+0x1c>
8001008: 40021000 .word 0x40021000
0800100c <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm>:
_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm():
./modm/src/modm/platform/clock/rcc.cpp:111
return retval;
}
bool
Rcc::enablePll(PllSource source, const PllFactors& pllFactors, uint32_t waitCycles)
{
800100c: b570 push {r4, r5, r6, lr}
./modm/src/modm/platform/clock/rcc.cpp:113
// Read reserved values and clear all other values
uint32_t tmp = RCC->PLLCFGR & ~(
800100e: 4c1b ldr r4, [pc, #108] ; (800107c <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm+0x70>)
./modm/src/modm/platform/clock/rcc.cpp:115
RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN |
RCC_PLLCFGR_PLLREN | RCC_PLLCFGR_PLLR);
8001010: 4d1b ldr r5, [pc, #108] ; (8001080 <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm+0x74>)
./modm/src/modm/platform/clock/rcc.cpp:113
uint32_t tmp = RCC->PLLCFGR & ~(
8001012: 68e6 ldr r6, [r4, #12]
./modm/src/modm/platform/clock/rcc.cpp:124
// PLLM factor is user defined VCO input frequency must be configured between 4MHz and 16Mhz
tmp |= (uint32_t(pllFactors.pllM - 1) << RCC_PLLCFGR_PLLM_Pos) & RCC_PLLCFGR_PLLM;
// PLLN factor is user defined: between 64 and 344 MHz
tmp |= (uint32_t(pllFactors.pllN) << RCC_PLLCFGR_PLLN_Pos) & RCC_PLLCFGR_PLLN;
8001014: 884b ldrh r3, [r1, #2]
./modm/src/modm/platform/clock/rcc.cpp:115
RCC_PLLCFGR_PLLREN | RCC_PLLCFGR_PLLR);
8001016: 4035 ands r5, r6
8001018: 4305 orrs r5, r0
./modm/src/modm/platform/clock/rcc.cpp:121
tmp |= (uint32_t(pllFactors.pllM - 1) << RCC_PLLCFGR_PLLM_Pos) & RCC_PLLCFGR_PLLM;
800101a: 7808 ldrb r0, [r1, #0]
./modm/src/modm/platform/clock/rcc.cpp:124
tmp |= (uint32_t(pllFactors.pllN) << RCC_PLLCFGR_PLLN_Pos) & RCC_PLLCFGR_PLLN;
800101c: 021b lsls r3, r3, #8
./modm/src/modm/platform/clock/rcc.cpp:121
tmp |= (uint32_t(pllFactors.pllM - 1) << RCC_PLLCFGR_PLLM_Pos) & RCC_PLLCFGR_PLLM;
800101e: 3801 subs r0, #1
./modm/src/modm/platform/clock/rcc.cpp:124
tmp |= (uint32_t(pllFactors.pllN) << RCC_PLLCFGR_PLLN_Pos) & RCC_PLLCFGR_PLLN;
8001020: f403 43fe and.w r3, r3, #32512 ; 0x7f00
./modm/src/modm/platform/clock/rcc.cpp:121
tmp |= (uint32_t(pllFactors.pllM - 1) << RCC_PLLCFGR_PLLM_Pos) & RCC_PLLCFGR_PLLM;
8001024: 0100 lsls r0, r0, #4
8001026: 432b orrs r3, r5
8001028: b2c0 uxtb r0, r0
./modm/src/modm/platform/clock/rcc.cpp:124
tmp |= (uint32_t(pllFactors.pllN) << RCC_PLLCFGR_PLLN_Pos) & RCC_PLLCFGR_PLLN;
800102a: 4318 orrs r0, r3
./modm/src/modm/platform/clock/rcc.cpp:127
// PLLR divider for CPU frequency
tmp |= ((uint32_t(pllFactors.pllR / 2) - 1) << RCC_PLLCFGR_PLLR_Pos) & RCC_PLLCFGR_PLLR;
800102c: 790b ldrb r3, [r1, #4]
./modm/src/modm/platform/clock/rcc.cpp:129
// PLLQ (21) divider for USB frequency; (00: PLLQ = 2, 01: PLLQ = 4, etc.)
if (pllFactors.pllQ != 0xff) {
800102e: 7949 ldrb r1, [r1, #5]
./modm/src/modm/platform/clock/rcc.cpp:127
tmp |= ((uint32_t(pllFactors.pllR / 2) - 1) << RCC_PLLCFGR_PLLR_Pos) & RCC_PLLCFGR_PLLR;
8001030: 085b lsrs r3, r3, #1
8001032: 3b01 subs r3, #1
8001034: 065b lsls r3, r3, #25
8001036: f003 63c0 and.w r3, r3, #100663296 ; 0x6000000
./modm/src/modm/platform/clock/rcc.cpp:129
if (pllFactors.pllQ != 0xff) {
800103a: 29ff cmp r1, #255 ; 0xff
./modm/src/modm/platform/clock/rcc.cpp:127
tmp |= ((uint32_t(pllFactors.pllR / 2) - 1) << RCC_PLLCFGR_PLLR_Pos) & RCC_PLLCFGR_PLLR;
800103c: ea43 0300 orr.w r3, r3, r0
./modm/src/modm/platform/clock/rcc.cpp:129
if (pllFactors.pllQ != 0xff) {
8001040: d009 beq.n 8001056 <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm+0x4a>
./modm/src/modm/platform/clock/rcc.cpp:131
tmp &= ~RCC_PLLCFGR_PLLQ;
tmp |= (((uint32_t) (pllFactors.pllQ / 2) - 1) << RCC_PLLCFGR_PLLQ_Pos) & RCC_PLLCFGR_PLLQ;
8001042: 0849 lsrs r1, r1, #1
8001044: 3901 subs r1, #1
8001046: 0549 lsls r1, r1, #21
./modm/src/modm/platform/clock/rcc.cpp:130
tmp &= ~RCC_PLLCFGR_PLLQ;
8001048: f423 03c0 bic.w r3, r3, #6291456 ; 0x600000
./modm/src/modm/platform/clock/rcc.cpp:131
tmp |= (((uint32_t) (pllFactors.pllQ / 2) - 1) << RCC_PLLCFGR_PLLQ_Pos) & RCC_PLLCFGR_PLLQ;
800104c: f401 01c0 and.w r1, r1, #6291456 ; 0x600000
8001050: 430b orrs r3, r1
./modm/src/modm/platform/clock/rcc.cpp:133
// enable pll USB clock output
tmp |= RCC_PLLCFGR_PLLQEN;
8001052: f443 1380 orr.w r3, r3, #1048576 ; 0x100000
./modm/src/modm/platform/clock/rcc.cpp:136
}
// enable pll CPU clock output
tmp |= RCC_PLLCFGR_PLLREN;
8001056: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
./modm/src/modm/platform/clock/rcc.cpp:138
RCC->PLLCFGR = tmp;
800105a: 60e3 str r3, [r4, #12]
./modm/src/modm/platform/clock/rcc.cpp:141
// enable pll
RCC->CR |= RCC_CR_PLLON;
800105c: 6823 ldr r3, [r4, #0]
800105e: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
8001062: 6023 str r3, [r4, #0]
./modm/src/modm/platform/clock/rcc.cpp:143 (discriminator 7)
while (not (tmp = (RCC->CR & RCC_CR_PLLRDY)) and --waitCycles)
8001064: 6823 ldr r3, [r4, #0]
8001066: f013 7300 ands.w r3, r3, #33554432 ; 0x2000000
800106a: d105 bne.n 8001078 <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm+0x6c>
./modm/src/modm/platform/clock/rcc.cpp:143 (discriminator 1)
800106c: 3a01 subs r2, #1
800106e: d1f9 bne.n 8001064 <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm+0x58>
./modm/src/modm/platform/clock/rcc.cpp:147
;
return tmp;
}
8001070: 1e10 subs r0, r2, #0
8001072: bf18 it ne
8001074: 2001 movne r0, #1
8001076: bd70 pop {r4, r5, r6, pc}
./modm/src/modm/platform/clock/rcc.cpp:143
while (not (tmp = (RCC->CR & RCC_CR_PLLRDY)) and --waitCycles)
8001078: 461a mov r2, r3
800107a: e7f9 b.n 8001070 <_ZN4modm8platform3Rcc9enablePllENS1_9PllSourceERKNS1_10PllFactorsEm+0x64>
800107c: 40021000 .word 0x40021000
8001080: f8ff800c .word 0xf8ff800c
08001084 <_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm>:
_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm():
./modm/src/modm/platform/clock/rcc.cpp:165
{
// TODO: check if low power mode is active and reject changing range if active
// Implemented according to STHAL HAL_PWREx_ControlVoltageScaling()
// TODO: The reference manual describes a more complicated procedure
// but the CubeHal also does not implement that ...
const auto currentSetting = PWR->CR1 & PWR_CR1_VOS;
8001084: 4a09 ldr r2, [pc, #36] ; (80010ac <_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm+0x28>)
8001086: 6813 ldr r3, [r2, #0]
8001088: f403 63c0 and.w r3, r3, #1536 ; 0x600
./modm/src/modm/platform/clock/rcc.cpp:166
if (voltage == static_cast<VoltageScaling>(currentSetting)) {
800108c: 4283 cmp r3, r0
800108e: d101 bne.n 8001094 <_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm+0x10>
./modm/src/modm/platform/clock/rcc.cpp:167
return true;
8001090: 2001 movs r0, #1
8001092: 4770 bx lr
./modm/src/modm/platform/clock/rcc.cpp:169
}
PWR->CR1 = (PWR->CR1 & ~PWR_CR1_VOS) | uint32_t(voltage);
8001094: 6813 ldr r3, [r2, #0]
8001096: f423 63c0 bic.w r3, r3, #1536 ; 0x600
800109a: 4318 orrs r0, r3
800109c: 6010 str r0, [r2, #0]
./modm/src/modm/platform/clock/rcc.cpp:170
while (PWR->SR2 & PWR_SR2_VOSF)
800109e: 6953 ldr r3, [r2, #20]
80010a0: 055b lsls r3, r3, #21
80010a2: d5f5 bpl.n 8001090 <_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm+0xc>
./modm/src/modm/platform/clock/rcc.cpp:171
if (--waitCycles == 0) return false;
80010a4: 3901 subs r1, #1
80010a6: d1fa bne.n 800109e <_ZN4modm8platform3Rcc17setVoltageScalingENS1_14VoltageScalingEm+0x1a>
80010a8: 4608 mov r0, r1
./modm/src/modm/platform/clock/rcc.cpp:173
return true;
}
80010aa: 4770 bx lr
80010ac: 40007000 .word 0x40007000
080010b0 <_ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm>:
_ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm():
./modm/src/modm/platform/clock/rcc.cpp:177
bool
Rcc::enableSystemClock(SystemClockSource src, uint32_t waitCycles)
{
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | uint32_t(src);
80010b0: 4a08 ldr r2, [pc, #32] ; (80010d4 <_ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm+0x24>)
80010b2: 6893 ldr r3, [r2, #8]
80010b4: f023 0303 bic.w r3, r3, #3
80010b8: 4303 orrs r3, r0
80010ba: 6093 str r3, [r2, #8]
./modm/src/modm/platform/clock/rcc.cpp:180
// Wait till the main PLL is used as system clock source
src = SystemClockSource(uint32_t(src) << RCC_CFGR_SWS_Pos);
80010bc: 0080 lsls r0, r0, #2
./modm/src/modm/platform/clock/rcc.cpp:181
while ((RCC->CFGR & RCC_CFGR_SWS) != uint32_t(src))
80010be: 6893 ldr r3, [r2, #8]
80010c0: f003 030c and.w r3, r3, #12
80010c4: 4283 cmp r3, r0
80010c6: d101 bne.n 80010cc <_ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm+0x1c>
./modm/src/modm/platform/clock/rcc.cpp:184
if (not --waitCycles) return false;
return true;
80010c8: 2001 movs r0, #1
80010ca: 4770 bx lr
./modm/src/modm/platform/clock/rcc.cpp:182
if (not --waitCycles) return false;
80010cc: 3901 subs r1, #1
80010ce: d1f6 bne.n 80010be <_ZN4modm8platform3Rcc17enableSystemClockENS1_17SystemClockSourceEm+0xe>
80010d0: 4608 mov r0, r1
./modm/src/modm/platform/clock/rcc.cpp:185
}
80010d2: 4770 bx lr
80010d4: 40021000 .word 0x40021000
080010d8 <SysTick_Handler>:
SysTick_Handler():
./modm/src/modm/platform/clock/systick_timer.cpp:26
static volatile bool interrupt{};
extern "C" void
SysTick_Handler(void)
{
milli_time += systick_step;
80010d8: 4a06 ldr r2, [pc, #24] ; (80010f4 <SysTick_Handler+0x1c>)
80010da: 6813 ldr r3, [r2, #0]
80010dc: 33fa adds r3, #250 ; 0xfa
80010de: 6013 str r3, [r2, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:27
micro_time += systick_step * 1'000ul;
80010e0: 4a05 ldr r2, [pc, #20] ; (80010f8 <SysTick_Handler+0x20>)
80010e2: 6813 ldr r3, [r2, #0]
80010e4: f503 3374 add.w r3, r3, #249856 ; 0x3d000
80010e8: 3390 adds r3, #144 ; 0x90
80010ea: 6013 str r3, [r2, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:28
interrupt = true;
80010ec: 2201 movs r2, #1
80010ee: 4b03 ldr r3, [pc, #12] ; (80010fc <SysTick_Handler+0x24>)
80010f0: 701a strb r2, [r3, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:29
}
80010f2: 4770 bx lr
80010f4: 20000cb4 .word 0x20000cb4
80010f8: 20000cb0 .word 0x20000cb0
80010fc: 20000cac .word 0x20000cac
08001100 <_ZN4modm8platform12SysTickTimer6enableEmb>:
_ZN4modm8platform12SysTickTimer6enableEmb():
./modm/src/modm/platform/clock/systick_timer.cpp:39
// ----------------------------------------------------------------------------
void
modm::platform::SysTickTimer::enable([[maybe_unused]] uint32_t reload,
[[maybe_unused]] bool use_processor_clock)
{
SysTick->CTRL = 0;
8001100: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000
8001104: 2200 movs r2, #0
./modm/src/modm/platform/clock/systick_timer.cpp:38
{
8001106: b510 push {r4, lr}
./modm/ext/cmsis/core/core_cm33.h:2595
}
else
{
SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
8001108: 24e0 movs r4, #224 ; 0xe0
./modm/src/modm/platform/clock/systick_timer.cpp:39
SysTick->CTRL = 0;
800110a: 611a str r2, [r3, #16]
__NVIC_SetPriority():
./modm/ext/cmsis/core/core_cm33.h:2595
800110c: 4a05 ldr r2, [pc, #20] ; (8001124 <_ZN4modm8platform12SysTickTimer6enableEmb+0x24>)
800110e: f882 4023 strb.w r4, [r2, #35] ; 0x23
_ZN4modm8platform12SysTickTimer6enableEmb():
./modm/src/modm/platform/clock/systick_timer.cpp:44
// Lower systick interrupt priority to lowest level
NVIC_SetPriority(SysTick_IRQn, systick_priority);
SysTick->LOAD = reload;
8001112: 6158 str r0, [r3, #20]
./modm/src/modm/platform/clock/systick_timer.cpp:45
SysTick->VAL = reload;
8001114: 6198 str r0, [r3, #24]
./modm/src/modm/platform/clock/systick_timer.cpp:46
if (use_processor_clock) {
8001116: b111 cbz r1, 800111e <_ZN4modm8platform12SysTickTimer6enableEmb+0x1e>
./modm/src/modm/platform/clock/systick_timer.cpp:47
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_CLKSOURCE_Msk;
8001118: 2207 movs r2, #7
./modm/src/modm/platform/clock/systick_timer.cpp:49
} else {
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk;
800111a: 611a str r2, [r3, #16]
./modm/src/modm/platform/clock/systick_timer.cpp:51
}
}
800111c: bd10 pop {r4, pc}
./modm/src/modm/platform/clock/systick_timer.cpp:49
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk;
800111e: 2203 movs r2, #3
8001120: e7fb b.n 800111a <_ZN4modm8platform12SysTickTimer6enableEmb+0x1a>
8001122: bf00 nop
8001124: e000ed00 .word 0xe000ed00
08001128 <_ZN4modm6chrono11milli_clock3nowEv>:
_ZN4modm6chrono11milli_clock3nowEv():
./modm/src/modm/platform/clock/systick_timer.cpp:62
}
// ----------------------------------------------------------------------------
modm::chrono::milli_clock::time_point modm_weak
modm::chrono::milli_clock::now() noexcept
{
8001128: b570 push {r4, r5, r6, lr}
./modm/src/modm/platform/clock/systick_timer.cpp:68
uint32_t val, ms;
do // We cannot use an atomic lock here, the counter still overflows even
{ // if the interrupt hasn't happened yet.
interrupt = false;
val = SysTick->VAL;
800112a: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000
./modm/src/modm/platform/clock/systick_timer.cpp:67
interrupt = false;
800112e: f04f 0600 mov.w r6, #0
8001132: 4a08 ldr r2, [pc, #32] ; (8001154 <_ZN4modm6chrono11milli_clock3nowEv+0x2c>)
./modm/src/modm/platform/clock/systick_timer.cpp:69
ms = milli_time;
8001134: 4d08 ldr r5, [pc, #32] ; (8001158 <_ZN4modm6chrono11milli_clock3nowEv+0x30>)
./modm/src/modm/platform/clock/systick_timer.cpp:67 (discriminator 1)
interrupt = false;
8001136: 7016 strb r6, [r2, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:68 (discriminator 1)
val = SysTick->VAL;
8001138: 6999 ldr r1, [r3, #24]
./modm/src/modm/platform/clock/systick_timer.cpp:69 (discriminator 1)
ms = milli_time;
800113a: 6828 ldr r0, [r5, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:71 (discriminator 1)
}
while(interrupt);
800113c: 7814 ldrb r4, [r2, #0]
800113e: 2c00 cmp r4, #0
8001140: d1f9 bne.n 8001136 <_ZN4modm6chrono11milli_clock3nowEv+0xe>
./modm/src/modm/platform/clock/systick_timer.cpp:73
const auto diff = SysTick->LOAD - val;
const auto ms_per_Ncycles = platform::SysTickTimer::ms_per_Ncycles;
8001142: 4a06 ldr r2, [pc, #24] ; (800115c <_ZN4modm6chrono11milli_clock3nowEv+0x34>)
./modm/src/modm/platform/clock/systick_timer.cpp:72
const auto diff = SysTick->LOAD - val;
8001144: 695b ldr r3, [r3, #20]
./modm/src/modm/platform/clock/systick_timer.cpp:76
constexpr auto Ncycles = platform::SysTickTimer::Ncycles;
ms += (uint64_t(diff) * uint64_t(ms_per_Ncycles)) >> Ncycles;
8001146: 6812 ldr r2, [r2, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:72
const auto diff = SysTick->LOAD - val;
8001148: 1a5b subs r3, r3, r1
./modm/src/modm/platform/clock/systick_timer.cpp:76
ms += (uint64_t(diff) * uint64_t(ms_per_Ncycles)) >> Ncycles;
800114a: fba2 2303 umull r2, r3, r2, r3
./modm/src/modm/platform/clock/systick_timer.cpp:78
return time_point{duration{ms}};
}
800114e: 4418 add r0, r3
8001150: bd70 pop {r4, r5, r6, pc}
8001152: bf00 nop
8001154: 20000cac .word 0x20000cac
8001158: 20000cb4 .word 0x20000cb4
800115c: 20000c38 .word 0x20000c38
08001160 <_ZN4modm6chrono11micro_clock3nowEv>:
_ZN4modm6chrono11micro_clock3nowEv():
./modm/src/modm/platform/clock/systick_timer.cpp:82
modm::chrono::micro_clock::time_point modm_weak
modm::chrono::micro_clock::now() noexcept
{
8001160: b570 push {r4, r5, r6, lr}
./modm/src/modm/platform/clock/systick_timer.cpp:88
uint32_t val, us;
do // We cannot use an atomic lock here, the counter still overflows even
{ // if the interrupt hasn't happened yet.
interrupt = false;
val = SysTick->VAL;
8001162: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000
./modm/src/modm/platform/clock/systick_timer.cpp:87
interrupt = false;
8001166: f04f 0600 mov.w r6, #0
800116a: 4a08 ldr r2, [pc, #32] ; (800118c <_ZN4modm6chrono11micro_clock3nowEv+0x2c>)
./modm/src/modm/platform/clock/systick_timer.cpp:89
us = micro_time;
800116c: 4d08 ldr r5, [pc, #32] ; (8001190 <_ZN4modm6chrono11micro_clock3nowEv+0x30>)
./modm/src/modm/platform/clock/systick_timer.cpp:87 (discriminator 1)
interrupt = false;
800116e: 7016 strb r6, [r2, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:88 (discriminator 1)
val = SysTick->VAL;
8001170: 6999 ldr r1, [r3, #24]
./modm/src/modm/platform/clock/systick_timer.cpp:89 (discriminator 1)
us = micro_time;
8001172: 6828 ldr r0, [r5, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:91 (discriminator 1)
}
while(interrupt);
8001174: 7814 ldrb r4, [r2, #0]
8001176: 2c00 cmp r4, #0
8001178: d1f9 bne.n 800116e <_ZN4modm6chrono11micro_clock3nowEv+0xe>
./modm/src/modm/platform/clock/systick_timer.cpp:93
const auto diff = SysTick->LOAD - val;
const auto us_per_Ncycles = platform::SysTickTimer::us_per_Ncycles;
800117a: 4a06 ldr r2, [pc, #24] ; (8001194 <_ZN4modm6chrono11micro_clock3nowEv+0x34>)
./modm/src/modm/platform/clock/systick_timer.cpp:92
const auto diff = SysTick->LOAD - val;
800117c: 695b ldr r3, [r3, #20]
./modm/src/modm/platform/clock/systick_timer.cpp:97
constexpr auto Ncycles = platform::SysTickTimer::Ncycles;
// use a 32x32=64bit multiplication
us += (uint64_t(diff) * uint64_t(us_per_Ncycles)) >> Ncycles;
800117e: 6812 ldr r2, [r2, #0]
./modm/src/modm/platform/clock/systick_timer.cpp:92
const auto diff = SysTick->LOAD - val;
8001180: 1a5b subs r3, r3, r1
./modm/src/modm/platform/clock/systick_timer.cpp:97
us += (uint64_t(diff) * uint64_t(us_per_Ncycles)) >> Ncycles;
8001182: fba2 2303 umull r2, r3, r2, r3
./modm/src/modm/platform/clock/systick_timer.cpp:99
return time_point{duration{us}};
8001186: 4418 add r0, r3
8001188: bd70 pop {r4, r5, r6, pc}
800118a: bf00 nop
800118c: 20000cac .word 0x20000cac
8001190: 20000cb0 .word 0x20000cb0
8001194: 20000c34 .word 0x20000c34
08001198 <modm_assert_report>:
modm_assert_report():
./modm/src/modm/platform/core/assert.cpp:27
extern "C"
{
void
modm_assert_report(_modm_assertion_info *cinfo)
{
8001198: b5f8 push {r3, r4, r5, r6, r7, lr}
800119a: 4605 mov r5, r0
./modm/src/modm/platform/core/assert.cpp:29
auto info = reinterpret_cast<modm::AssertionInfo *>(cinfo);
AbandonmentBehavior behavior(info->behavior);
800119c: 7a04 ldrb r4, [r0, #8]
./modm/src/modm/platform/core/assert.cpp:31
for (const AssertionHandler *handler = &__assertion_table_start;
800119e: 4e11 ldr r6, [pc, #68] ; (80011e4 <modm_assert_report+0x4c>)
./modm/src/modm/platform/core/assert.cpp:32
handler < &__assertion_table_end; handler++)
80011a0: 4f11 ldr r7, [pc, #68] ; (80011e8 <modm_assert_report+0x50>)
80011a2: 42be cmp r6, r7
80011a4: d316 bcc.n 80011d4 <modm_assert_report+0x3c>
./modm/src/modm/platform/core/assert.cpp:39
behavior |= (*handler)(*info);
}
info->behavior = behavior;
behavior.reset(Abandonment::Debug);
if ((behavior == Abandonment::DontCare) or
80011a6: f004 037f and.w r3, r4, #127 ; 0x7f
80011aa: 2b01 cmp r3, #1
./modm/src/modm/platform/core/assert.cpp:37
info->behavior = behavior;
80011ac: 722c strb r4, [r5, #8]
./modm/src/modm/platform/core/assert.cpp:39
if ((behavior == Abandonment::DontCare) or
80011ae: d001 beq.n 80011b4 <modm_assert_report+0x1c>
./modm/src/modm/platform/core/assert.cpp:39 (discriminator 2)
80011b0: 0763 lsls r3, r4, #29
80011b2: d516 bpl.n 80011e2 <modm_assert_report+0x4a>
./modm/src/modm/platform/core/assert.cpp:42 (discriminator 3)
(behavior & Abandonment::Fail))
{
modm_abandon(*info);
80011b4: 4628 mov r0, r5
80011b6: f7ff fdc1 bl 8000d3c <modm_abandon>
./modm/ext/cmsis/core/cmsis_gcc.h:271 (discriminator 3)
__ASM volatile ("dsb 0xF":::"memory");
80011ba: f3bf 8f4f dsb sy
./modm/ext/cmsis/core/core_cm33.h:2716 (discriminator 3)
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
{
__DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */
SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
80011be: 490b ldr r1, [pc, #44] ; (80011ec <modm_assert_report+0x54>)
__NVIC_SystemReset():
./modm/ext/cmsis/core/core_cm33.h:2716 (discriminator 3)
80011c0: 4b0b ldr r3, [pc, #44] ; (80011f0 <modm_assert_report+0x58>)
80011c2: 68ca ldr r2, [r1, #12]
80011c4: f402 62e0 and.w r2, r2, #1792 ; 0x700
80011c8: 4313 orrs r3, r2
./modm/ext/cmsis/core/core_cm33.h:2715 (discriminator 3)
SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
80011ca: 60cb str r3, [r1, #12]
modm_assert_report():
./modm/ext/cmsis/core/cmsis_gcc.h:271 (discriminator 3)
80011cc: f3bf 8f4f dsb sy
__NVIC_SystemReset():
./modm/ext/cmsis/core/core_cm33.h:2722
SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */
__DSB(); /* Ensure completion of memory access */
for(;;) /* wait until reset */
{
__NOP();
80011d0: bf00 nop
./modm/ext/cmsis/core/core_cm33.h:2720
for(;;) /* wait until reset */
80011d2: e7fd b.n 80011d0 <modm_assert_report+0x38>
modm_assert_report():
./modm/src/modm/platform/core/assert.cpp:34
behavior |= (*handler)(*info);
80011d4: 4628 mov r0, r5
80011d6: f856 3b04 ldr.w r3, [r6], #4
80011da: 4798 blx r3
_ZN4modm14FlagsOperatorsINS_11AbandonmentEhEoRERKS2_():
./modm/src/modm/architecture/interface/register.hpp:183
/// @{
/// bitwise **AND** with multiple bits
FlagsOperators& operator&=(FlagsOperators const &o) { return (value &= o.value, *this); }
/// bitwise **OR** with multiple bits
FlagsOperators& operator|=(FlagsOperators const &o) { return (value |= o.value, *this); }
80011dc: 4304 orrs r4, r0
80011de: b2e4 uxtb r4, r4
modm_assert_report():
./modm/src/modm/platform/core/assert.cpp:31
for (const AssertionHandler *handler = &__assertion_table_start;
80011e0: e7df b.n 80011a2 <modm_assert_report+0xa>
./modm/src/modm/platform/core/assert.cpp:45
NVIC_SystemReset();
}
}
80011e2: bdf8 pop {r3, r4, r5, r6, r7, pc}
80011e4: 08001f34 .word 0x08001f34
80011e8: 08001f34 .word 0x08001f34
80011ec: e000ed00 .word 0xe000ed00
80011f0: 05fa0004 .word 0x05fa0004
080011f4 <_Z15modm_dwt_enablev>:
_Z15modm_dwt_enablev():
./modm/src/modm/platform/core/delay.cpp:41
void
modm_dwt_enable(void)
{
// Enable Tracing Debug Unit
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
80011f4: 4a07 ldr r2, [pc, #28] ; (8001214 <_Z15modm_dwt_enablev+0x20>)
80011f6: f8d2 30fc ldr.w r3, [r2, #252] ; 0xfc
80011fa: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
80011fe: f8c2 30fc str.w r3, [r2, #252] ; 0xfc
./modm/src/modm/platform/core/delay.cpp:43
// Reset counter to 0
DWT->CYCCNT = 0;
8001202: 2200 movs r2, #0
8001204: 4b04 ldr r3, [pc, #16] ; (8001218 <_Z15modm_dwt_enablev+0x24>)
8001206: 605a str r2, [r3, #4]
./modm/src/modm/platform/core/delay.cpp:45
// Enable CPU cycle counter
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
8001208: 681a ldr r2, [r3, #0]
800120a: f042 0201 orr.w r2, r2, #1
800120e: 601a str r2, [r3, #0]
./modm/src/modm/platform/core/delay.cpp:46
}
8001210: 4770 bx lr
8001212: bf00 nop
8001214: e000ed00 .word 0xe000ed00
8001218: e0001000 .word 0xe0001000
0800121c <_ZN4modm8delay_usEm>:
_ZN4modm8delay_usEm():
./modm/src/modm/platform/core/delay.cpp:19
const uint32_t start = DWT->CYCCNT;
800121c: 4a05 ldr r2, [pc, #20] ; (8001234 <_ZN4modm8delay_usEm+0x18>)
800121e: 6851 ldr r1, [r2, #4]
./modm/src/modm/platform/core/delay.cpp:27
const uint32_t unshifted_cycles = platform::delay_fcpu_MHz * us;
8001220: 4b05 ldr r3, [pc, #20] ; (8001238 <_ZN4modm8delay_usEm+0x1c>)
8001222: 881b ldrh r3, [r3, #0]
8001224: 4358 muls r0, r3
./modm/src/modm/platform/core/delay.cpp:29
const uint32_t cycles = unshifted_cycles >> platform::delay_fcpu_MHz_shift;
8001226: 0940 lsrs r0, r0, #5
./modm/src/modm/platform/core/delay.cpp:32
const uint32_t now = DWT->CYCCNT;
8001228: 6853 ldr r3, [r2, #4]
./modm/src/modm/platform/core/delay.cpp:33
if (now - start >= cycles) break;
800122a: 1a5b subs r3, r3, r1
800122c: 4283 cmp r3, r0
800122e: d3fb bcc.n 8001228 <_ZN4modm8delay_usEm+0xc>
./modm/src/modm/platform/core/delay.cpp:35
}
8001230: 4770 bx lr
8001232: bf00 nop
8001234: e0001000 .word 0xe0001000
8001238: 20000c12 .word 0x20000c12
0800123c <__modm_initialize_memory>:
__modm_initialize_memory():
./modm/src/modm/platform/core/no_heap.c:19
modm_weak
void __modm_initialize_memory(void)
{
/* tumbleweed */
}
800123c: 4770 bx lr
...
08001240 <Reset_Handler>:
Reset_Handler():
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:20
.align 4
.type Reset_Handler, %function
.func Reset_Handler
Reset_Handler:
// Some bootloaders do not reset the stack pointer back to the VTOR entry
ldr r0,=__main_stack_top
8001240: 4807 ldr r0, [pc, #28] ; (8001260 <Reset_Handler+0x20>)
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:21
mov sp,r0
8001242: 4685 mov sp, r0
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:22
ldr r0,=__main_stack_limit
8001244: 4807 ldr r0, [pc, #28] ; (8001264 <Reset_Handler+0x24>)
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:23
msr msplim,r0
8001246: f380 880a msr MSPLIM, r0
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:26
// Enable FPU early so the compiler may use FPU registers for copying
// SCB->CPACR = ((3UL << 10*2) | (3UL << 11*2));
ldr r0,=0xe000ed88
800124a: 4807 ldr r0, [pc, #28] ; (8001268 <Reset_Handler+0x28>)
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:27
ldr r1,=0x00f00000
800124c: f44f 0170 mov.w r1, #15728640 ; 0xf00000
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:28
str r1, [r0, #0]
8001250: 6001 str r1, [r0, #0]
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:29
bl __modm_initialize_platform
8001252: f000 f891 bl 8001378 <__modm_initialize_platform>
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:30
bl modm_initialize_platform
8001256: f000 f818 bl 800128a <modm_initialize_platform>
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:31
b __modm_startup
800125a: f000 b817 b.w 800128c <__modm_startup>
800125e: 0000 .short 0x0000
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:20
ldr r0,=__main_stack_top
8001260: 20000c00 .word 0x20000c00
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:22
ldr r0,=__main_stack_limit
8001264: 2000006c .word 0x2000006c
/home/chris/modm/examples/generic/fiber/modm/src/modm/platform/core/reset_handler.sx:26
ldr r0,=0xe000ed88
8001268: e000ed88 .word 0xe000ed88
0800126c <table_copy>:
table_copy():
./modm/src/modm/platform/core/startup.c:64
}
// Copies the section defined by a table of {loadaddr, dest start, dest end}
static inline void
table_copy(const uint32_t *const start, const uint32_t *const end)
{
800126c: b530 push {r4, r5, lr}
./modm/src/modm/platform/core/startup.c:66
uint32_t **table = (uint32_t **)start;
while(table < (uint32_t **)end)
800126e: 4288 cmp r0, r1
8001270: d300 bcc.n 8001274 <table_copy+0x8>
./modm/src/modm/platform/core/startup.c:74
uint32_t *dest = table[1]; // destination start
while (dest < table[2]) // destination end
*(dest++) = *(src++);
table += 3;
}
}
8001272: bd30 pop {r4, r5, pc}
./modm/src/modm/platform/core/startup.c:68
const uint32_t *src = table[0]; // load address
8001274: e890 001c ldmia.w r0, {r2, r3, r4}
./modm/src/modm/platform/core/startup.c:70
while (dest < table[2]) // destination end
8001278: 429c cmp r4, r3
800127a: d801 bhi.n 8001280 <table_copy+0x14>
./modm/src/modm/platform/core/startup.c:72
table += 3;
800127c: 300c adds r0, #12
800127e: e7f6 b.n 800126e <table_copy+0x2>
./modm/src/modm/platform/core/startup.c:71
*(dest++) = *(src++);
8001280: f852 5b04 ldr.w r5, [r2], #4
8001284: f843 5b04 str.w r5, [r3], #4
8001288: e7f6 b.n 8001278 <table_copy+0xc>
0800128a <modm_initialize_platform>:
modm_initialize_platform():
./modm/src/modm/platform/core/startup.c:24
modm_weak void modm_initialize_platform(void) {}
800128a: 4770 bx lr
0800128c <__modm_startup>:
__modm_startup():
./modm/src/modm/platform/core/startup.c:93
}
// ----------------------------------------------------------------------------
// Called by Reset_Handler in reset_handler.s
void __modm_startup(void)
{
800128c: b538 push {r3, r4, r5, lr}
./modm/src/modm/platform/core/startup.c:95
// Copy and zero all internal memory
table_copy(__table_copy_intern_start, __table_copy_intern_end);
800128e: 492b ldr r1, [pc, #172] ; (800133c <__modm_startup+0xb0>)
8001290: 482b ldr r0, [pc, #172] ; (8001340 <__modm_startup+0xb4>)
8001292: f7ff ffeb bl 800126c <table_copy>
table_zero():
./modm/src/modm/platform/core/startup.c:80
uint32_t **table = (uint32_t **)start;
8001296: 4c2b ldr r4, [pc, #172] ; (8001344 <__modm_startup+0xb8>)
./modm/src/modm/platform/core/startup.c:81
while(table < (uint32_t **)end)
8001298: 4d2b ldr r5, [pc, #172] ; (8001348 <__modm_startup+0xbc>)
800129a: 42ac cmp r4, r5
800129c: d327 bcc.n 80012ee <__modm_startup+0x62>
__modm_startup():
./modm/src/modm/platform/core/startup.c:99
table_zero(__table_zero_intern_start, __table_zero_intern_end);
// Set the vector table location
SCB->VTOR = (uint32_t)__vector_table_rom_start;
800129e: 4b2b ldr r3, [pc, #172] ; (800134c <__modm_startup+0xc0>)
80012a0: 4a2b ldr r2, [pc, #172] ; (8001350 <__modm_startup+0xc4>)
table_call():
./modm/src/modm/platform/core/startup.c:57
for (const FunctionPointer *entry = start; entry < end; entry++)
80012a2: 4c2c ldr r4, [pc, #176] ; (8001354 <__modm_startup+0xc8>)
__modm_startup():
./modm/src/modm/platform/core/startup.c:99
SCB->VTOR = (uint32_t)__vector_table_rom_start;
80012a4: 609a str r2, [r3, #8]
./modm/src/modm/platform/core/startup.c:101
// Enable trapping of divide by zero for UDIV/SDIV instructions.
SCB->CCR |= SCB_CCR_DIV_0_TRP_Msk;
80012a6: 695a ldr r2, [r3, #20]
table_call():
./modm/src/modm/platform/core/startup.c:57
for (const FunctionPointer *entry = start; entry < end; entry++)
80012a8: 4d2b ldr r5, [pc, #172] ; (8001358 <__modm_startup+0xcc>)
__modm_startup():
./modm/src/modm/platform/core/startup.c:101
SCB->CCR |= SCB_CCR_DIV_0_TRP_Msk;
80012aa: f042 0210 orr.w r2, r2, #16
80012ae: 615a str r2, [r3, #20]
table_call():
./modm/src/modm/platform/core/startup.c:57
for (const FunctionPointer *entry = start; entry < end; entry++)
80012b0: 42ac cmp r4, r5
80012b2: d32b bcc.n 800130c <__modm_startup+0x80>
__modm_startup():
./modm/src/modm/platform/core/startup.c:106
// Call all hardware initialize hooks
table_call(__hardware_init_start, __hardware_init_end);
// Copy and zero all external memory
table_copy(__table_copy_extern_start, __table_copy_extern_end);
80012b4: 4929 ldr r1, [pc, #164] ; (800135c <__modm_startup+0xd0>)
80012b6: 482a ldr r0, [pc, #168] ; (8001360 <__modm_startup+0xd4>)
80012b8: f7ff ffd8 bl 800126c <table_copy>
table_zero():
./modm/src/modm/platform/core/startup.c:80
uint32_t **table = (uint32_t **)start;
80012bc: 4c29 ldr r4, [pc, #164] ; (8001364 <__modm_startup+0xd8>)
./modm/src/modm/platform/core/startup.c:81
while(table < (uint32_t **)end)
80012be: 4d2a ldr r5, [pc, #168] ; (8001368 <__modm_startup+0xdc>)
80012c0: 42ac cmp r4, r5
80012c2: d327 bcc.n 8001314 <__modm_startup+0x88>
__modm_startup():
./modm/src/modm/platform/core/startup.c:111
table_zero(__table_zero_extern_start, __table_zero_extern_end);
// Initialize heap as implemented by the heap option
extern void __modm_initialize_memory(void);
__modm_initialize_memory();
80012c4: f7ff ffba bl 800123c <__modm_initialize_memory>
table_call():
./modm/src/modm/platform/core/startup.c:57
for (const FunctionPointer *entry = start; entry < end; entry++)
80012c8: 4c28 ldr r4, [pc, #160] ; (800136c <__modm_startup+0xe0>)
80012ca: 4d29 ldr r5, [pc, #164] ; (8001370 <__modm_startup+0xe4>)
80012cc: 42ac cmp r4, r5
80012ce: d330 bcc.n 8001332 <__modm_startup+0xa6>
__modm_startup():
./modm/src/modm/platform/core/startup.c:118
// Call all constructors of static objects
table_call(__init_array_start, __init_array_end);
// Call the application's entry point
extern int main(void);
main();
80012d0: f7ff fa86 bl 80007e0 <main>
__DSB():
./modm/ext/cmsis/core/cmsis_gcc.h:271
80012d4: f3bf 8f4f dsb sy
__NVIC_SystemReset():
./modm/ext/cmsis/core/core_cm33.h:2716
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
80012d8: 491c ldr r1, [pc, #112] ; (800134c <__modm_startup+0xc0>)
./modm/ext/cmsis/core/core_cm33.h:2715
SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
80012da: 4b26 ldr r3, [pc, #152] ; (8001374 <__modm_startup+0xe8>)
./modm/ext/cmsis/core/core_cm33.h:2716
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
80012dc: 68ca ldr r2, [r1, #12]
80012de: f402 62e0 and.w r2, r2, #1792 ; 0x700
./modm/ext/cmsis/core/core_cm33.h:2715
SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
80012e2: 4313 orrs r3, r2
80012e4: 60cb str r3, [r1, #12]
__DSB():
./modm/ext/cmsis/core/cmsis_gcc.h:271
80012e6: f3bf 8f4f dsb sy
__NVIC_SystemReset():
./modm/ext/cmsis/core/core_cm33.h:2722
__NOP();
80012ea: bf00 nop
./modm/ext/cmsis/core/core_cm33.h:2720
for(;;) /* wait until reset */
80012ec: e7fd b.n 80012ea <__modm_startup+0x5e>
table_zero():
./modm/src/modm/platform/core/startup.c:85
*(dest++) = 0;
80012ee: e9d4 0300 ldrd r0, r3, [r4]
80012f2: 1cda adds r2, r3, #3
80012f4: 1a12 subs r2, r2, r0
80012f6: 1ec1 subs r1, r0, #3
80012f8: f022 0203 bic.w r2, r2, #3
80012fc: 4299 cmp r1, r3
80012fe: bf88 it hi
8001300: 2200 movhi r2, #0
8001302: 2100 movs r1, #0
8001304: f000 fcde bl 8001cc4 <memset>
./modm/src/modm/platform/core/startup.c:86
table += 2;
8001308: 3408 adds r4, #8
800130a: e7c6 b.n 800129a <__modm_startup+0xe>
table_call():
./modm/src/modm/platform/core/startup.c:58
(*entry)();
800130c: f854 3b04 ldr.w r3, [r4], #4
8001310: 4798 blx r3
./modm/src/modm/platform/core/startup.c:57
for (const FunctionPointer *entry = start; entry < end; entry++)
8001312: e7cd b.n 80012b0 <__modm_startup+0x24>
table_zero():
./modm/src/modm/platform/core/startup.c:85
*(dest++) = 0;
8001314: e9d4 0300 ldrd r0, r3, [r4]
8001318: 1cda adds r2, r3, #3
800131a: 1a12 subs r2, r2, r0
800131c: 1ec1 subs r1, r0, #3
800131e: f022 0203 bic.w r2, r2, #3
8001322: 4299 cmp r1, r3
8001324: bf88 it hi
8001326: 2200 movhi r2, #0
8001328: 2100 movs r1, #0
800132a: f000 fccb bl 8001cc4 <memset>
./modm/src/modm/platform/core/startup.c:86
table += 2;
800132e: 3408 adds r4, #8
8001330: e7c6 b.n 80012c0 <__modm_startup+0x34>
table_call():
./modm/src/modm/platform/core/startup.c:58
(*entry)();
8001332: f854 3b04 ldr.w r3, [r4], #4
8001336: 4798 blx r3
./modm/src/modm/platform/core/startup.c:57
for (const FunctionPointer *entry = start; entry < end; entry++)
8001338: e7c8 b.n 80012cc <__modm_startup+0x40>
800133a: bf00 nop
800133c: 08001f98 .word 0x08001f98
8001340: 08001f5c .word 0x08001f5c
8001344: 08001f4c .word 0x08001f4c
8001348: 08001f5c .word 0x08001f5c
800134c: e000ed00 .word 0xe000ed00
8001350: 08000000 .word 0x08000000
8001354: 08001f2c .word 0x08001f2c
8001358: 08001f34 .word 0x08001f34
800135c: 08001f98 .word 0x08001f98
8001360: 08001f98 .word 0x08001f98
8001364: 08001f98 .word 0x08001f98
8001368: 08001f98 .word 0x08001f98
800136c: 08001f20 .word 0x08001f20
8001370: 08001f2c .word 0x08001f2c
8001374: 05fa0004 .word 0x05fa0004
08001378 <__modm_initialize_platform>:
__modm_initialize_platform():
./modm/src/modm/platform/core/startup_platform.c:32
*/
void
__modm_initialize_platform(void)
{
// Enable SYSCFG
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
8001378: 4b07 ldr r3, [pc, #28] ; (8001398 <__modm_initialize_platform+0x20>)
800137a: 6e1a ldr r2, [r3, #96] ; 0x60
800137c: f042 0201 orr.w r2, r2, #1
8001380: 661a str r2, [r3, #96] ; 0x60
./modm/src/modm/platform/core/startup_platform.c:34
#ifdef PWR_CR2_IOSV
RCC->APB1ENR1 |= RCC_APB1ENR1_PWREN;
8001382: 6d9a ldr r2, [r3, #88] ; 0x58
8001384: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000
8001388: 659a str r2, [r3, #88] ; 0x58
./modm/src/modm/platform/core/startup_platform.c:38
#endif
#ifdef PWR_CR2_IOSV
// Enable VDDIO2
PWR->CR2 |= PWR_CR2_IOSV;
800138a: 4a04 ldr r2, [pc, #16] ; (800139c <__modm_initialize_platform+0x24>)
800138c: 6853 ldr r3, [r2, #4]
800138e: f443 7300 orr.w r3, r3, #512 ; 0x200
8001392: 6053 str r3, [r2, #4]
./modm/src/modm/platform/core/startup_platform.c:40
#endif
8001394: 4770 bx lr
8001396: bf00 nop
8001398: 40021000 .word 0x40021000
800139c: 40007000 .word 0x40007000
080013a0 <Undefined_Handler>:
Undefined_Handler():
./modm/src/modm/platform/core/vectors.c:278
// Explicitly include this BELOW the vector table to *not deal* with potential
// re-#defines of interrupt vector names! Bad vendors!! BAD!!!
#include <modm/platform/device.hpp>
#include <modm/architecture/interface/assert.h>
void Undefined_Handler(void)
{
80013a0: b51f push {r0, r1, r2, r3, r4, lr}
__get_IPSR():
./modm/ext/cmsis/core/cmsis_gcc.h:1031
__ASM volatile ("MRS %0, ipsr" : "=r" (result) );
80013a2: f3ef 8205 mrs r2, IPSR
Undefined_Handler():
./modm/src/modm/platform/core/vectors.c:279
const int32_t irqn = ((int32_t)__get_IPSR()) - 16;
80013a6: 3a10 subs r2, #16
./modm/src/modm/platform/core/vectors.c:282
// Set the currently executing interrupt to the lowest priority to allow
// reporting of the assertion failure and disable it from firing again.
NVIC_SetPriority((IRQn_Type)irqn, (1ul << __NVIC_PRIO_BITS) - 1ul);
80013a8: b253 sxtb r3, r2
__NVIC_SetPriority():
./modm/ext/cmsis/core/core_cm33.h:2589
if ((int32_t)(IRQn) >= 0)
80013aa: 2b00 cmp r3, #0
80013ac: db1c blt.n 80013e8 <Undefined_Handler+0x48>
./modm/ext/cmsis/core/core_cm33.h:2591
NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
80013ae: 20e0 movs r0, #224 ; 0xe0
80013b0: 4c11 ldr r4, [pc, #68] ; (80013f8 <Undefined_Handler+0x58>)
80013b2: 18e1 adds r1, r4, r3
80013b4: f881 0300 strb.w r0, [r1, #768] ; 0x300
__NVIC_DisableIRQ():
./modm/ext/cmsis/core/core_cm33.h:2432
NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
80013b8: 2001 movs r0, #1
80013ba: 0959 lsrs r1, r3, #5
80013bc: f003 031f and.w r3, r3, #31
80013c0: 4098 lsls r0, r3
80013c2: f101 0320 add.w r3, r1, #32
80013c6: f844 0023 str.w r0, [r4, r3, lsl #2]
__DSB():
./modm/ext/cmsis/core/cmsis_gcc.h:271
__ASM volatile ("dsb 0xF":::"memory");
80013ca: f3bf 8f4f dsb sy
__ISB():
./modm/ext/cmsis/core/cmsis_gcc.h:260
__ASM volatile ("isb 0xF":::"memory");
80013ce: f3bf 8f6f isb sy
Undefined_Handler():
./modm/src/modm/platform/core/vectors.c:284
NVIC_DisableIRQ((IRQn_Type)irqn);
modm_assert_continue_fail(0, "nvic.undef",
80013d2: 4b0a ldr r3, [pc, #40] ; (80013fc <Undefined_Handler+0x5c>)
80013d4: a801 add r0, sp, #4
80013d6: e9cd 3201 strd r3, r2, [sp, #4]
80013da: 2301 movs r3, #1
80013dc: f88d 300c strb.w r3, [sp, #12]
80013e0: f7ff feda bl 8001198 <modm_assert_report>
./modm/src/modm/platform/core/vectors.c:286
"An undefined NVIC interrupt was raised!", irqn);
}
80013e4: b004 add sp, #16
80013e6: bd10 pop {r4, pc}
__NVIC_SetPriority():
./modm/ext/cmsis/core/core_cm33.h:2595
SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
80013e8: 4905 ldr r1, [pc, #20] ; (8001400 <Undefined_Handler+0x60>)
80013ea: f003 030f and.w r3, r3, #15
80013ee: 4419 add r1, r3
80013f0: 23e0 movs r3, #224 ; 0xe0
80013f2: 760b strb r3, [r1, #24]
__NVIC_DisableIRQ():
./modm/ext/cmsis/core/core_cm33.h:2430
if ((int32_t)(IRQn) >= 0)
80013f4: e7ed b.n 80013d2 <Undefined_Handler+0x32>
80013f6: bf00 nop
80013f8: e000e100 .word 0xe000e100
80013fc: 08001f14 .word 0x08001f14
8001400: e000ecfc .word 0xe000ecfc
08001404 <_Z16modm_gpio_enablev>:
_Z16modm_gpio_enablev():
./modm/src/modm/platform/gpio/enable.cpp:20
void
modm_gpio_enable(void)
{
// Enable GPIO clock
RCC->AHB2ENR |=
8001404: 4b06 ldr r3, [pc, #24] ; (8001420 <_Z16modm_gpio_enablev+0x1c>)
8001406: 6cda ldr r2, [r3, #76] ; 0x4c
8001408: f042 02ff orr.w r2, r2, #255 ; 0xff
800140c: 64da str r2, [r3, #76] ; 0x4c
./modm/src/modm/platform/gpio/enable.cpp:30
RCC_AHB2ENR_GPIOEEN |
RCC_AHB2ENR_GPIOFEN |
RCC_AHB2ENR_GPIOGEN |
RCC_AHB2ENR_GPIOHEN;
// Reset GPIO peripheral
RCC->AHB2RSTR |=
800140e: 6ada ldr r2, [r3, #44] ; 0x2c
8001410: f042 02ff orr.w r2, r2, #255 ; 0xff
8001414: 62da str r2, [r3, #44] ; 0x2c
./modm/src/modm/platform/gpio/enable.cpp:39
RCC_AHB2RSTR_GPIODRST |
RCC_AHB2RSTR_GPIOERST |
RCC_AHB2RSTR_GPIOFRST |
RCC_AHB2RSTR_GPIOGRST |
RCC_AHB2RSTR_GPIOHRST;
RCC->AHB2RSTR &= ~(
8001416: 6ada ldr r2, [r3, #44] ; 0x2c
8001418: f022 02ff bic.w r2, r2, #255 ; 0xff
800141c: 62da str r2, [r3, #44] ; 0x2c
./modm/src/modm/platform/gpio/enable.cpp:48
RCC_AHB2RSTR_GPIODRST |
RCC_AHB2RSTR_GPIOERST |
RCC_AHB2RSTR_GPIOFRST |
RCC_AHB2RSTR_GPIOGRST |
RCC_AHB2RSTR_GPIOHRST);
}
800141e: 4770 bx lr
8001420: 40021000 .word 0x40021000
08001424 <_ZN4modm8platform7Lpuart15writeEh>:
_ZNK4modm6atomic5QueueIhLj2048EE7isEmptyEv():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:52
template<typename T, std::size_t N>
bool
modm::atomic::Queue<T, N>::isEmpty() const
{
return (this->head == this->tail);
8001424: 4a15 ldr r2, [pc, #84] ; (800147c <_ZN4modm8platform7Lpuart15writeEh+0x58>)
8001426: 8811 ldrh r1, [r2, #0]
8001428: 8853 ldrh r3, [r2, #2]
800142a: b289 uxth r1, r1
800142c: b29b uxth r3, r3
_ZN4modm8platform7Lpuart15writeEh():
./modm/src/modm/platform/uart/lpuart_1.cpp:55
}
bool
Lpuart1::write(uint8_t data)
{
if(txBuffer.isEmpty() && LpuartHal1::isTransmitRegisterEmpty()) {
800142e: 4299 cmp r1, r3
8001430: d106 bne.n 8001440 <_ZN4modm8platform7Lpuart15writeEh+0x1c>
_ZN4modm8platform10LpuartHal123isTransmitRegisterEmptyEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:137
}
bool
LpuartHal1::isTransmitRegisterEmpty()
{
return LPUART1->ISR & USART_ISR_TXE;
8001432: 4b13 ldr r3, [pc, #76] ; (8001480 <_ZN4modm8platform7Lpuart15writeEh+0x5c>)
8001434: 69d9 ldr r1, [r3, #28]
_ZN4modm8platform7Lpuart15writeEh():
./modm/src/modm/platform/uart/lpuart_1.cpp:55
8001436: 0609 lsls r1, r1, #24
8001438: d502 bpl.n 8001440 <_ZN4modm8platform7Lpuart15writeEh+0x1c>
_ZN4modm8platform10LpuartHal15writeEt():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:93
LPUART1->TDR = data;
800143a: 6298 str r0, [r3, #40] ; 0x28
_ZN4modm8platform7Lpuart15writeEh():
./modm/src/modm/platform/uart/lpuart_1.cpp:65
// Disable interrupts while enabling the transmit interrupt
atomic::Lock lock;
// Transmit Data Register Empty Interrupt Enable
LpuartHal1::enableInterrupt(Interrupt::TxEmpty);
}
return true;
800143c: 2001 movs r0, #1
800143e: 4770 bx lr
_ZN4modm6atomic5QueueIhLj2048EE4pushERKh():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:100 (discriminator 4)
template<typename T, std::size_t N>
bool
modm::atomic::Queue<T, N>::push(const T& value)
{
Index tmphead = this->head + 1;
8001440: 8813 ldrh r3, [r2, #0]
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:104 (discriminator 4)
if (tmphead >= (N+1)) {
tmphead = 0;
}
if (tmphead == this->tail) {
8001442: 8851 ldrh r1, [r2, #2]
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:100 (discriminator 4)
Index tmphead = this->head + 1;
8001444: 3301 adds r3, #1
8001446: b29b uxth r3, r3
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:102 (discriminator 4)
tmphead = 0;
8001448: f5b3 6f00 cmp.w r3, #2048 ; 0x800
800144c: bf88 it hi
800144e: 2300 movhi r3, #0
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:104 (discriminator 4)
if (tmphead == this->tail) {
8001450: b289 uxth r1, r1
8001452: 4299 cmp r1, r3
8001454: d00f beq.n 8001476 <_ZN4modm8platform7Lpuart15writeEh+0x52>
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:108
return false;
}
else {
this->buffer[this->head] = value;
8001456: 8811 ldrh r1, [r2, #0]
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:109
this->head = tmphead;
8001458: 8013 strh r3, [r2, #0]
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:108
this->buffer[this->head] = value;
800145a: fa12 f181 uxtah r1, r2, r1
800145e: 7108 strb r0, [r1, #4]
_ZN4modm8platform7Lpuart15writeEh():
./modm/ext/cmsis/core/cmsis_gcc.h:1208
__ASM volatile ("MRS %0, primask" : "=r" (result) );
8001460: f3ef 8110 mrs r1, PRIMASK
./modm/ext/cmsis/core/cmsis_gcc.h:962
__ASM volatile ("cpsid i" : : : "memory");
8001464: b672 cpsid i
_ZN4modm8platform10LpuartHal115enableInterruptENS_5FlagsINS0_8UartBase9InterruptEmEE():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:170
}
void
LpuartHal1::enableInterrupt(Interrupt_t interrupt)
{
LPUART1->CR1 |= interrupt.value;
8001466: 4a06 ldr r2, [pc, #24] ; (8001480 <_ZN4modm8platform7Lpuart15writeEh+0x5c>)
8001468: 6813 ldr r3, [r2, #0]
800146a: f043 0380 orr.w r3, r3, #128 ; 0x80
800146e: 6013 str r3, [r2, #0]
_ZN4modm8platform7Lpuart15writeEh():
./modm/ext/cmsis/core/cmsis_gcc.h:1236
__ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
8001470: f381 8810 msr PRIMASK, r1
8001474: e7e2 b.n 800143c <_ZN4modm8platform7Lpuart15writeEh+0x18>
./modm/src/modm/platform/uart/lpuart_1.cpp:59
return false;
8001476: 2000 movs r0, #0
./modm/src/modm/platform/uart/lpuart_1.cpp:66
}
8001478: 4770 bx lr
800147a: bf00 nop
800147c: 20000cb8 .word 0x20000cb8
8001480: 40008000 .word 0x40008000
08001484 <_ZN4modm8platform7Lpuart115isWriteFinishedEv>:
_ZNK4modm6atomic5QueueIhLj2048EE7isEmptyEv():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:52
return (this->head == this->tail);
8001484: 4b06 ldr r3, [pc, #24] ; (80014a0 <_ZN4modm8platform7Lpuart115isWriteFinishedEv+0x1c>)
8001486: 881a ldrh r2, [r3, #0]
8001488: 885b ldrh r3, [r3, #2]
800148a: b292 uxth r2, r2
800148c: b29b uxth r3, r3
_ZN4modm8platform7Lpuart115isWriteFinishedEv():
./modm/src/modm/platform/uart/lpuart_1.cpp:84
}
bool
Lpuart1::isWriteFinished()
{
return txBuffer.isEmpty() && LpuartHal1::isTransmitRegisterEmpty();
800148e: 429a cmp r2, r3
_ZN4modm8platform10LpuartHal123isTransmitRegisterEmptyEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:137
return LPUART1->ISR & USART_ISR_TXE;
8001490: bf03 ittte eq
8001492: 4b04 ldreq r3, [pc, #16] ; (80014a4 <_ZN4modm8platform7Lpuart115isWriteFinishedEv+0x20>)
8001494: 69d8 ldreq r0, [r3, #28]
_ZN4modm8platform7Lpuart115isWriteFinishedEv():
./modm/src/modm/platform/uart/lpuart_1.cpp:84
8001496: f3c0 10c0 ubfxeq r0, r0, #7, #1
800149a: 2000 movne r0, #0
./modm/src/modm/platform/uart/lpuart_1.cpp:85
}
800149c: 4770 bx lr
800149e: bf00 nop
80014a0: 20000cb8 .word 0x20000cb8
80014a4: 40008000 .word 0x40008000
080014a8 <_ZN4modm8platform7Lpuart116flushWriteBufferEv>:
_ZN4modm8platform7Lpuart116flushWriteBufferEv():
./modm/src/modm/platform/uart/lpuart_1.cpp:48
{
80014a8: b508 push {r3, lr}
./modm/src/modm/platform/uart/lpuart_1.cpp:49 (discriminator 1)
while(!isWriteFinished());
80014aa: f7ff ffeb bl 8001484 <_ZN4modm8platform7Lpuart115isWriteFinishedEv>
80014ae: 2800 cmp r0, #0
80014b0: d0fb beq.n 80014aa <_ZN4modm8platform7Lpuart116flushWriteBufferEv+0x2>
./modm/src/modm/platform/uart/lpuart_1.cpp:50
}
80014b2: bd08 pop {r3, pc}
080014b4 <_ZN4modm8platform7Lpuart14readERh>:
_ZN4modm8platform7Lpuart14readERh():
./modm/src/modm/platform/uart/lpuart_1.cpp:108
return count;
}
bool
Lpuart1::read(uint8_t &data)
{
80014b4: 4602 mov r2, r0
_ZN4modm8platform10LpuartHal125isReceiveRegisterNotEmptyEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:131
return LPUART1->ISR & USART_ISR_RXNE;
80014b6: 4904 ldr r1, [pc, #16] ; (80014c8 <_ZN4modm8platform7Lpuart14readERh+0x14>)
80014b8: 69c8 ldr r0, [r1, #28]
_ZN4modm8platform7Lpuart14readERh():
./modm/src/modm/platform/uart/lpuart_1.cpp:109
if(LpuartHal1::isReceiveRegisterNotEmpty()) {
80014ba: f010 0020 ands.w r0, r0, #32
_ZN4modm8platform10LpuartHal14readERh():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:99
data = LPUART1->RDR;
80014be: bf1e ittt ne
80014c0: 6a4b ldrne r3, [r1, #36] ; 0x24
_ZN4modm8platform7Lpuart14readERh():
./modm/src/modm/platform/uart/lpuart_1.cpp:111
LpuartHal1::read(data);
return true;
80014c2: 2001 movne r0, #1
_ZN4modm8platform10LpuartHal14readERh():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:99
80014c4: 7013 strbne r3, [r2, #0]
_ZN4modm8platform7Lpuart14readERh():
./modm/src/modm/platform/uart/lpuart_1.cpp:115
} else {
return false;
}
}
80014c6: 4770 bx lr
80014c8: 40008000 .word 0x40008000
080014cc <LPUART1_IRQHandler>:
_ZN4modm8platform10LpuartHal123isTransmitRegisterEmptyEv():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:137
return LPUART1->ISR & USART_ISR_TXE;
80014cc: 4b10 ldr r3, [pc, #64] ; (8001510 <LPUART1_IRQHandler+0x44>)
80014ce: 69da ldr r2, [r3, #28]
LPUART1_IRQHandler():
./modm/src/modm/platform/uart/lpuart_1.cpp:166
} // namespace modm::platform
MODM_ISR(LPUART1)
{
using namespace modm::platform;
if (LpuartHal1::isTransmitRegisterEmpty()) {
80014d0: 0612 lsls r2, r2, #24
80014d2: d50a bpl.n 80014ea <LPUART1_IRQHandler+0x1e>
_ZNK4modm6atomic5QueueIhLj2048EE7isEmptyEv():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:52
80014d4: 4a0f ldr r2, [pc, #60] ; (8001514 <LPUART1_IRQHandler+0x48>)
80014d6: 8810 ldrh r0, [r2, #0]
80014d8: 8851 ldrh r1, [r2, #2]
80014da: b280 uxth r0, r0
80014dc: b289 uxth r1, r1
LPUART1_IRQHandler():
./modm/src/modm/platform/uart/lpuart_1.cpp:167
if (txBuffer.isEmpty()) {
80014de: 4288 cmp r0, r1
80014e0: d107 bne.n 80014f2 <LPUART1_IRQHandler+0x26>
_ZN4modm8platform10LpuartHal116disableInterruptENS_5FlagsINS0_8UartBase9InterruptEmEE():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:176
}
void
LpuartHal1::disableInterrupt(Interrupt_t interrupt)
{
LPUART1->CR1 &= ~interrupt.value;
80014e2: 681a ldr r2, [r3, #0]
80014e4: f022 0280 bic.w r2, r2, #128 ; 0x80
80014e8: 601a str r2, [r3, #0]
_ZN4modm8platform10LpuartHal125acknowledgeInterruptFlagsENS_5FlagsINS0_8UartBase13InterruptFlagEmEE():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:190
void
LpuartHal1::acknowledgeInterruptFlags(InterruptFlag_t flags)
{
// Flags are cleared by writing a one to the flag position.
// Writing a zero is (hopefully) ignored.
LPUART1->ICR = flags.value;
80014ea: 2208 movs r2, #8
80014ec: 4b08 ldr r3, [pc, #32] ; (8001510 <LPUART1_IRQHandler+0x44>)
80014ee: 621a str r2, [r3, #32]
LPUART1_IRQHandler():
./modm/src/modm/platform/uart/lpuart_1.cpp:177
LpuartHal1::write(txBuffer.get());
txBuffer.pop();
}
}
LpuartHal1::acknowledgeInterruptFlags(LpuartHal1::InterruptFlag::OverrunError);
}
80014f0: 4770 bx lr
_ZNK4modm6atomic5QueueIhLj2048EE3getEv():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:93
return this->buffer[this->tail];
80014f2: 8851 ldrh r1, [r2, #2]
LPUART1_IRQHandler():
./modm/src/modm/platform/uart/lpuart_1.cpp:172
LpuartHal1::write(txBuffer.get());
80014f4: fa12 f181 uxtah r1, r2, r1
_ZN4modm8platform10LpuartHal15writeEt():
./modm/src/modm/platform/uart/lpuart_hal_1_impl.hpp:93
LPUART1->TDR = data;
80014f8: 7909 ldrb r1, [r1, #4]
80014fa: 6299 str r1, [r3, #40] ; 0x28
_ZN4modm6atomic5QueueIhLj2048EE3popEv():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:118
template<typename T, std::size_t N>
void
modm::atomic::Queue<T, N>::pop()
{
Index tmptail = this->tail + 1;
80014fc: 8853 ldrh r3, [r2, #2]
80014fe: 3301 adds r3, #1
8001500: b29b uxth r3, r3
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:120
if (tmptail >= (N+1)) {
tmptail = 0;
8001502: f5b3 6f00 cmp.w r3, #2048 ; 0x800
8001506: bf88 it hi
8001508: 2300 movhi r3, #0
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:122
}
this->tail = tmptail;
800150a: 8053 strh r3, [r2, #2]
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:123
}
800150c: e7ed b.n 80014ea <LPUART1_IRQHandler+0x1e>
800150e: bf00 nop
8001510: 40008000 .word 0x40008000
8001514: 20000cb8 .word 0x20000cb8
08001518 <_GLOBAL__sub_I__ZN4modm8platform7Lpuart113writeBlockingEh>:
_ZN4modm6atomic5QueueIhLj2048EEC4Ev():
./modm/src/modm/architecture/driver/atomic/queue_impl.hpp:21
head(0), tail(0)
8001518: 2200 movs r2, #0
800151a: 4b02 ldr r3, [pc, #8] ; (8001524 <_GLOBAL__sub_I__ZN4modm8platform7Lpuart113writeBlockingEh+0xc>)
800151c: 801a strh r2, [r3, #0]
800151e: 805a strh r2, [r3, #2]
_GLOBAL__sub_I__ZN4modm8platform7Lpuart113writeBlockingEh():
./modm/src/modm/platform/uart/lpuart_1.cpp:177
}
8001520: 4770 bx lr
8001522: bf00 nop
8001524: 20000cb8 .word 0x20000cb8
08001528 <_ZN12_GLOBAL__N_118modm_context_entryEv>:
_ZN12_GLOBAL__N_118modm_context_entryEv():
./modm/src/modm/processing/fiber/context_arm_m.cpp:73
constexpr uintptr_t StackWatermark = 0xf00d'cafe;
void modm_naked
modm_context_entry()
{
asm volatile
8001528: 9800 ldr r0, [sp, #0]
800152a: f8dd f004 ldr.w pc, [sp, #4]
0800152e <modm_context_init>:
modm_context_init():
./modm/src/modm/processing/fiber/context_arm_m.cpp:88
modm_context_init(modm_context_t *ctx,
uintptr_t *bottom, uintptr_t *top,
uintptr_t fn, uintptr_t fn_arg)
{
ctx->bottom = bottom;
ctx->top = top;
800152e: e9c0 1201 strd r1, r2, [r0, #4]
./modm/src/modm/processing/fiber/context_arm_m.cpp:91
ctx->sp = top;
*--ctx->sp = fn;
8001532: f842 3c04 str.w r3, [r2, #-4]
./modm/src/modm/processing/fiber/context_arm_m.cpp:92
*--ctx->sp = fn_arg;
8001536: f1a2 0308 sub.w r3, r2, #8
800153a: 6003 str r3, [r0, #0]
800153c: 9b00 ldr r3, [sp, #0]
800153e: f842 3c08 str.w r3, [r2, #-8]
./modm/src/modm/processing/fiber/context_arm_m.cpp:93
}
8001542: 4770 bx lr
08001544 <modm_context_reset>:
modm_context_reset():
./modm/src/modm/processing/fiber/context_arm_m.cpp:98
void
modm_context_reset(modm_context_t *ctx)
{
*ctx->bottom = StackWatermark;
8001544: 6843 ldr r3, [r0, #4]
8001546: 4a04 ldr r2, [pc, #16] ; (8001558 <modm_context_reset+0x14>)
8001548: 601a str r2, [r3, #0]
./modm/src/modm/processing/fiber/context_arm_m.cpp:100
ctx->sp = ctx->top - StackWordsStorage;
800154a: 6883 ldr r3, [r0, #8]
./modm/src/modm/processing/fiber/context_arm_m.cpp:101
*--ctx->sp = (uintptr_t) modm_context_entry;
800154c: 4a03 ldr r2, [pc, #12] ; (800155c <modm_context_reset+0x18>)
./modm/src/modm/processing/fiber/context_arm_m.cpp:102
ctx->sp -= StackWordsRegisters - StackWordsReset;
800154e: 3b6c subs r3, #108 ; 0x6c
./modm/src/modm/processing/fiber/context_arm_m.cpp:101
*--ctx->sp = (uintptr_t) modm_context_entry;
8001550: 661a str r2, [r3, #96] ; 0x60
./modm/src/modm/processing/fiber/context_arm_m.cpp:102
ctx->sp -= StackWordsRegisters - StackWordsReset;
8001552: 6003 str r3, [r0, #0]
./modm/src/modm/processing/fiber/context_arm_m.cpp:103
}
8001554: 4770 bx lr
8001556: bf00 nop
8001558: f00dcafe .word 0xf00dcafe
800155c: 08001529 .word 0x08001529
08001560 <modm_context_watermark>:
modm_context_watermark():
./modm/src/modm/processing/fiber/context_arm_m.cpp:109
void
modm_context_watermark(modm_context_t *ctx)
{
// clear the register file on the stack
for (auto *word = ctx->top - StackWordsAll;
8001560: 6883 ldr r3, [r0, #8]
./modm/src/modm/processing/fiber/context_arm_m.cpp:111
word < ctx->top - StackWordsStorage - StackWordsReset; word++)
*word = 0;
8001562: 2260 movs r2, #96 ; 0x60
./modm/src/modm/processing/fiber/context_arm_m.cpp:109
for (auto *word = ctx->top - StackWordsAll;
8001564: 3b6c subs r3, #108 ; 0x6c
./modm/src/modm/processing/fiber/context_arm_m.cpp:111
*word = 0;
8001566: 2100 movs r1, #0
./modm/src/modm/processing/fiber/context_arm_m.cpp:107
{
8001568: b510 push {r4, lr}
800156a: 4604 mov r4, r0
./modm/src/modm/processing/fiber/context_arm_m.cpp:111
*word = 0;
800156c: 4618 mov r0, r3
800156e: f000 fba9 bl 8001cc4 <memset>
8001572: 4603 mov r3, r0
./modm/src/modm/processing/fiber/context_arm_m.cpp:114
// then color the whole stack *below* the register file
for (auto *word = ctx->bottom; word < ctx->top - StackWordsAll; word++)
8001574: 6862 ldr r2, [r4, #4]
./modm/src/modm/processing/fiber/context_arm_m.cpp:115
*word = StackWatermark;
8001576: 4903 ldr r1, [pc, #12] ; (8001584 <modm_context_watermark+0x24>)
./modm/src/modm/processing/fiber/context_arm_m.cpp:114 (discriminator 1)
for (auto *word = ctx->bottom; word < ctx->top - StackWordsAll; word++)
8001578: 429a cmp r2, r3
800157a: d300 bcc.n 800157e <modm_context_watermark+0x1e>
./modm/src/modm/processing/fiber/context_arm_m.cpp:116
}
800157c: bd10 pop {r4, pc}
./modm/src/modm/processing/fiber/context_arm_m.cpp:115 (discriminator 3)
*word = StackWatermark;
800157e: f842 1b04 str.w r1, [r2], #4
./modm/src/modm/processing/fiber/context_arm_m.cpp:114 (discriminator 3)
for (auto *word = ctx->bottom; word < ctx->top - StackWordsAll; word++)
8001582: e7f9 b.n 8001578 <modm_context_watermark+0x18>
8001584: f00dcafe .word 0xf00dcafe
08001588 <modm_context_stack_usage>:
modm_context_stack_usage():
./modm/src/modm/processing/fiber/context_arm_m.cpp:120
size_t
modm_context_stack_usage(const modm_context_t *ctx)
{
8001588: b510 push {r4, lr}
800158a: e9d0 2301 ldrd r2, r3, [r0, #4]
./modm/src/modm/processing/fiber/context_arm_m.cpp:122
for (auto *word = ctx->bottom; word < ctx->top; word++)
if (StackWatermark != *word)
800158e: 4806 ldr r0, [pc, #24] ; (80015a8 <modm_context_stack_usage+0x20>)
./modm/src/modm/processing/fiber/context_arm_m.cpp:121 (discriminator 1)
for (auto *word = ctx->bottom; word < ctx->top; word++)
8001590: 4293 cmp r3, r2
8001592: 4611 mov r1, r2
8001594: d801 bhi.n 800159a <modm_context_stack_usage+0x12>
./modm/src/modm/processing/fiber/context_arm_m.cpp:124
return (ctx->top - word) * StackSizeWord;
return 0;
8001596: 2000 movs r0, #0
8001598: e004 b.n 80015a4 <modm_context_stack_usage+0x1c>
./modm/src/modm/processing/fiber/context_arm_m.cpp:122
if (StackWatermark != *word)
800159a: 680c ldr r4, [r1, #0]
800159c: 3204 adds r2, #4
800159e: 4284 cmp r4, r0
80015a0: d0f6 beq.n 8001590 <modm_context_stack_usage+0x8>
./modm/src/modm/processing/fiber/context_arm_m.cpp:123
return (ctx->top - word) * StackSizeWord;
80015a2: 1a58 subs r0, r3, r1
./modm/src/modm/processing/fiber/context_arm_m.cpp:125
}
80015a4: bd10 pop {r4, pc}
80015a6: bf00 nop
80015a8: f00dcafe .word 0xf00dcafe
080015ac <modm_context_start>:
modm_context_start():
./modm/src/modm/processing/fiber/context_arm_m.cpp:144
"pop {r4-r11, pc} \n\t"
void modm_naked
modm_context_start(modm_context_t*)
{
asm volatile
80015ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
80015b0: ed2d 8b10 vpush {d8-d15}
80015b4: f3ef 8114 mrs r1, CONTROL
80015b8: f041 0102 orr.w r1, r1, #2
80015bc: f381 8814 msr CONTROL, r1
80015c0: e890 0006 ldmia.w r0, {r1, r2}
80015c4: 468d mov sp, r1
80015c6: f382 880b msr PSPLIM, r2
80015ca: ecbd 8b10 vpop {d8-d15}
80015ce: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
080015d2 <modm_context_jump>:
modm_context_jump():
./modm/src/modm/processing/fiber/context_arm_m.cpp:162
}
void modm_naked
modm_context_jump(modm_context_t*, modm_context_t*)
{
asm volatile
80015d2: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
80015d6: ed2d 8b10 vpush {d8-d15}
80015da: f8c0 d000 str.w sp, [r0]
80015de: c906 ldmia r1, {r1, r2}
80015e0: 468d mov sp, r1
80015e2: f382 880b msr PSPLIM, r2
80015e6: ecbd 8b10 vpop {d8-d15}
80015ea: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
080015ee <modm_context_end>:
modm_context_end():
./modm/src/modm/processing/fiber/context_arm_m.cpp:177
}
void modm_naked
modm_context_end()
{
asm volatile
80015ee: f3ef 8014 mrs r0, CONTROL
80015f2: f020 0002 bic.w r0, r0, #2
80015f6: f380 8814 msr CONTROL, r0
80015fa: ecbd 8b10 vpop {d8-d15}
80015fe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
08001602 <putchar_via_gadget>:
putchar_via_gadget():
./modm/ext/printf/printf.c:324
// Note: This function currently assumes it is not passed a '\0' c,
// or alternatively, that '\0' can be passed to the function in the output
// gadget. The former assumption holds within the printf library. It also
// assumes that the output gadget has been properly initialized.
static inline void putchar_via_gadget(output_gadget_t* gadget, char c)
{
8001602: 4603 mov r3, r0
./modm/ext/printf/printf.c:325
printf_size_t write_pos = gadget->pos++;
8001604: 68da ldr r2, [r3, #12]
./modm/ext/printf/printf.c:324
{
8001606: 4608 mov r0, r1
./modm/ext/printf/printf.c:325
printf_size_t write_pos = gadget->pos++;
8001608: 1c51 adds r1, r2, #1
./modm/ext/printf/printf.c:324
{
800160a: b410 push {r4}
./modm/ext/printf/printf.c:325
printf_size_t write_pos = gadget->pos++;
800160c: 60d9 str r1, [r3, #12]
./modm/ext/printf/printf.c:328
// We're _always_ increasing pos, so as to count how may characters
// _would_ have been written if not for the max_chars limitation
if (write_pos >= gadget->max_chars) {
800160e: 6919 ldr r1, [r3, #16]
8001610: 428a cmp r2, r1
8001612: d208 bcs.n 8001626 <putchar_via_gadget+0x24>
./modm/ext/printf/printf.c:331
return;
}
if (gadget->function != NULL) {
8001614: 681c ldr r4, [r3, #0]
8001616: b124 cbz r4, 8001622 <putchar_via_gadget+0x20>
./modm/ext/printf/printf.c:333
// No check for c == '\0' .
gadget->function(c, gadget->extra_function_arg);
8001618: 6859 ldr r1, [r3, #4]
800161a: 4623 mov r3, r4
./modm/ext/printf/printf.c:340
else {
// it must be the case that gadget->buffer != NULL , due to the constraint
// on output_gadget_t ; and note we're relying on write_pos being non-negative.
gadget->buffer[write_pos] = c;
}
}
800161c: f85d 4b04 ldr.w r4, [sp], #4
./modm/ext/printf/printf.c:333
gadget->function(c, gadget->extra_function_arg);
8001620: 4718 bx r3
./modm/ext/printf/printf.c:338
gadget->buffer[write_pos] = c;
8001622: 689b ldr r3, [r3, #8]
8001624: 5498 strb r0, [r3, r2]
./modm/ext/printf/printf.c:340
}
8001626: f85d 4b04 ldr.w r4, [sp], #4
800162a: 4770 bx lr
0800162c <out_rev_>:
out_rev_():
./modm/ext/printf/printf.c:433
}
// output the specified string in reverse, taking care of any zero-padding
static void out_rev_(output_gadget_t* output, const char* buf, printf_size_t len, printf_size_t width, printf_flags_t flags)
{
800162c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
8001630: f8dd a020 ldr.w sl, [sp, #32]
8001634: 4605 mov r5, r0
./modm/ext/printf/printf.c:437
const printf_size_t start_pos = output->pos;
// pad spaces up to given width
if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
8001636: f01a 0f03 tst.w sl, #3
./modm/ext/printf/printf.c:433
{
800163a: 460f mov r7, r1
800163c: 4614 mov r4, r2
800163e: 461e mov r6, r3
./modm/ext/printf/printf.c:434
const printf_size_t start_pos = output->pos;
8001640: f8d0 800c ldr.w r8, [r0, #12]
./modm/ext/printf/printf.c:437
if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
8001644: d010 beq.n 8001668 <out_rev_+0x3c>
8001646: 443c add r4, r7
./modm/ext/printf/printf.c:444
putchar_via_gadget(output, ' ');
}
}
// reverse string
while (len) {
8001648: 42bc cmp r4, r7
800164a: d10f bne.n 800166c <out_rev_+0x40>
./modm/ext/printf/printf.c:449
putchar_via_gadget(output, buf[--len]);
}
// append pad spaces up to given width
if (flags & FLAGS_LEFT) {
800164c: f01a 0f02 tst.w sl, #2
8001650: d116 bne.n 8001680 <out_rev_+0x54>
./modm/ext/printf/printf.c:454
while (output->pos - start_pos < width) {
putchar_via_gadget(output, ' ');
}
}
}
8001652: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
./modm/ext/printf/printf.c:439 (discriminator 3)
putchar_via_gadget(output, ' ');
8001656: 2120 movs r1, #32
8001658: 4628 mov r0, r5
800165a: f7ff ffd2 bl 8001602 <putchar_via_gadget>
./modm/ext/printf/printf.c:438 (discriminator 3)
for (printf_size_t i = len; i < width; i++) {
800165e: f109 0901 add.w r9, r9, #1
./modm/ext/printf/printf.c:438 (discriminator 1)
8001662: 45b1 cmp r9, r6
8001664: d3f7 bcc.n 8001656 <out_rev_+0x2a>
8001666: e7ee b.n 8001646 <out_rev_+0x1a>
./modm/ext/printf/printf.c:438
8001668: 4691 mov r9, r2
800166a: e7fa b.n 8001662 <out_rev_+0x36>
./modm/ext/printf/printf.c:445
putchar_via_gadget(output, buf[--len]);
800166c: 4628 mov r0, r5
800166e: f814 1d01 ldrb.w r1, [r4, #-1]!
8001672: f7ff ffc6 bl 8001602 <putchar_via_gadget>
8001676: e7e7 b.n 8001648 <out_rev_+0x1c>
./modm/ext/printf/printf.c:451
putchar_via_gadget(output, ' ');
8001678: 2120 movs r1, #32
800167a: 4628 mov r0, r5
800167c: f7ff ffc1 bl 8001602 <putchar_via_gadget>
./modm/ext/printf/printf.c:450
while (output->pos - start_pos < width) {
8001680: 68eb ldr r3, [r5, #12]
8001682: eba3 0308 sub.w r3, r3, r8
8001686: 42b3 cmp r3, r6
8001688: d3f6 bcc.n 8001678 <out_rev_+0x4c>
800168a: e7e2 b.n 8001652 <out_rev_+0x26>
0800168c <print_integer>:
print_integer():
./modm/ext/printf/printf.c:527
out_rev_(output, buf, len, width, flags);
}
// An internal itoa-like function
void print_integer(output_gadget_t* output, printf_unsigned_value_t value, bool negative, numeric_base_t base, printf_size_t precision, printf_size_t width, printf_flags_t flags)
{
800168c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
8001690: 4698 mov r8, r3
8001692: b08d sub sp, #52 ; 0x34
./modm/ext/printf/printf.c:531
char buf[PRINTF_INTEGER_BUFFER_SIZE];
printf_size_t len = 0U;
if (!value) {
8001694: ea52 0308 orrs.w r3, r2, r8
./modm/ext/printf/printf.c:527
{
8001698: 4691 mov r9, r2
800169a: e9dd 7419 ldrd r7, r4, [sp, #100] ; 0x64
800169e: f89d a058 ldrb.w sl, [sp, #88] ; 0x58
80016a2: f89d 605c ldrb.w r6, [sp, #92] ; 0x5c
80016a6: 9002 str r0, [sp, #8]
./modm/ext/printf/printf.c:531
if (!value) {
80016a8: d121 bne.n 80016ee <print_integer+0x62>
./modm/ext/printf/printf.c:532
if ( !(flags & FLAGS_PRECISION) ) {
80016aa: 0525 lsls r5, r4, #20
80016ac: d419 bmi.n 80016e2 <print_integer+0x56>
./modm/ext/printf/printf.c:533
buf[len++] = '0';
80016ae: 2330 movs r3, #48 ; 0x30
80016b0: 2501 movs r5, #1
80016b2: f88d 3010 strb.w r3, [sp, #16]
./modm/ext/printf/printf.c:534
flags &= ~FLAGS_HASH;
80016b6: f024 0410 bic.w r4, r4, #16
print_integer_finalization():
./modm/ext/printf/printf.c:465
if (!(flags & FLAGS_LEFT)) {
80016ba: f014 0f02 tst.w r4, #2
80016be: a904 add r1, sp, #16
80016c0: d15a bne.n 8001778 <print_integer+0xec>
./modm/ext/printf/printf.c:466
if (width && (flags & FLAGS_ZEROPAD) && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
80016c2: f004 0301 and.w r3, r4, #1
80016c6: b147 cbz r7, 80016da <print_integer+0x4e>
80016c8: 2b00 cmp r3, #0
80016ca: d055 beq.n 8001778 <print_integer+0xec>
80016cc: f1ba 0f00 cmp.w sl, #0
80016d0: d102 bne.n 80016d8 <print_integer+0x4c>
80016d2: f014 0f0c tst.w r4, #12
80016d6: d000 beq.n 80016da <print_integer+0x4e>
./modm/ext/printf/printf.c:467
width--;
80016d8: 3f01 subs r7, #1
./modm/ext/printf/printf.c:469
while ((flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
80016da: 462a mov r2, r5
80016dc: b393 cbz r3, 8001744 <print_integer+0xb8>
./modm/ext/printf/printf.c:470
buf[len++] = '0';
80016de: 2330 movs r3, #48 ; 0x30
80016e0: e02c b.n 800173c <print_integer+0xb0>
print_integer():
./modm/ext/printf/printf.c:539
// We drop this flag this since either the alternative and regular modes of the specifier
// don't differ on 0 values, or (in the case of octal) we've already provided the special
// handling for this mode.
}
else if (base == BASE_HEX) {
80016e2: 2e10 cmp r6, #16
80016e4: d101 bne.n 80016ea <print_integer+0x5e>
./modm/ext/printf/printf.c:540
flags &= ~FLAGS_HASH;
80016e6: f024 0410 bic.w r4, r4, #16
./modm/ext/printf/printf.c:529
printf_size_t len = 0U;
80016ea: 2500 movs r5, #0
80016ec: e7e5 b.n 80016ba <print_integer+0x2e>
80016ee: f014 0f20 tst.w r4, #32
80016f2: bf14 ite ne
80016f4: 2341 movne r3, #65 ; 0x41
80016f6: 2361 moveq r3, #97 ; 0x61
80016f8: 2500 movs r5, #0
./modm/ext/printf/printf.c:548
}
}
else {
do {
const char digit = (char)(value % base);
buf[len++] = (char)(digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10);
80016fa: 3b0a subs r3, #10
80016fc: f10d 0b10 add.w fp, sp, #16
8001700: 9303 str r3, [sp, #12]
./modm/ext/printf/printf.c:547
const char digit = (char)(value % base);
8001702: 4641 mov r1, r8
8001704: 4632 mov r2, r6
8001706: 2300 movs r3, #0
8001708: 4648 mov r0, r9
800170a: f000 f94b bl 80019a4 <__aeabi_uldivmod>
./modm/ext/printf/printf.c:548
buf[len++] = (char)(digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10);
800170e: b253 sxtb r3, r2
8001710: b2d2 uxtb r2, r2
8001712: 2a09 cmp r2, #9
8001714: bf8a itet hi
8001716: 9a03 ldrhi r2, [sp, #12]
8001718: 3330 addls r3, #48 ; 0x30
800171a: 189b addhi r3, r3, r2
./modm/ext/printf/printf.c:550
value /= base;
} while (value && (len < PRINTF_INTEGER_BUFFER_SIZE));
800171c: 45b1 cmp r9, r6
./modm/ext/printf/printf.c:548
buf[len++] = (char)(digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10);
800171e: b2db uxtb r3, r3
./modm/ext/printf/printf.c:550
} while (value && (len < PRINTF_INTEGER_BUFFER_SIZE));
8001720: f178 0800 sbcs.w r8, r8, #0
./modm/ext/printf/printf.c:548
buf[len++] = (char)(digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10);
8001724: f105 0501 add.w r5, r5, #1
8001728: f80b 3b01 strb.w r3, [fp], #1
./modm/ext/printf/printf.c:550
} while (value && (len < PRINTF_INTEGER_BUFFER_SIZE));
800172c: d3c5 bcc.n 80016ba <print_integer+0x2e>
./modm/ext/printf/printf.c:550 (discriminator 1)
800172e: 2d20 cmp r5, #32
8001730: d0c3 beq.n 80016ba <print_integer+0x2e>
./modm/ext/printf/printf.c:549
value /= base;
8001732: 4681 mov r9, r0
8001734: 4688 mov r8, r1
8001736: e7e4 b.n 8001702 <print_integer+0x76>
print_integer_finalization():
./modm/ext/printf/printf.c:470
buf[len++] = '0';
8001738: 548b strb r3, [r1, r2]
800173a: 3201 adds r2, #1
./modm/ext/printf/printf.c:469
while ((flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
800173c: 4297 cmp r7, r2
800173e: d901 bls.n 8001744 <print_integer+0xb8>
8001740: 2a20 cmp r2, #32
8001742: d1f9 bne.n 8001738 <print_integer+0xac>
./modm/ext/printf/printf.c:475
buf[len++] = '0';
8001744: 2330 movs r3, #48 ; 0x30
8001746: e001 b.n 800174c <print_integer+0xc0>
8001748: 548b strb r3, [r1, r2]
800174a: 3201 adds r2, #1
./modm/ext/printf/printf.c:474
while ((len < precision) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
800174c: 9818 ldr r0, [sp, #96] ; 0x60
800174e: 4290 cmp r0, r2
8001750: d935 bls.n 80017be <print_integer+0x132>
8001752: 2a20 cmp r2, #32
8001754: d1f8 bne.n 8001748 <print_integer+0xbc>
./modm/ext/printf/printf.c:478
if (base == BASE_OCTAL && (len > unpadded_len)) {
8001756: 2e08 cmp r6, #8
8001758: d110 bne.n 800177c <print_integer+0xf0>
800175a: 2d20 cmp r5, #32
800175c: d03d beq.n 80017da <print_integer+0x14e>
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
800175e: 04a0 lsls r0, r4, #18
./modm/ext/printf/printf.c:480
flags &= ~FLAGS_HASH;
8001760: f024 0310 bic.w r3, r4, #16
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
8001764: d434 bmi.n 80017d0 <print_integer+0x144>
./modm/ext/printf/printf.c:480
flags &= ~FLAGS_HASH;
8001766: 461c mov r4, r3
./modm/ext/printf/printf.c:522
out_rev_(output, buf, len, width, flags);
8001768: 463b mov r3, r7
800176a: 9802 ldr r0, [sp, #8]
800176c: 9400 str r4, [sp, #0]
800176e: f7ff ff5d bl 800162c <out_rev_>
print_integer():
./modm/ext/printf/printf.c:554
}
print_integer_finalization(output, buf, len, negative, base, precision, width, flags);
}
8001772: b00d add sp, #52 ; 0x34
8001774: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
print_integer_finalization():
./modm/ext/printf/printf.c:554
8001778: 462a mov r2, r5
800177a: e7e3 b.n 8001744 <print_integer+0xb8>
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
800177c: f242 0310 movw r3, #8208 ; 0x2010
8001780: 421c tst r4, r3
8001782: d0f1 beq.n 8001768 <print_integer+0xdc>
./modm/ext/printf/printf.c:486
if (!(flags & FLAGS_PRECISION) && len && ((len == precision) || (len == width))) {
8001784: 0523 lsls r3, r4, #20
8001786: d530 bpl.n 80017ea <print_integer+0x15e>
./modm/ext/printf/printf.c:496
if ((base == BASE_HEX) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
8001788: 2e10 cmp r6, #16
800178a: f040 8095 bne.w 80018b8 <print_integer+0x22c>
800178e: 06a5 lsls r5, r4, #26
8001790: f100 808d bmi.w 80018ae <print_integer+0x222>
8001794: 2a1f cmp r2, #31
8001796: d8e7 bhi.n 8001768 <print_integer+0xdc>
8001798: 4623 mov r3, r4
./modm/ext/printf/printf.c:497
buf[len++] = 'x';
800179a: 2478 movs r4, #120 ; 0x78
800179c: f102 0030 add.w r0, r2, #48 ; 0x30
80017a0: 4468 add r0, sp
./modm/ext/printf/printf.c:503
buf[len++] = 'b';
80017a2: f800 4c20 strb.w r4, [r0, #-32]
80017a6: 461c mov r4, r3
80017a8: 3201 adds r2, #1
./modm/ext/printf/printf.c:505
if (len < PRINTF_INTEGER_BUFFER_SIZE) {
80017aa: 2a1f cmp r2, #31
80017ac: d8dc bhi.n 8001768 <print_integer+0xdc>
./modm/ext/printf/printf.c:506
buf[len++] = '0';
80017ae: 2030 movs r0, #48 ; 0x30
80017b0: f102 0330 add.w r3, r2, #48 ; 0x30
80017b4: 446b add r3, sp
80017b6: f803 0c20 strb.w r0, [r3, #-32]
80017ba: 3201 adds r2, #1
80017bc: e02f b.n 800181e <print_integer+0x192>
./modm/ext/printf/printf.c:478
if (base == BASE_OCTAL && (len > unpadded_len)) {
80017be: 2e08 cmp r6, #8
80017c0: d129 bne.n 8001816 <print_integer+0x18a>
80017c2: 4295 cmp r5, r2
80017c4: d227 bcs.n 8001816 <print_integer+0x18a>
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
80017c6: 04a0 lsls r0, r4, #18
./modm/ext/printf/printf.c:480
flags &= ~FLAGS_HASH;
80017c8: f024 0310 bic.w r3, r4, #16
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
80017cc: f140 8081 bpl.w 80018d2 <print_integer+0x246>
./modm/ext/printf/printf.c:486
if (!(flags & FLAGS_PRECISION) && len && ((len == precision) || (len == width))) {
80017d0: 0524 lsls r4, r4, #20
80017d2: f140 808f bpl.w 80018f4 <print_integer+0x268>
80017d6: 461c mov r4, r3
80017d8: e7e7 b.n 80017aa <print_integer+0x11e>
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
80017da: f242 0310 movw r3, #8208 ; 0x2010
80017de: 421c tst r4, r3
80017e0: d0c2 beq.n 8001768 <print_integer+0xdc>
./modm/ext/printf/printf.c:486
if (!(flags & FLAGS_PRECISION) && len && ((len == precision) || (len == width))) {
80017e2: 0520 lsls r0, r4, #20
80017e4: d4d0 bmi.n 8001788 <print_integer+0xfc>
80017e6: 2a00 cmp r2, #0
80017e8: d04c beq.n 8001884 <print_integer+0x1f8>
80017ea: 9b18 ldr r3, [sp, #96] ; 0x60
80017ec: 4293 cmp r3, r2
80017ee: d001 beq.n 80017f4 <print_integer+0x168>
80017f0: 4297 cmp r7, r2
80017f2: d1c9 bne.n 8001788 <print_integer+0xfc>
./modm/ext/printf/printf.c:489
if (unpadded_len < len) {
80017f4: 4295 cmp r5, r2
80017f6: d2c7 bcs.n 8001788 <print_integer+0xfc>
80017f8: 4623 mov r3, r4
./modm/ext/printf/printf.c:492
if (len && (base == BASE_HEX || base == BASE_BINARY) && (unpadded_len < len)) {
80017fa: 1e50 subs r0, r2, #1
80017fc: d01f beq.n 800183e <print_integer+0x1b2>
80017fe: 2e10 cmp r6, #16
8001800: d010 beq.n 8001824 <print_integer+0x198>
8001802: 2e02 cmp r6, #2
8001804: d162 bne.n 80018cc <print_integer+0x240>
8001806: 4285 cmp r5, r0
8001808: d25e bcs.n 80018c8 <print_integer+0x23c>
./modm/ext/printf/printf.c:493
len--; // ... and an extra one for 0x or 0b
800180a: 3a02 subs r2, #2
./modm/ext/printf/printf.c:503
buf[len++] = 'b';
800180c: f102 0030 add.w r0, r2, #48 ; 0x30
8001810: 2462 movs r4, #98 ; 0x62
8001812: 4468 add r0, sp
8001814: e7c5 b.n 80017a2 <print_integer+0x116>
./modm/ext/printf/printf.c:485
if (flags & (FLAGS_HASH | FLAGS_POINTER)) {
8001816: f242 0310 movw r3, #8208 ; 0x2010
800181a: 421c tst r4, r3
800181c: d1e1 bne.n 80017e2 <print_integer+0x156>
./modm/ext/printf/printf.c:510
if (len < PRINTF_INTEGER_BUFFER_SIZE) {
800181e: 2a1f cmp r2, #31
8001820: d91b bls.n 800185a <print_integer+0x1ce>
8001822: e7a1 b.n 8001768 <print_integer+0xdc>
./modm/ext/printf/printf.c:492
if (len && (base == BASE_HEX || base == BASE_BINARY) && (unpadded_len < len)) {
8001824: 4285 cmp r5, r0
./modm/ext/printf/printf.c:496
if ((base == BASE_HEX) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
8001826: f003 0420 and.w r4, r3, #32
800182a: bf2c ite cs
800182c: 4602 movcs r2, r0
./modm/ext/printf/printf.c:493
len--; // ... and an extra one for 0x or 0b
800182e: 3a02 subcc r2, #2
./modm/ext/printf/printf.c:496
if ((base == BASE_HEX) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
8001830: 2c00 cmp r4, #0
8001832: d0b2 beq.n 800179a <print_integer+0x10e>
./modm/ext/printf/printf.c:500
buf[len++] = 'X';
8001834: f102 0030 add.w r0, r2, #48 ; 0x30
8001838: 2458 movs r4, #88 ; 0x58
800183a: 4468 add r0, sp
800183c: e7b1 b.n 80017a2 <print_integer+0x116>
./modm/ext/printf/printf.c:496
if ((base == BASE_HEX) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
800183e: 2e10 cmp r6, #16
8001840: d118 bne.n 8001874 <print_integer+0x1e8>
8001842: f013 0f20 tst.w r3, #32
8001846: bf14 ite ne
8001848: 2258 movne r2, #88 ; 0x58
800184a: 2278 moveq r2, #120 ; 0x78
./modm/ext/printf/printf.c:497
buf[len++] = 'x';
800184c: f88d 2010 strb.w r2, [sp, #16]
./modm/ext/printf/printf.c:506
buf[len++] = '0';
8001850: 2230 movs r2, #48 ; 0x30
8001852: 461c mov r4, r3
8001854: f88d 2011 strb.w r2, [sp, #17]
8001858: 2202 movs r2, #2
./modm/ext/printf/printf.c:511
if (negative) {
800185a: f1ba 0f00 cmp.w sl, #0
800185e: d03a beq.n 80018d6 <print_integer+0x24a>
./modm/ext/printf/printf.c:512
buf[len++] = '-';
8001860: 202d movs r0, #45 ; 0x2d
8001862: f102 0330 add.w r3, r2, #48 ; 0x30
8001866: 446b add r3, sp
./modm/ext/printf/printf.c:518
buf[len++] = ' ';
8001868: f803 0c20 strb.w r0, [r3, #-32]
800186c: 3201 adds r2, #1
800186e: e77b b.n 8001768 <print_integer+0xdc>
./modm/ext/printf/printf.c:502
else if ((base == BASE_BINARY) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
8001870: 2262 movs r2, #98 ; 0x62
8001872: e7eb b.n 800184c <print_integer+0x1c0>
8001874: 2e02 cmp r6, #2
8001876: d0fb beq.n 8001870 <print_integer+0x1e4>
./modm/ext/printf/printf.c:506
buf[len++] = '0';
8001878: 2230 movs r2, #48 ; 0x30
800187a: 461c mov r4, r3
800187c: f88d 2010 strb.w r2, [sp, #16]
8001880: 2201 movs r2, #1
8001882: e7ea b.n 800185a <print_integer+0x1ce>
./modm/ext/printf/printf.c:496
if ((base == BASE_HEX) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
8001884: 2e10 cmp r6, #16
8001886: d10a bne.n 800189e <print_integer+0x212>
8001888: f014 0f20 tst.w r4, #32
800188c: bf14 ite ne
800188e: 2358 movne r3, #88 ; 0x58
8001890: 2378 moveq r3, #120 ; 0x78
./modm/ext/printf/printf.c:503
buf[len++] = 'b';
8001892: f88d 3010 strb.w r3, [sp, #16]
./modm/ext/printf/printf.c:506
buf[len++] = '0';
8001896: 2330 movs r3, #48 ; 0x30
8001898: f88d 3011 strb.w r3, [sp, #17]
800189c: e7dc b.n 8001858 <print_integer+0x1cc>
./modm/ext/printf/printf.c:502
else if ((base == BASE_BINARY) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
800189e: 2e02 cmp r6, #2
80018a0: d101 bne.n 80018a6 <print_integer+0x21a>
80018a2: 2362 movs r3, #98 ; 0x62
80018a4: e7f5 b.n 8001892 <print_integer+0x206>
./modm/ext/printf/printf.c:506
buf[len++] = '0';
80018a6: 2330 movs r3, #48 ; 0x30
80018a8: f88d 3010 strb.w r3, [sp, #16]
80018ac: e7e8 b.n 8001880 <print_integer+0x1f4>
./modm/ext/printf/printf.c:499
else if ((base == BASE_HEX) && (flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
80018ae: 2a1f cmp r2, #31
80018b0: f63f af5a bhi.w 8001768 <print_integer+0xdc>
80018b4: 4623 mov r3, r4
80018b6: e7bd b.n 8001834 <print_integer+0x1a8>
./modm/ext/printf/printf.c:502
else if ((base == BASE_BINARY) && (len < PRINTF_INTEGER_BUFFER_SIZE)) {
80018b8: 2e02 cmp r6, #2
80018ba: f47f af76 bne.w 80017aa <print_integer+0x11e>
80018be: 2a1f cmp r2, #31
80018c0: f63f af52 bhi.w 8001768 <print_integer+0xdc>
80018c4: 4623 mov r3, r4
80018c6: e7a1 b.n 800180c <print_integer+0x180>
./modm/ext/printf/printf.c:492
if (len && (base == BASE_HEX || base == BASE_BINARY) && (unpadded_len < len)) {
80018c8: 4602 mov r2, r0
80018ca: e79f b.n 800180c <print_integer+0x180>
80018cc: 461c mov r4, r3
80018ce: 4602 mov r2, r0
80018d0: e76b b.n 80017aa <print_integer+0x11e>
./modm/ext/printf/printf.c:480
flags &= ~FLAGS_HASH;
80018d2: 461c mov r4, r3
80018d4: e7a3 b.n 800181e <print_integer+0x192>
./modm/ext/printf/printf.c:514
else if (flags & FLAGS_PLUS) {
80018d6: 0760 lsls r0, r4, #29
80018d8: d504 bpl.n 80018e4 <print_integer+0x258>
./modm/ext/printf/printf.c:515
buf[len++] = '+'; // ignore the space if the '+' exists
80018da: f102 0330 add.w r3, r2, #48 ; 0x30
80018de: 202b movs r0, #43 ; 0x2b
80018e0: 446b add r3, sp
80018e2: e7c1 b.n 8001868 <print_integer+0x1dc>
./modm/ext/printf/printf.c:517
else if (flags & FLAGS_SPACE) {
80018e4: 0723 lsls r3, r4, #28
80018e6: f57f af3f bpl.w 8001768 <print_integer+0xdc>
./modm/ext/printf/printf.c:518
buf[len++] = ' ';
80018ea: f102 0330 add.w r3, r2, #48 ; 0x30
80018ee: 2020 movs r0, #32
80018f0: 446b add r3, sp
80018f2: e7b9 b.n 8001868 <print_integer+0x1dc>
./modm/ext/printf/printf.c:486
if (!(flags & FLAGS_PRECISION) && len && ((len == precision) || (len == width))) {
80018f4: 9818 ldr r0, [sp, #96] ; 0x60
80018f6: 4290 cmp r0, r2
80018f8: f43f af7f beq.w 80017fa <print_integer+0x16e>
80018fc: 4297 cmp r7, r2
80018fe: f47f af6a bne.w 80017d6 <print_integer+0x14a>
8001902: e77a b.n 80017fa <print_integer+0x16e>
08001904 <__aeabi_ldivmod>:
__aeabi_ldivmod():
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:186
8001904: b97b cbnz r3, 8001926 <__aeabi_ldivmod+0x22>
8001906: b972 cbnz r2, 8001926 <__aeabi_ldivmod+0x22>
8001908: 2900 cmp r1, #0
800190a: bfbe ittt lt
800190c: 2000 movlt r0, #0
800190e: f04f 4100 movlt.w r1, #2147483648 ; 0x80000000
8001912: e006 blt.n 8001922 <__aeabi_ldivmod+0x1e>
8001914: bf08 it eq
8001916: 2800 cmpeq r0, #0
8001918: bf1c itt ne
800191a: f06f 4100 mvnne.w r1, #2147483648 ; 0x80000000
800191e: f04f 30ff movne.w r0, #4294967295 ; 0xffffffff
8001922: f000 b9cd b.w 8001cc0 <__aeabi_idiv0>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:188
8001926: f1ad 0c08 sub.w ip, sp, #8
800192a: e96d ce04 strd ip, lr, [sp, #-16]!
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:189
800192e: 2900 cmp r1, #0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:190
8001930: db09 blt.n 8001946 <__aeabi_ldivmod+0x42>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:191
8001932: 2b00 cmp r3, #0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:192
8001934: db1a blt.n 800196c <__aeabi_ldivmod+0x68>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:194
8001936: f000 f84d bl 80019d4 <__udivmoddi4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:196
800193a: f8dd e004 ldr.w lr, [sp, #4]
800193e: e9dd 2302 ldrd r2, r3, [sp, #8]
8001942: b004 add sp, #16
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:197
8001944: 4770 bx lr
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:201
8001946: 4240 negs r0, r0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:202
8001948: eb61 0141 sbc.w r1, r1, r1, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:203
800194c: 2b00 cmp r3, #0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:204
800194e: db1b blt.n 8001988 <__aeabi_ldivmod+0x84>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:206
8001950: f000 f840 bl 80019d4 <__udivmoddi4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:208
8001954: f8dd e004 ldr.w lr, [sp, #4]
8001958: e9dd 2302 ldrd r2, r3, [sp, #8]
800195c: b004 add sp, #16
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:209
800195e: 4240 negs r0, r0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:210
8001960: eb61 0141 sbc.w r1, r1, r1, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:211
8001964: 4252 negs r2, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:212
8001966: eb63 0343 sbc.w r3, r3, r3, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:213
800196a: 4770 bx lr
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:217
800196c: 4252 negs r2, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:218
800196e: eb63 0343 sbc.w r3, r3, r3, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:220
8001972: f000 f82f bl 80019d4 <__udivmoddi4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:222
8001976: f8dd e004 ldr.w lr, [sp, #4]
800197a: e9dd 2302 ldrd r2, r3, [sp, #8]
800197e: b004 add sp, #16
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:223
8001980: 4240 negs r0, r0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:224
8001982: eb61 0141 sbc.w r1, r1, r1, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:225
8001986: 4770 bx lr
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:229
8001988: 4252 negs r2, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:230
800198a: eb63 0343 sbc.w r3, r3, r3, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:232
800198e: f000 f821 bl 80019d4 <__udivmoddi4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:233
8001992: f8dd e004 ldr.w lr, [sp, #4]
8001996: e9dd 2302 ldrd r2, r3, [sp, #8]
800199a: b004 add sp, #16
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:234
800199c: 4252 negs r2, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:235
800199e: eb63 0343 sbc.w r3, r3, r3, lsl #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:236
80019a2: 4770 bx lr
080019a4 <__aeabi_uldivmod>:
__aeabi_uldivmod():
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:254
80019a4: b953 cbnz r3, 80019bc <__aeabi_uldivmod+0x18>
80019a6: b94a cbnz r2, 80019bc <__aeabi_uldivmod+0x18>
80019a8: 2900 cmp r1, #0
80019aa: bf08 it eq
80019ac: 2800 cmpeq r0, #0
80019ae: bf1c itt ne
80019b0: f04f 31ff movne.w r1, #4294967295 ; 0xffffffff
80019b4: f04f 30ff movne.w r0, #4294967295 ; 0xffffffff
80019b8: f000 b982 b.w 8001cc0 <__aeabi_idiv0>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:256
80019bc: f1ad 0c08 sub.w ip, sp, #8
80019c0: e96d ce04 strd ip, lr, [sp, #-16]!
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:258
80019c4: f000 f806 bl 80019d4 <__udivmoddi4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:259
80019c8: f8dd e004 ldr.w lr, [sp, #4]
80019cc: e9dd 2302 ldrd r2, r3, [sp, #8]
80019d0: b004 add sp, #16
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/bpabi.S:260
80019d2: 4770 bx lr
080019d4 <__udivmoddi4>:
__udivmoddi4():
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:996
80019d4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
80019d8: 9d09 ldr r5, [sp, #36] ; 0x24
80019da: 460c mov r4, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1044
80019dc: 2b00 cmp r3, #0
80019de: d14d bne.n 8001a7c <__udivmoddi4+0xa8>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1046
80019e0: 428a cmp r2, r1
80019e2: 460f mov r7, r1
80019e4: 4684 mov ip, r0
80019e6: 4696 mov lr, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1050
80019e8: fab2 f382 clz r3, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1046
80019ec: d960 bls.n 8001ab0 <__udivmoddi4+0xdc>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1052
80019ee: b14b cbz r3, 8001a04 <__udivmoddi4+0x30>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1057
80019f0: fa02 fe03 lsl.w lr, r2, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1058
80019f4: f1c3 0220 rsb r2, r3, #32
80019f8: 409f lsls r7, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1059
80019fa: fa00 fc03 lsl.w ip, r0, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1058
80019fe: fa20 f202 lsr.w r2, r0, r2
8001a02: 4317 orrs r7, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062
8001a04: ea4f 461e mov.w r6, lr, lsr #16
8001a08: fa1f f48e uxth.w r4, lr
8001a0c: ea4f 421c mov.w r2, ip, lsr #16
8001a10: fbb7 f1f6 udiv r1, r7, r6
8001a14: fb06 7711 mls r7, r6, r1, r7
8001a18: fb01 f004 mul.w r0, r1, r4
8001a1c: ea42 4207 orr.w r2, r2, r7, lsl #16
8001a20: 4290 cmp r0, r2
8001a22: d908 bls.n 8001a36 <__udivmoddi4+0x62>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062 (discriminator 1)
8001a24: eb1e 0202 adds.w r2, lr, r2
8001a28: f101 37ff add.w r7, r1, #4294967295 ; 0xffffffff
8001a2c: d202 bcs.n 8001a34 <__udivmoddi4+0x60>
8001a2e: 4290 cmp r0, r2
8001a30: f200 8131 bhi.w 8001c96 <__udivmoddi4+0x2c2>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062
8001a34: 4639 mov r1, r7
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062 (discriminator 7)
8001a36: 1a12 subs r2, r2, r0
8001a38: fa1f fc8c uxth.w ip, ip
8001a3c: fbb2 f0f6 udiv r0, r2, r6
8001a40: fb06 2210 mls r2, r6, r0, r2
8001a44: fb00 f404 mul.w r4, r0, r4
8001a48: ea4c 4c02 orr.w ip, ip, r2, lsl #16
8001a4c: 4564 cmp r4, ip
8001a4e: d908 bls.n 8001a62 <__udivmoddi4+0x8e>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062 (discriminator 8)
8001a50: eb1e 0c0c adds.w ip, lr, ip
8001a54: f100 32ff add.w r2, r0, #4294967295 ; 0xffffffff
8001a58: d202 bcs.n 8001a60 <__udivmoddi4+0x8c>
8001a5a: 4564 cmp r4, ip
8001a5c: f200 811e bhi.w 8001c9c <__udivmoddi4+0x2c8>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062
8001a60: 4610 mov r0, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062 (discriminator 14)
8001a62: ea40 4001 orr.w r0, r0, r1, lsl #16
8001a66: ebac 0c04 sub.w ip, ip, r4
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1063 (discriminator 14)
8001a6a: 2100 movs r1, #0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1109 (discriminator 15)
8001a6c: b125 cbz r5, 8001a78 <__udivmoddi4+0xa4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1111
8001a6e: fa2c f303 lsr.w r3, ip, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1112
8001a72: 2200 movs r2, #0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1113
8001a74: e9c5 3200 strd r3, r2, [r5]
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1205
8001a78: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1120
8001a7c: 428b cmp r3, r1
8001a7e: d905 bls.n 8001a8c <__udivmoddi4+0xb8>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1128
8001a80: b10d cbz r5, 8001a86 <__udivmoddi4+0xb2>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1132
8001a82: e9c5 0100 strd r0, r1, [r5]
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180
8001a86: 2100 movs r1, #0
8001a88: 4608 mov r0, r1
8001a8a: e7f5 b.n 8001a78 <__udivmoddi4+0xa4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1139
8001a8c: fab3 f183 clz r1, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1140
8001a90: 2900 cmp r1, #0
8001a92: d14d bne.n 8001b30 <__udivmoddi4+0x15c>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1150
8001a94: 42a3 cmp r3, r4
8001a96: f0c0 80f3 bcc.w 8001c80 <__udivmoddi4+0x2ac>
8001a9a: 4290 cmp r0, r2
8001a9c: f080 80f0 bcs.w 8001c80 <__udivmoddi4+0x2ac>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1006
8001aa0: 4606 mov r6, r0
8001aa2: 4623 mov r3, r4
8001aa4: 4608 mov r0, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1160
8001aa6: 2d00 cmp r5, #0
8001aa8: d0e6 beq.n 8001a78 <__udivmoddi4+0xa4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1164
8001aaa: e9c5 6300 strd r6, r3, [r5]
8001aae: e7e3 b.n 8001a78 <__udivmoddi4+0xa4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1076
8001ab0: 2b00 cmp r3, #0
8001ab2: f040 80a3 bne.w 8001bfc <__udivmoddi4+0x228>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1085
8001ab6: 1a8a subs r2, r1, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104
8001ab8: ea4f 471e mov.w r7, lr, lsr #16
8001abc: fa1f f68e uxth.w r6, lr
8001ac0: 2101 movs r1, #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 15)
8001ac2: fbb2 f4f7 udiv r4, r2, r7
8001ac6: fb07 2014 mls r0, r7, r4, r2
8001aca: ea4f 421c mov.w r2, ip, lsr #16
8001ace: ea42 4200 orr.w r2, r2, r0, lsl #16
8001ad2: fb06 f004 mul.w r0, r6, r4
8001ad6: 4290 cmp r0, r2
8001ad8: d90f bls.n 8001afa <__udivmoddi4+0x126>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 1)
8001ada: eb1e 0202 adds.w r2, lr, r2
8001ade: f104 38ff add.w r8, r4, #4294967295 ; 0xffffffff
8001ae2: bf2c ite cs
8001ae4: f04f 0901 movcs.w r9, #1
8001ae8: f04f 0900 movcc.w r9, #0
8001aec: 4290 cmp r0, r2
8001aee: d903 bls.n 8001af8 <__udivmoddi4+0x124>
8001af0: f1b9 0f00 cmp.w r9, #0
8001af4: f000 80cc beq.w 8001c90 <__udivmoddi4+0x2bc>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104
8001af8: 4644 mov r4, r8
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 7)
8001afa: 1a12 subs r2, r2, r0
8001afc: fa1f fc8c uxth.w ip, ip
8001b00: fbb2 f0f7 udiv r0, r2, r7
8001b04: fb07 2210 mls r2, r7, r0, r2
8001b08: fb00 f606 mul.w r6, r0, r6
8001b0c: ea4c 4c02 orr.w ip, ip, r2, lsl #16
8001b10: 4566 cmp r6, ip
8001b12: d908 bls.n 8001b26 <__udivmoddi4+0x152>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 8)
8001b14: eb1e 0c0c adds.w ip, lr, ip
8001b18: f100 32ff add.w r2, r0, #4294967295 ; 0xffffffff
8001b1c: d202 bcs.n 8001b24 <__udivmoddi4+0x150>
8001b1e: 4566 cmp r6, ip
8001b20: f200 80b3 bhi.w 8001c8a <__udivmoddi4+0x2b6>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104
8001b24: 4610 mov r0, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 14)
8001b26: ebac 0c06 sub.w ip, ip, r6
8001b2a: ea40 4004 orr.w r0, r0, r4, lsl #16
8001b2e: e79d b.n 8001a6c <__udivmoddi4+0x98>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1172
8001b30: f1c1 0620 rsb r6, r1, #32
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1174
8001b34: 408b lsls r3, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1177
8001b36: fa04 fe01 lsl.w lr, r4, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1174
8001b3a: fa22 f706 lsr.w r7, r2, r6
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1177
8001b3e: fa20 fc06 lsr.w ip, r0, r6
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1176
8001b42: 40f4 lsrs r4, r6
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1175
8001b44: 408a lsls r2, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1174
8001b46: 431f orrs r7, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1177
8001b48: ea4e 030c orr.w r3, lr, ip
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1178
8001b4c: fa00 fe01 lsl.w lr, r0, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180
8001b50: ea4f 4817 mov.w r8, r7, lsr #16
8001b54: ea4f 4913 mov.w r9, r3, lsr #16
8001b58: fa1f fc87 uxth.w ip, r7
8001b5c: fbb4 f0f8 udiv r0, r4, r8
8001b60: fb08 4410 mls r4, r8, r0, r4
8001b64: ea49 4404 orr.w r4, r9, r4, lsl #16
8001b68: fb00 f90c mul.w r9, r0, ip
8001b6c: 45a1 cmp r9, r4
8001b6e: d90e bls.n 8001b8e <__udivmoddi4+0x1ba>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180 (discriminator 1)
8001b70: 193c adds r4, r7, r4
8001b72: f100 3aff add.w sl, r0, #4294967295 ; 0xffffffff
8001b76: bf2c ite cs
8001b78: f04f 0b01 movcs.w fp, #1
8001b7c: f04f 0b00 movcc.w fp, #0
8001b80: 45a1 cmp r9, r4
8001b82: d903 bls.n 8001b8c <__udivmoddi4+0x1b8>
8001b84: f1bb 0f00 cmp.w fp, #0
8001b88: f000 808b beq.w 8001ca2 <__udivmoddi4+0x2ce>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180
8001b8c: 4650 mov r0, sl
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180 (discriminator 7)
8001b8e: eba4 0409 sub.w r4, r4, r9
8001b92: fa1f f983 uxth.w r9, r3
8001b96: fbb4 f3f8 udiv r3, r4, r8
8001b9a: fb08 4413 mls r4, r8, r3, r4
8001b9e: fb03 fc0c mul.w ip, r3, ip
8001ba2: ea49 4404 orr.w r4, r9, r4, lsl #16
8001ba6: 45a4 cmp ip, r4
8001ba8: d906 bls.n 8001bb8 <__udivmoddi4+0x1e4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180 (discriminator 8)
8001baa: 193c adds r4, r7, r4
8001bac: f103 38ff add.w r8, r3, #4294967295 ; 0xffffffff
8001bb0: d201 bcs.n 8001bb6 <__udivmoddi4+0x1e2>
8001bb2: 45a4 cmp ip, r4
8001bb4: d87b bhi.n 8001cae <__udivmoddi4+0x2da>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180
8001bb6: 4643 mov r3, r8
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180 (discriminator 14)
8001bb8: ea43 4000 orr.w r0, r3, r0, lsl #16
8001bbc: eba4 040c sub.w r4, r4, ip
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1181 (discriminator 14)
8001bc0: fba0 9802 umull r9, r8, r0, r2
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1183 (discriminator 14)
8001bc4: 4544 cmp r4, r8
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1181 (discriminator 14)
8001bc6: 46cc mov ip, r9
8001bc8: 4643 mov r3, r8
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1183 (discriminator 14)
8001bca: d302 bcc.n 8001bd2 <__udivmoddi4+0x1fe>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1183 (discriminator 1)
8001bcc: d106 bne.n 8001bdc <__udivmoddi4+0x208>
8001bce: 45ce cmp lr, r9
8001bd0: d204 bcs.n 8001bdc <__udivmoddi4+0x208>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1185
8001bd2: 3801 subs r0, #1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1186
8001bd4: ebb9 0c02 subs.w ip, r9, r2
8001bd8: eb68 0307 sbc.w r3, r8, r7
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1192
8001bdc: 2d00 cmp r5, #0
8001bde: d06c beq.n 8001cba <__udivmoddi4+0x2e6>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1194
8001be0: ebbe 020c subs.w r2, lr, ip
8001be4: eb64 0403 sbc.w r4, r4, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1195
8001be8: fa22 f301 lsr.w r3, r2, r1
8001bec: fa04 f606 lsl.w r6, r4, r6
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1196
8001bf0: 40cc lsrs r4, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1203
8001bf2: 2100 movs r1, #0
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1195
8001bf4: 431e orrs r6, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1197
8001bf6: e9c5 6400 strd r6, r4, [r5]
8001bfa: e73d b.n 8001a78 <__udivmoddi4+0xa4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1094
8001bfc: fa02 fe03 lsl.w lr, r2, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1092
8001c00: f1c3 0120 rsb r1, r3, #32
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1096
8001c04: fa04 f203 lsl.w r2, r4, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1097
8001c08: fa00 fc03 lsl.w ip, r0, r3
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1095
8001c0c: 40cc lsrs r4, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099
8001c0e: ea4f 471e mov.w r7, lr, lsr #16
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1096
8001c12: fa20 f101 lsr.w r1, r0, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099
8001c16: fa1f f68e uxth.w r6, lr
8001c1a: fbb4 f0f7 udiv r0, r4, r7
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1096
8001c1e: 430a orrs r2, r1
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099
8001c20: fb07 4410 mls r4, r7, r0, r4
8001c24: 0c11 lsrs r1, r2, #16
8001c26: ea41 4104 orr.w r1, r1, r4, lsl #16
8001c2a: fb00 f406 mul.w r4, r0, r6
8001c2e: 428c cmp r4, r1
8001c30: d90e bls.n 8001c50 <__udivmoddi4+0x27c>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099 (discriminator 1)
8001c32: eb1e 0101 adds.w r1, lr, r1
8001c36: f100 38ff add.w r8, r0, #4294967295 ; 0xffffffff
8001c3a: bf2c ite cs
8001c3c: f04f 0901 movcs.w r9, #1
8001c40: f04f 0900 movcc.w r9, #0
8001c44: 428c cmp r4, r1
8001c46: d902 bls.n 8001c4e <__udivmoddi4+0x27a>
8001c48: f1b9 0f00 cmp.w r9, #0
8001c4c: d02c beq.n 8001ca8 <__udivmoddi4+0x2d4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099
8001c4e: 4640 mov r0, r8
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099 (discriminator 7)
8001c50: 1b09 subs r1, r1, r4
8001c52: b292 uxth r2, r2
8001c54: fbb1 f4f7 udiv r4, r1, r7
8001c58: fb07 1114 mls r1, r7, r4, r1
8001c5c: ea42 4201 orr.w r2, r2, r1, lsl #16
8001c60: fb04 f106 mul.w r1, r4, r6
8001c64: 4291 cmp r1, r2
8001c66: d907 bls.n 8001c78 <__udivmoddi4+0x2a4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099 (discriminator 8)
8001c68: eb1e 0202 adds.w r2, lr, r2
8001c6c: f104 38ff add.w r8, r4, #4294967295 ; 0xffffffff
8001c70: d201 bcs.n 8001c76 <__udivmoddi4+0x2a2>
8001c72: 4291 cmp r1, r2
8001c74: d81e bhi.n 8001cb4 <__udivmoddi4+0x2e0>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099
8001c76: 4644 mov r4, r8
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099 (discriminator 14)
8001c78: 1a52 subs r2, r2, r1
8001c7a: ea44 4100 orr.w r1, r4, r0, lsl #16
8001c7e: e720 b.n 8001ac2 <__udivmoddi4+0xee>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1153
8001c80: 1a86 subs r6, r0, r2
8001c82: eb64 0303 sbc.w r3, r4, r3
8001c86: 2001 movs r0, #1
8001c88: e70d b.n 8001aa6 <__udivmoddi4+0xd2>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 12)
8001c8a: 44f4 add ip, lr
8001c8c: 3802 subs r0, #2
8001c8e: e74a b.n 8001b26 <__udivmoddi4+0x152>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1104 (discriminator 5)
8001c90: 3c02 subs r4, #2
8001c92: 4472 add r2, lr
8001c94: e731 b.n 8001afa <__udivmoddi4+0x126>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062 (discriminator 5)
8001c96: 3902 subs r1, #2
8001c98: 4472 add r2, lr
8001c9a: e6cc b.n 8001a36 <__udivmoddi4+0x62>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1062 (discriminator 12)
8001c9c: 44f4 add ip, lr
8001c9e: 3802 subs r0, #2
8001ca0: e6df b.n 8001a62 <__udivmoddi4+0x8e>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180 (discriminator 5)
8001ca2: 3802 subs r0, #2
8001ca4: 443c add r4, r7
8001ca6: e772 b.n 8001b8e <__udivmoddi4+0x1ba>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099 (discriminator 5)
8001ca8: 3802 subs r0, #2
8001caa: 4471 add r1, lr
8001cac: e7d0 b.n 8001c50 <__udivmoddi4+0x27c>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1180 (discriminator 12)
8001cae: 3b02 subs r3, #2
8001cb0: 443c add r4, r7
8001cb2: e781 b.n 8001bb8 <__udivmoddi4+0x1e4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1099 (discriminator 12)
8001cb4: 3c02 subs r4, #2
8001cb6: 4472 add r2, lr
8001cb8: e7de b.n 8001c78 <__udivmoddi4+0x2a4>
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/libgcc2.c:1203
8001cba: 4629 mov r1, r5
8001cbc: e6dc b.n 8001a78 <__udivmoddi4+0xa4>
8001cbe: bf00 nop
08001cc0 <__aeabi_idiv0>:
__aeabi_ldiv0():
/build/gcc-arm-none-eabi-w8dugU/gcc-arm-none-eabi-12.2.rel1/build/arm-none-eabi/thumb/v8-m.main+fp/hard/libgcc/../../../../../../libgcc/config/arm/lib1funcs.S:1466
8001cc0: 4770 bx lr
8001cc2: bf00 nop
08001cc4 <memset>:
memset():
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:41
8001cc4: b570 push {r4, r5, r6, lr}
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:51
8001cc6: 0786 lsls r6, r0, #30
8001cc8: d048 beq.n 8001d5c <memset+0x98>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:53
8001cca: 1e54 subs r4, r2, #1
8001ccc: 2a00 cmp r2, #0
8001cce: d03f beq.n 8001d50 <memset+0x8c>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:54
8001cd0: b2ca uxtb r2, r1
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:42
8001cd2: 4603 mov r3, r0
8001cd4: e001 b.n 8001cda <memset+0x16>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:53
8001cd6: 3c01 subs r4, #1
8001cd8: d33a bcc.n 8001d50 <memset+0x8c>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:54
8001cda: f803 2b01 strb.w r2, [r3], #1
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:51
8001cde: 079d lsls r5, r3, #30
8001ce0: d1f9 bne.n 8001cd6 <memset+0x12>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:59
8001ce2: 2c03 cmp r4, #3
8001ce4: d92d bls.n 8001d42 <memset+0x7e>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:48
8001ce6: b2cd uxtb r5, r1
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:72
8001ce8: 2c0f cmp r4, #15
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:66
8001cea: ea45 2505 orr.w r5, r5, r5, lsl #8
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:67
8001cee: ea45 4505 orr.w r5, r5, r5, lsl #16
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:72
8001cf2: d936 bls.n 8001d62 <memset+0x9e>
8001cf4: f1a4 0c10 sub.w ip, r4, #16
8001cf8: f103 0e20 add.w lr, r3, #32
8001cfc: f103 0210 add.w r2, r3, #16
8001d00: f02c 060f bic.w r6, ip, #15
8001d04: ea4f 1c1c mov.w ip, ip, lsr #4
8001d08: 44b6 add lr, r6
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:75
8001d0a: e942 5504 strd r5, r5, [r2, #-16]
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:77
8001d0e: e942 5502 strd r5, r5, [r2, #-8]
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:72
8001d12: 3210 adds r2, #16
8001d14: 4572 cmp r2, lr
8001d16: d1f8 bne.n 8001d0a <memset+0x46>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:77
8001d18: f10c 0201 add.w r2, ip, #1
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:81
8001d1c: f014 0f0c tst.w r4, #12
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:78
8001d20: f004 0c0f and.w ip, r4, #15
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:77
8001d24: eb03 1202 add.w r2, r3, r2, lsl #4
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:81
8001d28: d013 beq.n 8001d52 <memset+0x8e>
8001d2a: f1ac 0304 sub.w r3, ip, #4
8001d2e: f023 0303 bic.w r3, r3, #3
8001d32: 3304 adds r3, #4
8001d34: 4413 add r3, r2
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:83
8001d36: f842 5b04 str.w r5, [r2], #4
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:81
8001d3a: 4293 cmp r3, r2
8001d3c: d1fb bne.n 8001d36 <memset+0x72>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:84
8001d3e: f00c 0403 and.w r4, ip, #3
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:92
8001d42: b12c cbz r4, 8001d50 <memset+0x8c>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:54
8001d44: b2ca uxtb r2, r1
8001d46: 441c add r4, r3
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:93
8001d48: f803 2b01 strb.w r2, [r3], #1
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:92
8001d4c: 429c cmp r4, r3
8001d4e: d1fb bne.n 8001d48 <memset+0x84>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:96
8001d50: bd70 pop {r4, r5, r6, pc}
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:81
8001d52: 4664 mov r4, ip
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:77
8001d54: 4613 mov r3, r2
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:92
8001d56: 2c00 cmp r4, #0
8001d58: d1f4 bne.n 8001d44 <memset+0x80>
8001d5a: e7f9 b.n 8001d50 <memset+0x8c>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:42
8001d5c: 4603 mov r3, r0
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:51
8001d5e: 4614 mov r4, r2
8001d60: e7bf b.n 8001ce2 <memset+0x1e>
/build/newlib-pB30de/newlib-3.3.0/build_nano/arm-none-eabi/thumb/v8-m.main+fp/hard/newlib/libc/string/../../../../../../../../newlib/libc/string/memset.c:72
8001d62: 461a mov r2, r3
8001d64: 46a4 mov ip, r4
8001d66: e7e0 b.n 8001d2a <memset+0x66>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment