604 lines
24 KiB
Plaintext
604 lines
24 KiB
Plaintext
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
|