ARM GAS /tmp/ccI3jx5x.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 "can-halal.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .file 1 "Core/Lib/can-halal/can-halal.c" 20 .section .bss.hcan,"aw",%nobits 21 .align 2 24 hcan: 25 0000 00000000 .space 4 26 .section .text.ftcan_init,"ax",%progbits 27 .align 1 28 .global ftcan_init 29 .syntax unified 30 .thumb 31 .thumb_func 33 ftcan_init: 34 .LFB130: 1:Core/Lib/can-halal/can-halal.c **** #include "can-halal.h" 2:Core/Lib/can-halal/can-halal.c **** 3:Core/Lib/can-halal/can-halal.c **** #include 4:Core/Lib/can-halal/can-halal.c **** 5:Core/Lib/can-halal/can-halal.c **** #if defined(FTCAN_IS_BXCAN) 6:Core/Lib/can-halal/can-halal.c **** static CAN_HandleTypeDef *hcan; 7:Core/Lib/can-halal/can-halal.c **** 8:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef ftcan_init(CAN_HandleTypeDef *handle) { 35 .loc 1 8 57 36 .cfi_startproc 37 @ args = 0, pretend = 0, frame = 16 38 @ frame_needed = 1, uses_anonymous_args = 0 39 0000 80B5 push {r7, lr} 40 .cfi_def_cfa_offset 8 41 .cfi_offset 7, -8 42 .cfi_offset 14, -4 43 0002 84B0 sub sp, sp, #16 44 .cfi_def_cfa_offset 24 45 0004 00AF add r7, sp, #0 46 .cfi_def_cfa_register 7 47 0006 7860 str r0, [r7, #4] 9:Core/Lib/can-halal/can-halal.c **** hcan = handle; 48 .loc 1 9 8 49 0008 0C4A ldr r2, .L4 50 000a 7B68 ldr r3, [r7, #4] 51 000c 1360 str r3, [r2] ARM GAS /tmp/ccI3jx5x.s page 2 10:Core/Lib/can-halal/can-halal.c **** 11:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef status = 12:Core/Lib/can-halal/can-halal.c **** HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING); 52 .loc 1 12 7 53 000e 0B4B ldr r3, .L4 54 0010 1B68 ldr r3, [r3] 55 0012 0221 movs r1, #2 56 0014 1846 mov r0, r3 57 0016 FFF7FEFF bl HAL_CAN_ActivateNotification 58 001a 0346 mov r3, r0 59 001c FB73 strb r3, [r7, #15] 13:Core/Lib/can-halal/can-halal.c **** if (status != HAL_OK) { 60 .loc 1 13 6 61 001e FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 62 0020 002B cmp r3, #0 63 0022 01D0 beq .L2 14:Core/Lib/can-halal/can-halal.c **** return status; 64 .loc 1 14 12 65 0024 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 66 0026 05E0 b .L3 67 .L2: 15:Core/Lib/can-halal/can-halal.c **** } 16:Core/Lib/can-halal/can-halal.c **** 17:Core/Lib/can-halal/can-halal.c **** return HAL_CAN_Start(hcan); 68 .loc 1 17 10 69 0028 044B ldr r3, .L4 70 002a 1B68 ldr r3, [r3] 71 002c 1846 mov r0, r3 72 002e FFF7FEFF bl HAL_CAN_Start 73 0032 0346 mov r3, r0 74 .L3: 18:Core/Lib/can-halal/can-halal.c **** } 75 .loc 1 18 1 76 0034 1846 mov r0, r3 77 0036 1037 adds r7, r7, #16 78 .cfi_def_cfa_offset 8 79 0038 BD46 mov sp, r7 80 .cfi_def_cfa_register 13 81 @ sp needed 82 003a 80BD pop {r7, pc} 83 .L5: 84 .align 2 85 .L4: 86 003c 00000000 .word hcan 87 .cfi_endproc 88 .LFE130: 90 .section .text.ftcan_transmit,"ax",%progbits 91 .align 1 92 .global ftcan_transmit 93 .syntax unified 94 .thumb 95 .thumb_func 97 ftcan_transmit: 98 .LFB131: 19:Core/Lib/can-halal/can-halal.c **** 20:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef ftcan_transmit(uint16_t id, const uint8_t *data, 21:Core/Lib/can-halal/can-halal.c **** size_t datalen) { ARM GAS /tmp/ccI3jx5x.s page 3 99 .loc 1 21 50 100 .cfi_startproc 101 @ args = 0, pretend = 0, frame = 24 102 @ frame_needed = 1, uses_anonymous_args = 0 103 0000 80B5 push {r7, lr} 104 .cfi_def_cfa_offset 8 105 .cfi_offset 7, -8 106 .cfi_offset 14, -4 107 0002 86B0 sub sp, sp, #24 108 .cfi_def_cfa_offset 32 109 0004 00AF add r7, sp, #0 110 .cfi_def_cfa_register 7 111 0006 0346 mov r3, r0 112 0008 B960 str r1, [r7, #8] 113 000a 7A60 str r2, [r7, #4] 114 000c FB81 strh r3, [r7, #14] @ movhi 22:Core/Lib/can-halal/can-halal.c **** static CAN_TxHeaderTypeDef header; 23:Core/Lib/can-halal/can-halal.c **** header.StdId = id; 115 .loc 1 23 16 116 000e FB89 ldrh r3, [r7, #14] 117 0010 0B4A ldr r2, .L8 118 0012 1360 str r3, [r2] 24:Core/Lib/can-halal/can-halal.c **** header.IDE = CAN_ID_STD; 119 .loc 1 24 14 120 0014 0A4B ldr r3, .L8 121 0016 0022 movs r2, #0 122 0018 9A60 str r2, [r3, #8] 25:Core/Lib/can-halal/can-halal.c **** header.RTR = CAN_RTR_DATA; 123 .loc 1 25 14 124 001a 094B ldr r3, .L8 125 001c 0022 movs r2, #0 126 001e DA60 str r2, [r3, #12] 26:Core/Lib/can-halal/can-halal.c **** header.DLC = datalen; 127 .loc 1 26 14 128 0020 074A ldr r2, .L8 129 0022 7B68 ldr r3, [r7, #4] 130 0024 1361 str r3, [r2, #16] 27:Core/Lib/can-halal/can-halal.c **** uint32_t mailbox; 28:Core/Lib/can-halal/can-halal.c **** return HAL_CAN_AddTxMessage(hcan, &header, data, &mailbox); 131 .loc 1 28 10 132 0026 074B ldr r3, .L8+4 133 0028 1868 ldr r0, [r3] 134 002a 07F11403 add r3, r7, #20 135 002e BA68 ldr r2, [r7, #8] 136 0030 0349 ldr r1, .L8 137 0032 FFF7FEFF bl HAL_CAN_AddTxMessage 138 0036 0346 mov r3, r0 29:Core/Lib/can-halal/can-halal.c **** } 139 .loc 1 29 1 140 0038 1846 mov r0, r3 141 003a 1837 adds r7, r7, #24 142 .cfi_def_cfa_offset 8 143 003c BD46 mov sp, r7 144 .cfi_def_cfa_register 13 145 @ sp needed 146 003e 80BD pop {r7, pc} 147 .L9: ARM GAS /tmp/ccI3jx5x.s page 4 148 .align 2 149 .L8: 150 0040 00000000 .word header.2 151 0044 00000000 .word hcan 152 .cfi_endproc 153 .LFE131: 155 .section .text.ftcan_add_filter,"ax",%progbits 156 .align 1 157 .global ftcan_add_filter 158 .syntax unified 159 .thumb 160 .thumb_func 162 ftcan_add_filter: 163 .LFB132: 30:Core/Lib/can-halal/can-halal.c **** 31:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef ftcan_add_filter(uint16_t id, uint16_t mask) { 164 .loc 1 31 64 165 .cfi_startproc 166 @ args = 0, pretend = 0, frame = 16 167 @ frame_needed = 1, uses_anonymous_args = 0 168 0000 80B5 push {r7, lr} 169 .cfi_def_cfa_offset 8 170 .cfi_offset 7, -8 171 .cfi_offset 14, -4 172 0002 84B0 sub sp, sp, #16 173 .cfi_def_cfa_offset 24 174 0004 00AF add r7, sp, #0 175 .cfi_def_cfa_register 7 176 0006 0346 mov r3, r0 177 0008 0A46 mov r2, r1 178 000a FB80 strh r3, [r7, #6] @ movhi 179 000c 1346 mov r3, r2 @ movhi 180 000e BB80 strh r3, [r7, #4] @ movhi 32:Core/Lib/can-halal/can-halal.c **** static uint32_t next_filter_no = 0; 33:Core/Lib/can-halal/can-halal.c **** static CAN_FilterTypeDef filter; 34:Core/Lib/can-halal/can-halal.c **** if (next_filter_no % 2 == 0) { 181 .loc 1 34 22 182 0010 264B ldr r3, .L16 183 0012 1B68 ldr r3, [r3] 184 0014 03F00103 and r3, r3, #1 185 .loc 1 34 6 186 0018 002B cmp r3, #0 187 001a 10D1 bne .L11 35:Core/Lib/can-halal/can-halal.c **** filter.FilterIdHigh = id << 5; 188 .loc 1 35 30 189 001c FB88 ldrh r3, [r7, #6] 190 001e 5B01 lsls r3, r3, #5 191 .loc 1 35 25 192 0020 234A ldr r2, .L16+4 193 0022 1360 str r3, [r2] 36:Core/Lib/can-halal/can-halal.c **** filter.FilterMaskIdHigh = mask << 5; 194 .loc 1 36 36 195 0024 BB88 ldrh r3, [r7, #4] 196 0026 5B01 lsls r3, r3, #5 197 .loc 1 36 29 198 0028 214A ldr r2, .L16+4 199 002a 9360 str r3, [r2, #8] ARM GAS /tmp/ccI3jx5x.s page 5 37:Core/Lib/can-halal/can-halal.c **** filter.FilterIdLow = id << 5; 200 .loc 1 37 29 201 002c FB88 ldrh r3, [r7, #6] 202 002e 5B01 lsls r3, r3, #5 203 .loc 1 37 24 204 0030 1F4A ldr r2, .L16+4 205 0032 5360 str r3, [r2, #4] 38:Core/Lib/can-halal/can-halal.c **** filter.FilterMaskIdLow = mask << 5; 206 .loc 1 38 35 207 0034 BB88 ldrh r3, [r7, #4] 208 0036 5B01 lsls r3, r3, #5 209 .loc 1 38 28 210 0038 1D4A ldr r2, .L16+4 211 003a D360 str r3, [r2, #12] 212 003c 07E0 b .L12 213 .L11: 39:Core/Lib/can-halal/can-halal.c **** } else { 40:Core/Lib/can-halal/can-halal.c **** // Leave high filter untouched from the last configuration 41:Core/Lib/can-halal/can-halal.c **** filter.FilterIdLow = id << 5; 214 .loc 1 41 29 215 003e FB88 ldrh r3, [r7, #6] 216 0040 5B01 lsls r3, r3, #5 217 .loc 1 41 24 218 0042 1B4A ldr r2, .L16+4 219 0044 5360 str r3, [r2, #4] 42:Core/Lib/can-halal/can-halal.c **** filter.FilterMaskIdLow = mask << 5; 220 .loc 1 42 35 221 0046 BB88 ldrh r3, [r7, #4] 222 0048 5B01 lsls r3, r3, #5 223 .loc 1 42 28 224 004a 194A ldr r2, .L16+4 225 004c D360 str r3, [r2, #12] 226 .L12: 43:Core/Lib/can-halal/can-halal.c **** } 44:Core/Lib/can-halal/can-halal.c **** filter.FilterFIFOAssignment = CAN_FILTER_FIFO0; 227 .loc 1 44 31 228 004e 184B ldr r3, .L16+4 229 0050 0022 movs r2, #0 230 0052 1A61 str r2, [r3, #16] 45:Core/Lib/can-halal/can-halal.c **** filter.FilterBank = next_filter_no / 2; 231 .loc 1 45 38 232 0054 154B ldr r3, .L16 233 0056 1B68 ldr r3, [r3] 234 0058 5B08 lsrs r3, r3, #1 235 .loc 1 45 21 236 005a 154A ldr r2, .L16+4 237 005c 5361 str r3, [r2, #20] 46:Core/Lib/can-halal/can-halal.c **** if (filter.FilterBank > FTCAN_NUM_FILTERS + 1) { 238 .loc 1 46 13 239 005e 144B ldr r3, .L16+4 240 0060 5B69 ldr r3, [r3, #20] 241 .loc 1 46 6 242 0062 0E2B cmp r3, #14 243 0064 01D9 bls .L13 47:Core/Lib/can-halal/can-halal.c **** return HAL_ERROR; 244 .loc 1 47 12 245 0066 0123 movs r3, #1 ARM GAS /tmp/ccI3jx5x.s page 6 246 0068 1CE0 b .L14 247 .L13: 48:Core/Lib/can-halal/can-halal.c **** } 49:Core/Lib/can-halal/can-halal.c **** filter.FilterMode = CAN_FILTERMODE_IDMASK; 248 .loc 1 49 21 249 006a 114B ldr r3, .L16+4 250 006c 0022 movs r2, #0 251 006e 9A61 str r2, [r3, #24] 50:Core/Lib/can-halal/can-halal.c **** filter.FilterScale = CAN_FILTERSCALE_16BIT; 252 .loc 1 50 22 253 0070 0F4B ldr r3, .L16+4 254 0072 0022 movs r2, #0 255 0074 DA61 str r2, [r3, #28] 51:Core/Lib/can-halal/can-halal.c **** filter.FilterActivation = CAN_FILTER_ENABLE; 256 .loc 1 51 27 257 0076 0E4B ldr r3, .L16+4 258 0078 0122 movs r2, #1 259 007a 1A62 str r2, [r3, #32] 52:Core/Lib/can-halal/can-halal.c **** 53:Core/Lib/can-halal/can-halal.c **** // Disable slave filters 54:Core/Lib/can-halal/can-halal.c **** // TODO: Some STM32 have multiple CAN peripherals, and one uses the slave 55:Core/Lib/can-halal/can-halal.c **** // filter bank 56:Core/Lib/can-halal/can-halal.c **** filter.SlaveStartFilterBank = FTCAN_NUM_FILTERS; 260 .loc 1 56 31 261 007c 0C4B ldr r3, .L16+4 262 007e 0D22 movs r2, #13 263 0080 5A62 str r2, [r3, #36] 57:Core/Lib/can-halal/can-halal.c **** 58:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef status = HAL_CAN_ConfigFilter(hcan, &filter); 264 .loc 1 58 30 265 0082 0C4B ldr r3, .L16+8 266 0084 1B68 ldr r3, [r3] 267 0086 0A49 ldr r1, .L16+4 268 0088 1846 mov r0, r3 269 008a FFF7FEFF bl HAL_CAN_ConfigFilter 270 008e 0346 mov r3, r0 271 0090 FB73 strb r3, [r7, #15] 59:Core/Lib/can-halal/can-halal.c **** if (status == HAL_OK) { 272 .loc 1 59 6 273 0092 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 274 0094 002B cmp r3, #0 275 0096 04D1 bne .L15 60:Core/Lib/can-halal/can-halal.c **** next_filter_no++; 276 .loc 1 60 19 277 0098 044B ldr r3, .L16 278 009a 1B68 ldr r3, [r3] 279 009c 0133 adds r3, r3, #1 280 009e 034A ldr r2, .L16 281 00a0 1360 str r3, [r2] 282 .L15: 61:Core/Lib/can-halal/can-halal.c **** } 62:Core/Lib/can-halal/can-halal.c **** return status; 283 .loc 1 62 10 284 00a2 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 285 .L14: 63:Core/Lib/can-halal/can-halal.c **** } 286 .loc 1 63 1 ARM GAS /tmp/ccI3jx5x.s page 7 287 00a4 1846 mov r0, r3 288 00a6 1037 adds r7, r7, #16 289 .cfi_def_cfa_offset 8 290 00a8 BD46 mov sp, r7 291 .cfi_def_cfa_register 13 292 @ sp needed 293 00aa 80BD pop {r7, pc} 294 .L17: 295 .align 2 296 .L16: 297 00ac 00000000 .word next_filter_no.1 298 00b0 00000000 .word filter.0 299 00b4 00000000 .word hcan 300 .cfi_endproc 301 .LFE132: 303 .section .text.HAL_CAN_RxFifo0MsgPendingCallback,"ax",%progbits 304 .align 1 305 .global HAL_CAN_RxFifo0MsgPendingCallback 306 .syntax unified 307 .thumb 308 .thumb_func 310 HAL_CAN_RxFifo0MsgPendingCallback: 311 .LFB133: 64:Core/Lib/can-halal/can-halal.c **** 65:Core/Lib/can-halal/can-halal.c **** void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *handle) { 312 .loc 1 65 67 313 .cfi_startproc 314 @ args = 0, pretend = 0, frame = 48 315 @ frame_needed = 1, uses_anonymous_args = 0 316 0000 80B5 push {r7, lr} 317 .cfi_def_cfa_offset 8 318 .cfi_offset 7, -8 319 .cfi_offset 14, -4 320 0002 8CB0 sub sp, sp, #48 321 .cfi_def_cfa_offset 56 322 0004 00AF add r7, sp, #0 323 .cfi_def_cfa_register 7 324 0006 7860 str r0, [r7, #4] 66:Core/Lib/can-halal/can-halal.c **** if (handle != hcan) { 325 .loc 1 66 14 326 0008 124B ldr r3, .L27 327 000a 1B68 ldr r3, [r3] 328 .loc 1 66 6 329 000c 7A68 ldr r2, [r7, #4] 330 000e 9A42 cmp r2, r3 331 0010 17D1 bne .L24 67:Core/Lib/can-halal/can-halal.c **** return; 68:Core/Lib/can-halal/can-halal.c **** } 69:Core/Lib/can-halal/can-halal.c **** CAN_RxHeaderTypeDef header; 70:Core/Lib/can-halal/can-halal.c **** uint8_t data[8]; 71:Core/Lib/can-halal/can-halal.c **** if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &header, data) != HAL_OK) { 332 .loc 1 71 7 333 0012 104B ldr r3, .L27 334 0014 1868 ldr r0, [r3] 335 0016 07F10C03 add r3, r7, #12 336 001a 07F11402 add r2, r7, #20 337 001e 0021 movs r1, #0 ARM GAS /tmp/ccI3jx5x.s page 8 338 0020 FFF7FEFF bl HAL_CAN_GetRxMessage 339 0024 0346 mov r3, r0 340 .loc 1 71 6 discriminator 1 341 0026 002B cmp r3, #0 342 0028 0DD1 bne .L25 72:Core/Lib/can-halal/can-halal.c **** return; 73:Core/Lib/can-halal/can-halal.c **** } 74:Core/Lib/can-halal/can-halal.c **** 75:Core/Lib/can-halal/can-halal.c **** if (header.IDE != CAN_ID_STD) { 343 .loc 1 75 13 344 002a FB69 ldr r3, [r7, #28] 345 .loc 1 75 6 346 002c 002B cmp r3, #0 347 002e 0CD1 bne .L26 76:Core/Lib/can-halal/can-halal.c **** return; 77:Core/Lib/can-halal/can-halal.c **** } 78:Core/Lib/can-halal/can-halal.c **** 79:Core/Lib/can-halal/can-halal.c **** ftcan_msg_received_cb(header.StdId, header.DLC, data); 348 .loc 1 79 31 349 0030 7B69 ldr r3, [r7, #20] 350 .loc 1 79 3 351 0032 9BB2 uxth r3, r3 352 .loc 1 79 45 353 0034 796A ldr r1, [r7, #36] 354 .loc 1 79 3 355 0036 07F10C02 add r2, r7, #12 356 003a 1846 mov r0, r3 357 003c FFF7FEFF bl ftcan_msg_received_cb 358 0040 04E0 b .L18 359 .L24: 67:Core/Lib/can-halal/can-halal.c **** } 360 .loc 1 67 5 361 0042 00BF nop 362 0044 02E0 b .L18 363 .L25: 72:Core/Lib/can-halal/can-halal.c **** return; 364 .loc 1 72 5 365 0046 00BF nop 366 0048 00E0 b .L18 367 .L26: 76:Core/Lib/can-halal/can-halal.c **** return; 368 .loc 1 76 5 369 004a 00BF nop 370 .L18: 80:Core/Lib/can-halal/can-halal.c **** } 371 .loc 1 80 1 372 004c 3037 adds r7, r7, #48 373 .cfi_def_cfa_offset 8 374 004e BD46 mov sp, r7 375 .cfi_def_cfa_register 13 376 @ sp needed 377 0050 80BD pop {r7, pc} 378 .L28: 379 0052 00BF .align 2 380 .L27: 381 0054 00000000 .word hcan 382 .cfi_endproc ARM GAS /tmp/ccI3jx5x.s page 9 383 .LFE133: 385 .section .text.ftcan_msg_received_cb,"ax",%progbits 386 .align 1 387 .weak ftcan_msg_received_cb 388 .syntax unified 389 .thumb 390 .thumb_func 392 ftcan_msg_received_cb: 393 .LFB134: 81:Core/Lib/can-halal/can-halal.c **** #elif defined(FTCAN_IS_FDCAN) 82:Core/Lib/can-halal/can-halal.c **** static FDCAN_HandleTypeDef *hcan; 83:Core/Lib/can-halal/can-halal.c **** 84:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef ftcan_init(FDCAN_HandleTypeDef *handle) { 85:Core/Lib/can-halal/can-halal.c **** hcan = handle; 86:Core/Lib/can-halal/can-halal.c **** 87:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef status = 88:Core/Lib/can-halal/can-halal.c **** HAL_FDCAN_ActivateNotification(hcan, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0); 89:Core/Lib/can-halal/can-halal.c **** if (status != HAL_OK) { 90:Core/Lib/can-halal/can-halal.c **** return status; 91:Core/Lib/can-halal/can-halal.c **** } 92:Core/Lib/can-halal/can-halal.c **** // Reject non-matching messages 93:Core/Lib/can-halal/can-halal.c **** status = 94:Core/Lib/can-halal/can-halal.c **** HAL_FDCAN_ConfigGlobalFilter(hcan, FDCAN_REJECT, FDCAN_REJECT, 95:Core/Lib/can-halal/can-halal.c **** FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE); 96:Core/Lib/can-halal/can-halal.c **** if (status != HAL_OK) { 97:Core/Lib/can-halal/can-halal.c **** return status; 98:Core/Lib/can-halal/can-halal.c **** } 99:Core/Lib/can-halal/can-halal.c **** 100:Core/Lib/can-halal/can-halal.c **** return HAL_FDCAN_Start(hcan); 101:Core/Lib/can-halal/can-halal.c **** } 102:Core/Lib/can-halal/can-halal.c **** 103:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef ftcan_transmit(uint16_t id, const uint8_t *data, 104:Core/Lib/can-halal/can-halal.c **** size_t datalen) { 105:Core/Lib/can-halal/can-halal.c **** static FDCAN_TxHeaderTypeDef header; 106:Core/Lib/can-halal/can-halal.c **** header.Identifier = id; 107:Core/Lib/can-halal/can-halal.c **** header.IdType = FDCAN_STANDARD_ID; 108:Core/Lib/can-halal/can-halal.c **** header.TxFrameType = FDCAN_DATA_FRAME; 109:Core/Lib/can-halal/can-halal.c **** switch (datalen) { 110:Core/Lib/can-halal/can-halal.c **** case 0: 111:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_0; 112:Core/Lib/can-halal/can-halal.c **** break; 113:Core/Lib/can-halal/can-halal.c **** case 1: 114:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_1; 115:Core/Lib/can-halal/can-halal.c **** break; 116:Core/Lib/can-halal/can-halal.c **** case 2: 117:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_2; 118:Core/Lib/can-halal/can-halal.c **** break; 119:Core/Lib/can-halal/can-halal.c **** case 3: 120:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_3; 121:Core/Lib/can-halal/can-halal.c **** break; 122:Core/Lib/can-halal/can-halal.c **** case 4: 123:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_4; 124:Core/Lib/can-halal/can-halal.c **** break; 125:Core/Lib/can-halal/can-halal.c **** case 5: 126:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_5; 127:Core/Lib/can-halal/can-halal.c **** break; 128:Core/Lib/can-halal/can-halal.c **** case 6: ARM GAS /tmp/ccI3jx5x.s page 10 129:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_6; 130:Core/Lib/can-halal/can-halal.c **** break; 131:Core/Lib/can-halal/can-halal.c **** case 7: 132:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_7; 133:Core/Lib/can-halal/can-halal.c **** break; 134:Core/Lib/can-halal/can-halal.c **** case 8: 135:Core/Lib/can-halal/can-halal.c **** default: 136:Core/Lib/can-halal/can-halal.c **** header.DataLength = FDCAN_DLC_BYTES_8; 137:Core/Lib/can-halal/can-halal.c **** break; 138:Core/Lib/can-halal/can-halal.c **** } 139:Core/Lib/can-halal/can-halal.c **** header.ErrorStateIndicator = FDCAN_ESI_PASSIVE; 140:Core/Lib/can-halal/can-halal.c **** header.BitRateSwitch = FDCAN_BRS_OFF; 141:Core/Lib/can-halal/can-halal.c **** header.FDFormat = FDCAN_CLASSIC_CAN; 142:Core/Lib/can-halal/can-halal.c **** header.TxEventFifoControl = FDCAN_NO_TX_EVENTS; 143:Core/Lib/can-halal/can-halal.c **** 144:Core/Lib/can-halal/can-halal.c **** // HAL_FDCAN_AddMessageToTxFifoQ doesn't modify the data, but it's not marked 145:Core/Lib/can-halal/can-halal.c **** // as const for some reason. 146:Core/Lib/can-halal/can-halal.c **** uint8_t *data_nonconst = (uint8_t *)data; 147:Core/Lib/can-halal/can-halal.c **** return HAL_FDCAN_AddMessageToTxFifoQ(hcan, &header, data_nonconst); 148:Core/Lib/can-halal/can-halal.c **** } 149:Core/Lib/can-halal/can-halal.c **** 150:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef ftcan_add_filter(uint16_t id, uint16_t mask) { 151:Core/Lib/can-halal/can-halal.c **** static uint32_t next_filter_no = 0; 152:Core/Lib/can-halal/can-halal.c **** static FDCAN_FilterTypeDef filter; 153:Core/Lib/can-halal/can-halal.c **** filter.IdType = FDCAN_STANDARD_ID; 154:Core/Lib/can-halal/can-halal.c **** filter.FilterIndex = next_filter_no; 155:Core/Lib/can-halal/can-halal.c **** if (filter.FilterIndex > FTCAN_NUM_FILTERS + 1) { 156:Core/Lib/can-halal/can-halal.c **** return HAL_ERROR; 157:Core/Lib/can-halal/can-halal.c **** } 158:Core/Lib/can-halal/can-halal.c **** filter.FilterType = FDCAN_FILTER_MASK; 159:Core/Lib/can-halal/can-halal.c **** filter.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; 160:Core/Lib/can-halal/can-halal.c **** filter.FilterID1 = id; 161:Core/Lib/can-halal/can-halal.c **** filter.FilterID2 = mask; 162:Core/Lib/can-halal/can-halal.c **** 163:Core/Lib/can-halal/can-halal.c **** HAL_StatusTypeDef status = HAL_FDCAN_ConfigFilter(hcan, &filter); 164:Core/Lib/can-halal/can-halal.c **** if (status == HAL_OK) { 165:Core/Lib/can-halal/can-halal.c **** next_filter_no++; 166:Core/Lib/can-halal/can-halal.c **** } 167:Core/Lib/can-halal/can-halal.c **** return status; 168:Core/Lib/can-halal/can-halal.c **** } 169:Core/Lib/can-halal/can-halal.c **** 170:Core/Lib/can-halal/can-halal.c **** void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *handle, 171:Core/Lib/can-halal/can-halal.c **** uint32_t RxFifo0ITs) { 172:Core/Lib/can-halal/can-halal.c **** if (handle != hcan || (RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) == RESET) { 173:Core/Lib/can-halal/can-halal.c **** return; 174:Core/Lib/can-halal/can-halal.c **** } 175:Core/Lib/can-halal/can-halal.c **** 176:Core/Lib/can-halal/can-halal.c **** static FDCAN_RxHeaderTypeDef header; 177:Core/Lib/can-halal/can-halal.c **** static uint8_t data[8]; 178:Core/Lib/can-halal/can-halal.c **** if (HAL_FDCAN_GetRxMessage(hcan, FDCAN_RX_FIFO0, &header, data) != HAL_OK) { 179:Core/Lib/can-halal/can-halal.c **** return; 180:Core/Lib/can-halal/can-halal.c **** } 181:Core/Lib/can-halal/can-halal.c **** 182:Core/Lib/can-halal/can-halal.c **** if (header.FDFormat != FDCAN_CLASSIC_CAN || 183:Core/Lib/can-halal/can-halal.c **** header.RxFrameType != FDCAN_DATA_FRAME || 184:Core/Lib/can-halal/can-halal.c **** header.IdType != FDCAN_STANDARD_ID) { 185:Core/Lib/can-halal/can-halal.c **** return; ARM GAS /tmp/ccI3jx5x.s page 11 186:Core/Lib/can-halal/can-halal.c **** } 187:Core/Lib/can-halal/can-halal.c **** 188:Core/Lib/can-halal/can-halal.c **** size_t datalen; 189:Core/Lib/can-halal/can-halal.c **** switch (header.DataLength) { 190:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_0: 191:Core/Lib/can-halal/can-halal.c **** datalen = 0; 192:Core/Lib/can-halal/can-halal.c **** break; 193:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_1: 194:Core/Lib/can-halal/can-halal.c **** datalen = 1; 195:Core/Lib/can-halal/can-halal.c **** break; 196:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_2: 197:Core/Lib/can-halal/can-halal.c **** datalen = 2; 198:Core/Lib/can-halal/can-halal.c **** break; 199:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_3: 200:Core/Lib/can-halal/can-halal.c **** datalen = 3; 201:Core/Lib/can-halal/can-halal.c **** break; 202:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_4: 203:Core/Lib/can-halal/can-halal.c **** datalen = 4; 204:Core/Lib/can-halal/can-halal.c **** break; 205:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_5: 206:Core/Lib/can-halal/can-halal.c **** datalen = 5; 207:Core/Lib/can-halal/can-halal.c **** break; 208:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_6: 209:Core/Lib/can-halal/can-halal.c **** datalen = 6; 210:Core/Lib/can-halal/can-halal.c **** break; 211:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_7: 212:Core/Lib/can-halal/can-halal.c **** datalen = 7; 213:Core/Lib/can-halal/can-halal.c **** break; 214:Core/Lib/can-halal/can-halal.c **** case FDCAN_DLC_BYTES_8: 215:Core/Lib/can-halal/can-halal.c **** datalen = 8; 216:Core/Lib/can-halal/can-halal.c **** break; 217:Core/Lib/can-halal/can-halal.c **** default: 218:Core/Lib/can-halal/can-halal.c **** return; 219:Core/Lib/can-halal/can-halal.c **** } 220:Core/Lib/can-halal/can-halal.c **** 221:Core/Lib/can-halal/can-halal.c **** ftcan_msg_received_cb(header.Identifier, datalen, data); 222:Core/Lib/can-halal/can-halal.c **** } 223:Core/Lib/can-halal/can-halal.c **** #endif 224:Core/Lib/can-halal/can-halal.c **** 225:Core/Lib/can-halal/can-halal.c **** __weak void ftcan_msg_received_cb(uint16_t id, size_t datalen, 226:Core/Lib/can-halal/can-halal.c **** const uint8_t *data) {} 394 .loc 1 226 56 395 .cfi_startproc 396 @ args = 0, pretend = 0, frame = 16 397 @ frame_needed = 1, uses_anonymous_args = 0 398 @ link register save eliminated. 399 0000 80B4 push {r7} 400 .cfi_def_cfa_offset 4 401 .cfi_offset 7, -4 402 0002 85B0 sub sp, sp, #20 403 .cfi_def_cfa_offset 24 404 0004 00AF add r7, sp, #0 405 .cfi_def_cfa_register 7 406 0006 0346 mov r3, r0 407 0008 B960 str r1, [r7, #8] 408 000a 7A60 str r2, [r7, #4] 409 000c FB81 strh r3, [r7, #14] @ movhi ARM GAS /tmp/ccI3jx5x.s page 12 410 .loc 1 226 57 411 000e 00BF nop 412 0010 1437 adds r7, r7, #20 413 .cfi_def_cfa_offset 4 414 0012 BD46 mov sp, r7 415 .cfi_def_cfa_register 13 416 @ sp needed 417 0014 5DF8047B ldr r7, [sp], #4 418 .cfi_restore 7 419 .cfi_def_cfa_offset 0 420 0018 7047 bx lr 421 .cfi_endproc 422 .LFE134: 424 .section .text.ftcan_unmarshal_unsigned,"ax",%progbits 425 .align 1 426 .global ftcan_unmarshal_unsigned 427 .syntax unified 428 .thumb 429 .thumb_func 431 ftcan_unmarshal_unsigned: 432 .LFB135: 227:Core/Lib/can-halal/can-halal.c **** 228:Core/Lib/can-halal/can-halal.c **** uint64_t ftcan_unmarshal_unsigned(const uint8_t **data_ptr, size_t num_bytes) { 433 .loc 1 228 79 434 .cfi_startproc 435 @ args = 0, pretend = 0, frame = 24 436 @ frame_needed = 1, uses_anonymous_args = 0 437 @ link register save eliminated. 438 0000 2DE9B003 push {r4, r5, r7, r8, r9} 439 .cfi_def_cfa_offset 20 440 .cfi_offset 4, -20 441 .cfi_offset 5, -16 442 .cfi_offset 7, -12 443 .cfi_offset 8, -8 444 .cfi_offset 9, -4 445 0004 87B0 sub sp, sp, #28 446 .cfi_def_cfa_offset 48 447 0006 00AF add r7, sp, #0 448 .cfi_def_cfa_register 7 449 0008 7860 str r0, [r7, #4] 450 000a 3960 str r1, [r7] 229:Core/Lib/can-halal/can-halal.c **** if (num_bytes > 8) { 451 .loc 1 229 6 452 000c 3B68 ldr r3, [r7] 453 000e 082B cmp r3, #8 454 0010 01D9 bls .L31 230:Core/Lib/can-halal/can-halal.c **** num_bytes = 8; 455 .loc 1 230 15 456 0012 0823 movs r3, #8 457 0014 3B60 str r3, [r7] 458 .L31: 231:Core/Lib/can-halal/can-halal.c **** } 232:Core/Lib/can-halal/can-halal.c **** 233:Core/Lib/can-halal/can-halal.c **** const uint8_t *data = *data_ptr; 459 .loc 1 233 18 460 0016 7B68 ldr r3, [r7, #4] 461 0018 1B68 ldr r3, [r3] ARM GAS /tmp/ccI3jx5x.s page 13 462 001a BB60 str r3, [r7, #8] 234:Core/Lib/can-halal/can-halal.c **** uint64_t result = 0; 463 .loc 1 234 12 464 001c 4FF00002 mov r2, #0 465 0020 4FF00003 mov r3, #0 466 0024 C7E90423 strd r2, [r7, #16] 467 .LBB2: 235:Core/Lib/can-halal/can-halal.c **** for (size_t i = 0; i < num_bytes; i++) { 468 .loc 1 235 15 469 0028 0023 movs r3, #0 470 002a FB60 str r3, [r7, #12] 471 .loc 1 235 3 472 002c 1EE0 b .L32 473 .L33: 236:Core/Lib/can-halal/can-halal.c **** result <<= 8; 474 .loc 1 236 12 475 002e D7E90401 ldrd r0, [r7, #16] 476 0032 4FF00002 mov r2, #0 477 0036 4FF00003 mov r3, #0 478 003a 0B02 lsls r3, r1, #8 479 003c 43EA1063 orr r3, r3, r0, lsr #24 480 0040 0202 lsls r2, r0, #8 481 0042 C7E90423 strd r2, [r7, #16] 237:Core/Lib/can-halal/can-halal.c **** result |= data[i]; 482 .loc 1 237 19 483 0046 BA68 ldr r2, [r7, #8] 484 0048 FB68 ldr r3, [r7, #12] 485 004a 1344 add r3, r3, r2 486 004c 1B78 ldrb r3, [r3] @ zero_extendqisi2 487 004e DBB2 uxtb r3, r3 488 0050 0022 movs r2, #0 489 0052 1C46 mov r4, r3 490 0054 1546 mov r5, r2 491 .loc 1 237 12 492 0056 D7E90423 ldrd r2, [r7, #16] 493 005a 42EA0408 orr r8, r2, r4 494 005e 43EA0509 orr r9, r3, r5 495 0062 C7E90489 strd r8, [r7, #16] 235:Core/Lib/can-halal/can-halal.c **** for (size_t i = 0; i < num_bytes; i++) { 496 .loc 1 235 38 discriminator 3 497 0066 FB68 ldr r3, [r7, #12] 498 0068 0133 adds r3, r3, #1 499 006a FB60 str r3, [r7, #12] 500 .L32: 235:Core/Lib/can-halal/can-halal.c **** for (size_t i = 0; i < num_bytes; i++) { 501 .loc 1 235 24 discriminator 1 502 006c FA68 ldr r2, [r7, #12] 503 006e 3B68 ldr r3, [r7] 504 0070 9A42 cmp r2, r3 505 0072 DCD3 bcc .L33 506 .LBE2: 238:Core/Lib/can-halal/can-halal.c **** } 239:Core/Lib/can-halal/can-halal.c **** *data_ptr += num_bytes; 507 .loc 1 239 3 508 0074 7B68 ldr r3, [r7, #4] 509 0076 1A68 ldr r2, [r3] 510 .loc 1 239 13 ARM GAS /tmp/ccI3jx5x.s page 14 511 0078 3B68 ldr r3, [r7] 512 007a 1A44 add r2, r2, r3 513 007c 7B68 ldr r3, [r7, #4] 514 007e 1A60 str r2, [r3] 240:Core/Lib/can-halal/can-halal.c **** return result; 515 .loc 1 240 10 516 0080 D7E90423 ldrd r2, [r7, #16] 241:Core/Lib/can-halal/can-halal.c **** } 517 .loc 1 241 1 518 0084 1046 mov r0, r2 519 0086 1946 mov r1, r3 520 0088 1C37 adds r7, r7, #28 521 .cfi_def_cfa_offset 20 522 008a BD46 mov sp, r7 523 .cfi_def_cfa_register 13 524 @ sp needed 525 008c BDE8B003 pop {r4, r5, r7, r8, r9} 526 .cfi_restore 9 527 .cfi_restore 8 528 .cfi_restore 7 529 .cfi_restore 5 530 .cfi_restore 4 531 .cfi_def_cfa_offset 0 532 0090 7047 bx lr 533 .cfi_endproc 534 .LFE135: 536 .section .text.ftcan_unmarshal_signed,"ax",%progbits 537 .align 1 538 .global ftcan_unmarshal_signed 539 .syntax unified 540 .thumb 541 .thumb_func 543 ftcan_unmarshal_signed: 544 .LFB136: 242:Core/Lib/can-halal/can-halal.c **** 243:Core/Lib/can-halal/can-halal.c **** int64_t ftcan_unmarshal_signed(const uint8_t **data_ptr, size_t num_bytes) { 545 .loc 1 243 76 546 .cfi_startproc 547 @ args = 0, pretend = 0, frame = 32 548 @ frame_needed = 1, uses_anonymous_args = 0 549 0000 2DE9F043 push {r4, r5, r6, r7, r8, r9, lr} 550 .cfi_def_cfa_offset 28 551 .cfi_offset 4, -28 552 .cfi_offset 5, -24 553 .cfi_offset 6, -20 554 .cfi_offset 7, -16 555 .cfi_offset 8, -12 556 .cfi_offset 9, -8 557 .cfi_offset 14, -4 558 0004 89B0 sub sp, sp, #36 559 .cfi_def_cfa_offset 64 560 0006 00AF add r7, sp, #0 561 .cfi_def_cfa_register 7 562 0008 7860 str r0, [r7, #4] 563 000a 3960 str r1, [r7] 244:Core/Lib/can-halal/can-halal.c **** if (num_bytes > 8) { 564 .loc 1 244 6 ARM GAS /tmp/ccI3jx5x.s page 15 565 000c 3B68 ldr r3, [r7] 566 000e 082B cmp r3, #8 567 0010 01D9 bls .L36 245:Core/Lib/can-halal/can-halal.c **** num_bytes = 8; 568 .loc 1 245 15 569 0012 0823 movs r3, #8 570 0014 3B60 str r3, [r7] 571 .L36: 246:Core/Lib/can-halal/can-halal.c **** } 247:Core/Lib/can-halal/can-halal.c **** 248:Core/Lib/can-halal/can-halal.c **** uint64_t result_unsigned = ftcan_unmarshal_unsigned(data_ptr, num_bytes); 572 .loc 1 248 30 573 0016 3968 ldr r1, [r7] 574 0018 7868 ldr r0, [r7, #4] 575 001a FFF7FEFF bl ftcan_unmarshal_unsigned 576 001e 0246 mov r2, r0 577 0020 0B46 mov r3, r1 578 .loc 1 248 12 discriminator 1 579 0022 C7E90423 strd r2, [r7, #16] 249:Core/Lib/can-halal/can-halal.c **** // Sign extend by shifting left, then copying to a signed int and shifting 250:Core/Lib/can-halal/can-halal.c **** // back to the right 251:Core/Lib/can-halal/can-halal.c **** size_t diff_to_64 = 64 - num_bytes * 8; 580 .loc 1 251 26 581 0026 3B68 ldr r3, [r7] 582 0028 C3F10803 rsb r3, r3, #8 583 .loc 1 251 10 584 002c DB00 lsls r3, r3, #3 585 002e FB61 str r3, [r7, #28] 252:Core/Lib/can-halal/can-halal.c **** result_unsigned <<= diff_to_64; 586 .loc 1 252 19 587 0030 D7E90423 ldrd r2, [r7, #16] 588 0034 F969 ldr r1, [r7, #28] 589 0036 A1F12006 sub r6, r1, #32 590 003a C1F12000 rsb r0, r1, #32 591 003e 03FA01F5 lsl r5, r3, r1 592 0042 02FA06F6 lsl r6, r2, r6 593 0046 3543 orrs r5, r5, r6 594 0048 22FA00F0 lsr r0, r2, r0 595 004c 0543 orrs r5, r5, r0 596 004e 02FA01F4 lsl r4, r2, r1 597 0052 C7E90445 strd r4, [r7, #16] 253:Core/Lib/can-halal/can-halal.c **** int64_t result; 254:Core/Lib/can-halal/can-halal.c **** memcpy(&result, &result_unsigned, 8); 598 .loc 1 254 3 599 0056 D7E90423 ldrd r2, [r7, #16] 600 005a C7E90223 strd r2, [r7, #8] 255:Core/Lib/can-halal/can-halal.c **** return result >> diff_to_64; 601 .loc 1 255 17 602 005e D7E90223 ldrd r2, [r7, #8] 603 0062 F969 ldr r1, [r7, #28] 604 0064 C1F12004 rsb r4, r1, #32 605 0068 B1F12000 subs r0, r1, #32 606 006c 22FA01F8 lsr r8, r2, r1 607 0070 03FA04F4 lsl r4, r3, r4 608 0074 48EA0408 orr r8, r8, r4 609 0078 03D4 bmi .L37 610 007a 43FA00F0 asr r0, r3, r0 ARM GAS /tmp/ccI3jx5x.s page 16 611 007e 48EA0008 orr r8, r8, r0 612 .L37: 613 0082 43FA01F9 asr r9, r3, r1 614 0086 4246 mov r2, r8 615 0088 4B46 mov r3, r9 256:Core/Lib/can-halal/can-halal.c **** } 616 .loc 1 256 1 617 008a 1046 mov r0, r2 618 008c 1946 mov r1, r3 619 008e 2437 adds r7, r7, #36 620 .cfi_def_cfa_offset 28 621 0090 BD46 mov sp, r7 622 .cfi_def_cfa_register 13 623 @ sp needed 624 0092 BDE8F083 pop {r4, r5, r6, r7, r8, r9, pc} 625 .cfi_endproc 626 .LFE136: 628 .section .text.ftcan_marshal_unsigned,"ax",%progbits 629 .align 1 630 .global ftcan_marshal_unsigned 631 .syntax unified 632 .thumb 633 .thumb_func 635 ftcan_marshal_unsigned: 636 .LFB137: 257:Core/Lib/can-halal/can-halal.c **** 258:Core/Lib/can-halal/can-halal.c **** uint8_t *ftcan_marshal_unsigned(uint8_t *data, uint64_t val, size_t num_bytes) { 637 .loc 1 258 80 638 .cfi_startproc 639 @ args = 4, pretend = 0, frame = 24 640 @ frame_needed = 1, uses_anonymous_args = 0 641 @ link register save eliminated. 642 0000 80B4 push {r7} 643 .cfi_def_cfa_offset 4 644 .cfi_offset 7, -4 645 0002 87B0 sub sp, sp, #28 646 .cfi_def_cfa_offset 32 647 0004 00AF add r7, sp, #0 648 .cfi_def_cfa_register 7 649 0006 F860 str r0, [r7, #12] 650 0008 C7E90023 strd r2, [r7] 259:Core/Lib/can-halal/can-halal.c **** if (num_bytes > 8) { 651 .loc 1 259 6 652 000c 3B6A ldr r3, [r7, #32] 653 000e 082B cmp r3, #8 654 0010 01D9 bls .L40 260:Core/Lib/can-halal/can-halal.c **** num_bytes = 8; 655 .loc 1 260 15 656 0012 0823 movs r3, #8 657 0014 3B62 str r3, [r7, #32] 658 .L40: 659 .LBB3: 261:Core/Lib/can-halal/can-halal.c **** } 262:Core/Lib/can-halal/can-halal.c **** 263:Core/Lib/can-halal/can-halal.c **** for (int i = num_bytes - 1; i >= 0; i--) { 660 .loc 1 263 26 661 0016 3B6A ldr r3, [r7, #32] ARM GAS /tmp/ccI3jx5x.s page 17 662 0018 013B subs r3, r3, #1 663 .loc 1 263 12 664 001a 7B61 str r3, [r7, #20] 665 .loc 1 263 3 666 001c 13E0 b .L41 667 .L42: 264:Core/Lib/can-halal/can-halal.c **** data[i] = val & 0xFF; 668 .loc 1 264 9 669 001e 7B69 ldr r3, [r7, #20] 670 0020 FA68 ldr r2, [r7, #12] 671 0022 1344 add r3, r3, r2 672 .loc 1 264 13 673 0024 3A78 ldrb r2, [r7] @ zero_extendqisi2 674 0026 1A70 strb r2, [r3] 265:Core/Lib/can-halal/can-halal.c **** val >>= 8; 675 .loc 1 265 9 676 0028 D7E90001 ldrd r0, [r7] 677 002c 4FF00002 mov r2, #0 678 0030 4FF00003 mov r3, #0 679 0034 020A lsrs r2, r0, #8 680 0036 42EA0162 orr r2, r2, r1, lsl #24 681 003a 0B0A lsrs r3, r1, #8 682 003c C7E90023 strd r2, [r7] 263:Core/Lib/can-halal/can-halal.c **** data[i] = val & 0xFF; 683 .loc 1 263 40 discriminator 3 684 0040 7B69 ldr r3, [r7, #20] 685 0042 013B subs r3, r3, #1 686 0044 7B61 str r3, [r7, #20] 687 .L41: 263:Core/Lib/can-halal/can-halal.c **** data[i] = val & 0xFF; 688 .loc 1 263 33 discriminator 1 689 0046 7B69 ldr r3, [r7, #20] 690 0048 002B cmp r3, #0 691 004a E8DA bge .L42 692 .LBE3: 266:Core/Lib/can-halal/can-halal.c **** } 267:Core/Lib/can-halal/can-halal.c **** 268:Core/Lib/can-halal/can-halal.c **** return data + num_bytes; 693 .loc 1 268 15 694 004c FA68 ldr r2, [r7, #12] 695 004e 3B6A ldr r3, [r7, #32] 696 0050 1344 add r3, r3, r2 269:Core/Lib/can-halal/can-halal.c **** } 697 .loc 1 269 1 698 0052 1846 mov r0, r3 699 0054 1C37 adds r7, r7, #28 700 .cfi_def_cfa_offset 4 701 0056 BD46 mov sp, r7 702 .cfi_def_cfa_register 13 703 @ sp needed 704 0058 5DF8047B ldr r7, [sp], #4 705 .cfi_restore 7 706 .cfi_def_cfa_offset 0 707 005c 7047 bx lr 708 .cfi_endproc 709 .LFE137: 711 .section .text.ftcan_marshal_signed,"ax",%progbits ARM GAS /tmp/ccI3jx5x.s page 18 712 .align 1 713 .global ftcan_marshal_signed 714 .syntax unified 715 .thumb 716 .thumb_func 718 ftcan_marshal_signed: 719 .LFB138: 270:Core/Lib/can-halal/can-halal.c **** 271:Core/Lib/can-halal/can-halal.c **** uint8_t *ftcan_marshal_signed(uint8_t *data, int64_t val, size_t num_bytes) { 720 .loc 1 271 77 721 .cfi_startproc 722 @ args = 4, pretend = 0, frame = 16 723 @ frame_needed = 1, uses_anonymous_args = 0 724 0000 80B5 push {r7, lr} 725 .cfi_def_cfa_offset 8 726 .cfi_offset 7, -8 727 .cfi_offset 14, -4 728 0002 86B0 sub sp, sp, #24 729 .cfi_def_cfa_offset 32 730 0004 02AF add r7, sp, #8 731 .cfi_def_cfa 7, 24 732 0006 F860 str r0, [r7, #12] 733 0008 C7E90023 strd r2, [r7] 272:Core/Lib/can-halal/can-halal.c **** return ftcan_marshal_unsigned(data, val, num_bytes); 734 .loc 1 272 10 735 000c D7E90023 ldrd r2, [r7] 736 0010 B969 ldr r1, [r7, #24] 737 0012 0091 str r1, [sp] 738 0014 F868 ldr r0, [r7, #12] 739 0016 FFF7FEFF bl ftcan_marshal_unsigned 740 001a 0346 mov r3, r0 273:Core/Lib/can-halal/can-halal.c **** } 741 .loc 1 273 1 742 001c 1846 mov r0, r3 743 001e 1037 adds r7, r7, #16 744 .cfi_def_cfa_offset 8 745 0020 BD46 mov sp, r7 746 .cfi_def_cfa_register 13 747 @ sp needed 748 0022 80BD pop {r7, pc} 749 .cfi_endproc 750 .LFE138: 752 .section .bss.header.2,"aw",%nobits 753 .align 2 756 header.2: 757 0000 00000000 .space 24 757 00000000 757 00000000 757 00000000 757 00000000 758 .section .bss.next_filter_no.1,"aw",%nobits 759 .align 2 762 next_filter_no.1: 763 0000 00000000 .space 4 764 .section .bss.filter.0,"aw",%nobits 765 .align 2 768 filter.0: ARM GAS /tmp/ccI3jx5x.s page 19 769 0000 00000000 .space 40 769 00000000 769 00000000 769 00000000 769 00000000 770 .text 771 .Letext0: 772 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 773 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 774 .file 4 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f302xc.h" 775 .file 5 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h" 776 .file 6 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/lib/gcc/arm-none-e 777 .file 7 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h" 778 .file 8 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_can.h" ARM GAS /tmp/ccI3jx5x.s page 20 DEFINED SYMBOLS *ABS*:00000000 can-halal.c /tmp/ccI3jx5x.s:21 .bss.hcan:00000000 $d /tmp/ccI3jx5x.s:24 .bss.hcan:00000000 hcan /tmp/ccI3jx5x.s:27 .text.ftcan_init:00000000 $t /tmp/ccI3jx5x.s:33 .text.ftcan_init:00000000 ftcan_init /tmp/ccI3jx5x.s:86 .text.ftcan_init:0000003c $d /tmp/ccI3jx5x.s:91 .text.ftcan_transmit:00000000 $t /tmp/ccI3jx5x.s:97 .text.ftcan_transmit:00000000 ftcan_transmit /tmp/ccI3jx5x.s:150 .text.ftcan_transmit:00000040 $d /tmp/ccI3jx5x.s:756 .bss.header.2:00000000 header.2 /tmp/ccI3jx5x.s:156 .text.ftcan_add_filter:00000000 $t /tmp/ccI3jx5x.s:162 .text.ftcan_add_filter:00000000 ftcan_add_filter /tmp/ccI3jx5x.s:297 .text.ftcan_add_filter:000000ac $d /tmp/ccI3jx5x.s:762 .bss.next_filter_no.1:00000000 next_filter_no.1 /tmp/ccI3jx5x.s:768 .bss.filter.0:00000000 filter.0 /tmp/ccI3jx5x.s:304 .text.HAL_CAN_RxFifo0MsgPendingCallback:00000000 $t /tmp/ccI3jx5x.s:310 .text.HAL_CAN_RxFifo0MsgPendingCallback:00000000 HAL_CAN_RxFifo0MsgPendingCallback /tmp/ccI3jx5x.s:392 .text.ftcan_msg_received_cb:00000000 ftcan_msg_received_cb /tmp/ccI3jx5x.s:381 .text.HAL_CAN_RxFifo0MsgPendingCallback:00000054 $d /tmp/ccI3jx5x.s:386 .text.ftcan_msg_received_cb:00000000 $t /tmp/ccI3jx5x.s:425 .text.ftcan_unmarshal_unsigned:00000000 $t /tmp/ccI3jx5x.s:431 .text.ftcan_unmarshal_unsigned:00000000 ftcan_unmarshal_unsigned /tmp/ccI3jx5x.s:537 .text.ftcan_unmarshal_signed:00000000 $t /tmp/ccI3jx5x.s:543 .text.ftcan_unmarshal_signed:00000000 ftcan_unmarshal_signed /tmp/ccI3jx5x.s:629 .text.ftcan_marshal_unsigned:00000000 $t /tmp/ccI3jx5x.s:635 .text.ftcan_marshal_unsigned:00000000 ftcan_marshal_unsigned /tmp/ccI3jx5x.s:712 .text.ftcan_marshal_signed:00000000 $t /tmp/ccI3jx5x.s:718 .text.ftcan_marshal_signed:00000000 ftcan_marshal_signed /tmp/ccI3jx5x.s:753 .bss.header.2:00000000 $d /tmp/ccI3jx5x.s:759 .bss.next_filter_no.1:00000000 $d /tmp/ccI3jx5x.s:765 .bss.filter.0:00000000 $d UNDEFINED SYMBOLS HAL_CAN_ActivateNotification HAL_CAN_Start HAL_CAN_AddTxMessage HAL_CAN_ConfigFilter HAL_CAN_GetRxMessage