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 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