mv-bms/Software/build/can-halal.lst

1140 lines
49 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 <string.h>
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