mv-bms/Software/build/soc_estimation.lst

604 lines
24 KiB
Plaintext
Raw 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/ccSOWY3y.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 "soc_estimation.c"
16 .text
17 .Ltext0:
18 .cfi_sections .debug_frame
19 .file 1 "Core/Src/soc_estimation.c"
20 .global OCV_SOC_PAIRS
21 .section .data.OCV_SOC_PAIRS,"aw"
22 .align 2
25 OCV_SOC_PAIRS:
26 0000 B80B .short 3000
27 0002 0000 .space 2
28 0004 00000000 .word 0
29 0008 160D .short 3350
30 000a 0000 .space 2
31 000c 00002041 .word 1092616192
32 0010 7A0D .short 3450
33 0012 0000 .space 2
34 0014 0000A041 .word 1101004800
35 0018 AC0D .short 3500
36 001a 0000 .space 2
37 001c 0000F041 .word 1106247680
38 0020 CA0D .short 3530
39 0022 0000 .space 2
40 0024 00002042 .word 1109393408
41 0028 F20D .short 3570
42 002a 0000 .space 2
43 002c 00004842 .word 1112014848
44 0030 100E .short 3600
45 0032 0000 .space 2
46 0034 00007042 .word 1114636288
47 0038 2E0E .short 3630
48 003a 0000 .space 2
49 003c 00008C42 .word 1116471296
50 0040 740E .short 3700
51 0042 0000 .space 2
52 0044 0000A042 .word 1117782016
53 0048 D80E .short 3800
54 004a 0000 .space 2
55 004c 0000B442 .word 1119092736
56 0050 2210 .short 4130
57 0052 0000 .space 2
58 0054 0000C842 .word 1120403456
59 .global current_soc
ARM GAS /tmp/ccSOWY3y.s page 2
60 .section .bss.current_soc,"aw",%nobits
61 .align 2
64 current_soc:
65 0000 00000000 .space 4
66 .global current_was_flowing
67 .section .bss.current_was_flowing,"aw",%nobits
68 .align 2
71 current_was_flowing:
72 0000 00000000 .space 4
73 .global last_current_time
74 .section .bss.last_current_time,"aw",%nobits
75 .align 2
78 last_current_time:
79 0000 00000000 .space 4
80 .global soc_before_current
81 .section .bss.soc_before_current,"aw",%nobits
82 .align 2
85 soc_before_current:
86 0000 00000000 .space 4
87 .global mAs_before_current
88 .section .bss.mAs_before_current,"aw",%nobits
89 .align 2
92 mAs_before_current:
93 0000 00000000 .space 4
94 .section .text.soc_init,"ax",%progbits
95 .align 1
96 .global soc_init
97 .syntax unified
98 .thumb
99 .thumb_func
101 soc_init:
102 .LFB130:
1:Core/Src/soc_estimation.c **** #include "soc_estimation.h"
2:Core/Src/soc_estimation.c **** #include <stdint.h>
3:Core/Src/soc_estimation.c ****
4:Core/Src/soc_estimation.c **** #define SOC_ESTIMATION_NO_CURRENT_THRESH 1000 // mA
5:Core/Src/soc_estimation.c **** #define SOC_ESTIMATION_NO_CURRENT_TIME 100000 // ms
6:Core/Src/soc_estimation.c **** #define SOC_ESTIMATION_BATTERY_CAPACITY 28800 // mAs
7:Core/Src/soc_estimation.c ****
8:Core/Src/soc_estimation.c **** #define MIN_CELL_VOLTAGE 3000
9:Core/Src/soc_estimation.c **** #define MAX_CELL_VOLTAGE 4130
10:Core/Src/soc_estimation.c ****
11:Core/Src/soc_estimation.c ****
12:Core/Src/soc_estimation.c **** // https://www.desmos.com/calculator/mm22vmxl2x
13:Core/Src/soc_estimation.c **** ocv_soc_pair_t OCV_SOC_PAIRS[] = {
14:Core/Src/soc_estimation.c **** {3000, 0.00f}, {3350, 10.00f}, {3450, 20.00f},
15:Core/Src/soc_estimation.c **** {3500, 30.00f}, {3530, 40.00f}, {3570, 50.00f},
16:Core/Src/soc_estimation.c **** {3600, 60.00f}, {3630, 70.00f}, {3700, 80.00f},
17:Core/Src/soc_estimation.c **** {3800, 90.00f}, {4130, 100.00f}
18:Core/Src/soc_estimation.c **** };
19:Core/Src/soc_estimation.c ****
20:Core/Src/soc_estimation.c **** float current_soc;
21:Core/Src/soc_estimation.c ****
22:Core/Src/soc_estimation.c **** int current_was_flowing;
23:Core/Src/soc_estimation.c **** uint32_t last_current_time;
24:Core/Src/soc_estimation.c **** float soc_before_current;
25:Core/Src/soc_estimation.c **** float mAs_before_current;
ARM GAS /tmp/ccSOWY3y.s page 3
26:Core/Src/soc_estimation.c ****
27:Core/Src/soc_estimation.c **** void soc_init() {
103 .loc 1 27 17
104 .cfi_startproc
105 @ args = 0, pretend = 0, frame = 0
106 @ frame_needed = 1, uses_anonymous_args = 0
107 @ link register save eliminated.
108 0000 80B4 push {r7}
109 .cfi_def_cfa_offset 4
110 .cfi_offset 7, -4
111 0002 00AF add r7, sp, #0
112 .cfi_def_cfa_register 7
28:Core/Src/soc_estimation.c **** current_soc = 0;
113 .loc 1 28 15
114 0004 074B ldr r3, .L2
115 0006 4FF00002 mov r2, #0
116 000a 1A60 str r2, [r3] @ float
29:Core/Src/soc_estimation.c **** last_current_time = 0;
117 .loc 1 29 21
118 000c 064B ldr r3, .L2+4
119 000e 0022 movs r2, #0
120 0010 1A60 str r2, [r3]
30:Core/Src/soc_estimation.c **** current_was_flowing = 1;
121 .loc 1 30 23
122 0012 064B ldr r3, .L2+8
123 0014 0122 movs r2, #1
124 0016 1A60 str r2, [r3]
31:Core/Src/soc_estimation.c **** }
125 .loc 1 31 1
126 0018 00BF nop
127 001a BD46 mov sp, r7
128 .cfi_def_cfa_register 13
129 @ sp needed
130 001c 5DF8047B ldr r7, [sp], #4
131 .cfi_restore 7
132 .cfi_def_cfa_offset 0
133 0020 7047 bx lr
134 .L3:
135 0022 00BF .align 2
136 .L2:
137 0024 00000000 .word current_soc
138 0028 00000000 .word last_current_time
139 002c 00000000 .word current_was_flowing
140 .cfi_endproc
141 .LFE130:
143 .section .text.soc_update,"ax",%progbits
144 .align 1
145 .global soc_update
146 .syntax unified
147 .thumb
148 .thumb_func
150 soc_update:
151 .LFB131:
32:Core/Src/soc_estimation.c ****
33:Core/Src/soc_estimation.c **** void soc_update() {
152 .loc 1 33 19
153 .cfi_startproc
ARM GAS /tmp/ccSOWY3y.s page 4
154 @ args = 0, pretend = 0, frame = 16
155 @ frame_needed = 1, uses_anonymous_args = 0
156 0000 80B5 push {r7, lr}
157 .cfi_def_cfa_offset 8
158 .cfi_offset 7, -8
159 .cfi_offset 14, -4
160 0002 84B0 sub sp, sp, #16
161 .cfi_def_cfa_offset 24
162 0004 00AF add r7, sp, #0
163 .cfi_def_cfa_register 7
34:Core/Src/soc_estimation.c **** uint32_t now = HAL_GetTick();
164 .loc 1 34 18
165 0006 FFF7FEFF bl HAL_GetTick
166 000a F860 str r0, [r7, #12]
35:Core/Src/soc_estimation.c **** if (CURRENT_MEASUREMENT >= SOC_ESTIMATION_NO_CURRENT_THRESH) {
167 .loc 1 35 27
168 000c 334B ldr r3, .L11
169 000e 1B68 ldr r3, [r3]
170 .loc 1 35 6
171 0010 B3F57A7F cmp r3, #1000
172 0014 17DB blt .L5
36:Core/Src/soc_estimation.c **** last_current_time = now;
173 .loc 1 36 23
174 0016 324A ldr r2, .L11+4
175 0018 FB68 ldr r3, [r7, #12]
176 001a 1360 str r3, [r2]
37:Core/Src/soc_estimation.c **** if (!current_was_flowing) {
177 .loc 1 37 9
178 001c 314B ldr r3, .L11+8
179 001e 1B68 ldr r3, [r3]
180 .loc 1 37 8
181 0020 002B cmp r3, #0
182 0022 0CD1 bne .L6
38:Core/Src/soc_estimation.c **** soc_before_current = current_soc;
183 .loc 1 38 26
184 0024 304B ldr r3, .L11+12
185 0026 1B68 ldr r3, [r3] @ float
186 0028 304A ldr r2, .L11+16
187 002a 1360 str r3, [r2] @ float
39:Core/Src/soc_estimation.c **** mAs_before_current = CURRENT_MEASUREMENT;
188 .loc 1 39 26
189 002c 2B4B ldr r3, .L11
190 002e 1B68 ldr r3, [r3]
191 0030 07EE903A vmov s15, r3 @ int
192 0034 F8EEE77A vcvt.f32.s32 s15, s15
193 0038 2D4B ldr r3, .L11+20
194 003a C3ED007A vstr.32 s15, [r3]
195 .L6:
40:Core/Src/soc_estimation.c **** }
41:Core/Src/soc_estimation.c **** current_was_flowing = 1;
196 .loc 1 41 25
197 003e 294B ldr r3, .L11+8
198 0040 0122 movs r2, #1
199 0042 1A60 str r2, [r3]
200 0044 02E0 b .L7
201 .L5:
42:Core/Src/soc_estimation.c **** } else {
ARM GAS /tmp/ccSOWY3y.s page 5
43:Core/Src/soc_estimation.c **** current_was_flowing = 0;
202 .loc 1 43 25
203 0046 274B ldr r3, .L11+8
204 0048 0022 movs r2, #0
205 004a 1A60 str r2, [r3]
206 .L7:
44:Core/Src/soc_estimation.c **** }
45:Core/Src/soc_estimation.c ****
46:Core/Src/soc_estimation.c **** if (now - last_current_time >= SOC_ESTIMATION_NO_CURRENT_TIME ||
207 .loc 1 46 11
208 004c 244B ldr r3, .L11+4
209 004e 1B68 ldr r3, [r3]
210 0050 FA68 ldr r2, [r7, #12]
211 0052 D31A subs r3, r2, r3
212 .loc 1 46 6
213 0054 274A ldr r2, .L11+24
214 0056 9342 cmp r3, r2
215 0058 03D8 bhi .L8
47:Core/Src/soc_estimation.c **** last_current_time == 0) {
216 .loc 1 47 25
217 005a 214B ldr r3, .L11+4
218 005c 1B68 ldr r3, [r3]
46:Core/Src/soc_estimation.c **** last_current_time == 0) {
219 .loc 1 46 65 discriminator 1
220 005e 002B cmp r3, #0
221 0060 13D1 bne .L9
222 .L8:
223 .LBB2:
48:Core/Src/soc_estimation.c **** // Assume we're measuring OCV if there's been no current for a while (or
49:Core/Src/soc_estimation.c **** // we've just turned on the battery).
50:Core/Src/soc_estimation.c **** uint8_t id = 0;
224 .loc 1 50 13
225 0062 0023 movs r3, #0
226 0064 FB70 strb r3, [r7, #3]
51:Core/Src/soc_estimation.c **** uint16_t min_voltage = 0;
227 .loc 1 51 14
228 0066 0023 movs r3, #0
229 0068 3B80 strh r3, [r7] @ movhi
52:Core/Src/soc_estimation.c **** sm_check_battery_temperature(&id, &min_voltage);
230 .loc 1 52 5
231 006a 3A46 mov r2, r7
232 006c FB1C adds r3, r7, #3
233 006e 1146 mov r1, r2
234 0070 1846 mov r0, r3
235 0072 FFF7FEFF bl sm_check_battery_temperature
53:Core/Src/soc_estimation.c **** current_soc = soc_for_ocv(min_voltage);
236 .loc 1 53 19
237 0076 3B88 ldrh r3, [r7]
238 0078 1846 mov r0, r3
239 007a FFF7FEFF bl soc_for_ocv
240 007e F0EE407A vmov.f32 s15, s0
241 .loc 1 53 17 discriminator 1
242 0082 194B ldr r3, .L11+12
243 0084 C3ED007A vstr.32 s15, [r3]
244 .LBE2:
47:Core/Src/soc_estimation.c **** // Assume we're measuring OCV if there's been no current for a while (or
245 .loc 1 47 31
ARM GAS /tmp/ccSOWY3y.s page 6
246 0088 23E0 b .L10
247 .L9:
248 .LBB3:
54:Core/Src/soc_estimation.c **** } else {
55:Core/Src/soc_estimation.c **** // Otherwise, use the current counter to update SoC
56:Core/Src/soc_estimation.c **** float as_delta = CURRENT_MEASUREMENT - mAs_before_current;
249 .loc 1 56 43
250 008a 144B ldr r3, .L11
251 008c 1B68 ldr r3, [r3]
252 008e 07EE903A vmov s15, r3 @ int
253 0092 B8EEE77A vcvt.f32.s32 s14, s15
254 0096 164B ldr r3, .L11+20
255 0098 D3ED007A vldr.32 s15, [r3]
256 .loc 1 56 11
257 009c 77EE677A vsub.f32 s15, s14, s15
258 00a0 C7ED027A vstr.32 s15, [r7, #8]
57:Core/Src/soc_estimation.c **** float soc_delta = as_delta / SOC_ESTIMATION_BATTERY_CAPACITY * 100;
259 .loc 1 57 32
260 00a4 97ED027A vldr.32 s14, [r7, #8]
261 00a8 DFED136A vldr.32 s13, .L11+28
262 00ac C7EE267A vdiv.f32 s15, s14, s13
263 .loc 1 57 11
264 00b0 9FED127A vldr.32 s14, .L11+32
265 00b4 67EE877A vmul.f32 s15, s15, s14
266 00b8 C7ED017A vstr.32 s15, [r7, #4]
58:Core/Src/soc_estimation.c **** current_soc = soc_before_current + soc_delta;
267 .loc 1 58 38
268 00bc 0B4B ldr r3, .L11+16
269 00be 93ED007A vldr.32 s14, [r3]
270 00c2 D7ED017A vldr.32 s15, [r7, #4]
271 00c6 77EE277A vadd.f32 s15, s14, s15
272 .loc 1 58 17
273 00ca 074B ldr r3, .L11+12
274 00cc C3ED007A vstr.32 s15, [r3]
275 .LBE3:
59:Core/Src/soc_estimation.c **** }
60:Core/Src/soc_estimation.c **** }
276 .loc 1 60 1
277 00d0 00BF nop
278 .L10:
279 00d2 00BF nop
280 00d4 1037 adds r7, r7, #16
281 .cfi_def_cfa_offset 8
282 00d6 BD46 mov sp, r7
283 .cfi_def_cfa_register 13
284 @ sp needed
285 00d8 80BD pop {r7, pc}
286 .L12:
287 00da 00BF .align 2
288 .L11:
289 00dc 00000000 .word CURRENT_MEASUREMENT
290 00e0 00000000 .word last_current_time
291 00e4 00000000 .word current_was_flowing
292 00e8 00000000 .word current_soc
293 00ec 00000000 .word soc_before_current
294 00f0 00000000 .word mAs_before_current
295 00f4 9F860100 .word 99999
ARM GAS /tmp/ccSOWY3y.s page 7
296 00f8 0000E146 .word 1189150720
297 00fc 0000C842 .word 1120403456
298 .cfi_endproc
299 .LFE131:
301 .section .text.soc_for_ocv,"ax",%progbits
302 .align 1
303 .global soc_for_ocv
304 .syntax unified
305 .thumb
306 .thumb_func
308 soc_for_ocv:
309 .LFB132:
61:Core/Src/soc_estimation.c ****
62:Core/Src/soc_estimation.c **** float soc_for_ocv(uint16_t ocv) {
310 .loc 1 62 33
311 .cfi_startproc
312 @ args = 0, pretend = 0, frame = 40
313 @ frame_needed = 1, uses_anonymous_args = 0
314 @ link register save eliminated.
315 0000 80B4 push {r7}
316 .cfi_def_cfa_offset 4
317 .cfi_offset 7, -4
318 0002 8BB0 sub sp, sp, #44
319 .cfi_def_cfa_offset 48
320 0004 00AF add r7, sp, #0
321 .cfi_def_cfa_register 7
322 0006 0346 mov r3, r0
323 0008 FB80 strh r3, [r7, #6] @ movhi
63:Core/Src/soc_estimation.c **** size_t i = 0;
324 .loc 1 63 10
325 000a 0023 movs r3, #0
326 000c 7B62 str r3, [r7, #36]
64:Core/Src/soc_estimation.c **** size_t array_length = sizeof(OCV_SOC_PAIRS) / sizeof(*OCV_SOC_PAIRS);
327 .loc 1 64 10
328 000e 0B23 movs r3, #11
329 0010 3B62 str r3, [r7, #32]
65:Core/Src/soc_estimation.c **** // Find the index of the first element with OCV greater than the target OCV
66:Core/Src/soc_estimation.c **** while (i < array_length && OCV_SOC_PAIRS[i].ocv <= ocv) {
330 .loc 1 66 9
331 0012 02E0 b .L14
332 .L16:
67:Core/Src/soc_estimation.c **** i++;
333 .loc 1 67 6
334 0014 7B6A ldr r3, [r7, #36]
335 0016 0133 adds r3, r3, #1
336 0018 7B62 str r3, [r7, #36]
337 .L14:
66:Core/Src/soc_estimation.c **** i++;
338 .loc 1 66 27
339 001a 7A6A ldr r2, [r7, #36]
340 001c 3B6A ldr r3, [r7, #32]
341 001e 9A42 cmp r2, r3
342 0020 06D2 bcs .L15
66:Core/Src/soc_estimation.c **** i++;
343 .loc 1 66 46 discriminator 1
344 0022 2F4A ldr r2, .L20
345 0024 7B6A ldr r3, [r7, #36]
ARM GAS /tmp/ccSOWY3y.s page 8
346 0026 32F83330 ldrh r3, [r2, r3, lsl #3]
66:Core/Src/soc_estimation.c **** i++;
347 .loc 1 66 27 discriminator 1
348 002a FA88 ldrh r2, [r7, #6]
349 002c 9A42 cmp r2, r3
350 002e F1D2 bcs .L16
351 .L15:
68:Core/Src/soc_estimation.c **** }
69:Core/Src/soc_estimation.c ****
70:Core/Src/soc_estimation.c **** // If the target OCV is lower than the smallest OCV in the array, return the
71:Core/Src/soc_estimation.c **** // first SOC value
72:Core/Src/soc_estimation.c **** if (i == 0) {
352 .loc 1 72 6
353 0030 7B6A ldr r3, [r7, #36]
354 0032 002B cmp r3, #0
355 0034 02D1 bne .L17
73:Core/Src/soc_estimation.c **** return OCV_SOC_PAIRS[0].soc;
356 .loc 1 73 28
357 0036 2A4B ldr r3, .L20
358 0038 5B68 ldr r3, [r3, #4] @ float
359 003a 48E0 b .L18
360 .L17:
74:Core/Src/soc_estimation.c **** }
75:Core/Src/soc_estimation.c ****
76:Core/Src/soc_estimation.c **** // If the target OCV is higher than the largest OCV in the array, return the
77:Core/Src/soc_estimation.c **** // last SOC value
78:Core/Src/soc_estimation.c **** if (i == array_length) {
361 .loc 1 78 6
362 003c 7A6A ldr r2, [r7, #36]
363 003e 3B6A ldr r3, [r7, #32]
364 0040 9A42 cmp r2, r3
365 0042 07D1 bne .L19
79:Core/Src/soc_estimation.c **** return OCV_SOC_PAIRS[array_length - 1].soc;
366 .loc 1 79 39
367 0044 3B6A ldr r3, [r7, #32]
368 0046 013B subs r3, r3, #1
369 .loc 1 79 43
370 0048 254A ldr r2, .L20
371 004a DB00 lsls r3, r3, #3
372 004c 1344 add r3, r3, r2
373 004e 0433 adds r3, r3, #4
374 0050 1B68 ldr r3, [r3] @ float
375 0052 3CE0 b .L18
376 .L19:
80:Core/Src/soc_estimation.c **** }
81:Core/Src/soc_estimation.c ****
82:Core/Src/soc_estimation.c **** // Perform linear interpolation
83:Core/Src/soc_estimation.c **** uint16_t ocv1 = OCV_SOC_PAIRS[i - 1].ocv;
377 .loc 1 83 35
378 0054 7B6A ldr r3, [r7, #36]
379 0056 013B subs r3, r3, #1
380 .loc 1 83 12
381 0058 214A ldr r2, .L20
382 005a 32F83330 ldrh r3, [r2, r3, lsl #3] @ movhi
383 005e FB83 strh r3, [r7, #30] @ movhi
84:Core/Src/soc_estimation.c **** uint16_t ocv2 = OCV_SOC_PAIRS[i].ocv;
384 .loc 1 84 12
ARM GAS /tmp/ccSOWY3y.s page 9
385 0060 1F4A ldr r2, .L20
386 0062 7B6A ldr r3, [r7, #36]
387 0064 32F83330 ldrh r3, [r2, r3, lsl #3] @ movhi
388 0068 BB83 strh r3, [r7, #28] @ movhi
85:Core/Src/soc_estimation.c **** float soc1 = OCV_SOC_PAIRS[i - 1].soc;
389 .loc 1 85 32
390 006a 7B6A ldr r3, [r7, #36]
391 006c 013B subs r3, r3, #1
392 .loc 1 85 9
393 006e 1C4A ldr r2, .L20
394 0070 DB00 lsls r3, r3, #3
395 0072 1344 add r3, r3, r2
396 0074 0433 adds r3, r3, #4
397 0076 1B68 ldr r3, [r3] @ float
398 0078 BB61 str r3, [r7, #24] @ float
86:Core/Src/soc_estimation.c **** float soc2 = OCV_SOC_PAIRS[i].soc;
399 .loc 1 86 9
400 007a 194A ldr r2, .L20
401 007c 7B6A ldr r3, [r7, #36]
402 007e DB00 lsls r3, r3, #3
403 0080 1344 add r3, r3, r2
404 0082 0433 adds r3, r3, #4
405 0084 1B68 ldr r3, [r3] @ float
406 0086 7B61 str r3, [r7, #20] @ float
87:Core/Src/soc_estimation.c ****
88:Core/Src/soc_estimation.c **** float slope = (soc2 - soc1) / (ocv2 - ocv1);
407 .loc 1 88 23
408 0088 97ED057A vldr.32 s14, [r7, #20]
409 008c D7ED067A vldr.32 s15, [r7, #24]
410 0090 77EE676A vsub.f32 s13, s14, s15
411 .loc 1 88 39
412 0094 BA8B ldrh r2, [r7, #28]
413 0096 FB8B ldrh r3, [r7, #30]
414 0098 D31A subs r3, r2, r3
415 .loc 1 88 31
416 009a 07EE903A vmov s15, r3 @ int
417 009e B8EEE77A vcvt.f32.s32 s14, s15
418 .loc 1 88 9
419 00a2 C6EE877A vdiv.f32 s15, s13, s14
420 00a6 C7ED047A vstr.32 s15, [r7, #16]
89:Core/Src/soc_estimation.c **** float interpolated_soc = soc1 + slope * (ocv - ocv1);
421 .loc 1 89 48
422 00aa FA88 ldrh r2, [r7, #6]
423 00ac FB8B ldrh r3, [r7, #30]
424 00ae D31A subs r3, r2, r3
425 .loc 1 89 41
426 00b0 07EE903A vmov s15, r3 @ int
427 00b4 B8EEE77A vcvt.f32.s32 s14, s15
428 00b8 D7ED047A vldr.32 s15, [r7, #16]
429 00bc 67EE277A vmul.f32 s15, s14, s15
430 .loc 1 89 9
431 00c0 97ED067A vldr.32 s14, [r7, #24]
432 00c4 77EE277A vadd.f32 s15, s14, s15
433 00c8 C7ED037A vstr.32 s15, [r7, #12]
90:Core/Src/soc_estimation.c ****
91:Core/Src/soc_estimation.c **** return interpolated_soc;
434 .loc 1 91 10
ARM GAS /tmp/ccSOWY3y.s page 10
435 00cc FB68 ldr r3, [r7, #12] @ float
436 .L18:
92:Core/Src/soc_estimation.c **** }
437 .loc 1 92 1
438 00ce 07EE903A vmov s15, r3
439 00d2 B0EE670A vmov.f32 s0, s15
440 00d6 2C37 adds r7, r7, #44
441 .cfi_def_cfa_offset 4
442 00d8 BD46 mov sp, r7
443 .cfi_def_cfa_register 13
444 @ sp needed
445 00da 5DF8047B ldr r7, [sp], #4
446 .cfi_restore 7
447 .cfi_def_cfa_offset 0
448 00de 7047 bx lr
449 .L21:
450 .align 2
451 .L20:
452 00e0 00000000 .word OCV_SOC_PAIRS
453 .cfi_endproc
454 .LFE132:
456 .text
457 .Letext0:
458 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl
459 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl
460 .file 4 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/lib/gcc/arm-none-e
461 .file 5 "Core/Inc/state_machine.h"
462 .file 6 "Core/Inc/soc_estimation.h"
463 .file 7 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h"
ARM GAS /tmp/ccSOWY3y.s page 11
DEFINED SYMBOLS
*ABS*:00000000 soc_estimation.c
/tmp/ccSOWY3y.s:25 .data.OCV_SOC_PAIRS:00000000 OCV_SOC_PAIRS
/tmp/ccSOWY3y.s:22 .data.OCV_SOC_PAIRS:00000000 $d
/tmp/ccSOWY3y.s:64 .bss.current_soc:00000000 current_soc
/tmp/ccSOWY3y.s:61 .bss.current_soc:00000000 $d
/tmp/ccSOWY3y.s:71 .bss.current_was_flowing:00000000 current_was_flowing
/tmp/ccSOWY3y.s:68 .bss.current_was_flowing:00000000 $d
/tmp/ccSOWY3y.s:78 .bss.last_current_time:00000000 last_current_time
/tmp/ccSOWY3y.s:75 .bss.last_current_time:00000000 $d
/tmp/ccSOWY3y.s:85 .bss.soc_before_current:00000000 soc_before_current
/tmp/ccSOWY3y.s:82 .bss.soc_before_current:00000000 $d
/tmp/ccSOWY3y.s:92 .bss.mAs_before_current:00000000 mAs_before_current
/tmp/ccSOWY3y.s:89 .bss.mAs_before_current:00000000 $d
/tmp/ccSOWY3y.s:95 .text.soc_init:00000000 $t
/tmp/ccSOWY3y.s:101 .text.soc_init:00000000 soc_init
/tmp/ccSOWY3y.s:137 .text.soc_init:00000024 $d
/tmp/ccSOWY3y.s:144 .text.soc_update:00000000 $t
/tmp/ccSOWY3y.s:150 .text.soc_update:00000000 soc_update
/tmp/ccSOWY3y.s:308 .text.soc_for_ocv:00000000 soc_for_ocv
/tmp/ccSOWY3y.s:289 .text.soc_update:000000dc $d
/tmp/ccSOWY3y.s:302 .text.soc_for_ocv:00000000 $t
/tmp/ccSOWY3y.s:452 .text.soc_for_ocv:000000e0 $d
UNDEFINED SYMBOLS
HAL_GetTick
sm_check_battery_temperature
CURRENT_MEASUREMENT