ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 1 1 .cpu cortex-m4 2 .arch armv7e-m 3 .fpu fpv4-sp-d16 4 .eabi_attribute 27, 1 5 .eabi_attribute 28, 1 6 .eabi_attribute 20, 1 7 .eabi_attribute 21, 1 8 .eabi_attribute 23, 3 9 .eabi_attribute 24, 1 10 .eabi_attribute 25, 1 11 .eabi_attribute 26, 1 12 .eabi_attribute 30, 6 13 .eabi_attribute 34, 1 14 .eabi_attribute 18, 4 15 .file "soft_uart.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .section .text.uart1_send_msg,"ax",%progbits 20 .align 1 21 .global uart1_send_msg 22 .syntax unified 23 .thumb 24 .thumb_func 26 uart1_send_msg: 27 .LFB238: 28 .file 1 "Core/Src/soft_uart.c" 1:Core/Src/soft_uart.c **** #include "soft_uart.h" 2:Core/Src/soft_uart.c **** #include "stm32f4xx_hal_uart.h" 3:Core/Src/soft_uart.c **** #include "string.h" 4:Core/Src/soft_uart.c **** #include "soft_flash.h" 5:Core/Src/soft_uart.c **** #include "soft_crc.h" 6:Core/Src/soft_uart.c **** 7:Core/Src/soft_uart.c **** extern UART_HandleTypeDef huart1; 8:Core/Src/soft_uart.c **** void uart1_send_msg(uint8_t *data, uint8_t size) 9:Core/Src/soft_uart.c **** { 29 .loc 1 9 1 30 .cfi_startproc 31 @ args = 0, pretend = 0, frame = 8 32 @ frame_needed = 1, uses_anonymous_args = 0 33 0000 80B5 push {r7, lr} 34 .LCFI0: 35 .cfi_def_cfa_offset 8 36 .cfi_offset 7, -8 37 .cfi_offset 14, -4 38 0002 82B0 sub sp, sp, #8 39 .LCFI1: 40 .cfi_def_cfa_offset 16 41 0004 00AF add r7, sp, #0 42 .LCFI2: 43 .cfi_def_cfa_register 7 44 0006 7860 str r0, [r7, #4] 45 0008 0B46 mov r3, r1 46 000a FB70 strb r3, [r7, #3] 10:Core/Src/soft_uart.c **** static uint32_t send_time = 0; 11:Core/Src/soft_uart.c **** 12:Core/Src/soft_uart.c **** send_time = HAL_GetTick(); ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 2 47 .loc 1 12 17 48 000c FFF7FEFF bl HAL_GetTick 49 0010 0346 mov r3, r0 50 .loc 1 12 15 51 0012 0A4A ldr r2, .L3 52 0014 1360 str r3, [r2] 13:Core/Src/soft_uart.c **** while (HAL_GetTick() - send_time < 1) 53 .loc 1 13 11 54 0016 00BF nop 55 .L2: 56 .loc 1 13 12 discriminator 1 57 0018 FFF7FEFF bl HAL_GetTick 58 001c 0246 mov r2, r0 59 .loc 1 13 38 discriminator 1 60 001e 074B ldr r3, .L3 61 0020 1B68 ldr r3, [r3] 62 .loc 1 13 11 discriminator 1 63 0022 9A42 cmp r2, r3 64 0024 F8D0 beq .L2 14:Core/Src/soft_uart.c **** ; 15:Core/Src/soft_uart.c **** HAL_UART_Transmit_DMA(&huart1, data, size); 65 .loc 1 15 5 66 0026 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 67 0028 9BB2 uxth r3, r3 68 002a 1A46 mov r2, r3 69 002c 7968 ldr r1, [r7, #4] 70 002e 0448 ldr r0, .L3+4 71 0030 FFF7FEFF bl HAL_UART_Transmit_DMA 16:Core/Src/soft_uart.c **** } 72 .loc 1 16 1 73 0034 00BF nop 74 0036 0837 adds r7, r7, #8 75 .LCFI3: 76 .cfi_def_cfa_offset 8 77 0038 BD46 mov sp, r7 78 .LCFI4: 79 .cfi_def_cfa_register 13 80 @ sp needed 81 003a 80BD pop {r7, pc} 82 .L4: 83 .align 2 84 .L3: 85 003c 00000000 .word send_time.0 86 0040 00000000 .word huart1 87 .cfi_endproc 88 .LFE238: 90 .global FMU_uart_buf 91 .section .bss.FMU_uart_buf,"aw",%nobits 92 .align 2 95 FMU_uart_buf: 96 0000 00000000 .space 256 96 00000000 96 00000000 96 00000000 96 00000000 97 .global update 98 .section .bss.update,"aw",%nobits ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 3 99 .align 2 102 update: 103 0000 00000000 .space 257 103 00000000 103 00000000 103 00000000 103 00000000 104 .section .text.USER_UART_IRQHandler,"ax",%progbits 105 .align 1 106 .global USER_UART_IRQHandler 107 .syntax unified 108 .thumb 109 .thumb_func 111 USER_UART_IRQHandler: 112 .LFB239: 17:Core/Src/soft_uart.c **** 18:Core/Src/soft_uart.c **** uint8_t FMU_uart_buf[MAX_UART_BUF] = {0}; 19:Core/Src/soft_uart.c **** Update update; 20:Core/Src/soft_uart.c **** void USER_UART_IRQHandler(UART_HandleTypeDef *huart) 21:Core/Src/soft_uart.c **** { 113 .loc 1 21 1 114 .cfi_startproc 115 @ args = 0, pretend = 0, frame = 16 116 @ frame_needed = 1, uses_anonymous_args = 0 117 0000 80B5 push {r7, lr} 118 .LCFI5: 119 .cfi_def_cfa_offset 8 120 .cfi_offset 7, -8 121 .cfi_offset 14, -4 122 0002 84B0 sub sp, sp, #16 123 .LCFI6: 124 .cfi_def_cfa_offset 24 125 0004 00AF add r7, sp, #0 126 .LCFI7: 127 .cfi_def_cfa_register 7 128 0006 7860 str r0, [r7, #4] 22:Core/Src/soft_uart.c **** uint32_t recv_count = 0; 129 .loc 1 22 14 130 0008 0023 movs r3, #0 131 000a FB60 str r3, [r7, #12] 23:Core/Src/soft_uart.c **** if (huart == &huart1) 132 .loc 1 23 8 133 000c 7B68 ldr r3, [r7, #4] 134 000e 244A ldr r2, .L9 135 0010 9342 cmp r3, r2 136 0012 40D1 bne .L8 24:Core/Src/soft_uart.c **** { 25:Core/Src/soft_uart.c **** if (RESET != __HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) 137 .loc 1 25 22 138 0014 7B68 ldr r3, [r7, #4] 139 0016 1B68 ldr r3, [r3] 140 0018 1B68 ldr r3, [r3] 141 001a 03F01003 and r3, r3, #16 142 .loc 1 25 12 143 001e 102B cmp r3, #16 144 0020 39D1 bne .L8 145 .LBB2: ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 4 26:Core/Src/soft_uart.c **** { 27:Core/Src/soft_uart.c **** __HAL_UART_CLEAR_IDLEFLAG(huart); 146 .loc 1 27 13 147 0022 0023 movs r3, #0 148 0024 BB60 str r3, [r7, #8] 149 0026 7B68 ldr r3, [r7, #4] 150 0028 1B68 ldr r3, [r3] 151 002a 1B68 ldr r3, [r3] 152 002c BB60 str r3, [r7, #8] 153 002e 7B68 ldr r3, [r7, #4] 154 0030 1B68 ldr r3, [r3] 155 0032 5B68 ldr r3, [r3, #4] 156 0034 BB60 str r3, [r7, #8] 157 0036 BB68 ldr r3, [r7, #8] 158 .LBE2: 28:Core/Src/soft_uart.c **** HAL_UART_AbortReceive(huart); 159 .loc 1 28 13 160 0038 7868 ldr r0, [r7, #4] 161 003a FFF7FEFF bl HAL_UART_AbortReceive 29:Core/Src/soft_uart.c **** recv_count = MAX_UART_BUF - __HAL_DMA_GET_COUNTER(huart->hdmarx); 162 .loc 1 29 41 163 003e 7B68 ldr r3, [r7, #4] 164 0040 9B6B ldr r3, [r3, #56] 165 0042 1B68 ldr r3, [r3] 166 0044 5B68 ldr r3, [r3, #4] 167 .loc 1 29 24 168 0046 C3F58073 rsb r3, r3, #256 169 004a FB60 str r3, [r7, #12] 30:Core/Src/soft_uart.c **** 31:Core/Src/soft_uart.c **** // 检测是否是新的一包数据 32:Core/Src/soft_uart.c **** if (FMU_uart_buf[0] == 0xFE && FMU_uart_buf[4] == 204 && update.usebuf_flag == false) 170 .loc 1 32 29 171 004c 154B ldr r3, .L9+4 172 004e 1B78 ldrb r3, [r3] @ zero_extendqisi2 173 .loc 1 32 16 174 0050 FE2B cmp r3, #254 175 0052 14D1 bne .L7 176 .loc 1 32 56 discriminator 1 177 0054 134B ldr r3, .L9+4 178 0056 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 179 .loc 1 32 41 discriminator 1 180 0058 CC2B cmp r3, #204 181 005a 10D1 bne .L7 182 .loc 1 32 76 discriminator 2 183 005c 124B ldr r3, .L9+8 184 005e 93F80031 ldrb r3, [r3, #256] @ zero_extendqisi2 185 .loc 1 32 89 discriminator 2 186 0062 83F00103 eor r3, r3, #1 187 0066 DBB2 uxtb r3, r3 188 .loc 1 32 67 discriminator 2 189 0068 002B cmp r3, #0 190 006a 08D0 beq .L7 33:Core/Src/soft_uart.c **** { 34:Core/Src/soft_uart.c **** memcpy(update.data, FMU_uart_buf, recv_count); 191 .loc 1 34 17 192 006c FA68 ldr r2, [r7, #12] 193 006e 0D49 ldr r1, .L9+4 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 5 194 0070 0D48 ldr r0, .L9+8 195 0072 FFF7FEFF bl memcpy 35:Core/Src/soft_uart.c **** update.usebuf_flag = true; 196 .loc 1 35 36 197 0076 0C4B ldr r3, .L9+8 198 0078 0122 movs r2, #1 199 007a 83F80021 strb r2, [r3, #256] 200 .L7: 36:Core/Src/soft_uart.c **** } 37:Core/Src/soft_uart.c **** 38:Core/Src/soft_uart.c **** memset(FMU_uart_buf, 0, MAX_UART_BUF); 201 .loc 1 38 13 202 007e 4FF48072 mov r2, #256 203 0082 0021 movs r1, #0 204 0084 0748 ldr r0, .L9+4 205 0086 FFF7FEFF bl memset 39:Core/Src/soft_uart.c **** HAL_UART_Receive_DMA(huart, FMU_uart_buf, MAX_UART_BUF); 206 .loc 1 39 13 207 008a 4FF48072 mov r2, #256 208 008e 0549 ldr r1, .L9+4 209 0090 7868 ldr r0, [r7, #4] 210 0092 FFF7FEFF bl HAL_UART_Receive_DMA 211 .L8: 40:Core/Src/soft_uart.c **** } 41:Core/Src/soft_uart.c **** } 42:Core/Src/soft_uart.c **** } 212 .loc 1 42 1 213 0096 00BF nop 214 0098 1037 adds r7, r7, #16 215 .LCFI8: 216 .cfi_def_cfa_offset 8 217 009a BD46 mov sp, r7 218 .LCFI9: 219 .cfi_def_cfa_register 13 220 @ sp needed 221 009c 80BD pop {r7, pc} 222 .L10: 223 009e 00BF .align 2 224 .L9: 225 00a0 00000000 .word huart1 226 00a4 00000000 .word FMU_uart_buf 227 00a8 00000000 .word update 228 .cfi_endproc 229 .LFE239: 231 .global msg_buf 232 .section .bss.msg_buf,"aw",%nobits 233 .align 2 236 msg_buf: 237 0000 00000000 .space 64 237 00000000 237 00000000 237 00000000 237 00000000 238 .section .text.Update_ack_fmu,"ax",%progbits 239 .align 1 240 .global Update_ack_fmu 241 .syntax unified ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 6 242 .thumb 243 .thumb_func 245 Update_ack_fmu: 246 .LFB240: 43:Core/Src/soft_uart.c **** 44:Core/Src/soft_uart.c **** uint8_t msg_buf[64] = {0}; 45:Core/Src/soft_uart.c **** void Update_ack_fmu(uint8_t msg_id, uint8_t *ackbuf) 46:Core/Src/soft_uart.c **** { 247 .loc 1 46 1 248 .cfi_startproc 249 @ args = 0, pretend = 0, frame = 16 250 @ frame_needed = 1, uses_anonymous_args = 0 251 0000 80B5 push {r7, lr} 252 .LCFI10: 253 .cfi_def_cfa_offset 8 254 .cfi_offset 7, -8 255 .cfi_offset 14, -4 256 0002 84B0 sub sp, sp, #16 257 .LCFI11: 258 .cfi_def_cfa_offset 24 259 0004 00AF add r7, sp, #0 260 .LCFI12: 261 .cfi_def_cfa_register 7 262 0006 0346 mov r3, r0 263 0008 3960 str r1, [r7] 264 000a FB71 strb r3, [r7, #7] 47:Core/Src/soft_uart.c **** 48:Core/Src/soft_uart.c **** int index = 0; 265 .loc 1 48 9 266 000c 0023 movs r3, #0 267 000e FB60 str r3, [r7, #12] 49:Core/Src/soft_uart.c **** msg_buf[index++] = 0xFE; 268 .loc 1 49 18 269 0010 FB68 ldr r3, [r7, #12] 270 0012 5A1C adds r2, r3, #1 271 0014 FA60 str r2, [r7, #12] 272 .loc 1 49 22 273 0016 2D4A ldr r2, .L12 274 0018 FE21 movs r1, #254 275 001a D154 strb r1, [r2, r3] 50:Core/Src/soft_uart.c **** msg_buf[index++] = 0; 276 .loc 1 50 18 277 001c FB68 ldr r3, [r7, #12] 278 001e 5A1C adds r2, r3, #1 279 0020 FA60 str r2, [r7, #12] 280 .loc 1 50 22 281 0022 2A4A ldr r2, .L12 282 0024 0021 movs r1, #0 283 0026 D154 strb r1, [r2, r3] 51:Core/Src/soft_uart.c **** msg_buf[index++] = 0; 284 .loc 1 51 18 285 0028 FB68 ldr r3, [r7, #12] 286 002a 5A1C adds r2, r3, #1 287 002c FA60 str r2, [r7, #12] 288 .loc 1 51 22 289 002e 274A ldr r2, .L12 290 0030 0021 movs r1, #0 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 7 291 0032 D154 strb r1, [r2, r3] 52:Core/Src/soft_uart.c **** msg_buf[index++] = 0x00; 292 .loc 1 52 18 293 0034 FB68 ldr r3, [r7, #12] 294 0036 5A1C adds r2, r3, #1 295 0038 FA60 str r2, [r7, #12] 296 .loc 1 52 22 297 003a 244A ldr r2, .L12 298 003c 0021 movs r1, #0 299 003e D154 strb r1, [r2, r3] 53:Core/Src/soft_uart.c **** msg_buf[index++] = 204; 300 .loc 1 53 18 301 0040 FB68 ldr r3, [r7, #12] 302 0042 5A1C adds r2, r3, #1 303 0044 FA60 str r2, [r7, #12] 304 .loc 1 53 22 305 0046 214A ldr r2, .L12 306 0048 CC21 movs r1, #204 307 004a D154 strb r1, [r2, r3] 54:Core/Src/soft_uart.c **** msg_buf[index++] = 21; 308 .loc 1 54 18 309 004c FB68 ldr r3, [r7, #12] 310 004e 5A1C adds r2, r3, #1 311 0050 FA60 str r2, [r7, #12] 312 .loc 1 54 22 313 0052 1E4A ldr r2, .L12 314 0054 1521 movs r1, #21 315 0056 D154 strb r1, [r2, r3] 55:Core/Src/soft_uart.c **** 56:Core/Src/soft_uart.c **** msg_buf[index++] = msg_id; 316 .loc 1 56 18 317 0058 FB68 ldr r3, [r7, #12] 318 005a 5A1C adds r2, r3, #1 319 005c FA60 str r2, [r7, #12] 320 .loc 1 56 22 321 005e 1B49 ldr r1, .L12 322 0060 FA79 ldrb r2, [r7, #7] 323 0062 CA54 strb r2, [r1, r3] 57:Core/Src/soft_uart.c **** msg_buf[index++] = *ackbuf; 324 .loc 1 57 18 325 0064 FB68 ldr r3, [r7, #12] 326 0066 5A1C adds r2, r3, #1 327 0068 FA60 str r2, [r7, #12] 328 .loc 1 57 24 329 006a 3A68 ldr r2, [r7] 330 006c 1178 ldrb r1, [r2] @ zero_extendqisi2 331 .loc 1 57 22 332 006e 174A ldr r2, .L12 333 0070 D154 strb r1, [r2, r3] 58:Core/Src/soft_uart.c **** msg_buf[index++] = *(ackbuf + 1); 334 .loc 1 58 18 335 0072 FB68 ldr r3, [r7, #12] 336 0074 5A1C adds r2, r3, #1 337 0076 FA60 str r2, [r7, #12] 338 .loc 1 58 22 339 0078 3A68 ldr r2, [r7] 340 007a 5178 ldrb r1, [r2, #1] @ zero_extendqisi2 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 8 341 007c 134A ldr r2, .L12 342 007e D154 strb r1, [r2, r3] 59:Core/Src/soft_uart.c **** msg_buf[index++] = 1; 343 .loc 1 59 18 344 0080 FB68 ldr r3, [r7, #12] 345 0082 5A1C adds r2, r3, #1 346 0084 FA60 str r2, [r7, #12] 347 .loc 1 59 22 348 0086 114A ldr r2, .L12 349 0088 0121 movs r1, #1 350 008a D154 strb r1, [r2, r3] 60:Core/Src/soft_uart.c **** 61:Core/Src/soft_uart.c **** msg_buf[1] = index - 6; 351 .loc 1 61 24 352 008c FB68 ldr r3, [r7, #12] 353 008e DBB2 uxtb r3, r3 354 0090 063B subs r3, r3, #6 355 0092 DAB2 uxtb r2, r3 356 .loc 1 61 16 357 0094 0D4B ldr r3, .L12 358 0096 5A70 strb r2, [r3, #1] 62:Core/Src/soft_uart.c **** uint16_t uart_crc = Get_Crc16(msg_buf, index); 359 .loc 1 62 25 360 0098 FB68 ldr r3, [r7, #12] 361 009a 9BB2 uxth r3, r3 362 009c 1946 mov r1, r3 363 009e 0B48 ldr r0, .L12 364 00a0 FFF7FEFF bl Get_Crc16 365 00a4 0346 mov r3, r0 366 .loc 1 62 14 367 00a6 7B81 strh r3, [r7, #10] @ movhi 63:Core/Src/soft_uart.c **** memcpy(&msg_buf[index], &uart_crc, 2); 368 .loc 1 63 12 369 00a8 FB68 ldr r3, [r7, #12] 370 00aa 084A ldr r2, .L12 371 00ac 1344 add r3, r3, r2 372 00ae 7A89 ldrh r2, [r7, #10] 373 .loc 1 63 5 374 00b0 1A80 strh r2, [r3] @ unaligned 64:Core/Src/soft_uart.c **** index += 2; 375 .loc 1 64 11 376 00b2 FB68 ldr r3, [r7, #12] 377 00b4 0233 adds r3, r3, #2 378 00b6 FB60 str r3, [r7, #12] 65:Core/Src/soft_uart.c **** 66:Core/Src/soft_uart.c **** uart1_send_msg(msg_buf, index); 379 .loc 1 66 5 380 00b8 FB68 ldr r3, [r7, #12] 381 00ba DBB2 uxtb r3, r3 382 00bc 1946 mov r1, r3 383 00be 0348 ldr r0, .L12 384 00c0 FFF7FEFF bl uart1_send_msg 67:Core/Src/soft_uart.c **** } 385 .loc 1 67 1 386 00c4 00BF nop 387 00c6 1037 adds r7, r7, #16 388 .LCFI13: ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 9 389 .cfi_def_cfa_offset 8 390 00c8 BD46 mov sp, r7 391 .LCFI14: 392 .cfi_def_cfa_register 13 393 @ sp needed 394 00ca 80BD pop {r7, pc} 395 .L13: 396 .align 2 397 .L12: 398 00cc 00000000 .word msg_buf 399 .cfi_endproc 400 .LFE240: 402 .section .text.check_usart_is_ok,"ax",%progbits 403 .align 1 404 .global check_usart_is_ok 405 .syntax unified 406 .thumb 407 .thumb_func 409 check_usart_is_ok: 410 .LFB241: 68:Core/Src/soft_uart.c **** 69:Core/Src/soft_uart.c **** bool check_usart_is_ok(void) 70:Core/Src/soft_uart.c **** { 411 .loc 1 70 1 412 .cfi_startproc 413 @ args = 0, pretend = 0, frame = 0 414 @ frame_needed = 1, uses_anonymous_args = 0 415 @ link register save eliminated. 416 0000 80B4 push {r7} 417 .LCFI15: 418 .cfi_def_cfa_offset 4 419 .cfi_offset 7, -4 420 0002 00AF add r7, sp, #0 421 .LCFI16: 422 .cfi_def_cfa_register 7 71:Core/Src/soft_uart.c **** if (huart1.gState == HAL_UART_STATE_READY && (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != RES 423 .loc 1 71 15 424 0004 0D4B ldr r3, .L19 425 0006 93F83D30 ldrb r3, [r3, #61] 426 000a DBB2 uxtb r3, r3 427 .loc 1 71 8 428 000c 202B cmp r3, #32 429 000e 0DD1 bne .L15 430 .loc 1 71 51 discriminator 1 431 0010 0A4B ldr r3, .L19 432 0012 1B68 ldr r3, [r3] 433 0014 1B68 ldr r3, [r3] 434 0016 03F04003 and r3, r3, #64 435 .loc 1 71 47 discriminator 1 436 001a 402B cmp r3, #64 437 001c 06D1 bne .L15 438 .loc 1 71 106 discriminator 2 439 001e 074B ldr r3, .L19 440 0020 1B68 ldr r3, [r3] 441 0022 1B68 ldr r3, [r3] 442 0024 03F08003 and r3, r3, #128 443 .loc 1 71 103 discriminator 2 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 10 444 0028 802B cmp r3, #128 445 002a 01D0 beq .L18 446 .L15: 72:Core/Src/soft_uart.c **** { 73:Core/Src/soft_uart.c **** } 74:Core/Src/soft_uart.c **** else 75:Core/Src/soft_uart.c **** { 76:Core/Src/soft_uart.c **** return false; 447 .loc 1 76 16 448 002c 0023 movs r3, #0 449 002e 00E0 b .L17 450 .L18: 77:Core/Src/soft_uart.c **** } 78:Core/Src/soft_uart.c **** return true; 451 .loc 1 78 12 452 0030 0123 movs r3, #1 453 .L17: 79:Core/Src/soft_uart.c **** } 454 .loc 1 79 1 455 0032 1846 mov r0, r3 456 0034 BD46 mov sp, r7 457 .LCFI17: 458 .cfi_def_cfa_register 13 459 @ sp needed 460 0036 5DF8047B ldr r7, [sp], #4 461 .LCFI18: 462 .cfi_restore 7 463 .cfi_def_cfa_offset 0 464 003a 7047 bx lr 465 .L20: 466 .align 2 467 .L19: 468 003c 00000000 .word huart1 469 .cfi_endproc 470 .LFE241: 472 .global addr_offset 473 .section .bss.addr_offset,"aw",%nobits 474 .align 2 477 addr_offset: 478 0000 00000000 .space 4 479 .global cur_pack_num 480 .section .bss.cur_pack_num,"aw",%nobits 481 .align 2 484 cur_pack_num: 485 0000 00000000 .space 4 486 .global update_complete 487 .section .bss.update_complete,"aw",%nobits 490 update_complete: 491 0000 00 .space 1 492 .section .text.update_function,"ax",%progbits 493 .align 1 494 .global update_function 495 .syntax unified 496 .thumb 497 .thumb_func 499 update_function: 500 .LFB242: ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 11 80:Core/Src/soft_uart.c **** 81:Core/Src/soft_uart.c **** uint32_t addr_offset = 0; 82:Core/Src/soft_uart.c **** uint32_t cur_pack_num = 0; 83:Core/Src/soft_uart.c **** bool update_complete = false; 84:Core/Src/soft_uart.c **** void update_function(void) 85:Core/Src/soft_uart.c **** { 501 .loc 1 85 1 502 .cfi_startproc 503 @ args = 0, pretend = 0, frame = 8 504 @ frame_needed = 1, uses_anonymous_args = 0 505 0000 80B5 push {r7, lr} 506 .LCFI19: 507 .cfi_def_cfa_offset 8 508 .cfi_offset 7, -8 509 .cfi_offset 14, -4 510 0002 82B0 sub sp, sp, #8 511 .LCFI20: 512 .cfi_def_cfa_offset 16 513 0004 00AF add r7, sp, #0 514 .LCFI21: 515 .cfi_def_cfa_register 7 86:Core/Src/soft_uart.c **** uint16_t crc = Get_Crc16(update.data, (uint16_t)update.data[LEN] + 2 + 6); 516 .loc 1 86 64 517 0006 594B ldr r3, .L39 518 0008 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 519 000a 9BB2 uxth r3, r3 520 .loc 1 86 20 521 000c 0833 adds r3, r3, #8 522 000e 9BB2 uxth r3, r3 523 0010 1946 mov r1, r3 524 0012 5648 ldr r0, .L39 525 0014 FFF7FEFF bl Get_Crc16 526 0018 0346 mov r3, r0 527 001a FB80 strh r3, [r7, #6] @ movhi 87:Core/Src/soft_uart.c **** int temp_32t = 0; 528 .loc 1 87 9 529 001c 0023 movs r3, #0 530 001e 3B60 str r3, [r7] 88:Core/Src/soft_uart.c **** 89:Core/Src/soft_uart.c **** if (crc != 0 || check_usart_is_ok() != true) 531 .loc 1 89 8 532 0020 FB88 ldrh r3, [r7, #6] 533 0022 002B cmp r3, #0 534 0024 07D1 bne .L22 535 .loc 1 89 21 discriminator 1 536 0026 FFF7FEFF bl check_usart_is_ok 537 002a 0346 mov r3, r0 538 .loc 1 89 41 discriminator 1 539 002c 83F00103 eor r3, r3, #1 540 0030 DBB2 uxtb r3, r3 541 .loc 1 89 18 discriminator 1 542 0032 002B cmp r3, #0 543 0034 04D0 beq .L23 544 .L22: 90:Core/Src/soft_uart.c **** { 91:Core/Src/soft_uart.c **** update.usebuf_flag = false; 545 .loc 1 91 28 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 12 546 0036 4D4B ldr r3, .L39 547 0038 0022 movs r2, #0 548 003a 83F80021 strb r2, [r3, #256] 549 003e 92E0 b .L21 550 .L23: 92:Core/Src/soft_uart.c **** return; 93:Core/Src/soft_uart.c **** } 94:Core/Src/soft_uart.c **** 95:Core/Src/soft_uart.c **** switch (update.data[MSGID_ID]) 551 .loc 1 95 24 552 0040 4A4B ldr r3, .L39 553 0042 5B79 ldrb r3, [r3, #5] @ zero_extendqisi2 554 .loc 1 95 5 555 0044 CA2B cmp r3, #202 556 0046 61D0 beq .L25 557 0048 CA2B cmp r3, #202 558 004a 7BDC bgt .L35 559 004c C82B cmp r3, #200 560 004e 02D0 beq .L27 561 0050 C92B cmp r3, #201 562 0052 16D0 beq .L28 96:Core/Src/soft_uart.c **** { 97:Core/Src/soft_uart.c **** case UPDATE_START: 98:Core/Src/soft_uart.c **** memcpy(&temp_32t, &update.data[PAYLOAD], 4); 99:Core/Src/soft_uart.c **** if (temp_32t < 512000) // 500kb 避免把FMU固件刷到pmu 100:Core/Src/soft_uart.c **** { 101:Core/Src/soft_uart.c **** temp_32t = 0; 102:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_START, (uint8_t *)&temp_32t); 103:Core/Src/soft_uart.c **** addr_offset = 0; 104:Core/Src/soft_uart.c **** cur_pack_num = 1; 105:Core/Src/soft_uart.c **** } 106:Core/Src/soft_uart.c **** break; 107:Core/Src/soft_uart.c **** case UPDATE_ING: 108:Core/Src/soft_uart.c **** if (cur_pack_num == update.data[PAYLOAD] + update.data[PAYLOAD + 1] * 256) 109:Core/Src/soft_uart.c **** { 110:Core/Src/soft_uart.c **** temp_32t = Flash_WriteData(FLASH_APP_ADDR + addr_offset, (uint16_t *)&update.data[PAYLO 111:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 112:Core/Src/soft_uart.c **** { 113:Core/Src/soft_uart.c **** cur_pack_num++; 114:Core/Src/soft_uart.c **** addr_offset += update.data[LEN] - 2; 115:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_ING, &update.data[PAYLOAD]); 116:Core/Src/soft_uart.c **** } 117:Core/Src/soft_uart.c **** } 118:Core/Src/soft_uart.c **** else if(cur_pack_num > update.data[PAYLOAD] + update.data[PAYLOAD + 1] * 256) 119:Core/Src/soft_uart.c **** { 120:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_ING, &update.data[PAYLOAD]); 121:Core/Src/soft_uart.c **** } 122:Core/Src/soft_uart.c **** break; 123:Core/Src/soft_uart.c **** case UPDATE_END: 124:Core/Src/soft_uart.c **** temp_32t = 0; 125:Core/Src/soft_uart.c **** if(update_complete != true) 126:Core/Src/soft_uart.c **** { 127:Core/Src/soft_uart.c **** update_complete = wirte_update_flag(); 128:Core/Src/soft_uart.c **** if(update_complete == true) 129:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_END, (uint8_t *)&temp_32t); 130:Core/Src/soft_uart.c **** HAL_Delay(50); 131:Core/Src/soft_uart.c **** } ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 13 132:Core/Src/soft_uart.c **** break; 133:Core/Src/soft_uart.c **** 134:Core/Src/soft_uart.c **** default: 135:Core/Src/soft_uart.c **** break; 563 .loc 1 135 9 564 0054 76E0 b .L35 565 .L27: 566 0056 454B ldr r3, .L39 567 0058 D3F80630 ldr r3, [r3, #6] @ unaligned 98:Core/Src/soft_uart.c **** if (temp_32t < 512000) // 500kb 避免把FMU固件刷到pmu 568 .loc 1 98 9 569 005c 3B60 str r3, [r7] 99:Core/Src/soft_uart.c **** { 570 .loc 1 99 22 571 005e 3B68 ldr r3, [r7] 99:Core/Src/soft_uart.c **** { 572 .loc 1 99 12 573 0060 B3F5FA2F cmp r3, #512000 574 0064 70DA bge .L36 101:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_START, (uint8_t *)&temp_32t); 575 .loc 1 101 22 576 0066 0023 movs r3, #0 577 0068 3B60 str r3, [r7] 102:Core/Src/soft_uart.c **** addr_offset = 0; 578 .loc 1 102 13 579 006a 3B46 mov r3, r7 580 006c 1946 mov r1, r3 581 006e C820 movs r0, #200 582 0070 FFF7FEFF bl Update_ack_fmu 103:Core/Src/soft_uart.c **** cur_pack_num = 1; 583 .loc 1 103 25 584 0074 3E4B ldr r3, .L39+4 585 0076 0022 movs r2, #0 586 0078 1A60 str r2, [r3] 104:Core/Src/soft_uart.c **** } 587 .loc 1 104 26 588 007a 3E4B ldr r3, .L39+8 589 007c 0122 movs r2, #1 590 007e 1A60 str r2, [r3] 106:Core/Src/soft_uart.c **** case UPDATE_ING: 591 .loc 1 106 9 592 0080 62E0 b .L36 593 .L28: 108:Core/Src/soft_uart.c **** { 594 .loc 1 108 40 595 0082 3A4B ldr r3, .L39 596 0084 9B79 ldrb r3, [r3, #6] @ zero_extendqisi2 597 0086 1A46 mov r2, r3 108:Core/Src/soft_uart.c **** { 598 .loc 1 108 63 599 0088 384B ldr r3, .L39 600 008a DB79 ldrb r3, [r3, #7] @ zero_extendqisi2 108:Core/Src/soft_uart.c **** { 601 .loc 1 108 77 602 008c 1B02 lsls r3, r3, #8 108:Core/Src/soft_uart.c **** { 603 .loc 1 108 50 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 14 604 008e 1344 add r3, r3, r2 108:Core/Src/soft_uart.c **** { 605 .loc 1 108 26 606 0090 384A ldr r2, .L39+8 607 0092 1268 ldr r2, [r2] 108:Core/Src/soft_uart.c **** { 608 .loc 1 108 12 609 0094 9342 cmp r3, r2 610 0096 28D1 bne .L31 110:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 611 .loc 1 110 24 612 0098 354B ldr r3, .L39+4 613 009a 1B68 ldr r3, [r3] 614 009c 03F10063 add r3, r3, #134217728 615 00a0 03F50033 add r3, r3, #131072 110:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 616 .loc 1 110 121 617 00a4 314A ldr r2, .L39 618 00a6 5278 ldrb r2, [r2, #1] @ zero_extendqisi2 110:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 619 .loc 1 110 127 620 00a8 023A subs r2, r2, #2 110:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 621 .loc 1 110 132 622 00aa D10F lsrs r1, r2, #31 623 00ac 0A44 add r2, r2, r1 624 00ae 5210 asrs r2, r2, #1 110:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 625 .loc 1 110 24 626 00b0 92B2 uxth r2, r2 627 00b2 3149 ldr r1, .L39+12 628 00b4 1846 mov r0, r3 629 00b6 FFF7FEFF bl Flash_WriteData 630 00ba 0346 mov r3, r0 110:Core/Src/soft_uart.c **** if (temp_32t == WRITE_SUCCESS) 631 .loc 1 110 22 632 00bc 3B60 str r3, [r7] 111:Core/Src/soft_uart.c **** { 633 .loc 1 111 26 634 00be 3B68 ldr r3, [r7] 111:Core/Src/soft_uart.c **** { 635 .loc 1 111 16 636 00c0 032B cmp r3, #3 637 00c2 43D1 bne .L37 113:Core/Src/soft_uart.c **** addr_offset += update.data[LEN] - 2; 638 .loc 1 113 29 639 00c4 2B4B ldr r3, .L39+8 640 00c6 1B68 ldr r3, [r3] 641 00c8 0133 adds r3, r3, #1 642 00ca 2A4A ldr r2, .L39+8 643 00cc 1360 str r3, [r2] 114:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_ING, &update.data[PAYLOAD]); 644 .loc 1 114 43 645 00ce 274B ldr r3, .L39 646 00d0 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 114:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_ING, &update.data[PAYLOAD]); 647 .loc 1 114 29 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 15 648 00d2 1A46 mov r2, r3 649 00d4 264B ldr r3, .L39+4 650 00d6 1B68 ldr r3, [r3] 651 00d8 1344 add r3, r3, r2 652 00da 023B subs r3, r3, #2 653 00dc 244A ldr r2, .L39+4 654 00de 1360 str r3, [r2] 115:Core/Src/soft_uart.c **** } 655 .loc 1 115 17 656 00e0 2649 ldr r1, .L39+16 657 00e2 C920 movs r0, #201 658 00e4 FFF7FEFF bl Update_ack_fmu 122:Core/Src/soft_uart.c **** case UPDATE_END: 659 .loc 1 122 9 660 00e8 30E0 b .L37 661 .L31: 118:Core/Src/soft_uart.c **** { 662 .loc 1 118 43 663 00ea 204B ldr r3, .L39 664 00ec 9B79 ldrb r3, [r3, #6] @ zero_extendqisi2 665 00ee 1A46 mov r2, r3 118:Core/Src/soft_uart.c **** { 666 .loc 1 118 66 667 00f0 1E4B ldr r3, .L39 668 00f2 DB79 ldrb r3, [r3, #7] @ zero_extendqisi2 118:Core/Src/soft_uart.c **** { 669 .loc 1 118 80 670 00f4 1B02 lsls r3, r3, #8 118:Core/Src/soft_uart.c **** { 671 .loc 1 118 53 672 00f6 1344 add r3, r3, r2 673 00f8 1A46 mov r2, r3 118:Core/Src/soft_uart.c **** { 674 .loc 1 118 30 675 00fa 1E4B ldr r3, .L39+8 676 00fc 1B68 ldr r3, [r3] 118:Core/Src/soft_uart.c **** { 677 .loc 1 118 16 678 00fe 9A42 cmp r2, r3 679 0100 24D2 bcs .L37 120:Core/Src/soft_uart.c **** } 680 .loc 1 120 13 681 0102 1E49 ldr r1, .L39+16 682 0104 C920 movs r0, #201 683 0106 FFF7FEFF bl Update_ack_fmu 122:Core/Src/soft_uart.c **** case UPDATE_END: 684 .loc 1 122 9 685 010a 1FE0 b .L37 686 .L25: 124:Core/Src/soft_uart.c **** if(update_complete != true) 687 .loc 1 124 18 688 010c 0023 movs r3, #0 689 010e 3B60 str r3, [r7] 125:Core/Src/soft_uart.c **** { 690 .loc 1 125 28 691 0110 1B4B ldr r3, .L39+20 692 0112 1B78 ldrb r3, [r3] @ zero_extendqisi2 ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 16 693 0114 83F00103 eor r3, r3, #1 694 0118 DBB2 uxtb r3, r3 125:Core/Src/soft_uart.c **** { 695 .loc 1 125 11 696 011a 002B cmp r3, #0 697 011c 18D0 beq .L38 127:Core/Src/soft_uart.c **** if(update_complete == true) 698 .loc 1 127 31 699 011e FFF7FEFF bl wirte_update_flag 700 0122 0346 mov r3, r0 701 0124 1A46 mov r2, r3 127:Core/Src/soft_uart.c **** if(update_complete == true) 702 .loc 1 127 29 703 0126 164B ldr r3, .L39+20 704 0128 1A70 strb r2, [r3] 128:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_END, (uint8_t *)&temp_32t); 705 .loc 1 128 32 706 012a 154B ldr r3, .L39+20 707 012c 1B78 ldrb r3, [r3] @ zero_extendqisi2 128:Core/Src/soft_uart.c **** Update_ack_fmu(UPDATE_END, (uint8_t *)&temp_32t); 708 .loc 1 128 15 709 012e 002B cmp r3, #0 710 0130 04D0 beq .L34 129:Core/Src/soft_uart.c **** HAL_Delay(50); 711 .loc 1 129 17 712 0132 3B46 mov r3, r7 713 0134 1946 mov r1, r3 714 0136 CA20 movs r0, #202 715 0138 FFF7FEFF bl Update_ack_fmu 716 .L34: 130:Core/Src/soft_uart.c **** } 717 .loc 1 130 13 718 013c 3220 movs r0, #50 719 013e FFF7FEFF bl HAL_Delay 132:Core/Src/soft_uart.c **** 720 .loc 1 132 9 721 0142 05E0 b .L38 722 .L35: 723 .loc 1 135 9 724 0144 00BF nop 725 0146 04E0 b .L30 726 .L36: 106:Core/Src/soft_uart.c **** case UPDATE_ING: 727 .loc 1 106 9 728 0148 00BF nop 729 014a 02E0 b .L30 730 .L37: 122:Core/Src/soft_uart.c **** case UPDATE_END: 731 .loc 1 122 9 732 014c 00BF nop 733 014e 00E0 b .L30 734 .L38: 132:Core/Src/soft_uart.c **** 735 .loc 1 132 9 736 0150 00BF nop 737 .L30: 136:Core/Src/soft_uart.c **** } ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 17 137:Core/Src/soft_uart.c **** update.usebuf_flag = false; 738 .loc 1 137 24 discriminator 3 739 0152 064B ldr r3, .L39 740 0154 0022 movs r2, #0 741 0156 83F80021 strb r2, [r3, #256] 138:Core/Src/soft_uart.c **** memset(update.data, 0, MAX_UART_BUF); 742 .loc 1 138 5 discriminator 3 743 015a 4FF48072 mov r2, #256 744 015e 0021 movs r1, #0 745 0160 0248 ldr r0, .L39 746 0162 FFF7FEFF bl memset 747 .L21: 139:Core/Src/soft_uart.c **** }... 748 .loc 1 139 1 749 0166 0837 adds r7, r7, #8 750 .LCFI22: 751 .cfi_def_cfa_offset 8 752 0168 BD46 mov sp, r7 753 .LCFI23: 754 .cfi_def_cfa_register 13 755 @ sp needed 756 016a 80BD pop {r7, pc} 757 .L40: 758 .align 2 759 .L39: 760 016c 00000000 .word update 761 0170 00000000 .word addr_offset 762 0174 00000000 .word cur_pack_num 763 0178 08000000 .word update+8 764 017c 06000000 .word update+6 765 0180 00000000 .word update_complete 766 .cfi_endproc 767 .LFE242: 769 .section .bss.send_time.0,"aw",%nobits 770 .align 2 773 send_time.0: 774 0000 00000000 .space 4 775 .text 776 .Letext0: 777 .file 2 "d:\\arm-gcc\\arm-none-eabi\\include\\machine\\_default_types.h" 778 .file 3 "d:\\arm-gcc\\arm-none-eabi\\include\\sys\\_stdint.h" 779 .file 4 "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h" 780 .file 5 "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h" 781 .file 6 "Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h" 782 .file 7 "Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h" 783 .file 8 "Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h" 784 .file 9 "Core/Inc/soft_uart.h" ARM GAS C:\Users\10728\AppData\Local\Temp\cc82yckV.s page 18 DEFINED SYMBOLS *ABS*:00000000 soft_uart.c C:\Users\10728\AppData\Local\Temp\cc82yckV.s:20 .text.uart1_send_msg:00000000 $t C:\Users\10728\AppData\Local\Temp\cc82yckV.s:26 .text.uart1_send_msg:00000000 uart1_send_msg C:\Users\10728\AppData\Local\Temp\cc82yckV.s:85 .text.uart1_send_msg:0000003c $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:773 .bss.send_time.0:00000000 send_time.0 C:\Users\10728\AppData\Local\Temp\cc82yckV.s:95 .bss.FMU_uart_buf:00000000 FMU_uart_buf C:\Users\10728\AppData\Local\Temp\cc82yckV.s:92 .bss.FMU_uart_buf:00000000 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:102 .bss.update:00000000 update C:\Users\10728\AppData\Local\Temp\cc82yckV.s:99 .bss.update:00000000 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:105 .text.USER_UART_IRQHandler:00000000 $t C:\Users\10728\AppData\Local\Temp\cc82yckV.s:111 .text.USER_UART_IRQHandler:00000000 USER_UART_IRQHandler C:\Users\10728\AppData\Local\Temp\cc82yckV.s:225 .text.USER_UART_IRQHandler:000000a0 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:236 .bss.msg_buf:00000000 msg_buf C:\Users\10728\AppData\Local\Temp\cc82yckV.s:233 .bss.msg_buf:00000000 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:239 .text.Update_ack_fmu:00000000 $t C:\Users\10728\AppData\Local\Temp\cc82yckV.s:245 .text.Update_ack_fmu:00000000 Update_ack_fmu C:\Users\10728\AppData\Local\Temp\cc82yckV.s:398 .text.Update_ack_fmu:000000cc $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:403 .text.check_usart_is_ok:00000000 $t C:\Users\10728\AppData\Local\Temp\cc82yckV.s:409 .text.check_usart_is_ok:00000000 check_usart_is_ok C:\Users\10728\AppData\Local\Temp\cc82yckV.s:468 .text.check_usart_is_ok:0000003c $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:477 .bss.addr_offset:00000000 addr_offset C:\Users\10728\AppData\Local\Temp\cc82yckV.s:474 .bss.addr_offset:00000000 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:484 .bss.cur_pack_num:00000000 cur_pack_num C:\Users\10728\AppData\Local\Temp\cc82yckV.s:481 .bss.cur_pack_num:00000000 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:490 .bss.update_complete:00000000 update_complete C:\Users\10728\AppData\Local\Temp\cc82yckV.s:491 .bss.update_complete:00000000 $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:493 .text.update_function:00000000 $t C:\Users\10728\AppData\Local\Temp\cc82yckV.s:499 .text.update_function:00000000 update_function C:\Users\10728\AppData\Local\Temp\cc82yckV.s:760 .text.update_function:0000016c $d C:\Users\10728\AppData\Local\Temp\cc82yckV.s:770 .bss.send_time.0:00000000 $d UNDEFINED SYMBOLS HAL_GetTick HAL_UART_Transmit_DMA huart1 HAL_UART_AbortReceive memcpy memset HAL_UART_Receive_DMA Get_Crc16 Flash_WriteData wirte_update_flag HAL_Delay