ARM GAS /tmp/cctkPVvk.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 "state_machine.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .file 1 "Core/Src/state_machine.c" 20 .global programming_mode 21 .section .bss.programming_mode,"aw",%nobits 24 programming_mode: 25 0000 00 .space 1 26 .global debugging_mode 27 .section .bss.debugging_mode,"aw",%nobits 30 debugging_mode: 31 0000 00 .space 1 32 .global state 33 .section .bss.state,"aw",%nobits 34 .align 2 37 state: 38 0000 00000000 .space 6 38 0000 39 .global RELAY_BAT_SIDE_VOLTAGE 40 .section .bss.RELAY_BAT_SIDE_VOLTAGE,"aw",%nobits 41 .align 2 44 RELAY_BAT_SIDE_VOLTAGE: 45 0000 00000000 .space 4 46 .global RELAY_ESC_SIDE_VOLTAGE 47 .section .bss.RELAY_ESC_SIDE_VOLTAGE,"aw",%nobits 48 .align 2 51 RELAY_ESC_SIDE_VOLTAGE: 52 0000 00000000 .space 4 53 .global CURRENT_MEASUREMENT 54 .section .bss.CURRENT_MEASUREMENT,"aw",%nobits 55 .align 2 58 CURRENT_MEASUREMENT: 59 0000 00000000 .space 4 60 .global CURRENT_MEASUREMENT_ON 61 .section .bss.CURRENT_MEASUREMENT_ON,"aw",%nobits 64 CURRENT_MEASUREMENT_ON: 65 0000 00 .space 1 66 .global balancing_state 67 .section .bss.balancing_state,"aw",%nobits 70 balancing_state: 71 0000 00 .space 1 72 .global base_offset ARM GAS /tmp/cctkPVvk.s page 2 73 .section .bss.base_offset,"aw",%nobits 74 .align 2 77 base_offset: 78 0000 00000000 .space 4 79 .global error_timer 80 .section .bss.error_timer,"aw",%nobits 81 .align 2 84 error_timer: 85 0000 00000000 .space 4 86 .global precharge_timer 87 .section .bss.precharge_timer,"aw",%nobits 88 .align 2 91 precharge_timer: 92 0000 00000000 .space 4 93 .global discharge_timer 94 .section .bss.discharge_timer,"aw",%nobits 95 .align 2 98 discharge_timer: 99 0000 00000000 .space 4 100 .global balancing_timer 101 .section .bss.balancing_timer,"aw",%nobits 102 .align 2 105 balancing_timer: 106 0000 00000000 .space 4 107 .global eeprom_timer 108 .section .bss.eeprom_timer,"aw",%nobits 109 .align 2 112 eeprom_timer: 113 0000 00000000 .space 4 114 .global powerground_softstart_timer 115 .section .bss.powerground_softstart_timer,"aw",%nobits 116 .align 2 119 powerground_softstart_timer: 120 0000 00000000 .space 4 121 .global powerground_calibration_timer 122 .section .bss.powerground_calibration_timer,"aw",%nobits 123 .align 2 126 powerground_calibration_timer: 127 0000 00000000 .space 4 128 .global powerground_calibration_stage 129 .section .bss.powerground_calibration_stage,"aw",%nobits 132 powerground_calibration_stage: 133 0000 00 .space 1 134 .global current_powerground_status 135 .section .bss.current_powerground_status,"aw",%nobits 138 current_powerground_status: 139 0000 00 .space 1 140 .global target_powerground_status 141 .section .bss.target_powerground_status,"aw",%nobits 144 target_powerground_status: 145 0000 00 .space 1 146 .section .bss.timestamp,"aw",%nobits 147 .align 2 150 timestamp: 151 0000 00000000 .space 4 152 .section .text.sm_init,"ax",%progbits 153 .align 1 ARM GAS /tmp/cctkPVvk.s page 3 154 .global sm_init 155 .syntax unified 156 .thumb 157 .thumb_func 159 sm_init: 160 .LFB130: 1:Core/Src/state_machine.c **** /* 2:Core/Src/state_machine.c **** * state_machine.h 3:Core/Src/state_machine.c **** * 4:Core/Src/state_machine.c **** * Created on: 07.07.2024 5:Core/Src/state_machine.c **** * Author: Hamza 6:Core/Src/state_machine.c **** */ 7:Core/Src/state_machine.c **** 8:Core/Src/state_machine.c **** #include 9:Core/Src/state_machine.c **** #include 10:Core/Src/state_machine.c **** #include "ADBMS_Abstraction.h" 11:Core/Src/state_machine.c **** #include "AMS_HighLevel.h" 12:Core/Src/state_machine.c **** #include "PWM_control.h" 13:Core/Src/state_machine.c **** #include "can.h" 14:Core/Src/state_machine.c **** #include "eeprom.h" 15:Core/Src/state_machine.c **** #include "stm32f3xx_hal.h" 16:Core/Src/state_machine.c **** 17:Core/Src/state_machine.c **** // Time to wait after reaching 95% of battery voltage before exiting precharge 18:Core/Src/state_machine.c **** // Set this to 1000 in scruti to demonstrate the voltage on the multimeter 19:Core/Src/state_machine.c **** #define PRECHARGE_DURATION 8000 // ms 20:Core/Src/state_machine.c **** // Time to wait for discharge 21:Core/Src/state_machine.c **** #define DISCHARGE_DURATION 8000 // ms 22:Core/Src/state_machine.c **** // Time to wait between closing relays 23:Core/Src/state_machine.c **** #define RELAY_CLOSE_WAIT 10 // ms 24:Core/Src/state_machine.c **** // waiting time between to eeprom writes 25:Core/Src/state_machine.c **** #define EEPROM_WRITE_FREQ 1000 26:Core/Src/state_machine.c **** // how delay between steps of 5 -> 15ms * (100/5) = 300ms 27:Core/Src/state_machine.c **** #define POWERGROUND_SOFTSTART_INCREMENT_DELAY 15 28:Core/Src/state_machine.c **** // after errors are cleared wait for ERROR_LATCH_TIME ms before returning to inactive mode 29:Core/Src/state_machine.c **** #define ERROR_LATCH_TIME 10000 //ms 30:Core/Src/state_machine.c **** 31:Core/Src/state_machine.c **** /* 32:Core/Src/state_machine.c **** 10 33:Core/Src/state_machine.c **** 20 34:Core/Src/state_machine.c **** 30 35:Core/Src/state_machine.c **** 40 36:Core/Src/state_machine.c **** 50 37:Core/Src/state_machine.c **** 60 38:Core/Src/state_machine.c **** 70 39:Core/Src/state_machine.c **** 80 40:Core/Src/state_machine.c **** 90 41:Core/Src/state_machine.c **** 100 42:Core/Src/state_machine.c **** */ 43:Core/Src/state_machine.c **** 44:Core/Src/state_machine.c **** bool programming_mode; 45:Core/Src/state_machine.c **** bool debugging_mode; 46:Core/Src/state_machine.c **** 47:Core/Src/state_machine.c **** StateHandle state; 48:Core/Src/state_machine.c **** int32_t RELAY_BAT_SIDE_VOLTAGE; 49:Core/Src/state_machine.c **** int32_t RELAY_ESC_SIDE_VOLTAGE; 50:Core/Src/state_machine.c **** int32_t CURRENT_MEASUREMENT; 51:Core/Src/state_machine.c **** bool CURRENT_MEASUREMENT_ON; ARM GAS /tmp/cctkPVvk.s page 4 52:Core/Src/state_machine.c **** bool balancing_state; 53:Core/Src/state_machine.c **** float base_offset = 0; 54:Core/Src/state_machine.c **** 55:Core/Src/state_machine.c **** uint32_t error_timer; 56:Core/Src/state_machine.c **** uint32_t precharge_timer; 57:Core/Src/state_machine.c **** uint32_t discharge_timer; 58:Core/Src/state_machine.c **** uint32_t balancing_timer; 59:Core/Src/state_machine.c **** uint32_t eeprom_timer; 60:Core/Src/state_machine.c **** 61:Core/Src/state_machine.c **** uint32_t powerground_softstart_timer; 62:Core/Src/state_machine.c **** uint32_t powerground_calibration_timer; 63:Core/Src/state_machine.c **** uint8_t powerground_calibration_stage; 64:Core/Src/state_machine.c **** 65:Core/Src/state_machine.c **** uint8_t current_powerground_status; 66:Core/Src/state_machine.c **** uint8_t target_powerground_status; 67:Core/Src/state_machine.c **** 68:Core/Src/state_machine.c **** static uint32_t timestamp; 69:Core/Src/state_machine.c **** 70:Core/Src/state_machine.c **** void sm_init(){ 161 .loc 1 70 15 162 .cfi_startproc 163 @ args = 0, pretend = 0, frame = 0 164 @ frame_needed = 1, uses_anonymous_args = 0 165 @ link register save eliminated. 166 0000 80B4 push {r7} 167 .cfi_def_cfa_offset 4 168 .cfi_offset 7, -4 169 0002 00AF add r7, sp, #0 170 .cfi_def_cfa_register 7 71:Core/Src/state_machine.c **** state.current_state = STATE_INACTIVE; 171 .loc 1 71 23 172 0004 164B ldr r3, .L2 173 0006 0022 movs r2, #0 174 0008 1A70 strb r2, [r3] 72:Core/Src/state_machine.c **** state.target_state = STATE_INACTIVE; 175 .loc 1 72 22 176 000a 154B ldr r3, .L2 177 000c 0022 movs r2, #0 178 000e 5A70 strb r2, [r3, #1] 73:Core/Src/state_machine.c **** state.error_source = 0; 179 .loc 1 73 22 180 0010 134B ldr r3, .L2 181 0012 0022 movs r2, #0 182 0014 5A80 strh r2, [r3, #2] @ movhi 74:Core/Src/state_machine.c **** precharge_timer = discharge_timer = powerground_calibration_timer = error_timer = eeprom_timer = 183 .loc 1 74 116 184 0016 134B ldr r3, .L2+4 185 0018 0022 movs r2, #0 186 001a 1A60 str r2, [r3] 187 .loc 1 74 98 188 001c 114B ldr r3, .L2+4 189 001e 1B68 ldr r3, [r3] 190 0020 114A ldr r2, .L2+8 191 0022 1360 str r3, [r2] 192 .loc 1 74 83 193 0024 104B ldr r3, .L2+8 194 0026 1B68 ldr r3, [r3] ARM GAS /tmp/cctkPVvk.s page 5 195 0028 104A ldr r2, .L2+12 196 002a 1360 str r3, [r2] 197 .loc 1 74 69 198 002c 0F4B ldr r3, .L2+12 199 002e 1B68 ldr r3, [r3] 200 0030 0F4A ldr r2, .L2+16 201 0032 1360 str r3, [r2] 202 .loc 1 74 37 203 0034 0E4B ldr r3, .L2+16 204 0036 1B68 ldr r3, [r3] 205 0038 0E4A ldr r2, .L2+20 206 003a 1360 str r3, [r2] 207 .loc 1 74 19 208 003c 0D4B ldr r3, .L2+20 209 003e 1B68 ldr r3, [r3] 210 0040 0D4A ldr r2, .L2+24 211 0042 1360 str r3, [r2] 75:Core/Src/state_machine.c **** programming_mode = 0; 212 .loc 1 75 20 213 0044 0D4B ldr r3, .L2+28 214 0046 0022 movs r2, #0 215 0048 1A70 strb r2, [r3] 76:Core/Src/state_machine.c **** debugging_mode = 0; 216 .loc 1 76 18 217 004a 0D4B ldr r3, .L2+32 218 004c 0022 movs r2, #0 219 004e 1A70 strb r2, [r3] 77:Core/Src/state_machine.c **** balancing_state = 0; 220 .loc 1 77 19 221 0050 0C4B ldr r3, .L2+36 222 0052 0022 movs r2, #0 223 0054 1A70 strb r2, [r3] 78:Core/Src/state_machine.c **** } 224 .loc 1 78 1 225 0056 00BF nop 226 0058 BD46 mov sp, r7 227 .cfi_def_cfa_register 13 228 @ sp needed 229 005a 5DF8047B ldr r7, [sp], #4 230 .cfi_restore 7 231 .cfi_def_cfa_offset 0 232 005e 7047 bx lr 233 .L3: 234 .align 2 235 .L2: 236 0060 00000000 .word state 237 0064 00000000 .word balancing_timer 238 0068 00000000 .word eeprom_timer 239 006c 00000000 .word error_timer 240 0070 00000000 .word powerground_calibration_timer 241 0074 00000000 .word discharge_timer 242 0078 00000000 .word precharge_timer 243 007c 00000000 .word programming_mode 244 0080 00000000 .word debugging_mode 245 0084 00000000 .word balancing_state 246 .cfi_endproc 247 .LFE130: ARM GAS /tmp/cctkPVvk.s page 6 249 .global __aeabi_f2d 250 .global __aeabi_dsub 251 .global __aeabi_dmul 252 .global __aeabi_d2iz 253 .section .text.sm_update,"ax",%progbits 254 .align 1 255 .global sm_update 256 .syntax unified 257 .thumb 258 .thumb_func 260 sm_update: 261 .LFB131: 79:Core/Src/state_machine.c **** 80:Core/Src/state_machine.c **** void sm_update(){ 262 .loc 1 80 17 263 .cfi_startproc 264 @ args = 0, pretend = 0, frame = 0 265 @ frame_needed = 1, uses_anonymous_args = 0 266 0000 80B5 push {r7, lr} 267 .cfi_def_cfa_offset 8 268 .cfi_offset 7, -8 269 .cfi_offset 14, -4 270 0002 00AF add r7, sp, #0 271 .cfi_def_cfa_register 7 81:Core/Src/state_machine.c **** 82:Core/Src/state_machine.c **** CURRENT_MEASUREMENT = (module.auxVoltages[0] > 2495) ? (module.auxVoltages[0] - (2495.0)) * (300. 272 .loc 1 82 44 273 0004 6A4B ldr r3, .L21+24 274 0006 D3ED087A vldr.32 s15, [r3, #32] 275 .loc 1 82 23 276 000a 9FED6A7A vldr.32 s14, .L21+28 277 000e F4EEC77A vcmpe.f32 s15, s14 278 0012 F1EE10FA vmrs APSR_nzcv, FPSCR 279 0016 1ADD ble .L19 280 .loc 1 82 77 discriminator 1 281 0018 654B ldr r3, .L21+24 282 001a 1B6A ldr r3, [r3, #32] @ float 283 001c 1846 mov r0, r3 @ float 284 001e FFF7FEFF bl __aeabi_f2d 285 .loc 1 82 81 discriminator 1 286 0022 5DA3 adr r3, .L21 287 0024 D3E90023 ldrd r2, [r3] 288 0028 FFF7FEFF bl __aeabi_dsub 289 002c 0246 mov r2, r0 290 002e 0B46 mov r3, r1 291 0030 1046 mov r0, r2 292 0032 1946 mov r1, r3 293 .loc 1 82 93 discriminator 1 294 0034 5AA3 adr r3, .L21+8 295 0036 D3E90023 ldrd r2, [r3] 296 003a FFF7FEFF bl __aeabi_dmul 297 003e 0246 mov r2, r0 298 0040 0B46 mov r3, r1 299 .loc 1 82 23 discriminator 1 300 0042 1046 mov r0, r2 301 0044 1946 mov r1, r3 302 0046 FFF7FEFF bl __aeabi_d2iz ARM GAS /tmp/cctkPVvk.s page 7 303 004a 0346 mov r3, r0 304 004c 00E0 b .L7 305 .L19: 306 .loc 1 82 23 is_stmt 0 discriminator 2 307 004e 0023 movs r3, #0 308 .L7: 309 .loc 1 82 23 discriminator 4 310 0050 594A ldr r2, .L21+32 311 0052 1360 str r3, [r2] 83:Core/Src/state_machine.c **** CURRENT_MEASUREMENT_ON = (module.auxVoltages[1] > 2400); 312 .loc 1 83 47 is_stmt 1 313 0054 564B ldr r3, .L21+24 314 0056 D3ED097A vldr.32 s15, [r3, #36] 315 .loc 1 83 51 316 005a 9FED587A vldr.32 s14, .L21+36 317 005e F4EEC77A vcmpe.f32 s15, s14 318 0062 F1EE10FA vmrs APSR_nzcv, FPSCR 319 0066 CCBF ite gt 320 0068 0123 movgt r3, #1 321 006a 0023 movle r3, #0 322 006c DAB2 uxtb r2, r3 323 .loc 1 83 26 324 006e 544B ldr r3, .L21+40 325 0070 1A70 strb r2, [r3] 84:Core/Src/state_machine.c **** RELAY_ESC_SIDE_VOLTAGE = module.auxVoltages[2] * 15.19; 326 .loc 1 84 46 327 0072 4F4B ldr r3, .L21+24 328 0074 9B6A ldr r3, [r3, #40] @ float 329 0076 1846 mov r0, r3 @ float 330 0078 FFF7FEFF bl __aeabi_f2d 331 .loc 1 84 50 332 007c 4AA3 adr r3, .L21+16 333 007e D3E90023 ldrd r2, [r3] 334 0082 FFF7FEFF bl __aeabi_dmul 335 0086 0246 mov r2, r0 336 0088 0B46 mov r3, r1 337 .loc 1 84 26 338 008a 1046 mov r0, r2 339 008c 1946 mov r1, r3 340 008e FFF7FEFF bl __aeabi_d2iz 341 0092 0346 mov r3, r0 342 0094 4B4A ldr r2, .L21+44 343 0096 1360 str r3, [r2] 85:Core/Src/state_machine.c **** RELAY_BAT_SIDE_VOLTAGE = module.auxVoltages[3] * 15.19; // the calculation says the factor is 344 .loc 1 85 46 345 0098 454B ldr r3, .L21+24 346 009a DB6A ldr r3, [r3, #44] @ float 347 009c 1846 mov r0, r3 @ float 348 009e FFF7FEFF bl __aeabi_f2d 349 .loc 1 85 50 350 00a2 41A3 adr r3, .L21+16 351 00a4 D3E90023 ldrd r2, [r3] 352 00a8 FFF7FEFF bl __aeabi_dmul 353 00ac 0246 mov r2, r0 354 00ae 0B46 mov r3, r1 355 .loc 1 85 26 356 00b0 1046 mov r0, r2 ARM GAS /tmp/cctkPVvk.s page 8 357 00b2 1946 mov r1, r3 358 00b4 FFF7FEFF bl __aeabi_d2iz 359 00b8 0346 mov r3, r0 360 00ba 434A ldr r2, .L21+48 361 00bc 1360 str r3, [r2] 86:Core/Src/state_machine.c **** 87:Core/Src/state_machine.c **** //if (can_timeout_timer < HAL_GetTick()) 88:Core/Src/state_machine.c **** // state.current_state = state.target_state = STATE_INACTIVE; 89:Core/Src/state_machine.c **** /* 90:Core/Src/state_machine.c **** if (eeprom_timer < HAL_GetTick()){ 91:Core/Src/state_machine.c **** eeprom_write_status(); 92:Core/Src/state_machine.c **** eeprom_timer = HAL_GetTick() + EEPROM_WRITE_FREQ; 93:Core/Src/state_machine.c **** } 94:Core/Src/state_machine.c **** */ 95:Core/Src/state_machine.c **** can_handle_send_status(); 362 .loc 1 95 3 363 00be FFF7FEFF bl can_handle_send_status 96:Core/Src/state_machine.c **** can_handle_send_log(); 364 .loc 1 96 3 365 00c2 FFF7FEFF bl can_handle_send_log 97:Core/Src/state_machine.c **** sm_check_errors(); 366 .loc 1 97 3 367 00c6 FFF7FEFF bl sm_check_errors 98:Core/Src/state_machine.c **** sm_precharge_discharge_manager(); 368 .loc 1 98 3 369 00ca FFF7FEFF bl sm_precharge_discharge_manager 99:Core/Src/state_machine.c **** //sm_calibrate_powerground(); 100:Core/Src/state_machine.c **** sm_balancing(); 370 .loc 1 100 3 371 00ce FFF7FEFF bl sm_balancing 101:Core/Src/state_machine.c **** sm_powerground_manager(); 372 .loc 1 101 3 373 00d2 FFF7FEFF bl sm_powerground_manager 102:Core/Src/state_machine.c **** tmp1075_measure(); 374 .loc 1 102 3 375 00d6 FFF7FEFF bl tmp1075_measure 103:Core/Src/state_machine.c **** status_led_update(); 376 .loc 1 103 3 377 00da FFF7FEFF bl status_led_update 104:Core/Src/state_machine.c **** soc_update(); 378 .loc 1 104 3 379 00de FFF7FEFF bl soc_update 105:Core/Src/state_machine.c **** 106:Core/Src/state_machine.c **** switch (state.current_state) { 380 .loc 1 106 16 381 00e2 3A4B ldr r3, .L21+52 382 00e4 1B78 ldrb r3, [r3] @ zero_extendqisi2 383 .loc 1 106 3 384 00e6 072B cmp r3, #7 385 00e8 4AD8 bhi .L8 386 00ea 01A2 adr r2, .L10 387 00ec 52F823F0 ldr pc, [r2, r3, lsl #2] 388 .p2align 2 389 .L10: 390 00f0 11010000 .word .L17+1 391 00f4 1F010000 .word .L16+1 392 00f8 2D010000 .word .L15+1 ARM GAS /tmp/cctkPVvk.s page 9 393 00fc 3B010000 .word .L14+1 394 0100 49010000 .word .L13+1 395 0104 57010000 .word .L12+1 396 0108 65010000 .word .L11+1 397 010c 73010000 .word .L9+1 398 .p2align 1 399 .L17: 107:Core/Src/state_machine.c **** case STATE_INACTIVE: 108:Core/Src/state_machine.c **** state.current_state = sm_update_inactive(); // monitor only 400 .loc 1 108 29 401 0110 FFF7FEFF bl sm_update_inactive 402 0114 0346 mov r3, r0 403 0116 1A46 mov r2, r3 404 .loc 1 108 27 discriminator 1 405 0118 2C4B ldr r3, .L21+52 406 011a 1A70 strb r2, [r3] 109:Core/Src/state_machine.c **** break; 407 .loc 1 109 7 408 011c 30E0 b .L8 409 .L16: 110:Core/Src/state_machine.c **** case STATE_PRECHARGE: 111:Core/Src/state_machine.c **** state.current_state = sm_update_precharge(); // set PRECHARGE 410 .loc 1 111 29 411 011e FFF7FEFF bl sm_update_precharge 412 0122 0346 mov r3, r0 413 0124 1A46 mov r2, r3 414 .loc 1 111 27 discriminator 1 415 0126 294B ldr r3, .L21+52 416 0128 1A70 strb r2, [r3] 112:Core/Src/state_machine.c **** break; 417 .loc 1 112 7 418 012a 29E0 b .L8 419 .L15: 113:Core/Src/state_machine.c **** case STATE_READY: 114:Core/Src/state_machine.c **** state.current_state = sm_update_ready(); 420 .loc 1 114 29 421 012c FFF7FEFF bl sm_update_ready 422 0130 0346 mov r3, r0 423 0132 1A46 mov r2, r3 424 .loc 1 114 27 discriminator 1 425 0134 254B ldr r3, .L21+52 426 0136 1A70 strb r2, [r3] 115:Core/Src/state_machine.c **** break; 427 .loc 1 115 7 428 0138 22E0 b .L8 429 .L14: 116:Core/Src/state_machine.c **** case STATE_ACTIVE: 117:Core/Src/state_machine.c **** state.current_state = sm_update_active(); 430 .loc 1 117 29 431 013a FFF7FEFF bl sm_update_active 432 013e 0346 mov r3, r0 433 0140 1A46 mov r2, r3 434 .loc 1 117 27 discriminator 1 435 0142 224B ldr r3, .L21+52 436 0144 1A70 strb r2, [r3] 118:Core/Src/state_machine.c **** break; 437 .loc 1 118 7 ARM GAS /tmp/cctkPVvk.s page 10 438 0146 1BE0 b .L8 439 .L13: 119:Core/Src/state_machine.c **** case STATE_DISCHARGE: 120:Core/Src/state_machine.c **** state.current_state = sm_update_discharge(); 440 .loc 1 120 29 441 0148 FFF7FEFF bl sm_update_discharge 442 014c 0346 mov r3, r0 443 014e 1A46 mov r2, r3 444 .loc 1 120 27 discriminator 1 445 0150 1E4B ldr r3, .L21+52 446 0152 1A70 strb r2, [r3] 121:Core/Src/state_machine.c **** break; 447 .loc 1 121 7 448 0154 14E0 b .L8 449 .L12: 122:Core/Src/state_machine.c **** case STATE_CHARGING_PRECHARGE: 123:Core/Src/state_machine.c **** state.current_state = sm_update_charging_precharge(); 450 .loc 1 123 29 451 0156 FFF7FEFF bl sm_update_charging_precharge 452 015a 0346 mov r3, r0 453 015c 1A46 mov r2, r3 454 .loc 1 123 27 discriminator 1 455 015e 1B4B ldr r3, .L21+52 456 0160 1A70 strb r2, [r3] 124:Core/Src/state_machine.c **** break; 457 .loc 1 124 7 458 0162 0DE0 b .L8 459 .L11: 125:Core/Src/state_machine.c **** case STATE_CHARGING: 126:Core/Src/state_machine.c **** state.current_state = sm_update_charging(); 460 .loc 1 126 29 461 0164 FFF7FEFF bl sm_update_charging 462 0168 0346 mov r3, r0 463 016a 1A46 mov r2, r3 464 .loc 1 126 27 discriminator 1 465 016c 174B ldr r3, .L21+52 466 016e 1A70 strb r2, [r3] 127:Core/Src/state_machine.c **** break; 467 .loc 1 127 7 468 0170 06E0 b .L8 469 .L9: 128:Core/Src/state_machine.c **** case STATE_ERROR: 129:Core/Src/state_machine.c **** state.current_state = sm_update_error(); // enter the correct ERROR state 470 .loc 1 129 29 471 0172 FFF7FEFF bl sm_update_error 472 0176 0346 mov r3, r0 473 0178 1A46 mov r2, r3 474 .loc 1 129 27 discriminator 1 475 017a 144B ldr r3, .L21+52 476 017c 1A70 strb r2, [r3] 130:Core/Src/state_machine.c **** break; 477 .loc 1 130 7 478 017e 00BF nop 479 .L8: 131:Core/Src/state_machine.c **** } 132:Core/Src/state_machine.c **** 133:Core/Src/state_machine.c **** sm_set_relay_positions(state.current_state); ARM GAS /tmp/cctkPVvk.s page 11 480 .loc 1 133 3 481 0180 124B ldr r3, .L21+52 482 0182 1B78 ldrb r3, [r3] @ zero_extendqisi2 483 0184 1846 mov r0, r3 484 0186 FFF7FEFF bl sm_set_relay_positions 134:Core/Src/state_machine.c **** state.target_state = state.current_state; 485 .loc 1 134 29 486 018a 104B ldr r3, .L21+52 487 018c 1A78 ldrb r2, [r3] @ zero_extendqisi2 488 .loc 1 134 22 489 018e 0F4B ldr r3, .L21+52 490 0190 5A70 strb r2, [r3, #1] 135:Core/Src/state_machine.c **** } 491 .loc 1 135 1 492 0192 00BF nop 493 0194 80BD pop {r7, pc} 494 .L22: 495 0196 00BF .align 3 496 .L21: 497 0198 00000000 .word 0 498 019c 007EA340 .word 1084456448 499 01a0 00000000 .word 0 500 01a4 00C07240 .word 1081262080 501 01a8 E17A14AE .word -1374389535 502 01ac 47612E40 .word 1076781383 503 01b0 00000000 .word module 504 01b4 00F01B45 .word 1159458816 505 01b8 00000000 .word CURRENT_MEASUREMENT 506 01bc 00001645 .word 1159069696 507 01c0 00000000 .word CURRENT_MEASUREMENT_ON 508 01c4 00000000 .word RELAY_ESC_SIDE_VOLTAGE 509 01c8 00000000 .word RELAY_BAT_SIDE_VOLTAGE 510 01cc 00000000 .word state 511 .cfi_endproc 512 .LFE131: 514 .section .text.sm_handle_ams_in,"ax",%progbits 515 .align 1 516 .global sm_handle_ams_in 517 .syntax unified 518 .thumb 519 .thumb_func 521 sm_handle_ams_in: 522 .LFB132: 136:Core/Src/state_machine.c **** 137:Core/Src/state_machine.c **** void sm_handle_ams_in(const uint8_t *data){ 523 .loc 1 137 43 524 .cfi_startproc 525 @ args = 0, pretend = 0, frame = 8 526 @ frame_needed = 1, uses_anonymous_args = 0 527 0000 80B5 push {r7, lr} 528 .cfi_def_cfa_offset 8 529 .cfi_offset 7, -8 530 .cfi_offset 14, -4 531 0002 82B0 sub sp, sp, #8 532 .cfi_def_cfa_offset 16 533 0004 00AF add r7, sp, #0 534 .cfi_def_cfa_register 7 ARM GAS /tmp/cctkPVvk.s page 12 535 0006 7860 str r0, [r7, #4] 138:Core/Src/state_machine.c **** if (programming_mode == 1 && (state.current_state == STATE_READY || state.current_state == STATE_ 536 .loc 1 138 24 537 0008 3D4B ldr r3, .L46 538 000a 1B78 ldrb r3, [r3] @ zero_extendqisi2 539 .loc 1 138 6 540 000c 002B cmp r3, #0 541 000e 0DD0 beq .L24 542 .loc 1 138 38 discriminator 1 543 0010 3C4B ldr r3, .L46+4 544 0012 1B78 ldrb r3, [r3] @ zero_extendqisi2 545 .loc 1 138 29 discriminator 1 546 0014 022B cmp r3, #2 547 0016 03D0 beq .L25 548 .loc 1 138 76 discriminator 3 549 0018 3A4B ldr r3, .L46+4 550 001a 1B78 ldrb r3, [r3] @ zero_extendqisi2 551 .loc 1 138 68 discriminator 3 552 001c 032B cmp r3, #3 553 001e 05D1 bne .L24 554 .L25: 555 .loc 1 138 138 discriminator 4 556 0020 7B68 ldr r3, [r7, #4] 557 0022 0133 adds r3, r3, #1 558 .loc 1 138 110 discriminator 4 559 0024 1B78 ldrb r3, [r3] @ zero_extendqisi2 560 0026 1846 mov r0, r3 561 0028 FFF7FEFF bl PWM_powerground_control 562 .L24: 139:Core/Src/state_machine.c **** 140:Core/Src/state_machine.c **** switch (data[0]) { 563 .loc 1 140 15 564 002c 7B68 ldr r3, [r7, #4] 565 002e 1B78 ldrb r3, [r3] @ zero_extendqisi2 566 .loc 1 140 3 567 0030 FF2B cmp r3, #255 568 0032 50D0 beq .L26 569 0034 FF2B cmp r3, #255 570 0036 5EDC bgt .L40 571 0038 F12B cmp r3, #241 572 003a 53D0 beq .L41 573 003c F12B cmp r3, #241 574 003e 5ADC bgt .L40 575 0040 F02B cmp r3, #240 576 0042 40D0 beq .L29 577 0044 F02B cmp r3, #240 578 0046 56DC bgt .L40 579 0048 022B cmp r3, #2 580 004a 2BD0 beq .L30 581 004c 022B cmp r3, #2 582 004e 52DC bgt .L40 583 0050 002B cmp r3, #0 584 0052 02D0 beq .L31 585 0054 012B cmp r3, #1 586 0056 0BD0 beq .L32 141:Core/Src/state_machine.c **** case 0x00: 142:Core/Src/state_machine.c **** if (state.current_state != STATE_INACTIVE){ ARM GAS /tmp/cctkPVvk.s page 13 143:Core/Src/state_machine.c **** state.target_state = STATE_DISCHARGE; 144:Core/Src/state_machine.c **** PWM_powerground_control(255); 145:Core/Src/state_machine.c **** } 146:Core/Src/state_machine.c **** break; 147:Core/Src/state_machine.c **** case 0x01: 148:Core/Src/state_machine.c **** if (state.target_state == STATE_INACTIVE || state.target_state == STATE_DISCHARGE){ 149:Core/Src/state_machine.c **** state.target_state = STATE_PRECHARGE; 150:Core/Src/state_machine.c **** PWM_powerground_control(0); 151:Core/Src/state_machine.c **** } else if (state.target_state == STATE_ACTIVE){ 152:Core/Src/state_machine.c **** state.target_state = STATE_READY; 153:Core/Src/state_machine.c **** PWM_powerground_control(0); 154:Core/Src/state_machine.c **** } 155:Core/Src/state_machine.c **** break; 156:Core/Src/state_machine.c **** case 0x02: 157:Core/Src/state_machine.c **** if (state.current_state == STATE_READY || state.current_state == STATE_ACTIVE){ 158:Core/Src/state_machine.c **** target_powerground_status = data[1]; 159:Core/Src/state_machine.c **** state.target_state = STATE_ACTIVE; // READY -> ACTIVE 160:Core/Src/state_machine.c **** } 161:Core/Src/state_machine.c **** break; 162:Core/Src/state_machine.c **** case 0xF0: 163:Core/Src/state_machine.c **** if (state.current_state == STATE_INACTIVE){ 164:Core/Src/state_machine.c **** state.target_state = STATE_CHARGING_PRECHARGE; 165:Core/Src/state_machine.c **** } 166:Core/Src/state_machine.c **** break; 167:Core/Src/state_machine.c **** case 0xF1: // EEPROM 168:Core/Src/state_machine.c **** break; 169:Core/Src/state_machine.c **** if (state.current_state == STATE_INACTIVE) 170:Core/Src/state_machine.c **** // can_handle_dump(); 171:Core/Src/state_machine.c **** break; 172:Core/Src/state_machine.c **** case 0xFF: // EMERGENCY SHUTDOWN 173:Core/Src/state_machine.c **** state.current_state = STATE_DISCHARGE; 174:Core/Src/state_machine.c **** state.target_state = STATE_ERROR; 175:Core/Src/state_machine.c **** break; 176:Core/Src/state_machine.c **** } 177:Core/Src/state_machine.c **** } 587 .loc 1 177 1 588 0058 4DE0 b .L40 589 .L31: 142:Core/Src/state_machine.c **** state.target_state = STATE_DISCHARGE; 590 .loc 1 142 16 591 005a 2A4B ldr r3, .L46+4 592 005c 1B78 ldrb r3, [r3] @ zero_extendqisi2 142:Core/Src/state_machine.c **** state.target_state = STATE_DISCHARGE; 593 .loc 1 142 10 594 005e 002B cmp r3, #0 595 0060 42D0 beq .L42 143:Core/Src/state_machine.c **** PWM_powerground_control(255); 596 .loc 1 143 28 597 0062 284B ldr r3, .L46+4 598 0064 0422 movs r2, #4 599 0066 5A70 strb r2, [r3, #1] 144:Core/Src/state_machine.c **** } 600 .loc 1 144 9 601 0068 FF20 movs r0, #255 602 006a FFF7FEFF bl PWM_powerground_control 146:Core/Src/state_machine.c **** case 0x01: 603 .loc 1 146 7 ARM GAS /tmp/cctkPVvk.s page 14 604 006e 3BE0 b .L42 605 .L32: 148:Core/Src/state_machine.c **** state.target_state = STATE_PRECHARGE; 606 .loc 1 148 16 607 0070 244B ldr r3, .L46+4 608 0072 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 148:Core/Src/state_machine.c **** state.target_state = STATE_PRECHARGE; 609 .loc 1 148 10 610 0074 002B cmp r3, #0 611 0076 03D0 beq .L34 148:Core/Src/state_machine.c **** state.target_state = STATE_PRECHARGE; 612 .loc 1 148 56 discriminator 1 613 0078 224B ldr r3, .L46+4 614 007a 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 148:Core/Src/state_machine.c **** state.target_state = STATE_PRECHARGE; 615 .loc 1 148 48 discriminator 1 616 007c 042B cmp r3, #4 617 007e 06D1 bne .L35 618 .L34: 149:Core/Src/state_machine.c **** PWM_powerground_control(0); 619 .loc 1 149 28 620 0080 204B ldr r3, .L46+4 621 0082 0122 movs r2, #1 622 0084 5A70 strb r2, [r3, #1] 150:Core/Src/state_machine.c **** } else if (state.target_state == STATE_ACTIVE){ 623 .loc 1 150 9 624 0086 0020 movs r0, #0 625 0088 FFF7FEFF bl PWM_powerground_control 155:Core/Src/state_machine.c **** case 0x02: 626 .loc 1 155 7 627 008c 2EE0 b .L43 628 .L35: 151:Core/Src/state_machine.c **** state.target_state = STATE_READY; 629 .loc 1 151 23 630 008e 1D4B ldr r3, .L46+4 631 0090 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 151:Core/Src/state_machine.c **** state.target_state = STATE_READY; 632 .loc 1 151 17 633 0092 032B cmp r3, #3 634 0094 2AD1 bne .L43 152:Core/Src/state_machine.c **** PWM_powerground_control(0); 635 .loc 1 152 28 636 0096 1B4B ldr r3, .L46+4 637 0098 0222 movs r2, #2 638 009a 5A70 strb r2, [r3, #1] 153:Core/Src/state_machine.c **** } 639 .loc 1 153 9 640 009c 0020 movs r0, #0 641 009e FFF7FEFF bl PWM_powerground_control 155:Core/Src/state_machine.c **** case 0x02: 642 .loc 1 155 7 643 00a2 23E0 b .L43 644 .L30: 157:Core/Src/state_machine.c **** target_powerground_status = data[1]; 645 .loc 1 157 16 646 00a4 174B ldr r3, .L46+4 647 00a6 1B78 ldrb r3, [r3] @ zero_extendqisi2 ARM GAS /tmp/cctkPVvk.s page 15 157:Core/Src/state_machine.c **** target_powerground_status = data[1]; 648 .loc 1 157 10 649 00a8 022B cmp r3, #2 650 00aa 03D0 beq .L37 157:Core/Src/state_machine.c **** target_powerground_status = data[1]; 651 .loc 1 157 54 discriminator 1 652 00ac 154B ldr r3, .L46+4 653 00ae 1B78 ldrb r3, [r3] @ zero_extendqisi2 157:Core/Src/state_machine.c **** target_powerground_status = data[1]; 654 .loc 1 157 46 discriminator 1 655 00b0 032B cmp r3, #3 656 00b2 1DD1 bne .L44 657 .L37: 158:Core/Src/state_machine.c **** state.target_state = STATE_ACTIVE; // READY -> ACTIVE 658 .loc 1 158 41 659 00b4 7B68 ldr r3, [r7, #4] 660 00b6 0133 adds r3, r3, #1 661 00b8 1A78 ldrb r2, [r3] @ zero_extendqisi2 158:Core/Src/state_machine.c **** state.target_state = STATE_ACTIVE; // READY -> ACTIVE 662 .loc 1 158 35 663 00ba 134B ldr r3, .L46+8 664 00bc 1A70 strb r2, [r3] 159:Core/Src/state_machine.c **** } 665 .loc 1 159 28 666 00be 114B ldr r3, .L46+4 667 00c0 0322 movs r2, #3 668 00c2 5A70 strb r2, [r3, #1] 161:Core/Src/state_machine.c **** case 0xF0: 669 .loc 1 161 7 670 00c4 14E0 b .L44 671 .L29: 163:Core/Src/state_machine.c **** state.target_state = STATE_CHARGING_PRECHARGE; 672 .loc 1 163 16 673 00c6 0F4B ldr r3, .L46+4 674 00c8 1B78 ldrb r3, [r3] @ zero_extendqisi2 163:Core/Src/state_machine.c **** state.target_state = STATE_CHARGING_PRECHARGE; 675 .loc 1 163 10 676 00ca 002B cmp r3, #0 677 00cc 12D1 bne .L45 164:Core/Src/state_machine.c **** } 678 .loc 1 164 28 679 00ce 0D4B ldr r3, .L46+4 680 00d0 0522 movs r2, #5 681 00d2 5A70 strb r2, [r3, #1] 166:Core/Src/state_machine.c **** case 0xF1: // EEPROM 682 .loc 1 166 7 683 00d4 0EE0 b .L45 684 .L26: 173:Core/Src/state_machine.c **** state.target_state = STATE_ERROR; 685 .loc 1 173 27 686 00d6 0B4B ldr r3, .L46+4 687 00d8 0422 movs r2, #4 688 00da 1A70 strb r2, [r3] 174:Core/Src/state_machine.c **** break; 689 .loc 1 174 26 690 00dc 094B ldr r3, .L46+4 691 00de 0722 movs r2, #7 ARM GAS /tmp/cctkPVvk.s page 16 692 00e0 5A70 strb r2, [r3, #1] 175:Core/Src/state_machine.c **** } 693 .loc 1 175 7 694 00e2 08E0 b .L27 695 .L41: 168:Core/Src/state_machine.c **** if (state.current_state == STATE_INACTIVE) 696 .loc 1 168 7 697 00e4 00BF nop 698 00e6 06E0 b .L40 699 .L42: 146:Core/Src/state_machine.c **** case 0x01: 700 .loc 1 146 7 701 00e8 00BF nop 702 00ea 04E0 b .L40 703 .L43: 155:Core/Src/state_machine.c **** case 0x02: 704 .loc 1 155 7 705 00ec 00BF nop 706 00ee 02E0 b .L40 707 .L44: 161:Core/Src/state_machine.c **** case 0xF0: 708 .loc 1 161 7 709 00f0 00BF nop 710 00f2 00E0 b .L40 711 .L45: 166:Core/Src/state_machine.c **** case 0xF1: // EEPROM 712 .loc 1 166 7 713 00f4 00BF nop 714 .L27: 715 .L40: 716 .loc 1 177 1 717 00f6 00BF nop 718 00f8 0837 adds r7, r7, #8 719 .cfi_def_cfa_offset 8 720 00fa BD46 mov sp, r7 721 .cfi_def_cfa_register 13 722 @ sp needed 723 00fc 80BD pop {r7, pc} 724 .L47: 725 00fe 00BF .align 2 726 .L46: 727 0100 00000000 .word programming_mode 728 0104 00000000 .word state 729 0108 00000000 .word target_powerground_status 730 .cfi_endproc 731 .LFE132: 733 .section .text.sm_precharge_discharge_manager,"ax",%progbits 734 .align 1 735 .global sm_precharge_discharge_manager 736 .syntax unified 737 .thumb 738 .thumb_func 740 sm_precharge_discharge_manager: 741 .LFB133: 178:Core/Src/state_machine.c **** 179:Core/Src/state_machine.c **** void sm_precharge_discharge_manager(){ 742 .loc 1 179 38 ARM GAS /tmp/cctkPVvk.s page 17 743 .cfi_startproc 744 @ args = 0, pretend = 0, frame = 0 745 @ frame_needed = 1, uses_anonymous_args = 0 746 0000 80B5 push {r7, lr} 747 .cfi_def_cfa_offset 8 748 .cfi_offset 7, -8 749 .cfi_offset 14, -4 750 0002 00AF add r7, sp, #0 751 .cfi_def_cfa_register 7 180:Core/Src/state_machine.c **** 181:Core/Src/state_machine.c **** if (state.current_state != STATE_PRECHARGE && state.target_state == STATE_PRECHARGE){ 752 .loc 1 181 12 753 0004 324B ldr r3, .L56 754 0006 1B78 ldrb r3, [r3] @ zero_extendqisi2 755 .loc 1 181 6 756 0008 012B cmp r3, #1 757 000a 0BD0 beq .L49 758 .loc 1 181 54 discriminator 1 759 000c 304B ldr r3, .L56 760 000e 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 761 .loc 1 181 46 discriminator 1 762 0010 012B cmp r3, #1 763 0012 07D1 bne .L49 182:Core/Src/state_machine.c **** precharge_timer = HAL_GetTick() + PRECHARGE_DURATION; 764 .loc 1 182 23 765 0014 FFF7FEFF bl HAL_GetTick 766 0018 0346 mov r3, r0 767 .loc 1 182 37 discriminator 1 768 001a 03F5FA53 add r3, r3, #8000 769 .loc 1 182 21 discriminator 1 770 001e 2D4A ldr r2, .L56+4 771 0020 1360 str r3, [r2] 772 .loc 1 182 21 is_stmt 0 773 0022 10E0 b .L50 774 .L49: 183:Core/Src/state_machine.c **** } else if (state.current_state == STATE_PRECHARGE && precharge_timer < HAL_GetTick()) { 775 .loc 1 183 19 is_stmt 1 776 0024 2A4B ldr r3, .L56 777 0026 1B78 ldrb r3, [r3] @ zero_extendqisi2 778 .loc 1 183 13 779 0028 012B cmp r3, #1 780 002a 0CD1 bne .L50 781 .loc 1 183 74 discriminator 1 782 002c FFF7FEFF bl HAL_GetTick 783 0030 0246 mov r2, r0 784 .loc 1 183 72 discriminator 1 785 0032 284B ldr r3, .L56+4 786 0034 1B68 ldr r3, [r3] 787 .loc 1 183 53 discriminator 1 788 0036 9A42 cmp r2, r3 789 0038 05D9 bls .L50 184:Core/Src/state_machine.c **** state.target_state = STATE_READY; 790 .loc 1 184 24 791 003a 254B ldr r3, .L56 792 003c 0222 movs r2, #2 793 003e 5A70 strb r2, [r3, #1] 185:Core/Src/state_machine.c **** precharge_timer = 0; ARM GAS /tmp/cctkPVvk.s page 18 794 .loc 1 185 21 795 0040 244B ldr r3, .L56+4 796 0042 0022 movs r2, #0 797 0044 1A60 str r2, [r3] 798 .L50: 186:Core/Src/state_machine.c **** } 187:Core/Src/state_machine.c **** 188:Core/Src/state_machine.c **** if (state.current_state != STATE_CHARGING_PRECHARGE && state.target_state == STATE_CHARGING_PRECH 799 .loc 1 188 12 800 0046 224B ldr r3, .L56 801 0048 1B78 ldrb r3, [r3] @ zero_extendqisi2 802 .loc 1 188 6 803 004a 052B cmp r3, #5 804 004c 0BD0 beq .L51 805 .loc 1 188 63 discriminator 1 806 004e 204B ldr r3, .L56 807 0050 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 808 .loc 1 188 55 discriminator 1 809 0052 052B cmp r3, #5 810 0054 07D1 bne .L51 189:Core/Src/state_machine.c **** precharge_timer = HAL_GetTick() + PRECHARGE_DURATION; 811 .loc 1 189 23 812 0056 FFF7FEFF bl HAL_GetTick 813 005a 0346 mov r3, r0 814 .loc 1 189 37 discriminator 1 815 005c 03F5FA53 add r3, r3, #8000 816 .loc 1 189 21 discriminator 1 817 0060 1C4A ldr r2, .L56+4 818 0062 1360 str r3, [r2] 819 .loc 1 189 21 is_stmt 0 820 0064 10E0 b .L52 821 .L51: 190:Core/Src/state_machine.c **** } else if (state.current_state == STATE_CHARGING_PRECHARGE && precharge_timer < HAL_GetTick()) { 822 .loc 1 190 19 is_stmt 1 823 0066 1A4B ldr r3, .L56 824 0068 1B78 ldrb r3, [r3] @ zero_extendqisi2 825 .loc 1 190 13 826 006a 052B cmp r3, #5 827 006c 0CD1 bne .L52 828 .loc 1 190 83 discriminator 1 829 006e FFF7FEFF bl HAL_GetTick 830 0072 0246 mov r2, r0 831 .loc 1 190 81 discriminator 1 832 0074 174B ldr r3, .L56+4 833 0076 1B68 ldr r3, [r3] 834 .loc 1 190 62 discriminator 1 835 0078 9A42 cmp r2, r3 836 007a 05D9 bls .L52 191:Core/Src/state_machine.c **** state.target_state = STATE_CHARGING; 837 .loc 1 191 24 838 007c 144B ldr r3, .L56 839 007e 0622 movs r2, #6 840 0080 5A70 strb r2, [r3, #1] 192:Core/Src/state_machine.c **** precharge_timer = 0; 841 .loc 1 192 21 842 0082 144B ldr r3, .L56+4 843 0084 0022 movs r2, #0 ARM GAS /tmp/cctkPVvk.s page 19 844 0086 1A60 str r2, [r3] 845 .L52: 193:Core/Src/state_machine.c **** } 194:Core/Src/state_machine.c **** 195:Core/Src/state_machine.c **** if (state.current_state != STATE_DISCHARGE && state.target_state == STATE_DISCHARGE){ 846 .loc 1 195 12 847 0088 114B ldr r3, .L56 848 008a 1B78 ldrb r3, [r3] @ zero_extendqisi2 849 .loc 1 195 6 850 008c 042B cmp r3, #4 851 008e 0BD0 beq .L53 852 .loc 1 195 54 discriminator 1 853 0090 0F4B ldr r3, .L56 854 0092 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 855 .loc 1 195 46 discriminator 1 856 0094 042B cmp r3, #4 857 0096 07D1 bne .L53 196:Core/Src/state_machine.c **** discharge_timer = HAL_GetTick() + DISCHARGE_DURATION; 858 .loc 1 196 23 859 0098 FFF7FEFF bl HAL_GetTick 860 009c 0346 mov r3, r0 861 .loc 1 196 37 discriminator 1 862 009e 03F5FA53 add r3, r3, #8000 863 .loc 1 196 21 discriminator 1 864 00a2 0D4A ldr r2, .L56+8 865 00a4 1360 str r3, [r2] 197:Core/Src/state_machine.c **** } else if (state.current_state == STATE_DISCHARGE && discharge_timer < HAL_GetTick()) { 198:Core/Src/state_machine.c **** state.target_state = STATE_INACTIVE; 199:Core/Src/state_machine.c **** discharge_timer = 0; 200:Core/Src/state_machine.c **** } 201:Core/Src/state_machine.c **** 202:Core/Src/state_machine.c **** } 866 .loc 1 202 1 867 00a6 10E0 b .L55 868 .L53: 197:Core/Src/state_machine.c **** } else if (state.current_state == STATE_DISCHARGE && discharge_timer < HAL_GetTick()) { 869 .loc 1 197 19 870 00a8 094B ldr r3, .L56 871 00aa 1B78 ldrb r3, [r3] @ zero_extendqisi2 197:Core/Src/state_machine.c **** } else if (state.current_state == STATE_DISCHARGE && discharge_timer < HAL_GetTick()) { 872 .loc 1 197 13 873 00ac 042B cmp r3, #4 874 00ae 0CD1 bne .L55 197:Core/Src/state_machine.c **** } else if (state.current_state == STATE_DISCHARGE && discharge_timer < HAL_GetTick()) { 875 .loc 1 197 74 discriminator 1 876 00b0 FFF7FEFF bl HAL_GetTick 877 00b4 0246 mov r2, r0 197:Core/Src/state_machine.c **** } else if (state.current_state == STATE_DISCHARGE && discharge_timer < HAL_GetTick()) { 878 .loc 1 197 72 discriminator 1 879 00b6 084B ldr r3, .L56+8 880 00b8 1B68 ldr r3, [r3] 197:Core/Src/state_machine.c **** } else if (state.current_state == STATE_DISCHARGE && discharge_timer < HAL_GetTick()) { 881 .loc 1 197 53 discriminator 1 882 00ba 9A42 cmp r2, r3 883 00bc 05D9 bls .L55 198:Core/Src/state_machine.c **** discharge_timer = 0; 884 .loc 1 198 24 ARM GAS /tmp/cctkPVvk.s page 20 885 00be 044B ldr r3, .L56 886 00c0 0022 movs r2, #0 887 00c2 5A70 strb r2, [r3, #1] 199:Core/Src/state_machine.c **** } 888 .loc 1 199 21 889 00c4 044B ldr r3, .L56+8 890 00c6 0022 movs r2, #0 891 00c8 1A60 str r2, [r3] 892 .L55: 893 .loc 1 202 1 894 00ca 00BF nop 895 00cc 80BD pop {r7, pc} 896 .L57: 897 00ce 00BF .align 2 898 .L56: 899 00d0 00000000 .word state 900 00d4 00000000 .word precharge_timer 901 00d8 00000000 .word discharge_timer 902 .cfi_endproc 903 .LFE133: 905 .section .text.sm_powerground_manager,"ax",%progbits 906 .align 1 907 .global sm_powerground_manager 908 .syntax unified 909 .thumb 910 .thumb_func 912 sm_powerground_manager: 913 .LFB134: 203:Core/Src/state_machine.c **** 204:Core/Src/state_machine.c **** void sm_powerground_manager(){ 914 .loc 1 204 30 915 .cfi_startproc 916 @ args = 0, pretend = 0, frame = 0 917 @ frame_needed = 1, uses_anonymous_args = 0 918 0000 80B5 push {r7, lr} 919 .cfi_def_cfa_offset 8 920 .cfi_offset 7, -8 921 .cfi_offset 14, -4 922 0002 00AF add r7, sp, #0 923 .cfi_def_cfa_register 7 205:Core/Src/state_machine.c **** if (current_powerground_status == target_powerground_status) 924 .loc 1 205 34 925 0004 254B ldr r3, .L65 926 0006 1A78 ldrb r2, [r3] @ zero_extendqisi2 927 0008 254B ldr r3, .L65+4 928 000a 1B78 ldrb r3, [r3] @ zero_extendqisi2 929 .loc 1 205 6 930 000c 9A42 cmp r2, r3 931 000e 43D0 beq .L64 206:Core/Src/state_machine.c **** return; 207:Core/Src/state_machine.c **** if ( current_powerground_status > 100 || target_powerground_status > 100){ //something went wrong 932 .loc 1 207 35 933 0010 224B ldr r3, .L65 934 0012 1B78 ldrb r3, [r3] @ zero_extendqisi2 935 .loc 1 207 6 936 0014 642B cmp r3, #100 937 0016 03D8 bhi .L61 ARM GAS /tmp/cctkPVvk.s page 21 938 .loc 1 207 70 discriminator 1 939 0018 214B ldr r3, .L65+4 940 001a 1B78 ldrb r3, [r3] @ zero_extendqisi2 941 .loc 1 207 41 discriminator 1 942 001c 642B cmp r3, #100 943 001e 0AD9 bls .L62 944 .L61: 208:Core/Src/state_machine.c **** PWM_powerground_control(255); 945 .loc 1 208 5 946 0020 FF20 movs r0, #255 947 0022 FFF7FEFF bl PWM_powerground_control 209:Core/Src/state_machine.c **** current_powerground_status = target_powerground_status= 0; 948 .loc 1 209 59 949 0026 1E4B ldr r3, .L65+4 950 0028 0022 movs r2, #0 951 002a 1A70 strb r2, [r3] 952 .loc 1 209 32 953 002c 1C4B ldr r3, .L65+4 954 002e 1A78 ldrb r2, [r3] @ zero_extendqisi2 955 0030 1A4B ldr r3, .L65 956 0032 1A70 strb r2, [r3] 210:Core/Src/state_machine.c **** return; 957 .loc 1 210 5 958 0034 31E0 b .L58 959 .L62: 211:Core/Src/state_machine.c **** } 212:Core/Src/state_machine.c **** 213:Core/Src/state_machine.c **** if (powerground_softstart_timer < HAL_GetTick()){ 960 .loc 1 213 37 961 0036 FFF7FEFF bl HAL_GetTick 962 003a 0246 mov r2, r0 963 .loc 1 213 35 discriminator 1 964 003c 194B ldr r3, .L65+8 965 003e 1B68 ldr r3, [r3] 966 .loc 1 213 6 discriminator 1 967 0040 9A42 cmp r2, r3 968 0042 2AD9 bls .L58 214:Core/Src/state_machine.c **** if (current_powerground_status < target_powerground_status){ 969 .loc 1 214 36 970 0044 154B ldr r3, .L65 971 0046 1A78 ldrb r2, [r3] @ zero_extendqisi2 972 0048 154B ldr r3, .L65+4 973 004a 1B78 ldrb r3, [r3] @ zero_extendqisi2 974 .loc 1 214 8 975 004c 9A42 cmp r2, r3 976 004e 0ED2 bcs .L63 215:Core/Src/state_machine.c **** current_powerground_status += 5; 977 .loc 1 215 34 978 0050 124B ldr r3, .L65 979 0052 1B78 ldrb r3, [r3] @ zero_extendqisi2 980 0054 0533 adds r3, r3, #5 981 0056 DAB2 uxtb r2, r3 982 0058 104B ldr r3, .L65 983 005a 1A70 strb r2, [r3] 216:Core/Src/state_machine.c **** PWM_powerground_softcontrol(); 984 .loc 1 216 7 985 005c FFF7FEFF bl PWM_powerground_softcontrol ARM GAS /tmp/cctkPVvk.s page 22 217:Core/Src/state_machine.c **** powerground_softstart_timer = HAL_GetTick() + POWERGROUND_SOFTSTART_INCREMENT_DELAY; 986 .loc 1 217 37 987 0060 FFF7FEFF bl HAL_GetTick 988 0064 0346 mov r3, r0 989 .loc 1 217 51 discriminator 1 990 0066 0F33 adds r3, r3, #15 991 .loc 1 217 35 discriminator 1 992 0068 0E4A ldr r2, .L65+8 993 006a 1360 str r3, [r2] 994 006c 15E0 b .L58 995 .L63: 218:Core/Src/state_machine.c **** } else if (current_powerground_status > target_powerground_status) { 996 .loc 1 218 43 997 006e 0B4B ldr r3, .L65 998 0070 1A78 ldrb r2, [r3] @ zero_extendqisi2 999 0072 0B4B ldr r3, .L65+4 1000 0074 1B78 ldrb r3, [r3] @ zero_extendqisi2 1001 .loc 1 218 15 1002 0076 9A42 cmp r2, r3 1003 0078 0FD9 bls .L58 219:Core/Src/state_machine.c **** current_powerground_status -= 5; 1004 .loc 1 219 34 1005 007a 084B ldr r3, .L65 1006 007c 1B78 ldrb r3, [r3] @ zero_extendqisi2 1007 007e 053B subs r3, r3, #5 1008 0080 DAB2 uxtb r2, r3 1009 0082 064B ldr r3, .L65 1010 0084 1A70 strb r2, [r3] 220:Core/Src/state_machine.c **** PWM_powerground_softcontrol(); 1011 .loc 1 220 7 1012 0086 FFF7FEFF bl PWM_powerground_softcontrol 221:Core/Src/state_machine.c **** powerground_softstart_timer = HAL_GetTick() + POWERGROUND_SOFTSTART_INCREMENT_DELAY; 1013 .loc 1 221 37 1014 008a FFF7FEFF bl HAL_GetTick 1015 008e 0346 mov r3, r0 1016 .loc 1 221 51 discriminator 1 1017 0090 0F33 adds r3, r3, #15 1018 .loc 1 221 35 discriminator 1 1019 0092 044A ldr r2, .L65+8 1020 0094 1360 str r3, [r2] 1021 0096 00E0 b .L58 1022 .L64: 206:Core/Src/state_machine.c **** if ( current_powerground_status > 100 || target_powerground_status > 100){ //something went wrong 1023 .loc 1 206 5 1024 0098 00BF nop 1025 .L58: 222:Core/Src/state_machine.c **** } 223:Core/Src/state_machine.c **** } 224:Core/Src/state_machine.c **** } 1026 .loc 1 224 1 1027 009a 80BD pop {r7, pc} 1028 .L66: 1029 .align 2 1030 .L65: 1031 009c 00000000 .word current_powerground_status 1032 00a0 00000000 .word target_powerground_status 1033 00a4 00000000 .word powerground_softstart_timer ARM GAS /tmp/cctkPVvk.s page 23 1034 .cfi_endproc 1035 .LFE134: 1037 .section .text.sm_calibrate_powerground,"ax",%progbits 1038 .align 1 1039 .global sm_calibrate_powerground 1040 .syntax unified 1041 .thumb 1042 .thumb_func 1044 sm_calibrate_powerground: 1045 .LFB135: 225:Core/Src/state_machine.c **** 226:Core/Src/state_machine.c **** void sm_calibrate_powerground(){ 1046 .loc 1 226 32 1047 .cfi_startproc 1048 @ args = 0, pretend = 0, frame = 0 1049 @ frame_needed = 1, uses_anonymous_args = 0 1050 0000 80B5 push {r7, lr} 1051 .cfi_def_cfa_offset 8 1052 .cfi_offset 7, -8 1053 .cfi_offset 14, -4 1054 0002 00AF add r7, sp, #0 1055 .cfi_def_cfa_register 7 227:Core/Src/state_machine.c **** if (powerground_calibration_stage != 4 && state.current_state == STATE_PRECHARGE){ 1056 .loc 1 227 37 1057 0004 2D4B ldr r3, .L81 1058 0006 1B78 ldrb r3, [r3] @ zero_extendqisi2 1059 .loc 1 227 6 1060 0008 042B cmp r3, #4 1061 000a 56D0 beq .L67 1062 .loc 1 227 50 discriminator 1 1063 000c 2C4B ldr r3, .L81+4 1064 000e 1B78 ldrb r3, [r3] @ zero_extendqisi2 1065 .loc 1 227 42 discriminator 1 1066 0010 012B cmp r3, #1 1067 0012 52D1 bne .L67 228:Core/Src/state_machine.c **** switch (powerground_calibration_stage) { 1068 .loc 1 228 5 1069 0014 294B ldr r3, .L81 1070 0016 1B78 ldrb r3, [r3] @ zero_extendqisi2 1071 0018 032B cmp r3, #3 1072 001a 4ED8 bhi .L67 1073 001c 01A2 adr r2, .L70 1074 001e 52F823F0 ldr pc, [r2, r3, lsl #2] 1075 0022 00BF .p2align 2 1076 .L70: 1077 0024 35000000 .word .L73+1 1078 0028 47000000 .word .L72+1 1079 002c 71000000 .word .L71+1 1080 0030 9B000000 .word .L69+1 1081 .p2align 1 1082 .L73: 229:Core/Src/state_machine.c **** case 0: 230:Core/Src/state_machine.c **** powerground_calibration_timer = HAL_GetTick() + 0; 1083 .loc 1 230 41 1084 0034 FFF7FEFF bl HAL_GetTick 1085 0038 0346 mov r3, r0 1086 .loc 1 230 39 discriminator 1 ARM GAS /tmp/cctkPVvk.s page 24 1087 003a 224A ldr r2, .L81+8 1088 003c 1360 str r3, [r2] 231:Core/Src/state_machine.c **** powerground_calibration_stage = 1; 1089 .loc 1 231 39 1090 003e 1F4B ldr r3, .L81 1091 0040 0122 movs r2, #1 1092 0042 1A70 strb r2, [r3] 232:Core/Src/state_machine.c **** return; 1093 .loc 1 232 9 1094 0044 39E0 b .L67 1095 .L72: 233:Core/Src/state_machine.c **** case 1: 234:Core/Src/state_machine.c **** if (powerground_calibration_timer < HAL_GetTick()){ 1096 .loc 1 234 45 1097 0046 FFF7FEFF bl HAL_GetTick 1098 004a 0246 mov r2, r0 1099 .loc 1 234 43 discriminator 1 1100 004c 1D4B ldr r3, .L81+8 1101 004e 1B68 ldr r3, [r3] 1102 .loc 1 234 12 discriminator 1 1103 0050 9A42 cmp r2, r3 1104 0052 2DD9 bls .L77 235:Core/Src/state_machine.c **** powerground_calibration_timer = HAL_GetTick() + 2000; 1105 .loc 1 235 43 1106 0054 FFF7FEFF bl HAL_GetTick 1107 0058 0346 mov r3, r0 1108 .loc 1 235 57 discriminator 1 1109 005a 03F5FA63 add r3, r3, #2000 1110 .loc 1 235 41 discriminator 1 1111 005e 194A ldr r2, .L81+8 1112 0060 1360 str r3, [r2] 236:Core/Src/state_machine.c **** powerground_calibration_stage = 2; 1113 .loc 1 236 41 1114 0062 164B ldr r3, .L81 1115 0064 0222 movs r2, #2 1116 0066 1A70 strb r2, [r3] 237:Core/Src/state_machine.c **** PWM_powerground_control(100); 1117 .loc 1 237 11 1118 0068 6420 movs r0, #100 1119 006a FFF7FEFF bl PWM_powerground_control 238:Core/Src/state_machine.c **** } 239:Core/Src/state_machine.c **** return; 1120 .loc 1 239 9 1121 006e 1FE0 b .L77 1122 .L71: 240:Core/Src/state_machine.c **** case 2: 241:Core/Src/state_machine.c **** if (powerground_calibration_timer < HAL_GetTick()){ 1123 .loc 1 241 45 1124 0070 FFF7FEFF bl HAL_GetTick 1125 0074 0246 mov r2, r0 1126 .loc 1 241 43 discriminator 1 1127 0076 134B ldr r3, .L81+8 1128 0078 1B68 ldr r3, [r3] 1129 .loc 1 241 12 discriminator 1 1130 007a 9A42 cmp r2, r3 1131 007c 1AD9 bls .L78 242:Core/Src/state_machine.c **** powerground_calibration_timer = HAL_GetTick() + 1000; ARM GAS /tmp/cctkPVvk.s page 25 1132 .loc 1 242 43 1133 007e FFF7FEFF bl HAL_GetTick 1134 0082 0346 mov r3, r0 1135 .loc 1 242 57 discriminator 1 1136 0084 03F57A73 add r3, r3, #1000 1137 .loc 1 242 41 discriminator 1 1138 0088 0E4A ldr r2, .L81+8 1139 008a 1360 str r3, [r2] 243:Core/Src/state_machine.c **** powerground_calibration_stage = 3; 1140 .loc 1 243 41 1141 008c 0B4B ldr r3, .L81 1142 008e 0322 movs r2, #3 1143 0090 1A70 strb r2, [r3] 244:Core/Src/state_machine.c **** PWM_powerground_control(0); 1144 .loc 1 244 11 1145 0092 0020 movs r0, #0 1146 0094 FFF7FEFF bl PWM_powerground_control 245:Core/Src/state_machine.c **** } 246:Core/Src/state_machine.c **** return; 1147 .loc 1 246 9 1148 0098 0CE0 b .L78 1149 .L69: 247:Core/Src/state_machine.c **** case 3: 248:Core/Src/state_machine.c **** if (powerground_calibration_timer < HAL_GetTick()){ 1150 .loc 1 248 45 1151 009a FFF7FEFF bl HAL_GetTick 1152 009e 0246 mov r2, r0 1153 .loc 1 248 43 discriminator 1 1154 00a0 084B ldr r3, .L81+8 1155 00a2 1B68 ldr r3, [r3] 1156 .loc 1 248 12 discriminator 1 1157 00a4 9A42 cmp r2, r3 1158 00a6 07D9 bls .L79 249:Core/Src/state_machine.c **** powerground_calibration_stage = 4; 1159 .loc 1 249 41 1160 00a8 044B ldr r3, .L81 1161 00aa 0422 movs r2, #4 1162 00ac 1A70 strb r2, [r3] 250:Core/Src/state_machine.c **** } 251:Core/Src/state_machine.c **** return; 1163 .loc 1 251 9 1164 00ae 03E0 b .L79 1165 .L77: 239:Core/Src/state_machine.c **** case 2: 1166 .loc 1 239 9 1167 00b0 00BF nop 1168 00b2 02E0 b .L67 1169 .L78: 246:Core/Src/state_machine.c **** case 3: 1170 .loc 1 246 9 1171 00b4 00BF nop 1172 00b6 00E0 b .L67 1173 .L79: 1174 .loc 1 251 9 1175 00b8 00BF nop 1176 .L67: 252:Core/Src/state_machine.c **** } ARM GAS /tmp/cctkPVvk.s page 26 253:Core/Src/state_machine.c **** } 254:Core/Src/state_machine.c **** } 1177 .loc 1 254 1 1178 00ba 80BD pop {r7, pc} 1179 .L82: 1180 .align 2 1181 .L81: 1182 00bc 00000000 .word powerground_calibration_stage 1183 00c0 00000000 .word state 1184 00c4 00000000 .word powerground_calibration_timer 1185 .cfi_endproc 1186 .LFE135: 1188 .section .text.sm_balancing,"ax",%progbits 1189 .align 1 1190 .global sm_balancing 1191 .syntax unified 1192 .thumb 1193 .thumb_func 1195 sm_balancing: 1196 .LFB136: 255:Core/Src/state_machine.c **** 256:Core/Src/state_machine.c **** void sm_balancing(){ 1197 .loc 1 256 20 1198 .cfi_startproc 1199 @ args = 0, pretend = 0, frame = 16 1200 @ frame_needed = 1, uses_anonymous_args = 0 1201 0000 80B5 push {r7, lr} 1202 .cfi_def_cfa_offset 8 1203 .cfi_offset 7, -8 1204 .cfi_offset 14, -4 1205 0002 84B0 sub sp, sp, #16 1206 .cfi_def_cfa_offset 24 1207 0004 00AF add r7, sp, #0 1208 .cfi_def_cfa_register 7 257:Core/Src/state_machine.c **** if (balancing_timer < HAL_GetTick()){ 1209 .loc 1 257 25 1210 0006 FFF7FEFF bl HAL_GetTick 1211 000a 0246 mov r2, r0 1212 .loc 1 257 23 discriminator 1 1213 000c 364B ldr r3, .L93 1214 000e 1B68 ldr r3, [r3] 1215 .loc 1 257 6 discriminator 1 1216 0010 9A42 cmp r2, r3 1217 0012 65D9 bls .L83 258:Core/Src/state_machine.c **** if (balancing_state){ 1218 .loc 1 258 9 1219 0014 354B ldr r3, .L93+4 1220 0016 1B78 ldrb r3, [r3] @ zero_extendqisi2 1221 .loc 1 258 8 1222 0018 002B cmp r3, #0 1223 001a 55D0 beq .L85 1224 .LBB2: 259:Core/Src/state_machine.c **** balancing_timer = HAL_GetTick() + 30000; 1225 .loc 1 259 25 1226 001c FFF7FEFF bl HAL_GetTick 1227 0020 0346 mov r3, r0 1228 .loc 1 259 39 discriminator 1 ARM GAS /tmp/cctkPVvk.s page 27 1229 0022 03F5EA43 add r3, r3, #29952 1230 0026 3033 adds r3, r3, #48 1231 .loc 1 259 23 discriminator 1 1232 0028 2F4A ldr r2, .L93 1233 002a 1360 str r3, [r2] 260:Core/Src/state_machine.c **** 261:Core/Src/state_machine.c **** uint8_t id_cell_lowest_voltage = 0; 1234 .loc 1 261 15 1235 002c 0023 movs r3, #0 1236 002e FB73 strb r3, [r7, #15] 262:Core/Src/state_machine.c **** uint8_t num_of_cells_to_balance = 0; 1237 .loc 1 262 15 1238 0030 0023 movs r3, #0 1239 0032 BB73 strb r3, [r7, #14] 263:Core/Src/state_machine.c **** uint32_t channels = 0; 1240 .loc 1 263 16 1241 0034 0023 movs r3, #0 1242 0036 BB60 str r3, [r7, #8] 1243 .LBB3: 264:Core/Src/state_machine.c **** 265:Core/Src/state_machine.c **** for (int i = 0; i < 13; i++) { 1244 .loc 1 265 16 1245 0038 0023 movs r3, #0 1246 003a 7B60 str r3, [r7, #4] 1247 .loc 1 265 7 1248 003c 0EE0 b .L86 1249 .L88: 266:Core/Src/state_machine.c **** if (module.cellVoltages[i] < module.cellVoltages[id_cell_lowest_voltage]) 1250 .loc 1 266 32 1251 003e 2C4A ldr r2, .L93+8 1252 0040 7B68 ldr r3, [r7, #4] 1253 0042 32F91320 ldrsh r2, [r2, r3, lsl #1] 1254 .loc 1 266 57 1255 0046 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 1256 0048 2949 ldr r1, .L93+8 1257 004a 31F91330 ldrsh r3, [r1, r3, lsl #1] 1258 .loc 1 266 12 1259 004e 9A42 cmp r2, r3 1260 0050 01DA bge .L87 267:Core/Src/state_machine.c **** id_cell_lowest_voltage = i; 1261 .loc 1 267 34 1262 0052 7B68 ldr r3, [r7, #4] 1263 0054 FB73 strb r3, [r7, #15] 1264 .L87: 265:Core/Src/state_machine.c **** if (module.cellVoltages[i] < module.cellVoltages[id_cell_lowest_voltage]) 1265 .loc 1 265 32 discriminator 2 1266 0056 7B68 ldr r3, [r7, #4] 1267 0058 0133 adds r3, r3, #1 1268 005a 7B60 str r3, [r7, #4] 1269 .L86: 265:Core/Src/state_machine.c **** if (module.cellVoltages[i] < module.cellVoltages[id_cell_lowest_voltage]) 1270 .loc 1 265 25 discriminator 1 1271 005c 7B68 ldr r3, [r7, #4] 1272 005e 0C2B cmp r3, #12 1273 0060 EDDD ble .L88 1274 .LBE3: 1275 .LBB4: ARM GAS /tmp/cctkPVvk.s page 28 268:Core/Src/state_machine.c **** } 269:Core/Src/state_machine.c **** 270:Core/Src/state_machine.c **** for (int i = 0; i < 13; i++) { 1276 .loc 1 270 16 1277 0062 0023 movs r3, #0 1278 0064 3B60 str r3, [r7] 1279 .loc 1 270 7 1280 0066 18E0 b .L89 1281 .L91: 271:Core/Src/state_machine.c **** if (module.cellVoltages[i] - 20 > module.cellVoltages[id_cell_lowest_voltage]){ 1282 .loc 1 271 32 1283 0068 214A ldr r2, .L93+8 1284 006a 3B68 ldr r3, [r7] 1285 006c 32F91330 ldrsh r3, [r2, r3, lsl #1] 1286 .loc 1 271 36 1287 0070 143B subs r3, r3, #20 1288 .loc 1 271 62 1289 0072 FA7B ldrb r2, [r7, #15] @ zero_extendqisi2 1290 0074 1E49 ldr r1, .L93+8 1291 0076 31F91220 ldrsh r2, [r1, r2, lsl #1] 1292 .loc 1 271 12 1293 007a 9342 cmp r3, r2 1294 007c 0ADD ble .L90 272:Core/Src/state_machine.c **** channels |= 1 << i; 1295 .loc 1 272 25 1296 007e 0122 movs r2, #1 1297 0080 3B68 ldr r3, [r7] 1298 0082 02FA03F3 lsl r3, r2, r3 1299 0086 1A46 mov r2, r3 1300 .loc 1 272 20 1301 0088 BB68 ldr r3, [r7, #8] 1302 008a 1343 orrs r3, r3, r2 1303 008c BB60 str r3, [r7, #8] 273:Core/Src/state_machine.c **** num_of_cells_to_balance++; 1304 .loc 1 273 34 1305 008e BB7B ldrb r3, [r7, #14] @ zero_extendqisi2 1306 0090 0133 adds r3, r3, #1 1307 0092 BB73 strb r3, [r7, #14] 1308 .L90: 270:Core/Src/state_machine.c **** if (module.cellVoltages[i] - 20 > module.cellVoltages[id_cell_lowest_voltage]){ 1309 .loc 1 270 32 discriminator 2 1310 0094 3B68 ldr r3, [r7] 1311 0096 0133 adds r3, r3, #1 1312 0098 3B60 str r3, [r7] 1313 .L89: 270:Core/Src/state_machine.c **** if (module.cellVoltages[i] - 20 > module.cellVoltages[id_cell_lowest_voltage]){ 1314 .loc 1 270 25 discriminator 1 1315 009a 3B68 ldr r3, [r7] 1316 009c 0C2B cmp r3, #12 1317 009e E3DD ble .L91 1318 .LBE4: 274:Core/Src/state_machine.c **** } 275:Core/Src/state_machine.c **** } 276:Core/Src/state_machine.c **** 277:Core/Src/state_machine.c **** if (num_of_cells_to_balance == 0){ 1319 .loc 1 277 10 1320 00a0 BB7B ldrb r3, [r7, #14] @ zero_extendqisi2 ARM GAS /tmp/cctkPVvk.s page 29 1321 00a2 002B cmp r3, #0 1322 00a4 05D1 bne .L92 278:Core/Src/state_machine.c **** amsStopBalancing(); 1323 .loc 1 278 9 1324 00a6 FFF7FEFF bl amsStopBalancing 279:Core/Src/state_machine.c **** balancing_state = 0; 1325 .loc 1 279 25 1326 00aa 104B ldr r3, .L93+4 1327 00ac 0022 movs r2, #0 1328 00ae 1A70 strb r2, [r3] 280:Core/Src/state_machine.c **** return; 1329 .loc 1 280 9 1330 00b0 16E0 b .L83 1331 .L92: 281:Core/Src/state_machine.c **** } 282:Core/Src/state_machine.c **** 283:Core/Src/state_machine.c **** amsConfigBalancing(channels, 0xF); 1332 .loc 1 283 7 1333 00b2 0F21 movs r1, #15 1334 00b4 B868 ldr r0, [r7, #8] 1335 00b6 FFF7FEFF bl amsConfigBalancing 284:Core/Src/state_machine.c **** amsStartBalancing(0xF); 1336 .loc 1 284 7 1337 00ba 0F20 movs r0, #15 1338 00bc FFF7FEFF bl amsStartBalancing 285:Core/Src/state_machine.c **** balancing_state = 1; 1339 .loc 1 285 23 1340 00c0 0A4B ldr r3, .L93+4 1341 00c2 0122 movs r2, #1 1342 00c4 1A70 strb r2, [r3] 1343 .LBE2: 1344 00c6 0BE0 b .L83 1345 .L85: 286:Core/Src/state_machine.c **** } else { 287:Core/Src/state_machine.c **** balancing_timer = HAL_GetTick() + 1000; 1346 .loc 1 287 25 1347 00c8 FFF7FEFF bl HAL_GetTick 1348 00cc 0346 mov r3, r0 1349 .loc 1 287 39 discriminator 1 1350 00ce 03F57A73 add r3, r3, #1000 1351 .loc 1 287 23 discriminator 1 1352 00d2 054A ldr r2, .L93 1353 00d4 1360 str r3, [r2] 288:Core/Src/state_machine.c **** balancing_state = 0; 1354 .loc 1 288 23 1355 00d6 054B ldr r3, .L93+4 1356 00d8 0022 movs r2, #0 1357 00da 1A70 strb r2, [r3] 289:Core/Src/state_machine.c **** amsStopBalancing(); 1358 .loc 1 289 7 1359 00dc FFF7FEFF bl amsStopBalancing 1360 .L83: 290:Core/Src/state_machine.c **** } 291:Core/Src/state_machine.c **** } 292:Core/Src/state_machine.c **** } 1361 .loc 1 292 1 1362 00e0 1037 adds r7, r7, #16 ARM GAS /tmp/cctkPVvk.s page 30 1363 .cfi_def_cfa_offset 8 1364 00e2 BD46 mov sp, r7 1365 .cfi_def_cfa_register 13 1366 @ sp needed 1367 00e4 80BD pop {r7, pc} 1368 .L94: 1369 00e6 00BF .align 2 1370 .L93: 1371 00e8 00000000 .word balancing_timer 1372 00ec 00000000 .word balancing_state 1373 00f0 00000000 .word module 1374 .cfi_endproc 1375 .LFE136: 1377 .section .text.sm_program_powerground,"ax",%progbits 1378 .align 1 1379 .global sm_program_powerground 1380 .syntax unified 1381 .thumb 1382 .thumb_func 1384 sm_program_powerground: 1385 .LFB137: 293:Core/Src/state_machine.c **** 294:Core/Src/state_machine.c **** void sm_program_powerground(){ 1386 .loc 1 294 30 1387 .cfi_startproc 1388 @ args = 0, pretend = 0, frame = 0 1389 @ frame_needed = 1, uses_anonymous_args = 0 1390 0000 80B5 push {r7, lr} 1391 .cfi_def_cfa_offset 8 1392 .cfi_offset 7, -8 1393 .cfi_offset 14, -4 1394 0002 00AF add r7, sp, #0 1395 .cfi_def_cfa_register 7 295:Core/Src/state_machine.c **** if (programming_mode == 0) 1396 .loc 1 295 24 1397 0004 0A4B ldr r3, .L101 1398 0006 1B78 ldrb r3, [r3] @ zero_extendqisi2 1399 0008 83F00103 eor r3, r3, #1 1400 000c DBB2 uxtb r3, r3 1401 .loc 1 295 6 1402 000e 002B cmp r3, #0 1403 0010 0CD1 bne .L100 296:Core/Src/state_machine.c **** return; 297:Core/Src/state_machine.c **** PWM_powerground_control(100); 1404 .loc 1 297 3 1405 0012 6420 movs r0, #100 1406 0014 FFF7FEFF bl PWM_powerground_control 298:Core/Src/state_machine.c **** state.current_state = state.target_state = STATE_ACTIVE; 1407 .loc 1 298 44 1408 0018 064B ldr r3, .L101+4 1409 001a 0322 movs r2, #3 1410 001c 5A70 strb r2, [r3, #1] 1411 .loc 1 298 30 1412 001e 054B ldr r3, .L101+4 1413 0020 5A78 ldrb r2, [r3, #1] @ zero_extendqisi2 1414 .loc 1 298 23 1415 0022 044B ldr r3, .L101+4 ARM GAS /tmp/cctkPVvk.s page 31 1416 0024 1A70 strb r2, [r3] 1417 .L98: 299:Core/Src/state_machine.c **** while (1) { 300:Core/Src/state_machine.c **** can_handle_send_status(); 1418 .loc 1 300 5 discriminator 1 1419 0026 FFF7FEFF bl can_handle_send_status 1420 002a FCE7 b .L98 1421 .L100: 296:Core/Src/state_machine.c **** PWM_powerground_control(100); 1422 .loc 1 296 5 1423 002c 00BF nop 301:Core/Src/state_machine.c **** } 302:Core/Src/state_machine.c **** } 1424 .loc 1 302 1 1425 002e 80BD pop {r7, pc} 1426 .L102: 1427 .align 2 1428 .L101: 1429 0030 00000000 .word programming_mode 1430 0034 00000000 .word state 1431 .cfi_endproc 1432 .LFE137: 1434 .section .text.sm_eeprom_write_status,"ax",%progbits 1435 .align 1 1436 .global sm_eeprom_write_status 1437 .syntax unified 1438 .thumb 1439 .thumb_func 1441 sm_eeprom_write_status: 1442 .LFB138: 303:Core/Src/state_machine.c **** 304:Core/Src/state_machine.c **** void sm_eeprom_write_status(){ 1443 .loc 1 304 30 1444 .cfi_startproc 1445 @ args = 0, pretend = 0, frame = 0 1446 @ frame_needed = 1, uses_anonymous_args = 0 1447 0000 80B5 push {r7, lr} 1448 .cfi_def_cfa_offset 8 1449 .cfi_offset 7, -8 1450 .cfi_offset 14, -4 1451 0002 00AF add r7, sp, #0 1452 .cfi_def_cfa_register 7 305:Core/Src/state_machine.c **** if (eeprom_timer < HAL_GetTick()){ 1453 .loc 1 305 22 1454 0004 FFF7FEFF bl HAL_GetTick 1455 0008 0246 mov r2, r0 1456 .loc 1 305 20 discriminator 1 1457 000a 074B ldr r3, .L106 1458 000c 1B68 ldr r3, [r3] 1459 .loc 1 305 6 discriminator 1 1460 000e 9A42 cmp r2, r3 1461 0010 08D9 bls .L105 306:Core/Src/state_machine.c **** eeprom_write_status(); 1462 .loc 1 306 5 1463 0012 FFF7FEFF bl eeprom_write_status 307:Core/Src/state_machine.c **** eeprom_timer = HAL_GetTick() + EEPROM_WRITE_FREQ; 1464 .loc 1 307 20 ARM GAS /tmp/cctkPVvk.s page 32 1465 0016 FFF7FEFF bl HAL_GetTick 1466 001a 0346 mov r3, r0 1467 .loc 1 307 34 discriminator 1 1468 001c 03F57A73 add r3, r3, #1000 1469 .loc 1 307 18 discriminator 1 1470 0020 014A ldr r2, .L106 1471 0022 1360 str r3, [r2] 1472 .L105: 308:Core/Src/state_machine.c **** } 309:Core/Src/state_machine.c **** } 1473 .loc 1 309 1 1474 0024 00BF nop 1475 0026 80BD pop {r7, pc} 1476 .L107: 1477 .align 2 1478 .L106: 1479 0028 00000000 .word eeprom_timer 1480 .cfi_endproc 1481 .LFE138: 1483 .section .text.sm_check_errors,"ax",%progbits 1484 .align 1 1485 .global sm_check_errors 1486 .syntax unified 1487 .thumb 1488 .thumb_func 1490 sm_check_errors: 1491 .LFB139: 310:Core/Src/state_machine.c **** 311:Core/Src/state_machine.c **** void sm_check_errors(){ 1492 .loc 1 311 23 1493 .cfi_startproc 1494 @ args = 0, pretend = 0, frame = 0 1495 @ frame_needed = 1, uses_anonymous_args = 0 1496 0000 80B5 push {r7, lr} 1497 .cfi_def_cfa_offset 8 1498 .cfi_offset 7, -8 1499 .cfi_offset 14, -4 1500 0002 00AF add r7, sp, #0 1501 .cfi_def_cfa_register 7 312:Core/Src/state_machine.c **** if (programming_mode == 1 || debugging_mode == 1) {return;} // to disable error checking 1502 .loc 1 312 24 1503 0004 774B ldr r3, .L126 1504 0006 1B78 ldrb r3, [r3] @ zero_extendqisi2 1505 .loc 1 312 6 1506 0008 002B cmp r3, #0 1507 000a 40F0E880 bne .L125 1508 .loc 1 312 47 discriminator 2 1509 000e 764B ldr r3, .L126+4 1510 0010 1B78 ldrb r3, [r3] @ zero_extendqisi2 1511 .loc 1 312 29 discriminator 2 1512 0012 002B cmp r3, #0 1513 0014 40F0E380 bne .L125 313:Core/Src/state_machine.c **** state.error_type.temperature_error = (error_data.error_sources & (1 << 0) || error_data.error_sou 1514 .loc 1 313 51 1515 0018 744B ldr r3, .L126+8 1516 001a 1B88 ldrh r3, [r3] 1517 .loc 1 313 66 ARM GAS /tmp/cctkPVvk.s page 33 1518 001c 03F00103 and r3, r3, #1 1519 .loc 1 313 160 1520 0020 002B cmp r3, #0 1521 0022 0BD1 bne .L112 1522 .loc 1 313 90 discriminator 2 1523 0024 714B ldr r3, .L126+8 1524 0026 1B88 ldrh r3, [r3] 1525 .loc 1 313 105 discriminator 2 1526 0028 03F00203 and r3, r3, #2 1527 .loc 1 313 77 discriminator 2 1528 002c 002B cmp r3, #0 1529 002e 05D1 bne .L112 1530 .loc 1 313 129 discriminator 4 1531 0030 6E4B ldr r3, .L126+8 1532 0032 1B88 ldrh r3, [r3] 1533 .loc 1 313 144 discriminator 4 1534 0034 03F01003 and r3, r3, #16 1535 .loc 1 313 160 discriminator 4 1536 0038 002B cmp r3, #0 1537 003a 01D0 beq .L113 1538 .L112: 1539 .loc 1 313 160 is_stmt 0 discriminator 5 1540 003c 0123 movs r3, #1 1541 .loc 1 313 160 1542 003e 00E0 b .L114 1543 .L113: 1544 .loc 1 313 160 discriminator 6 1545 0040 0023 movs r3, #0 1546 .L114: 1547 .loc 1 313 160 discriminator 8 1548 0042 03F00103 and r3, r3, #1 1549 0046 D9B2 uxtb r1, r3 1550 .loc 1 313 38 is_stmt 1 discriminator 8 1551 0048 694A ldr r2, .L126+12 1552 004a 1379 ldrb r3, [r2, #4] 1553 004c 61F38203 bfi r3, r1, #2, #1 1554 0050 1371 strb r3, [r2, #4] 314:Core/Src/state_machine.c **** state.error_type.voltage_error = (error_data.error_sources & (1 << 2)|| error_data.error_sources 1555 .loc 1 314 47 1556 0052 664B ldr r3, .L126+8 1557 0054 1B88 ldrh r3, [r3] 1558 .loc 1 314 62 1559 0056 03F00403 and r3, r3, #4 1560 .loc 1 314 188 1561 005a 002B cmp r3, #0 1562 005c 11D1 bne .L115 1563 .loc 1 314 85 discriminator 2 1564 005e 634B ldr r3, .L126+8 1565 0060 1B88 ldrh r3, [r3] 1566 .loc 1 314 100 discriminator 2 1567 0062 03F00803 and r3, r3, #8 1568 .loc 1 314 72 discriminator 2 1569 0066 002B cmp r3, #0 1570 0068 0BD1 bne .L115 1571 .loc 1 314 123 discriminator 4 1572 006a 604B ldr r3, .L126+8 1573 006c 1B88 ldrh r3, [r3] ARM GAS /tmp/cctkPVvk.s page 34 1574 .loc 1 314 138 discriminator 4 1575 006e 03F02003 and r3, r3, #32 1576 .loc 1 314 110 discriminator 4 1577 0072 002B cmp r3, #0 1578 0074 05D1 bne .L115 1579 .loc 1 314 175 discriminator 6 1580 0076 5F4B ldr r3, .L126+16 1581 0078 1B68 ldr r3, [r3] 1582 .loc 1 314 188 discriminator 6 1583 007a 47F22F52 movw r2, #29999 1584 007e 9342 cmp r3, r2 1585 0080 01DC bgt .L116 1586 .L115: 1587 .loc 1 314 188 is_stmt 0 discriminator 7 1588 0082 0123 movs r3, #1 1589 .loc 1 314 188 1590 0084 00E0 b .L117 1591 .L116: 1592 .loc 1 314 188 discriminator 8 1593 0086 0023 movs r3, #0 1594 .L117: 1595 .loc 1 314 188 discriminator 10 1596 0088 03F00103 and r3, r3, #1 1597 008c D9B2 uxtb r1, r3 1598 .loc 1 314 34 is_stmt 1 discriminator 10 1599 008e 584A ldr r2, .L126+12 1600 0090 1379 ldrb r3, [r2, #4] 1601 0092 61F34513 bfi r3, r1, #5, #1 1602 0096 1371 strb r3, [r2, #4] 315:Core/Src/state_machine.c **** state.error_type.bms_timeout = (error_data.error_sources & (1 << 7)) ? 1 : 0; 1603 .loc 1 315 45 1604 0098 544B ldr r3, .L126+8 1605 009a 1B88 ldrh r3, [r3] 1606 .loc 1 315 76 1607 009c DB11 asrs r3, r3, #7 1608 009e 03F00103 and r3, r3, #1 1609 00a2 D9B2 uxtb r1, r3 1610 .loc 1 315 32 1611 00a4 524A ldr r2, .L126+12 1612 00a6 1379 ldrb r3, [r2, #4] 1613 00a8 61F30003 bfi r3, r1, #0, #1 1614 00ac 1371 strb r3, [r2, #4] 316:Core/Src/state_machine.c **** state.error_type.bms_fault = (error_data.error_sources & (1 << 8) || error_data.error_sources & ( 1615 .loc 1 316 43 1616 00ae 4F4B ldr r3, .L126+8 1617 00b0 1B88 ldrh r3, [r3] 1618 .loc 1 316 58 1619 00b2 03F48073 and r3, r3, #256 1620 .loc 1 316 153 1621 00b6 002B cmp r3, #0 1622 00b8 0BD1 bne .L118 1623 .loc 1 316 82 discriminator 2 1624 00ba 4C4B ldr r3, .L126+8 1625 00bc 1B88 ldrh r3, [r3] 1626 .loc 1 316 97 discriminator 2 1627 00be 03F48063 and r3, r3, #1024 1628 .loc 1 316 69 discriminator 2 ARM GAS /tmp/cctkPVvk.s page 35 1629 00c2 002B cmp r3, #0 1630 00c4 05D1 bne .L118 1631 .loc 1 316 122 discriminator 4 1632 00c6 494B ldr r3, .L126+8 1633 00c8 1B88 ldrh r3, [r3] 1634 .loc 1 316 137 discriminator 4 1635 00ca 03F40073 and r3, r3, #512 1636 .loc 1 316 153 discriminator 4 1637 00ce 002B cmp r3, #0 1638 00d0 01D0 beq .L119 1639 .L118: 1640 .loc 1 316 153 is_stmt 0 discriminator 5 1641 00d2 0123 movs r3, #1 1642 .loc 1 316 153 1643 00d4 00E0 b .L120 1644 .L119: 1645 .loc 1 316 153 discriminator 6 1646 00d6 0023 movs r3, #0 1647 .L120: 1648 .loc 1 316 153 discriminator 8 1649 00d8 03F00103 and r3, r3, #1 1650 00dc D9B2 uxtb r1, r3 1651 .loc 1 316 30 is_stmt 1 discriminator 8 1652 00de 444A ldr r2, .L126+12 1653 00e0 1379 ldrb r3, [r2, #4] 1654 00e2 61F34103 bfi r3, r1, #1, #1 1655 00e6 1371 strb r3, [r2, #4] 317:Core/Src/state_machine.c **** //SEK_EEPROM_ERR: state.error_type.eeprom_error = 1; 318:Core/Src/state_machine.c **** //state.error_type.current_error = (powerground_status > 10 && CURRENT_MEASUREMENT < 500) ? 1 : 0 319:Core/Src/state_machine.c **** state.error_type.current_sensor_missing = (!CURRENT_MEASUREMENT_ON) ? 1 : 0; 1656 .loc 1 319 75 1657 00e8 434B ldr r3, .L126+20 1658 00ea 1B78 ldrb r3, [r3] @ zero_extendqisi2 1659 00ec 83F00103 eor r3, r3, #1 1660 00f0 D9B2 uxtb r1, r3 1661 .loc 1 319 43 1662 00f2 3F4A ldr r2, .L126+12 1663 00f4 1379 ldrb r3, [r2, #4] 1664 00f6 61F30413 bfi r3, r1, #4, #1 1665 00fa 1371 strb r3, [r2, #4] 320:Core/Src/state_machine.c **** state.error_type.voltage_missing = (RELAY_BAT_SIDE_VOLTAGE < 1000) ? 1 : 0; 1666 .loc 1 320 74 1667 00fc 3D4B ldr r3, .L126+16 1668 00fe 1B68 ldr r3, [r3] 1669 0100 40F2E732 movw r2, #999 1670 0104 9342 cmp r3, r2 1671 0106 D4BF ite le 1672 0108 0123 movle r3, #1 1673 010a 0023 movgt r3, #0 1674 010c D9B2 uxtb r1, r3 1675 .loc 1 320 36 1676 010e 384A ldr r2, .L126+12 1677 0110 1379 ldrb r3, [r2, #4] 1678 0112 61F38613 bfi r3, r1, #6, #1 1679 0116 1371 strb r3, [r2, #4] 321:Core/Src/state_machine.c **** 322:Core/Src/state_machine.c **** ARM GAS /tmp/cctkPVvk.s page 36 323:Core/Src/state_machine.c **** if (state.error_type.current_error == 1 || state.error_type.current_sensor_missing == 1 || //stat 1680 .loc 1 323 38 1681 0118 354B ldr r3, .L126+12 1682 011a 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1683 011c 03F00803 and r3, r3, #8 1684 0120 DBB2 uxtb r3, r3 1685 .loc 1 323 6 1686 0122 002B cmp r3, #0 1687 0124 30D1 bne .L121 1688 .loc 1 323 86 discriminator 1 1689 0126 324B ldr r3, .L126+12 1690 0128 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1691 012a 03F01003 and r3, r3, #16 1692 012e DBB2 uxtb r3, r3 1693 .loc 1 323 43 discriminator 1 1694 0130 002B cmp r3, #0 1695 0132 29D1 bne .L121 324:Core/Src/state_machine.c **** state.error_type.state_transition_fail == 1 || state.error_type.temperature_error == 1 || sta 1696 .loc 1 324 46 1697 0134 2E4B ldr r3, .L126+12 1698 0136 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1699 0138 23F07F03 bic r3, r3, #127 1700 013c DBB2 uxtb r3, r3 323:Core/Src/state_machine.c **** state.error_type.state_transition_fail == 1 || state.error_type.temperature_error == 1 || sta 1701 .loc 1 323 91 discriminator 2 1702 013e 002B cmp r3, #0 1703 0140 22D1 bne .L121 1704 .loc 1 324 89 1705 0142 2B4B ldr r3, .L126+12 1706 0144 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1707 0146 03F00403 and r3, r3, #4 1708 014a DBB2 uxtb r3, r3 1709 .loc 1 324 51 1710 014c 002B cmp r3, #0 1711 014e 1BD1 bne .L121 1712 .loc 1 324 128 discriminator 1 1713 0150 274B ldr r3, .L126+12 1714 0152 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1715 0154 03F02003 and r3, r3, #32 1716 0158 DBB2 uxtb r3, r3 1717 .loc 1 324 94 discriminator 1 1718 015a 002B cmp r3, #0 1719 015c 14D1 bne .L121 325:Core/Src/state_machine.c **** state.error_type.voltage_missing == 1 || state.error_type.bms_fault == 1 || state.error_type. 1720 .loc 1 325 40 1721 015e 244B ldr r3, .L126+12 1722 0160 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1723 0162 03F04003 and r3, r3, #64 1724 0166 DBB2 uxtb r3, r3 324:Core/Src/state_machine.c **** state.error_type.state_transition_fail == 1 || state.error_type.temperature_error == 1 || sta 1725 .loc 1 324 133 discriminator 2 1726 0168 002B cmp r3, #0 1727 016a 0DD1 bne .L121 1728 .loc 1 325 75 1729 016c 204B ldr r3, .L126+12 1730 016e 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1731 0170 03F00203 and r3, r3, #2 ARM GAS /tmp/cctkPVvk.s page 37 1732 0174 DBB2 uxtb r3, r3 1733 .loc 1 325 45 1734 0176 002B cmp r3, #0 1735 0178 06D1 bne .L121 1736 .loc 1 325 112 discriminator 1 1737 017a 1D4B ldr r3, .L126+12 1738 017c 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 1739 017e 03F00103 and r3, r3, #1 1740 0182 DBB2 uxtb r3, r3 1741 .loc 1 325 80 discriminator 1 1742 0184 002B cmp r3, #0 1743 0186 19D0 beq .L122 1744 .L121: 326:Core/Src/state_machine.c **** { 327:Core/Src/state_machine.c **** if (state.current_state != STATE_INACTIVE && state.current_state != STATE_ERROR) 1745 .loc 1 327 14 1746 0188 194B ldr r3, .L126+12 1747 018a 1B78 ldrb r3, [r3] @ zero_extendqisi2 1748 .loc 1 327 8 1749 018c 002B cmp r3, #0 1750 018e 06D0 beq .L123 1751 .loc 1 327 55 discriminator 1 1752 0190 174B ldr r3, .L126+12 1753 0192 1B78 ldrb r3, [r3] @ zero_extendqisi2 1754 .loc 1 327 47 discriminator 1 1755 0194 072B cmp r3, #7 1756 0196 02D0 beq .L123 328:Core/Src/state_machine.c **** state.current_state = STATE_DISCHARGE; 1757 .loc 1 328 27 1758 0198 154B ldr r3, .L126+12 1759 019a 0422 movs r2, #4 1760 019c 1A70 strb r2, [r3] 1761 .L123: 329:Core/Src/state_machine.c **** state.target_state = STATE_ERROR; 1762 .loc 1 329 24 1763 019e 144B ldr r3, .L126+12 1764 01a0 0722 movs r2, #7 1765 01a2 5A70 strb r2, [r3, #1] 330:Core/Src/state_machine.c **** PWM_powerground_control(255); 1766 .loc 1 330 5 1767 01a4 FF20 movs r0, #255 1768 01a6 FFF7FEFF bl PWM_powerground_control 331:Core/Src/state_machine.c **** error_timer = HAL_GetTick() + ERROR_LATCH_TIME; 1769 .loc 1 331 19 1770 01aa FFF7FEFF bl HAL_GetTick 1771 01ae 0346 mov r3, r0 1772 .loc 1 331 33 discriminator 1 1773 01b0 03F51C53 add r3, r3, #9984 1774 01b4 1033 adds r3, r3, #16 1775 .loc 1 331 17 discriminator 1 1776 01b6 114A ldr r2, .L126+24 1777 01b8 1360 str r3, [r2] 1778 .loc 1 331 17 is_stmt 0 1779 01ba 0DE0 b .L124 1780 .L122: 332:Core/Src/state_machine.c **** } else if (state.current_state == STATE_ERROR && error_timer < HAL_GetTick()){ 1781 .loc 1 332 19 is_stmt 1 ARM GAS /tmp/cctkPVvk.s page 38 1782 01bc 0C4B ldr r3, .L126+12 1783 01be 1B78 ldrb r3, [r3] @ zero_extendqisi2 1784 .loc 1 332 13 1785 01c0 072B cmp r3, #7 1786 01c2 09D1 bne .L124 1787 .loc 1 332 66 discriminator 1 1788 01c4 FFF7FEFF bl HAL_GetTick 1789 01c8 0246 mov r2, r0 1790 .loc 1 332 64 discriminator 1 1791 01ca 0C4B ldr r3, .L126+24 1792 01cc 1B68 ldr r3, [r3] 1793 .loc 1 332 49 discriminator 1 1794 01ce 9A42 cmp r2, r3 1795 01d0 02D9 bls .L124 333:Core/Src/state_machine.c **** state.target_state = STATE_INACTIVE; 1796 .loc 1 333 24 1797 01d2 074B ldr r3, .L126+12 1798 01d4 0022 movs r2, #0 1799 01d6 5A70 strb r2, [r3, #1] 1800 .L124: 334:Core/Src/state_machine.c **** } 335:Core/Src/state_machine.c **** sm_set_error_source(); 1801 .loc 1 335 3 1802 01d8 FFF7FEFF bl sm_set_error_source 1803 01dc 00E0 b .L108 1804 .L125: 312:Core/Src/state_machine.c **** state.error_type.temperature_error = (error_data.error_sources & (1 << 0) || error_data.error_sou 1805 .loc 1 312 54 1806 01de 00BF nop 1807 .L108: 336:Core/Src/state_machine.c **** } 1808 .loc 1 336 1 1809 01e0 80BD pop {r7, pc} 1810 .L127: 1811 01e2 00BF .align 2 1812 .L126: 1813 01e4 00000000 .word programming_mode 1814 01e8 00000000 .word debugging_mode 1815 01ec 00000000 .word error_data 1816 01f0 00000000 .word state 1817 01f4 00000000 .word RELAY_BAT_SIDE_VOLTAGE 1818 01f8 00000000 .word CURRENT_MEASUREMENT_ON 1819 01fc 00000000 .word error_timer 1820 .cfi_endproc 1821 .LFE139: 1823 .section .text.sm_set_error_source,"ax",%progbits 1824 .align 1 1825 .global sm_set_error_source 1826 .syntax unified 1827 .thumb 1828 .thumb_func 1830 sm_set_error_source: 1831 .LFB140: 337:Core/Src/state_machine.c **** 338:Core/Src/state_machine.c **** void sm_set_error_source(){ 1832 .loc 1 338 27 1833 .cfi_startproc ARM GAS /tmp/cctkPVvk.s page 39 1834 @ args = 0, pretend = 0, frame = 0 1835 @ frame_needed = 1, uses_anonymous_args = 0 1836 @ link register save eliminated. 1837 0000 80B4 push {r7} 1838 .cfi_def_cfa_offset 4 1839 .cfi_offset 7, -4 1840 0002 00AF add r7, sp, #0 1841 .cfi_def_cfa_register 7 339:Core/Src/state_machine.c **** state.error_source = 0; 1842 .loc 1 339 22 1843 0004 414B ldr r3, .L129 1844 0006 0022 movs r2, #0 1845 0008 5A80 strh r2, [r3, #2] @ movhi 340:Core/Src/state_machine.c **** state.error_source |= (state.error_type.bms_timeout << 0); 1846 .loc 1 340 8 1847 000a 404B ldr r3, .L129 1848 000c 5B88 ldrh r3, [r3, #2] 1849 .loc 1 340 42 1850 000e 3F4A ldr r2, .L129 1851 0010 1279 ldrb r2, [r2, #4] 1852 0012 C2F30002 ubfx r2, r2, #0, #1 1853 0016 D2B2 uxtb r2, r2 1854 .loc 1 340 22 1855 0018 1343 orrs r3, r3, r2 1856 001a 9AB2 uxth r2, r3 1857 001c 3B4B ldr r3, .L129 1858 001e 5A80 strh r2, [r3, #2] @ movhi 341:Core/Src/state_machine.c **** state.error_source |= (state.error_type.bms_fault << 1); 1859 .loc 1 341 8 1860 0020 3A4B ldr r3, .L129 1861 0022 5B88 ldrh r3, [r3, #2] 1862 0024 1AB2 sxth r2, r3 1863 .loc 1 341 42 1864 0026 394B ldr r3, .L129 1865 0028 1B79 ldrb r3, [r3, #4] 1866 002a C3F34003 ubfx r3, r3, #1, #1 1867 002e DBB2 uxtb r3, r3 1868 .loc 1 341 22 1869 0030 1BB2 sxth r3, r3 1870 0032 5B00 lsls r3, r3, #1 1871 0034 1BB2 sxth r3, r3 1872 0036 1343 orrs r3, r3, r2 1873 0038 1BB2 sxth r3, r3 1874 003a 9AB2 uxth r2, r3 1875 003c 334B ldr r3, .L129 1876 003e 5A80 strh r2, [r3, #2] @ movhi 342:Core/Src/state_machine.c **** state.error_source |= (state.error_type.temperature_error << 2); 1877 .loc 1 342 8 1878 0040 324B ldr r3, .L129 1879 0042 5B88 ldrh r3, [r3, #2] 1880 0044 1AB2 sxth r2, r3 1881 .loc 1 342 42 1882 0046 314B ldr r3, .L129 1883 0048 1B79 ldrb r3, [r3, #4] 1884 004a C3F38003 ubfx r3, r3, #2, #1 1885 004e DBB2 uxtb r3, r3 1886 .loc 1 342 22 ARM GAS /tmp/cctkPVvk.s page 40 1887 0050 1BB2 sxth r3, r3 1888 0052 9B00 lsls r3, r3, #2 1889 0054 1BB2 sxth r3, r3 1890 0056 1343 orrs r3, r3, r2 1891 0058 1BB2 sxth r3, r3 1892 005a 9AB2 uxth r2, r3 1893 005c 2B4B ldr r3, .L129 1894 005e 5A80 strh r2, [r3, #2] @ movhi 343:Core/Src/state_machine.c **** state.error_source |= (state.error_type.current_error << 3); 1895 .loc 1 343 8 1896 0060 2A4B ldr r3, .L129 1897 0062 5B88 ldrh r3, [r3, #2] 1898 0064 1AB2 sxth r2, r3 1899 .loc 1 343 42 1900 0066 294B ldr r3, .L129 1901 0068 1B79 ldrb r3, [r3, #4] 1902 006a C3F3C003 ubfx r3, r3, #3, #1 1903 006e DBB2 uxtb r3, r3 1904 .loc 1 343 22 1905 0070 1BB2 sxth r3, r3 1906 0072 DB00 lsls r3, r3, #3 1907 0074 1BB2 sxth r3, r3 1908 0076 1343 orrs r3, r3, r2 1909 0078 1BB2 sxth r3, r3 1910 007a 9AB2 uxth r2, r3 1911 007c 234B ldr r3, .L129 1912 007e 5A80 strh r2, [r3, #2] @ movhi 344:Core/Src/state_machine.c **** 345:Core/Src/state_machine.c **** state.error_source |= (state.error_type.current_sensor_missing << 4); 1913 .loc 1 345 8 1914 0080 224B ldr r3, .L129 1915 0082 5B88 ldrh r3, [r3, #2] 1916 0084 1AB2 sxth r2, r3 1917 .loc 1 345 42 1918 0086 214B ldr r3, .L129 1919 0088 1B79 ldrb r3, [r3, #4] 1920 008a C3F30013 ubfx r3, r3, #4, #1 1921 008e DBB2 uxtb r3, r3 1922 .loc 1 345 22 1923 0090 1BB2 sxth r3, r3 1924 0092 1B01 lsls r3, r3, #4 1925 0094 1BB2 sxth r3, r3 1926 0096 1343 orrs r3, r3, r2 1927 0098 1BB2 sxth r3, r3 1928 009a 9AB2 uxth r2, r3 1929 009c 1B4B ldr r3, .L129 1930 009e 5A80 strh r2, [r3, #2] @ movhi 346:Core/Src/state_machine.c **** state.error_source |= (state.error_type.voltage_error << 5); 1931 .loc 1 346 8 1932 00a0 1A4B ldr r3, .L129 1933 00a2 5B88 ldrh r3, [r3, #2] 1934 00a4 1AB2 sxth r2, r3 1935 .loc 1 346 42 1936 00a6 194B ldr r3, .L129 1937 00a8 1B79 ldrb r3, [r3, #4] 1938 00aa C3F34013 ubfx r3, r3, #5, #1 1939 00ae DBB2 uxtb r3, r3 ARM GAS /tmp/cctkPVvk.s page 41 1940 .loc 1 346 22 1941 00b0 1BB2 sxth r3, r3 1942 00b2 5B01 lsls r3, r3, #5 1943 00b4 1BB2 sxth r3, r3 1944 00b6 1343 orrs r3, r3, r2 1945 00b8 1BB2 sxth r3, r3 1946 00ba 9AB2 uxth r2, r3 1947 00bc 134B ldr r3, .L129 1948 00be 5A80 strh r2, [r3, #2] @ movhi 347:Core/Src/state_machine.c **** state.error_source |= (state.error_type.voltage_missing << 6); 1949 .loc 1 347 8 1950 00c0 124B ldr r3, .L129 1951 00c2 5B88 ldrh r3, [r3, #2] 1952 00c4 1AB2 sxth r2, r3 1953 .loc 1 347 42 1954 00c6 114B ldr r3, .L129 1955 00c8 1B79 ldrb r3, [r3, #4] 1956 00ca C3F38013 ubfx r3, r3, #6, #1 1957 00ce DBB2 uxtb r3, r3 1958 .loc 1 347 22 1959 00d0 1BB2 sxth r3, r3 1960 00d2 9B01 lsls r3, r3, #6 1961 00d4 1BB2 sxth r3, r3 1962 00d6 1343 orrs r3, r3, r2 1963 00d8 1BB2 sxth r3, r3 1964 00da 9AB2 uxth r2, r3 1965 00dc 0B4B ldr r3, .L129 1966 00de 5A80 strh r2, [r3, #2] @ movhi 348:Core/Src/state_machine.c **** state.error_source |= (state.error_type.state_transition_fail << 7); 1967 .loc 1 348 8 1968 00e0 0A4B ldr r3, .L129 1969 00e2 5B88 ldrh r3, [r3, #2] 1970 00e4 1AB2 sxth r2, r3 1971 .loc 1 348 42 1972 00e6 094B ldr r3, .L129 1973 00e8 1B79 ldrb r3, [r3, #4] 1974 00ea C3F3C013 ubfx r3, r3, #7, #1 1975 00ee DBB2 uxtb r3, r3 1976 .loc 1 348 22 1977 00f0 1BB2 sxth r3, r3 1978 00f2 DB01 lsls r3, r3, #7 1979 00f4 1BB2 sxth r3, r3 1980 00f6 1343 orrs r3, r3, r2 1981 00f8 1BB2 sxth r3, r3 1982 00fa 9AB2 uxth r2, r3 1983 00fc 034B ldr r3, .L129 1984 00fe 5A80 strh r2, [r3, #2] @ movhi 349:Core/Src/state_machine.c **** } 1985 .loc 1 349 1 1986 0100 00BF nop 1987 0102 BD46 mov sp, r7 1988 .cfi_def_cfa_register 13 1989 @ sp needed 1990 0104 5DF8047B ldr r7, [sp], #4 1991 .cfi_restore 7 1992 .cfi_def_cfa_offset 0 1993 0108 7047 bx lr ARM GAS /tmp/cctkPVvk.s page 42 1994 .L130: 1995 010a 00BF .align 2 1996 .L129: 1997 010c 00000000 .word state 1998 .cfi_endproc 1999 .LFE140: 2001 .section .text.sm_update_inactive,"ax",%progbits 2002 .align 1 2003 .global sm_update_inactive 2004 .syntax unified 2005 .thumb 2006 .thumb_func 2008 sm_update_inactive: 2009 .LFB141: 350:Core/Src/state_machine.c **** 351:Core/Src/state_machine.c **** State sm_update_inactive(){ 2010 .loc 1 351 27 2011 .cfi_startproc 2012 @ args = 0, pretend = 0, frame = 0 2013 @ frame_needed = 1, uses_anonymous_args = 0 2014 @ link register save eliminated. 2015 0000 80B4 push {r7} 2016 .cfi_def_cfa_offset 4 2017 .cfi_offset 7, -4 2018 0002 00AF add r7, sp, #0 2019 .cfi_def_cfa_register 7 352:Core/Src/state_machine.c **** switch (state.target_state) { 2020 .loc 1 352 16 2021 0004 0B4B ldr r3, .L137 2022 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2023 .loc 1 352 3 2024 0008 072B cmp r3, #7 2025 000a 0AD0 beq .L132 2026 000c 072B cmp r3, #7 2027 000e 0ADC bgt .L133 2028 0010 012B cmp r3, #1 2029 0012 02D0 beq .L134 2030 0014 052B cmp r3, #5 2031 0016 02D0 beq .L135 2032 0018 05E0 b .L133 2033 .L134: 353:Core/Src/state_machine.c **** case STATE_PRECHARGE: 354:Core/Src/state_machine.c **** return STATE_PRECHARGE; 2034 .loc 1 354 14 2035 001a 0123 movs r3, #1 2036 001c 04E0 b .L136 2037 .L135: 355:Core/Src/state_machine.c **** case STATE_CHARGING_PRECHARGE: 356:Core/Src/state_machine.c **** return STATE_CHARGING_PRECHARGE; 2038 .loc 1 356 14 2039 001e 0523 movs r3, #5 2040 0020 02E0 b .L136 2041 .L132: 357:Core/Src/state_machine.c **** case STATE_ERROR: 358:Core/Src/state_machine.c **** return STATE_ERROR; 2042 .loc 1 358 14 2043 0022 0723 movs r3, #7 ARM GAS /tmp/cctkPVvk.s page 43 2044 0024 00E0 b .L136 2045 .L133: 359:Core/Src/state_machine.c **** default: 360:Core/Src/state_machine.c **** return STATE_INACTIVE; 2046 .loc 1 360 14 2047 0026 0023 movs r3, #0 2048 .L136: 361:Core/Src/state_machine.c **** } 362:Core/Src/state_machine.c **** } 2049 .loc 1 362 1 2050 0028 1846 mov r0, r3 2051 002a BD46 mov sp, r7 2052 .cfi_def_cfa_register 13 2053 @ sp needed 2054 002c 5DF8047B ldr r7, [sp], #4 2055 .cfi_restore 7 2056 .cfi_def_cfa_offset 0 2057 0030 7047 bx lr 2058 .L138: 2059 0032 00BF .align 2 2060 .L137: 2061 0034 00000000 .word state 2062 .cfi_endproc 2063 .LFE141: 2065 .section .text.sm_update_precharge,"ax",%progbits 2066 .align 1 2067 .global sm_update_precharge 2068 .syntax unified 2069 .thumb 2070 .thumb_func 2072 sm_update_precharge: 2073 .LFB142: 363:Core/Src/state_machine.c **** 364:Core/Src/state_machine.c **** State sm_update_precharge(){ 2074 .loc 1 364 28 2075 .cfi_startproc 2076 @ args = 0, pretend = 0, frame = 0 2077 @ frame_needed = 1, uses_anonymous_args = 0 2078 @ link register save eliminated. 2079 0000 80B4 push {r7} 2080 .cfi_def_cfa_offset 4 2081 .cfi_offset 7, -4 2082 0002 00AF add r7, sp, #0 2083 .cfi_def_cfa_register 7 365:Core/Src/state_machine.c **** switch (state.target_state) { 2084 .loc 1 365 16 2085 0004 084B ldr r3, .L145 2086 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2087 .loc 1 365 3 2088 0008 002B cmp r3, #0 2089 000a 02D0 beq .L140 2090 000c 022B cmp r3, #2 2091 000e 02D0 beq .L141 2092 0010 03E0 b .L144 2093 .L140: 366:Core/Src/state_machine.c **** case STATE_INACTIVE: // if CAN Signal 0000 0000 then immidiete shutdown 367:Core/Src/state_machine.c **** return STATE_DISCHARGE; ARM GAS /tmp/cctkPVvk.s page 44 2094 .loc 1 367 14 2095 0012 0423 movs r3, #4 2096 0014 02E0 b .L143 2097 .L141: 368:Core/Src/state_machine.c **** case STATE_READY: 369:Core/Src/state_machine.c **** return STATE_READY; 2098 .loc 1 369 14 2099 0016 0223 movs r3, #2 2100 0018 00E0 b .L143 2101 .L144: 370:Core/Src/state_machine.c **** default: 371:Core/Src/state_machine.c **** return STATE_PRECHARGE; 2102 .loc 1 371 14 2103 001a 0123 movs r3, #1 2104 .L143: 372:Core/Src/state_machine.c **** } 373:Core/Src/state_machine.c **** } 2105 .loc 1 373 1 2106 001c 1846 mov r0, r3 2107 001e BD46 mov sp, r7 2108 .cfi_def_cfa_register 13 2109 @ sp needed 2110 0020 5DF8047B ldr r7, [sp], #4 2111 .cfi_restore 7 2112 .cfi_def_cfa_offset 0 2113 0024 7047 bx lr 2114 .L146: 2115 0026 00BF .align 2 2116 .L145: 2117 0028 00000000 .word state 2118 .cfi_endproc 2119 .LFE142: 2121 .section .text.sm_update_ready,"ax",%progbits 2122 .align 1 2123 .global sm_update_ready 2124 .syntax unified 2125 .thumb 2126 .thumb_func 2128 sm_update_ready: 2129 .LFB143: 374:Core/Src/state_machine.c **** 375:Core/Src/state_machine.c **** State sm_update_ready(){ 2130 .loc 1 375 24 2131 .cfi_startproc 2132 @ args = 0, pretend = 0, frame = 0 2133 @ frame_needed = 1, uses_anonymous_args = 0 2134 @ link register save eliminated. 2135 0000 80B4 push {r7} 2136 .cfi_def_cfa_offset 4 2137 .cfi_offset 7, -4 2138 0002 00AF add r7, sp, #0 2139 .cfi_def_cfa_register 7 376:Core/Src/state_machine.c **** switch (state.target_state) { 2140 .loc 1 376 16 2141 0004 084B ldr r3, .L153 2142 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2143 .loc 1 376 3 ARM GAS /tmp/cctkPVvk.s page 45 2144 0008 032B cmp r3, #3 2145 000a 02D0 beq .L148 2146 000c 042B cmp r3, #4 2147 000e 02D0 beq .L149 2148 0010 03E0 b .L152 2149 .L148: 377:Core/Src/state_machine.c **** case STATE_ACTIVE: // if CAN Signal 1100 0000 then turn on powerground 378:Core/Src/state_machine.c **** return STATE_ACTIVE; 2150 .loc 1 378 14 2151 0012 0323 movs r3, #3 2152 0014 02E0 b .L151 2153 .L149: 379:Core/Src/state_machine.c **** case STATE_DISCHARGE: // if CAN Signal 0000 0000 then shutdown 380:Core/Src/state_machine.c **** return STATE_DISCHARGE; 2154 .loc 1 380 14 2155 0016 0423 movs r3, #4 2156 0018 00E0 b .L151 2157 .L152: 381:Core/Src/state_machine.c **** default: 382:Core/Src/state_machine.c **** return STATE_READY; 2158 .loc 1 382 14 2159 001a 0223 movs r3, #2 2160 .L151: 383:Core/Src/state_machine.c **** } 384:Core/Src/state_machine.c **** } 2161 .loc 1 384 1 2162 001c 1846 mov r0, r3 2163 001e BD46 mov sp, r7 2164 .cfi_def_cfa_register 13 2165 @ sp needed 2166 0020 5DF8047B ldr r7, [sp], #4 2167 .cfi_restore 7 2168 .cfi_def_cfa_offset 0 2169 0024 7047 bx lr 2170 .L154: 2171 0026 00BF .align 2 2172 .L153: 2173 0028 00000000 .word state 2174 .cfi_endproc 2175 .LFE143: 2177 .section .text.sm_update_active,"ax",%progbits 2178 .align 1 2179 .global sm_update_active 2180 .syntax unified 2181 .thumb 2182 .thumb_func 2184 sm_update_active: 2185 .LFB144: 385:Core/Src/state_machine.c **** 386:Core/Src/state_machine.c **** State sm_update_active(){ 2186 .loc 1 386 25 2187 .cfi_startproc 2188 @ args = 0, pretend = 0, frame = 0 2189 @ frame_needed = 1, uses_anonymous_args = 0 2190 @ link register save eliminated. 2191 0000 80B4 push {r7} 2192 .cfi_def_cfa_offset 4 ARM GAS /tmp/cctkPVvk.s page 46 2193 .cfi_offset 7, -4 2194 0002 00AF add r7, sp, #0 2195 .cfi_def_cfa_register 7 387:Core/Src/state_machine.c **** switch (state.target_state) { 2196 .loc 1 387 16 2197 0004 084B ldr r3, .L161 2198 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2199 .loc 1 387 3 2200 0008 022B cmp r3, #2 2201 000a 02D0 beq .L156 2202 000c 042B cmp r3, #4 2203 000e 02D0 beq .L157 2204 0010 03E0 b .L160 2205 .L156: 388:Core/Src/state_machine.c **** case STATE_READY: // if CAN Signal 1000 0000 then turn oof powerground but stay read 389:Core/Src/state_machine.c **** return STATE_READY; 2206 .loc 1 389 14 2207 0012 0223 movs r3, #2 2208 0014 02E0 b .L159 2209 .L157: 390:Core/Src/state_machine.c **** case STATE_DISCHARGE: // if CAN Signal 0000 0000 then shutdown 391:Core/Src/state_machine.c **** return STATE_DISCHARGE; 2210 .loc 1 391 14 2211 0016 0423 movs r3, #4 2212 0018 00E0 b .L159 2213 .L160: 392:Core/Src/state_machine.c **** default: 393:Core/Src/state_machine.c **** return STATE_ACTIVE; 2214 .loc 1 393 14 2215 001a 0323 movs r3, #3 2216 .L159: 394:Core/Src/state_machine.c **** } 395:Core/Src/state_machine.c **** } 2217 .loc 1 395 1 2218 001c 1846 mov r0, r3 2219 001e BD46 mov sp, r7 2220 .cfi_def_cfa_register 13 2221 @ sp needed 2222 0020 5DF8047B ldr r7, [sp], #4 2223 .cfi_restore 7 2224 .cfi_def_cfa_offset 0 2225 0024 7047 bx lr 2226 .L162: 2227 0026 00BF .align 2 2228 .L161: 2229 0028 00000000 .word state 2230 .cfi_endproc 2231 .LFE144: 2233 .section .text.sm_update_discharge,"ax",%progbits 2234 .align 1 2235 .global sm_update_discharge 2236 .syntax unified 2237 .thumb 2238 .thumb_func 2240 sm_update_discharge: 2241 .LFB145: 396:Core/Src/state_machine.c **** ARM GAS /tmp/cctkPVvk.s page 47 397:Core/Src/state_machine.c **** State sm_update_discharge(){ 2242 .loc 1 397 28 2243 .cfi_startproc 2244 @ args = 0, pretend = 0, frame = 0 2245 @ frame_needed = 1, uses_anonymous_args = 0 2246 @ link register save eliminated. 2247 0000 80B4 push {r7} 2248 .cfi_def_cfa_offset 4 2249 .cfi_offset 7, -4 2250 0002 00AF add r7, sp, #0 2251 .cfi_def_cfa_register 7 398:Core/Src/state_machine.c **** switch (state.target_state) { 2252 .loc 1 398 16 2253 0004 084B ldr r3, .L169 2254 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2255 .loc 1 398 3 2256 0008 002B cmp r3, #0 2257 000a 02D0 beq .L164 2258 000c 072B cmp r3, #7 2259 000e 02D0 beq .L165 2260 0010 03E0 b .L168 2261 .L164: 399:Core/Src/state_machine.c **** case STATE_INACTIVE: 400:Core/Src/state_machine.c **** return STATE_INACTIVE; 2262 .loc 1 400 14 2263 0012 0023 movs r3, #0 2264 0014 02E0 b .L167 2265 .L165: 401:Core/Src/state_machine.c **** case STATE_ERROR: 402:Core/Src/state_machine.c **** return STATE_ERROR; 2266 .loc 1 402 14 2267 0016 0723 movs r3, #7 2268 0018 00E0 b .L167 2269 .L168: 403:Core/Src/state_machine.c **** default: 404:Core/Src/state_machine.c **** return STATE_DISCHARGE; 2270 .loc 1 404 14 2271 001a 0423 movs r3, #4 2272 .L167: 405:Core/Src/state_machine.c **** } 406:Core/Src/state_machine.c **** } 2273 .loc 1 406 1 2274 001c 1846 mov r0, r3 2275 001e BD46 mov sp, r7 2276 .cfi_def_cfa_register 13 2277 @ sp needed 2278 0020 5DF8047B ldr r7, [sp], #4 2279 .cfi_restore 7 2280 .cfi_def_cfa_offset 0 2281 0024 7047 bx lr 2282 .L170: 2283 0026 00BF .align 2 2284 .L169: 2285 0028 00000000 .word state 2286 .cfi_endproc 2287 .LFE145: 2289 .section .text.sm_update_charging_precharge,"ax",%progbits ARM GAS /tmp/cctkPVvk.s page 48 2290 .align 1 2291 .global sm_update_charging_precharge 2292 .syntax unified 2293 .thumb 2294 .thumb_func 2296 sm_update_charging_precharge: 2297 .LFB146: 407:Core/Src/state_machine.c **** 408:Core/Src/state_machine.c **** State sm_update_charging_precharge(){ 2298 .loc 1 408 37 2299 .cfi_startproc 2300 @ args = 0, pretend = 0, frame = 0 2301 @ frame_needed = 1, uses_anonymous_args = 0 2302 @ link register save eliminated. 2303 0000 80B4 push {r7} 2304 .cfi_def_cfa_offset 4 2305 .cfi_offset 7, -4 2306 0002 00AF add r7, sp, #0 2307 .cfi_def_cfa_register 7 409:Core/Src/state_machine.c **** switch (state.target_state) { 2308 .loc 1 409 16 2309 0004 074B ldr r3, .L175 2310 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2311 .loc 1 409 3 2312 0008 042B cmp r3, #4 2313 000a 03D0 beq .L172 2314 000c 062B cmp r3, #6 2315 000e 03D1 bne .L173 410:Core/Src/state_machine.c **** case STATE_CHARGING: 411:Core/Src/state_machine.c **** return STATE_CHARGING; 2316 .loc 1 411 14 2317 0010 0623 movs r3, #6 2318 0012 02E0 b .L174 2319 .L172: 412:Core/Src/state_machine.c **** case STATE_DISCHARGE: 413:Core/Src/state_machine.c **** return STATE_DISCHARGE; 2320 .loc 1 413 14 2321 0014 0423 movs r3, #4 2322 0016 00E0 b .L174 2323 .L173: 414:Core/Src/state_machine.c **** default: 415:Core/Src/state_machine.c **** return STATE_CHARGING_PRECHARGE; 2324 .loc 1 415 14 2325 0018 0523 movs r3, #5 2326 .L174: 416:Core/Src/state_machine.c **** } 417:Core/Src/state_machine.c **** } 2327 .loc 1 417 1 2328 001a 1846 mov r0, r3 2329 001c BD46 mov sp, r7 2330 .cfi_def_cfa_register 13 2331 @ sp needed 2332 001e 5DF8047B ldr r7, [sp], #4 2333 .cfi_restore 7 2334 .cfi_def_cfa_offset 0 2335 0022 7047 bx lr 2336 .L176: ARM GAS /tmp/cctkPVvk.s page 49 2337 .align 2 2338 .L175: 2339 0024 00000000 .word state 2340 .cfi_endproc 2341 .LFE146: 2343 .section .text.sm_update_charging,"ax",%progbits 2344 .align 1 2345 .global sm_update_charging 2346 .syntax unified 2347 .thumb 2348 .thumb_func 2350 sm_update_charging: 2351 .LFB147: 418:Core/Src/state_machine.c **** 419:Core/Src/state_machine.c **** State sm_update_charging(){ 2352 .loc 1 419 27 2353 .cfi_startproc 2354 @ args = 0, pretend = 0, frame = 0 2355 @ frame_needed = 1, uses_anonymous_args = 0 2356 @ link register save eliminated. 2357 0000 80B4 push {r7} 2358 .cfi_def_cfa_offset 4 2359 .cfi_offset 7, -4 2360 0002 00AF add r7, sp, #0 2361 .cfi_def_cfa_register 7 420:Core/Src/state_machine.c **** switch (state.target_state) { 2362 .loc 1 420 16 2363 0004 084B ldr r3, .L180 2364 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2365 .loc 1 420 3 2366 0008 042B cmp r3, #4 2367 000a 04D1 bne .L178 421:Core/Src/state_machine.c **** case STATE_DISCHARGE: 422:Core/Src/state_machine.c **** currentAMSState = AMSIDLE; 2368 .loc 1 422 23 2369 000c 074B ldr r3, .L180+4 2370 000e 0122 movs r2, #1 2371 0010 1A70 strb r2, [r3] 423:Core/Src/state_machine.c **** return STATE_DISCHARGE; 2372 .loc 1 423 14 2373 0012 0423 movs r3, #4 2374 0014 03E0 b .L179 2375 .L178: 424:Core/Src/state_machine.c **** default: 425:Core/Src/state_machine.c **** currentAMSState = AMSCHARGING; 2376 .loc 1 425 23 2377 0016 054B ldr r3, .L180+4 2378 0018 0222 movs r2, #2 2379 001a 1A70 strb r2, [r3] 426:Core/Src/state_machine.c **** return STATE_CHARGING; 2380 .loc 1 426 14 2381 001c 0623 movs r3, #6 2382 .L179: 427:Core/Src/state_machine.c **** } 428:Core/Src/state_machine.c **** } 2383 .loc 1 428 1 2384 001e 1846 mov r0, r3 ARM GAS /tmp/cctkPVvk.s page 50 2385 0020 BD46 mov sp, r7 2386 .cfi_def_cfa_register 13 2387 @ sp needed 2388 0022 5DF8047B ldr r7, [sp], #4 2389 .cfi_restore 7 2390 .cfi_def_cfa_offset 0 2391 0026 7047 bx lr 2392 .L181: 2393 .align 2 2394 .L180: 2395 0028 00000000 .word state 2396 002c 00000000 .word currentAMSState 2397 .cfi_endproc 2398 .LFE147: 2400 .section .text.sm_update_error,"ax",%progbits 2401 .align 1 2402 .global sm_update_error 2403 .syntax unified 2404 .thumb 2405 .thumb_func 2407 sm_update_error: 2408 .LFB148: 429:Core/Src/state_machine.c **** 430:Core/Src/state_machine.c **** State sm_update_error(){ 2409 .loc 1 430 24 2410 .cfi_startproc 2411 @ args = 0, pretend = 0, frame = 0 2412 @ frame_needed = 1, uses_anonymous_args = 0 2413 @ link register save eliminated. 2414 0000 80B4 push {r7} 2415 .cfi_def_cfa_offset 4 2416 .cfi_offset 7, -4 2417 0002 00AF add r7, sp, #0 2418 .cfi_def_cfa_register 7 431:Core/Src/state_machine.c **** switch (state.target_state) { 2419 .loc 1 431 16 2420 0004 074B ldr r3, .L186 2421 0006 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2 2422 .loc 1 431 3 2423 0008 002B cmp r3, #0 2424 000a 03D0 beq .L183 2425 000c 042B cmp r3, #4 2426 000e 03D1 bne .L184 432:Core/Src/state_machine.c **** case STATE_DISCHARGE: 433:Core/Src/state_machine.c **** return STATE_DISCHARGE; 2427 .loc 1 433 14 2428 0010 0423 movs r3, #4 2429 0012 02E0 b .L185 2430 .L183: 434:Core/Src/state_machine.c **** case STATE_INACTIVE: 435:Core/Src/state_machine.c **** return STATE_INACTIVE; 2431 .loc 1 435 14 2432 0014 0023 movs r3, #0 2433 0016 00E0 b .L185 2434 .L184: 436:Core/Src/state_machine.c **** default: 437:Core/Src/state_machine.c **** return STATE_ERROR; ARM GAS /tmp/cctkPVvk.s page 51 2435 .loc 1 437 14 2436 0018 0723 movs r3, #7 2437 .L185: 438:Core/Src/state_machine.c **** } 439:Core/Src/state_machine.c **** } 2438 .loc 1 439 1 2439 001a 1846 mov r0, r3 2440 001c BD46 mov sp, r7 2441 .cfi_def_cfa_register 13 2442 @ sp needed 2443 001e 5DF8047B ldr r7, [sp], #4 2444 .cfi_restore 7 2445 .cfi_def_cfa_offset 0 2446 0022 7047 bx lr 2447 .L187: 2448 .align 2 2449 .L186: 2450 0024 00000000 .word state 2451 .cfi_endproc 2452 .LFE148: 2454 .section .text.sm_set_relay_positions,"ax",%progbits 2455 .align 1 2456 .global sm_set_relay_positions 2457 .syntax unified 2458 .thumb 2459 .thumb_func 2461 sm_set_relay_positions: 2462 .LFB149: 440:Core/Src/state_machine.c **** 441:Core/Src/state_machine.c **** void sm_set_relay_positions(State current_state){ 2463 .loc 1 441 49 2464 .cfi_startproc 2465 @ args = 0, pretend = 0, frame = 8 2466 @ frame_needed = 1, uses_anonymous_args = 0 2467 0000 80B5 push {r7, lr} 2468 .cfi_def_cfa_offset 8 2469 .cfi_offset 7, -8 2470 .cfi_offset 14, -4 2471 0002 82B0 sub sp, sp, #8 2472 .cfi_def_cfa_offset 16 2473 0004 00AF add r7, sp, #0 2474 .cfi_def_cfa_register 7 2475 0006 0346 mov r3, r0 2476 0008 FB71 strb r3, [r7, #7] 442:Core/Src/state_machine.c **** switch (state.current_state) { 2477 .loc 1 442 16 2478 000a 314B ldr r3, .L201 2479 000c 1B78 ldrb r3, [r3] @ zero_extendqisi2 2480 .loc 1 442 3 2481 000e 072B cmp r3, #7 2482 0010 5AD8 bhi .L199 2483 0012 01A2 adr r2, .L191 2484 0014 52F823F0 ldr pc, [r2, r3, lsl #2] 2485 .p2align 2 2486 .L191: 2487 0018 39000000 .word .L198+1 2488 001c 4B000000 .word .L197+1 ARM GAS /tmp/cctkPVvk.s page 52 2489 0020 5D000000 .word .L196+1 2490 0024 6F000000 .word .L195+1 2491 0028 81000000 .word .L194+1 2492 002c 93000000 .word .L193+1 2493 0030 A5000000 .word .L192+1 2494 0034 B7000000 .word .L190+1 2495 .p2align 1 2496 .L198: 443:Core/Src/state_machine.c **** case STATE_INACTIVE: 444:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 0); 2497 .loc 1 444 7 2498 0038 0021 movs r1, #0 2499 003a 0020 movs r0, #0 2500 003c FFF7FEFF bl sm_set_relay 445:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 0); 2501 .loc 1 445 7 2502 0040 0021 movs r1, #0 2503 0042 0120 movs r0, #1 2504 0044 FFF7FEFF bl sm_set_relay 446:Core/Src/state_machine.c **** break; 2505 .loc 1 446 7 2506 0048 3EE0 b .L189 2507 .L197: 447:Core/Src/state_machine.c **** case STATE_PRECHARGE: 448:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 0); 2508 .loc 1 448 7 2509 004a 0021 movs r1, #0 2510 004c 0020 movs r0, #0 2511 004e FFF7FEFF bl sm_set_relay 449:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 1); 2512 .loc 1 449 7 2513 0052 0121 movs r1, #1 2514 0054 0120 movs r0, #1 2515 0056 FFF7FEFF bl sm_set_relay 450:Core/Src/state_machine.c **** break; 2516 .loc 1 450 7 2517 005a 35E0 b .L189 2518 .L196: 451:Core/Src/state_machine.c **** case STATE_READY: 452:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 1); 2519 .loc 1 452 7 2520 005c 0121 movs r1, #1 2521 005e 0020 movs r0, #0 2522 0060 FFF7FEFF bl sm_set_relay 453:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 0); 2523 .loc 1 453 7 2524 0064 0021 movs r1, #0 2525 0066 0120 movs r0, #1 2526 0068 FFF7FEFF bl sm_set_relay 454:Core/Src/state_machine.c **** break; 2527 .loc 1 454 7 2528 006c 2CE0 b .L189 2529 .L195: 455:Core/Src/state_machine.c **** case STATE_ACTIVE: 456:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 1); 2530 .loc 1 456 7 2531 006e 0121 movs r1, #1 ARM GAS /tmp/cctkPVvk.s page 53 2532 0070 0020 movs r0, #0 2533 0072 FFF7FEFF bl sm_set_relay 457:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 0); 2534 .loc 1 457 7 2535 0076 0021 movs r1, #0 2536 0078 0120 movs r0, #1 2537 007a FFF7FEFF bl sm_set_relay 458:Core/Src/state_machine.c **** break; 2538 .loc 1 458 7 2539 007e 23E0 b .L189 2540 .L194: 459:Core/Src/state_machine.c **** case STATE_DISCHARGE: 460:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 0); 2541 .loc 1 460 7 2542 0080 0021 movs r1, #0 2543 0082 0020 movs r0, #0 2544 0084 FFF7FEFF bl sm_set_relay 461:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 1); 2545 .loc 1 461 7 2546 0088 0121 movs r1, #1 2547 008a 0120 movs r0, #1 2548 008c FFF7FEFF bl sm_set_relay 462:Core/Src/state_machine.c **** break; 2549 .loc 1 462 7 2550 0090 1AE0 b .L189 2551 .L193: 463:Core/Src/state_machine.c **** case STATE_CHARGING_PRECHARGE: 464:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 0); 2552 .loc 1 464 7 2553 0092 0021 movs r1, #0 2554 0094 0020 movs r0, #0 2555 0096 FFF7FEFF bl sm_set_relay 465:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 1); 2556 .loc 1 465 7 2557 009a 0121 movs r1, #1 2558 009c 0120 movs r0, #1 2559 009e FFF7FEFF bl sm_set_relay 466:Core/Src/state_machine.c **** break; 2560 .loc 1 466 7 2561 00a2 11E0 b .L189 2562 .L192: 467:Core/Src/state_machine.c **** case STATE_CHARGING: 468:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 1); 2563 .loc 1 468 7 2564 00a4 0121 movs r1, #1 2565 00a6 0020 movs r0, #0 2566 00a8 FFF7FEFF bl sm_set_relay 469:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 0); 2567 .loc 1 469 7 2568 00ac 0021 movs r1, #0 2569 00ae 0120 movs r0, #1 2570 00b0 FFF7FEFF bl sm_set_relay 470:Core/Src/state_machine.c **** break; 2571 .loc 1 470 7 2572 00b4 08E0 b .L189 2573 .L190: 471:Core/Src/state_machine.c **** case STATE_ERROR: ARM GAS /tmp/cctkPVvk.s page 54 472:Core/Src/state_machine.c **** sm_set_relay(RELAY_MAIN, 0); 2574 .loc 1 472 7 2575 00b6 0021 movs r1, #0 2576 00b8 0020 movs r0, #0 2577 00ba FFF7FEFF bl sm_set_relay 473:Core/Src/state_machine.c **** sm_set_relay(RELAY_PRECHARGE, 0); 2578 .loc 1 473 7 2579 00be 0021 movs r1, #0 2580 00c0 0120 movs r0, #1 2581 00c2 FFF7FEFF bl sm_set_relay 474:Core/Src/state_machine.c **** break; 2582 .loc 1 474 7 2583 00c6 00BF nop 2584 .L189: 2585 .L199: 475:Core/Src/state_machine.c **** } 476:Core/Src/state_machine.c **** } 2586 .loc 1 476 1 2587 00c8 00BF nop 2588 00ca 0837 adds r7, r7, #8 2589 .cfi_def_cfa_offset 8 2590 00cc BD46 mov sp, r7 2591 .cfi_def_cfa_register 13 2592 @ sp needed 2593 00ce 80BD pop {r7, pc} 2594 .L202: 2595 .align 2 2596 .L201: 2597 00d0 00000000 .word state 2598 .cfi_endproc 2599 .LFE149: 2601 .section .text.sm_set_relay,"ax",%progbits 2602 .align 1 2603 .global sm_set_relay 2604 .syntax unified 2605 .thumb 2606 .thumb_func 2608 sm_set_relay: 2609 .LFB150: 477:Core/Src/state_machine.c **** 478:Core/Src/state_machine.c **** void sm_set_relay(Relay relay, bool closed){ 2610 .loc 1 478 44 2611 .cfi_startproc 2612 @ args = 0, pretend = 0, frame = 16 2613 @ frame_needed = 1, uses_anonymous_args = 0 2614 0000 80B5 push {r7, lr} 2615 .cfi_def_cfa_offset 8 2616 .cfi_offset 7, -8 2617 .cfi_offset 14, -4 2618 0002 84B0 sub sp, sp, #16 2619 .cfi_def_cfa_offset 24 2620 0004 00AF add r7, sp, #0 2621 .cfi_def_cfa_register 7 2622 0006 0346 mov r3, r0 2623 0008 0A46 mov r2, r1 2624 000a FB71 strb r3, [r7, #7] 2625 000c 1346 mov r3, r2 ARM GAS /tmp/cctkPVvk.s page 55 2626 000e BB71 strb r3, [r7, #6] 479:Core/Src/state_machine.c **** GPIO_PinState state = closed ? GPIO_PIN_SET : GPIO_PIN_RESET; 2627 .loc 1 479 47 2628 0010 BB79 ldrb r3, [r7, #6] @ zero_extendqisi2 2629 .loc 1 479 17 2630 0012 FB73 strb r3, [r7, #15] 480:Core/Src/state_machine.c **** switch (relay) { 2631 .loc 1 480 3 2632 0014 FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 2633 0016 002B cmp r3, #0 2634 0018 02D0 beq .L204 2635 001a 012B cmp r3, #1 2636 001c 07D0 beq .L205 481:Core/Src/state_machine.c **** case RELAY_MAIN: 482:Core/Src/state_machine.c **** HAL_GPIO_WritePin(RELAY_ENABLE_GPIO_Port, RELAY_ENABLE_Pin, state); 483:Core/Src/state_machine.c **** break; 484:Core/Src/state_machine.c **** case RELAY_PRECHARGE: 485:Core/Src/state_machine.c **** HAL_GPIO_WritePin(PRECHARGE_ENABLE_GPIO_Port, PRECHARGE_ENABLE_Pin, state); 486:Core/Src/state_machine.c **** break; 487:Core/Src/state_machine.c **** } 488:Core/Src/state_machine.c **** } 2637 .loc 1 488 1 2638 001e 0DE0 b .L207 2639 .L204: 482:Core/Src/state_machine.c **** break; 2640 .loc 1 482 7 2641 0020 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 2642 0022 1A46 mov r2, r3 2643 0024 1021 movs r1, #16 2644 0026 0748 ldr r0, .L208 2645 0028 FFF7FEFF bl HAL_GPIO_WritePin 483:Core/Src/state_machine.c **** case RELAY_PRECHARGE: 2646 .loc 1 483 7 2647 002c 06E0 b .L206 2648 .L205: 485:Core/Src/state_machine.c **** break; 2649 .loc 1 485 7 2650 002e FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 2651 0030 1A46 mov r2, r3 2652 0032 2021 movs r1, #32 2653 0034 0348 ldr r0, .L208 2654 0036 FFF7FEFF bl HAL_GPIO_WritePin 486:Core/Src/state_machine.c **** } 2655 .loc 1 486 7 2656 003a 00BF nop 2657 .L206: 2658 .L207: 2659 .loc 1 488 1 2660 003c 00BF nop 2661 003e 1037 adds r7, r7, #16 2662 .cfi_def_cfa_offset 8 2663 0040 BD46 mov sp, r7 2664 .cfi_def_cfa_register 13 2665 @ sp needed 2666 0042 80BD pop {r7, pc} 2667 .L209: 2668 .align 2 ARM GAS /tmp/cctkPVvk.s page 56 2669 .L208: 2670 0044 00040048 .word 1207960576 2671 .cfi_endproc 2672 .LFE150: 2674 .section .text.sm_check_battery_temperature,"ax",%progbits 2675 .align 1 2676 .global sm_check_battery_temperature 2677 .syntax unified 2678 .thumb 2679 .thumb_func 2681 sm_check_battery_temperature: 2682 .LFB151: 489:Core/Src/state_machine.c **** 490:Core/Src/state_machine.c **** /* returns the ID and temperature of the hottest cell */ 491:Core/Src/state_machine.c **** void sm_check_battery_temperature(uint8_t *id, uint16_t *temp){ 2683 .loc 1 491 63 2684 .cfi_startproc 2685 @ args = 0, pretend = 0, frame = 16 2686 @ frame_needed = 1, uses_anonymous_args = 0 2687 @ link register save eliminated. 2688 0000 80B4 push {r7} 2689 .cfi_def_cfa_offset 4 2690 .cfi_offset 7, -4 2691 0002 85B0 sub sp, sp, #20 2692 .cfi_def_cfa_offset 24 2693 0004 00AF add r7, sp, #0 2694 .cfi_def_cfa_register 7 2695 0006 7860 str r0, [r7, #4] 2696 0008 3960 str r1, [r7] 2697 .LBB5: 492:Core/Src/state_machine.c **** for (int i = 0; i < N_TEMP_SENSORS; i++) { 2698 .loc 1 492 12 2699 000a 0023 movs r3, #0 2700 000c FB60 str r3, [r7, #12] 2701 .loc 1 492 3 2702 000e 16E0 b .L211 2703 .L213: 493:Core/Src/state_machine.c **** if (tmp1075_temps[i] > *temp){ 2704 .loc 1 493 22 2705 0010 104A ldr r2, .L214 2706 0012 FB68 ldr r3, [r7, #12] 2707 0014 32F91330 ldrsh r3, [r2, r3, lsl #1] 2708 0018 1A46 mov r2, r3 2709 .loc 1 493 28 2710 001a 3B68 ldr r3, [r7] 2711 001c 1B88 ldrh r3, [r3] 2712 .loc 1 493 8 2713 001e 9A42 cmp r2, r3 2714 0020 0ADD ble .L212 494:Core/Src/state_machine.c **** *id = i; 2715 .loc 1 494 11 2716 0022 FB68 ldr r3, [r7, #12] 2717 0024 DAB2 uxtb r2, r3 2718 0026 7B68 ldr r3, [r7, #4] 2719 0028 1A70 strb r2, [r3] 495:Core/Src/state_machine.c **** *temp = tmp1075_temps[i]; 2720 .loc 1 495 28 ARM GAS /tmp/cctkPVvk.s page 57 2721 002a 0A4A ldr r2, .L214 2722 002c FB68 ldr r3, [r7, #12] 2723 002e 32F91330 ldrsh r3, [r2, r3, lsl #1] 2724 0032 9AB2 uxth r2, r3 2725 .loc 1 495 13 2726 0034 3B68 ldr r3, [r7] 2727 0036 1A80 strh r2, [r3] @ movhi 2728 .L212: 492:Core/Src/state_machine.c **** if (tmp1075_temps[i] > *temp){ 2729 .loc 1 492 40 discriminator 2 2730 0038 FB68 ldr r3, [r7, #12] 2731 003a 0133 adds r3, r3, #1 2732 003c FB60 str r3, [r7, #12] 2733 .L211: 492:Core/Src/state_machine.c **** if (tmp1075_temps[i] > *temp){ 2734 .loc 1 492 21 discriminator 1 2735 003e FB68 ldr r3, [r7, #12] 2736 0040 0C2B cmp r3, #12 2737 0042 E5DD ble .L213 2738 .LBE5: 496:Core/Src/state_machine.c **** } 497:Core/Src/state_machine.c **** } 498:Core/Src/state_machine.c **** } 2739 .loc 1 498 1 2740 0044 00BF nop 2741 0046 00BF nop 2742 0048 1437 adds r7, r7, #20 2743 .cfi_def_cfa_offset 4 2744 004a BD46 mov sp, r7 2745 .cfi_def_cfa_register 13 2746 @ sp needed 2747 004c 5DF8047B ldr r7, [sp], #4 2748 .cfi_restore 7 2749 .cfi_def_cfa_offset 0 2750 0050 7047 bx lr 2751 .L215: 2752 0052 00BF .align 2 2753 .L214: 2754 0054 00000000 .word tmp1075_temps 2755 .cfi_endproc 2756 .LFE151: 2758 .section .text.sm_return_cell_temperature,"ax",%progbits 2759 .align 1 2760 .global sm_return_cell_temperature 2761 .syntax unified 2762 .thumb 2763 .thumb_func 2765 sm_return_cell_temperature: 2766 .LFB152: 499:Core/Src/state_machine.c **** 500:Core/Src/state_machine.c **** int16_t sm_return_cell_temperature(int id){ return tmp1075_temps[id]; } 2767 .loc 1 500 43 2768 .cfi_startproc 2769 @ args = 0, pretend = 0, frame = 8 2770 @ frame_needed = 1, uses_anonymous_args = 0 2771 @ link register save eliminated. 2772 0000 80B4 push {r7} ARM GAS /tmp/cctkPVvk.s page 58 2773 .cfi_def_cfa_offset 4 2774 .cfi_offset 7, -4 2775 0002 83B0 sub sp, sp, #12 2776 .cfi_def_cfa_offset 16 2777 0004 00AF add r7, sp, #0 2778 .cfi_def_cfa_register 7 2779 0006 7860 str r0, [r7, #4] 2780 .loc 1 500 65 2781 0008 044A ldr r2, .L218 2782 000a 7B68 ldr r3, [r7, #4] 2783 000c 32F91330 ldrsh r3, [r2, r3, lsl #1] 2784 .loc 1 500 71 2785 0010 1846 mov r0, r3 2786 0012 0C37 adds r7, r7, #12 2787 .cfi_def_cfa_offset 4 2788 0014 BD46 mov sp, r7 2789 .cfi_def_cfa_register 13 2790 @ sp needed 2791 0016 5DF8047B ldr r7, [sp], #4 2792 .cfi_restore 7 2793 .cfi_def_cfa_offset 0 2794 001a 7047 bx lr 2795 .L219: 2796 .align 2 2797 .L218: 2798 001c 00000000 .word tmp1075_temps 2799 .cfi_endproc 2800 .LFE152: 2802 .section .text.sm_return_cell_voltage,"ax",%progbits 2803 .align 1 2804 .global sm_return_cell_voltage 2805 .syntax unified 2806 .thumb 2807 .thumb_func 2809 sm_return_cell_voltage: 2810 .LFB153: 501:Core/Src/state_machine.c **** 502:Core/Src/state_machine.c **** int16_t sm_return_cell_voltage(int id){ return module.cellVoltages[id]; } 2811 .loc 1 502 39 2812 .cfi_startproc 2813 @ args = 0, pretend = 0, frame = 8 2814 @ frame_needed = 1, uses_anonymous_args = 0 2815 @ link register save eliminated. 2816 0000 80B4 push {r7} 2817 .cfi_def_cfa_offset 4 2818 .cfi_offset 7, -4 2819 0002 83B0 sub sp, sp, #12 2820 .cfi_def_cfa_offset 16 2821 0004 00AF add r7, sp, #0 2822 .cfi_def_cfa_register 7 2823 0006 7860 str r0, [r7, #4] 2824 .loc 1 502 67 2825 0008 044A ldr r2, .L222 2826 000a 7B68 ldr r3, [r7, #4] 2827 000c 32F91330 ldrsh r3, [r2, r3, lsl #1] 2828 .loc 1 502 73 2829 0010 1846 mov r0, r3 ARM GAS /tmp/cctkPVvk.s page 59 2830 0012 0C37 adds r7, r7, #12 2831 .cfi_def_cfa_offset 4 2832 0014 BD46 mov sp, r7 2833 .cfi_def_cfa_register 13 2834 @ sp needed 2835 0016 5DF8047B ldr r7, [sp], #4 2836 .cfi_restore 7 2837 .cfi_def_cfa_offset 0 2838 001a 7047 bx lr 2839 .L223: 2840 .align 2 2841 .L222: 2842 001c 00000000 .word module 2843 .cfi_endproc 2844 .LFE153: 2846 .section .text.sm_test_cycle_states,"ax",%progbits 2847 .align 1 2848 .global sm_test_cycle_states 2849 .syntax unified 2850 .thumb 2851 .thumb_func 2853 sm_test_cycle_states: 2854 .LFB154: 503:Core/Src/state_machine.c **** 504:Core/Src/state_machine.c **** void sm_test_cycle_states(){ 2855 .loc 1 504 28 2856 .cfi_startproc 2857 @ args = 0, pretend = 0, frame = 0 2858 @ frame_needed = 1, uses_anonymous_args = 0 2859 0000 80B5 push {r7, lr} 2860 .cfi_def_cfa_offset 8 2861 .cfi_offset 7, -8 2862 .cfi_offset 14, -4 2863 0002 00AF add r7, sp, #0 2864 .cfi_def_cfa_register 7 505:Core/Src/state_machine.c **** RELAY_BAT_SIDE_VOLTAGE = module.auxVoltages[0]; 2865 .loc 1 505 46 2866 0004 434B ldr r3, .L237 2867 0006 D3ED087A vldr.32 s15, [r3, #32] 2868 .loc 1 505 26 2869 000a FDEEE77A vcvt.s32.f32 s15, s15 2870 000e 17EE902A vmov r2, s15 @ int 2871 0012 414B ldr r3, .L237+4 2872 0014 1A60 str r2, [r3] 506:Core/Src/state_machine.c **** RELAY_ESC_SIDE_VOLTAGE = module.auxVoltages[1]; 2873 .loc 1 506 46 2874 0016 3F4B ldr r3, .L237 2875 0018 D3ED097A vldr.32 s15, [r3, #36] 2876 .loc 1 506 26 2877 001c FDEEE77A vcvt.s32.f32 s15, s15 2878 0020 17EE902A vmov r2, s15 @ int 2879 0024 3D4B ldr r3, .L237+8 2880 0026 1A60 str r2, [r3] 507:Core/Src/state_machine.c **** CURRENT_MEASUREMENT = module.auxVoltages[2]; 2881 .loc 1 507 43 2882 0028 3A4B ldr r3, .L237 2883 002a D3ED0A7A vldr.32 s15, [r3, #40] ARM GAS /tmp/cctkPVvk.s page 60 2884 .loc 1 507 23 2885 002e FDEEE77A vcvt.s32.f32 s15, s15 2886 0032 17EE902A vmov r2, s15 @ int 2887 0036 3A4B ldr r3, .L237+12 2888 0038 1A60 str r2, [r3] 508:Core/Src/state_machine.c **** sm_set_relay_positions(state.current_state); 2889 .loc 1 508 3 2890 003a 3A4B ldr r3, .L237+16 2891 003c 1B78 ldrb r3, [r3] @ zero_extendqisi2 2892 003e 1846 mov r0, r3 2893 0040 FFF7FEFF bl sm_set_relay_positions 509:Core/Src/state_machine.c **** 510:Core/Src/state_machine.c **** if (timestamp > HAL_GetTick()) 2894 .loc 1 510 19 2895 0044 FFF7FEFF bl HAL_GetTick 2896 0048 0246 mov r2, r0 2897 .loc 1 510 17 discriminator 1 2898 004a 374B ldr r3, .L237+20 2899 004c 1B68 ldr r3, [r3] 2900 .loc 1 510 6 discriminator 1 2901 004e 9A42 cmp r2, r3 2902 0050 5DD3 bcc .L235 511:Core/Src/state_machine.c **** return; 512:Core/Src/state_machine.c **** switch (state.current_state) { 2903 .loc 1 512 16 2904 0052 344B ldr r3, .L237+16 2905 0054 1B78 ldrb r3, [r3] @ zero_extendqisi2 2906 .loc 1 512 3 2907 0056 072B cmp r3, #7 2908 0058 54D8 bhi .L227 2909 005a 01A2 adr r2, .L229 2910 005c 52F823F0 ldr pc, [r2, r3, lsl #2] 2911 .p2align 2 2912 .L229: 2913 0060 81000000 .word .L234+1 2914 0064 9F000000 .word .L233+1 2915 0068 B7000000 .word .L232+1 2916 006c CF000000 .word .L231+1 2917 0070 ED000000 .word .L230+1 2918 0074 05010000 .word .L227+1 2919 0078 05010000 .word .L227+1 2920 007c 05010000 .word .L227+1 2921 .p2align 1 2922 .L234: 513:Core/Src/state_machine.c **** case STATE_INACTIVE: 514:Core/Src/state_machine.c **** state.current_state = STATE_PRECHARGE; 2923 .loc 1 514 27 2924 0080 284B ldr r3, .L237+16 2925 0082 0122 movs r2, #1 2926 0084 1A70 strb r2, [r3] 515:Core/Src/state_machine.c **** timestamp = HAL_GetTick() + 30000; 2927 .loc 1 515 19 2928 0086 FFF7FEFF bl HAL_GetTick 2929 008a 0346 mov r3, r0 2930 .loc 1 515 33 discriminator 1 2931 008c 03F5EA43 add r3, r3, #29952 2932 0090 3033 adds r3, r3, #48 ARM GAS /tmp/cctkPVvk.s page 61 2933 .loc 1 515 17 discriminator 1 2934 0092 254A ldr r2, .L237+20 2935 0094 1360 str r3, [r2] 516:Core/Src/state_machine.c **** PWM_powerground_control(0); 2936 .loc 1 516 7 2937 0096 0020 movs r0, #0 2938 0098 FFF7FEFF bl PWM_powerground_control 517:Core/Src/state_machine.c **** break; 2939 .loc 1 517 7 2940 009c 32E0 b .L227 2941 .L233: 518:Core/Src/state_machine.c **** case STATE_PRECHARGE: 519:Core/Src/state_machine.c **** state.current_state = STATE_READY; 2942 .loc 1 519 27 2943 009e 214B ldr r3, .L237+16 2944 00a0 0222 movs r2, #2 2945 00a2 1A70 strb r2, [r3] 520:Core/Src/state_machine.c **** timestamp = HAL_GetTick() + 10000; 2946 .loc 1 520 19 2947 00a4 FFF7FEFF bl HAL_GetTick 2948 00a8 0346 mov r3, r0 2949 .loc 1 520 33 discriminator 1 2950 00aa 03F51C53 add r3, r3, #9984 2951 00ae 1033 adds r3, r3, #16 2952 .loc 1 520 17 discriminator 1 2953 00b0 1D4A ldr r2, .L237+20 2954 00b2 1360 str r3, [r2] 521:Core/Src/state_machine.c **** break; 2955 .loc 1 521 7 2956 00b4 26E0 b .L227 2957 .L232: 522:Core/Src/state_machine.c **** case STATE_READY: 523:Core/Src/state_machine.c **** state.current_state = STATE_ACTIVE; 2958 .loc 1 523 27 2959 00b6 1B4B ldr r3, .L237+16 2960 00b8 0322 movs r2, #3 2961 00ba 1A70 strb r2, [r3] 524:Core/Src/state_machine.c **** timestamp = HAL_GetTick() + 10000; 2962 .loc 1 524 19 2963 00bc FFF7FEFF bl HAL_GetTick 2964 00c0 0346 mov r3, r0 2965 .loc 1 524 33 discriminator 1 2966 00c2 03F51C53 add r3, r3, #9984 2967 00c6 1033 adds r3, r3, #16 2968 .loc 1 524 17 discriminator 1 2969 00c8 174A ldr r2, .L237+20 2970 00ca 1360 str r3, [r2] 525:Core/Src/state_machine.c **** break; 2971 .loc 1 525 7 2972 00cc 1AE0 b .L227 2973 .L231: 526:Core/Src/state_machine.c **** case STATE_ACTIVE: 527:Core/Src/state_machine.c **** state.current_state = STATE_DISCHARGE; 2974 .loc 1 527 27 2975 00ce 154B ldr r3, .L237+16 2976 00d0 0422 movs r2, #4 2977 00d2 1A70 strb r2, [r3] ARM GAS /tmp/cctkPVvk.s page 62 528:Core/Src/state_machine.c **** timestamp = HAL_GetTick() + 10000; 2978 .loc 1 528 19 2979 00d4 FFF7FEFF bl HAL_GetTick 2980 00d8 0346 mov r3, r0 2981 .loc 1 528 33 discriminator 1 2982 00da 03F51C53 add r3, r3, #9984 2983 00de 1033 adds r3, r3, #16 2984 .loc 1 528 17 discriminator 1 2985 00e0 114A ldr r2, .L237+20 2986 00e2 1360 str r3, [r2] 529:Core/Src/state_machine.c **** PWM_powerground_control(10); 2987 .loc 1 529 7 2988 00e4 0A20 movs r0, #10 2989 00e6 FFF7FEFF bl PWM_powerground_control 530:Core/Src/state_machine.c **** break; 2990 .loc 1 530 7 2991 00ea 0BE0 b .L227 2992 .L230: 531:Core/Src/state_machine.c **** case STATE_DISCHARGE: 532:Core/Src/state_machine.c **** state.current_state = STATE_INACTIVE; 2993 .loc 1 532 27 2994 00ec 0D4B ldr r3, .L237+16 2995 00ee 0022 movs r2, #0 2996 00f0 1A70 strb r2, [r3] 533:Core/Src/state_machine.c **** timestamp = HAL_GetTick() + 10000; 2997 .loc 1 533 19 2998 00f2 FFF7FEFF bl HAL_GetTick 2999 00f6 0346 mov r3, r0 3000 .loc 1 533 33 discriminator 1 3001 00f8 03F51C53 add r3, r3, #9984 3002 00fc 1033 adds r3, r3, #16 3003 .loc 1 533 17 discriminator 1 3004 00fe 0A4A ldr r2, .L237+20 3005 0100 1360 str r3, [r2] 534:Core/Src/state_machine.c **** break; 3006 .loc 1 534 7 3007 0102 00BF nop 3008 .L227: 535:Core/Src/state_machine.c **** case STATE_CHARGING_PRECHARGE: 536:Core/Src/state_machine.c **** case STATE_CHARGING: 537:Core/Src/state_machine.c **** case STATE_ERROR: 538:Core/Src/state_machine.c **** break; 539:Core/Src/state_machine.c **** } 540:Core/Src/state_machine.c **** 541:Core/Src/state_machine.c **** state.target_state = state.current_state; 3009 .loc 1 541 29 3010 0104 074B ldr r3, .L237+16 3011 0106 1A78 ldrb r2, [r3] @ zero_extendqisi2 3012 .loc 1 541 22 3013 0108 064B ldr r3, .L237+16 3014 010a 5A70 strb r2, [r3, #1] 3015 010c 00E0 b .L224 3016 .L235: 511:Core/Src/state_machine.c **** switch (state.current_state) { 3017 .loc 1 511 5 3018 010e 00BF nop 3019 .L224: ARM GAS /tmp/cctkPVvk.s page 63 542:Core/Src/state_machine.c **** }... 3020 .loc 1 542 1 3021 0110 80BD pop {r7, pc} 3022 .L238: 3023 0112 00BF .align 2 3024 .L237: 3025 0114 00000000 .word module 3026 0118 00000000 .word RELAY_BAT_SIDE_VOLTAGE 3027 011c 00000000 .word RELAY_ESC_SIDE_VOLTAGE 3028 0120 00000000 .word CURRENT_MEASUREMENT 3029 0124 00000000 .word state 3030 0128 00000000 .word timestamp 3031 .cfi_endproc 3032 .LFE154: 3034 .text 3035 .Letext0: 3036 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 3037 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 3038 .file 4 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f302xc.h" 3039 .file 5 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h" 3040 .file 6 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio.h" 3041 .file 7 "Core/Inc/ADBMS_LL_Driver.h" 3042 .file 8 "Core/Inc/ADBMS_Abstraction.h" 3043 .file 9 "Core/Inc/errors.h" 3044 .file 10 "Core/Inc/AMS_HighLevel.h" 3045 .file 11 "Core/Inc/TMP1075.h" 3046 .file 12 "Core/Inc/PWM_control.h" 3047 .file 13 "Core/Inc/state_machine.h" 3048 .file 14 "Core/Inc/eeprom.h" 3049 .file 15 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h" 3050 .file 16 "Core/Inc/soc_estimation.h" 3051 .file 17 "Core/Inc/status_LED.h" 3052 .file 18 "Core/Inc/can.h" ARM GAS /tmp/cctkPVvk.s page 64 DEFINED SYMBOLS *ABS*:00000000 state_machine.c /tmp/cctkPVvk.s:24 .bss.programming_mode:00000000 programming_mode /tmp/cctkPVvk.s:25 .bss.programming_mode:00000000 $d /tmp/cctkPVvk.s:30 .bss.debugging_mode:00000000 debugging_mode /tmp/cctkPVvk.s:31 .bss.debugging_mode:00000000 $d /tmp/cctkPVvk.s:37 .bss.state:00000000 state /tmp/cctkPVvk.s:34 .bss.state:00000000 $d /tmp/cctkPVvk.s:44 .bss.RELAY_BAT_SIDE_VOLTAGE:00000000 RELAY_BAT_SIDE_VOLTAGE /tmp/cctkPVvk.s:41 .bss.RELAY_BAT_SIDE_VOLTAGE:00000000 $d /tmp/cctkPVvk.s:51 .bss.RELAY_ESC_SIDE_VOLTAGE:00000000 RELAY_ESC_SIDE_VOLTAGE /tmp/cctkPVvk.s:48 .bss.RELAY_ESC_SIDE_VOLTAGE:00000000 $d /tmp/cctkPVvk.s:58 .bss.CURRENT_MEASUREMENT:00000000 CURRENT_MEASUREMENT /tmp/cctkPVvk.s:55 .bss.CURRENT_MEASUREMENT:00000000 $d /tmp/cctkPVvk.s:64 .bss.CURRENT_MEASUREMENT_ON:00000000 CURRENT_MEASUREMENT_ON /tmp/cctkPVvk.s:65 .bss.CURRENT_MEASUREMENT_ON:00000000 $d /tmp/cctkPVvk.s:70 .bss.balancing_state:00000000 balancing_state /tmp/cctkPVvk.s:71 .bss.balancing_state:00000000 $d /tmp/cctkPVvk.s:77 .bss.base_offset:00000000 base_offset /tmp/cctkPVvk.s:74 .bss.base_offset:00000000 $d /tmp/cctkPVvk.s:84 .bss.error_timer:00000000 error_timer /tmp/cctkPVvk.s:81 .bss.error_timer:00000000 $d /tmp/cctkPVvk.s:91 .bss.precharge_timer:00000000 precharge_timer /tmp/cctkPVvk.s:88 .bss.precharge_timer:00000000 $d /tmp/cctkPVvk.s:98 .bss.discharge_timer:00000000 discharge_timer /tmp/cctkPVvk.s:95 .bss.discharge_timer:00000000 $d /tmp/cctkPVvk.s:105 .bss.balancing_timer:00000000 balancing_timer /tmp/cctkPVvk.s:102 .bss.balancing_timer:00000000 $d /tmp/cctkPVvk.s:112 .bss.eeprom_timer:00000000 eeprom_timer /tmp/cctkPVvk.s:109 .bss.eeprom_timer:00000000 $d /tmp/cctkPVvk.s:119 .bss.powerground_softstart_timer:00000000 powerground_softstart_timer /tmp/cctkPVvk.s:116 .bss.powerground_softstart_timer:00000000 $d /tmp/cctkPVvk.s:126 .bss.powerground_calibration_timer:00000000 powerground_calibration_timer /tmp/cctkPVvk.s:123 .bss.powerground_calibration_timer:00000000 $d /tmp/cctkPVvk.s:132 .bss.powerground_calibration_stage:00000000 powerground_calibration_stage /tmp/cctkPVvk.s:133 .bss.powerground_calibration_stage:00000000 $d /tmp/cctkPVvk.s:138 .bss.current_powerground_status:00000000 current_powerground_status /tmp/cctkPVvk.s:139 .bss.current_powerground_status:00000000 $d /tmp/cctkPVvk.s:144 .bss.target_powerground_status:00000000 target_powerground_status /tmp/cctkPVvk.s:145 .bss.target_powerground_status:00000000 $d /tmp/cctkPVvk.s:147 .bss.timestamp:00000000 $d /tmp/cctkPVvk.s:150 .bss.timestamp:00000000 timestamp /tmp/cctkPVvk.s:153 .text.sm_init:00000000 $t /tmp/cctkPVvk.s:159 .text.sm_init:00000000 sm_init /tmp/cctkPVvk.s:236 .text.sm_init:00000060 $d /tmp/cctkPVvk.s:254 .text.sm_update:00000000 $t /tmp/cctkPVvk.s:260 .text.sm_update:00000000 sm_update /tmp/cctkPVvk.s:1490 .text.sm_check_errors:00000000 sm_check_errors /tmp/cctkPVvk.s:740 .text.sm_precharge_discharge_manager:00000000 sm_precharge_discharge_manager /tmp/cctkPVvk.s:1195 .text.sm_balancing:00000000 sm_balancing /tmp/cctkPVvk.s:912 .text.sm_powerground_manager:00000000 sm_powerground_manager /tmp/cctkPVvk.s:390 .text.sm_update:000000f0 $d /tmp/cctkPVvk.s:398 .text.sm_update:00000110 $t /tmp/cctkPVvk.s:2008 .text.sm_update_inactive:00000000 sm_update_inactive /tmp/cctkPVvk.s:2072 .text.sm_update_precharge:00000000 sm_update_precharge /tmp/cctkPVvk.s:2128 .text.sm_update_ready:00000000 sm_update_ready /tmp/cctkPVvk.s:2184 .text.sm_update_active:00000000 sm_update_active ARM GAS /tmp/cctkPVvk.s page 65 /tmp/cctkPVvk.s:2240 .text.sm_update_discharge:00000000 sm_update_discharge /tmp/cctkPVvk.s:2296 .text.sm_update_charging_precharge:00000000 sm_update_charging_precharge /tmp/cctkPVvk.s:2350 .text.sm_update_charging:00000000 sm_update_charging /tmp/cctkPVvk.s:2407 .text.sm_update_error:00000000 sm_update_error /tmp/cctkPVvk.s:2461 .text.sm_set_relay_positions:00000000 sm_set_relay_positions /tmp/cctkPVvk.s:497 .text.sm_update:00000198 $d /tmp/cctkPVvk.s:515 .text.sm_handle_ams_in:00000000 $t /tmp/cctkPVvk.s:521 .text.sm_handle_ams_in:00000000 sm_handle_ams_in /tmp/cctkPVvk.s:727 .text.sm_handle_ams_in:00000100 $d /tmp/cctkPVvk.s:734 .text.sm_precharge_discharge_manager:00000000 $t /tmp/cctkPVvk.s:899 .text.sm_precharge_discharge_manager:000000d0 $d /tmp/cctkPVvk.s:906 .text.sm_powerground_manager:00000000 $t /tmp/cctkPVvk.s:1031 .text.sm_powerground_manager:0000009c $d /tmp/cctkPVvk.s:1038 .text.sm_calibrate_powerground:00000000 $t /tmp/cctkPVvk.s:1044 .text.sm_calibrate_powerground:00000000 sm_calibrate_powerground /tmp/cctkPVvk.s:1077 .text.sm_calibrate_powerground:00000024 $d /tmp/cctkPVvk.s:1081 .text.sm_calibrate_powerground:00000034 $t /tmp/cctkPVvk.s:1182 .text.sm_calibrate_powerground:000000bc $d /tmp/cctkPVvk.s:1189 .text.sm_balancing:00000000 $t /tmp/cctkPVvk.s:1371 .text.sm_balancing:000000e8 $d /tmp/cctkPVvk.s:1378 .text.sm_program_powerground:00000000 $t /tmp/cctkPVvk.s:1384 .text.sm_program_powerground:00000000 sm_program_powerground /tmp/cctkPVvk.s:1429 .text.sm_program_powerground:00000030 $d /tmp/cctkPVvk.s:1435 .text.sm_eeprom_write_status:00000000 $t /tmp/cctkPVvk.s:1441 .text.sm_eeprom_write_status:00000000 sm_eeprom_write_status /tmp/cctkPVvk.s:1479 .text.sm_eeprom_write_status:00000028 $d /tmp/cctkPVvk.s:1484 .text.sm_check_errors:00000000 $t /tmp/cctkPVvk.s:1830 .text.sm_set_error_source:00000000 sm_set_error_source /tmp/cctkPVvk.s:1813 .text.sm_check_errors:000001e4 $d /tmp/cctkPVvk.s:1824 .text.sm_set_error_source:00000000 $t /tmp/cctkPVvk.s:1997 .text.sm_set_error_source:0000010c $d /tmp/cctkPVvk.s:2002 .text.sm_update_inactive:00000000 $t /tmp/cctkPVvk.s:2061 .text.sm_update_inactive:00000034 $d /tmp/cctkPVvk.s:2066 .text.sm_update_precharge:00000000 $t /tmp/cctkPVvk.s:2117 .text.sm_update_precharge:00000028 $d /tmp/cctkPVvk.s:2122 .text.sm_update_ready:00000000 $t /tmp/cctkPVvk.s:2173 .text.sm_update_ready:00000028 $d /tmp/cctkPVvk.s:2178 .text.sm_update_active:00000000 $t /tmp/cctkPVvk.s:2229 .text.sm_update_active:00000028 $d /tmp/cctkPVvk.s:2234 .text.sm_update_discharge:00000000 $t /tmp/cctkPVvk.s:2285 .text.sm_update_discharge:00000028 $d /tmp/cctkPVvk.s:2290 .text.sm_update_charging_precharge:00000000 $t /tmp/cctkPVvk.s:2339 .text.sm_update_charging_precharge:00000024 $d /tmp/cctkPVvk.s:2344 .text.sm_update_charging:00000000 $t /tmp/cctkPVvk.s:2395 .text.sm_update_charging:00000028 $d /tmp/cctkPVvk.s:2401 .text.sm_update_error:00000000 $t /tmp/cctkPVvk.s:2450 .text.sm_update_error:00000024 $d /tmp/cctkPVvk.s:2455 .text.sm_set_relay_positions:00000000 $t /tmp/cctkPVvk.s:2487 .text.sm_set_relay_positions:00000018 $d /tmp/cctkPVvk.s:2495 .text.sm_set_relay_positions:00000038 $t /tmp/cctkPVvk.s:2608 .text.sm_set_relay:00000000 sm_set_relay /tmp/cctkPVvk.s:2597 .text.sm_set_relay_positions:000000d0 $d /tmp/cctkPVvk.s:2602 .text.sm_set_relay:00000000 $t /tmp/cctkPVvk.s:2670 .text.sm_set_relay:00000044 $d /tmp/cctkPVvk.s:2675 .text.sm_check_battery_temperature:00000000 $t /tmp/cctkPVvk.s:2681 .text.sm_check_battery_temperature:00000000 sm_check_battery_temperature /tmp/cctkPVvk.s:2754 .text.sm_check_battery_temperature:00000054 $d ARM GAS /tmp/cctkPVvk.s page 66 /tmp/cctkPVvk.s:2759 .text.sm_return_cell_temperature:00000000 $t /tmp/cctkPVvk.s:2765 .text.sm_return_cell_temperature:00000000 sm_return_cell_temperature /tmp/cctkPVvk.s:2798 .text.sm_return_cell_temperature:0000001c $d /tmp/cctkPVvk.s:2803 .text.sm_return_cell_voltage:00000000 $t /tmp/cctkPVvk.s:2809 .text.sm_return_cell_voltage:00000000 sm_return_cell_voltage /tmp/cctkPVvk.s:2842 .text.sm_return_cell_voltage:0000001c $d /tmp/cctkPVvk.s:2847 .text.sm_test_cycle_states:00000000 $t /tmp/cctkPVvk.s:2853 .text.sm_test_cycle_states:00000000 sm_test_cycle_states /tmp/cctkPVvk.s:2913 .text.sm_test_cycle_states:00000060 $d /tmp/cctkPVvk.s:2921 .text.sm_test_cycle_states:00000080 $t /tmp/cctkPVvk.s:3025 .text.sm_test_cycle_states:00000114 $d UNDEFINED SYMBOLS __aeabi_f2d __aeabi_dsub __aeabi_dmul __aeabi_d2iz can_handle_send_status can_handle_send_log tmp1075_measure status_led_update soc_update module PWM_powerground_control HAL_GetTick PWM_powerground_softcontrol amsStopBalancing amsConfigBalancing amsStartBalancing eeprom_write_status error_data currentAMSState HAL_GPIO_WritePin tmp1075_temps