IAR EWARM 6.40.5, STM32L151. Отлаживаю через SWD, использую вывод в SWO (Library configuration - stdout/stderr via SWO). Если включить Buffered terminal output в опциях проекта (Library options), отладчик начинает останавливать программу на инструкции BKPT 0xab:
CODE
__iar_sh_write:
0x80095a0: 0xb510 PUSH {R4, LR}
0x80095a2: 0xb084 SUB SP, SP, #0x10
0x80095a4: 0x0013 MOVS R3, R2
0x80095a6: 0x9000 STR R0, [SP]
0x80095a8: 0x9101 STR R1, [SP, #0x4]
0x80095aa: 0x9302 STR R3, [SP, #0x8]
0x80095ac: 0x2201 MOVS R2, #1
0x80095ae: 0x0004 MOVS R4, R0
0x80095b0: 0x4669 MOV R1, SP
0x80095b2: 0x2005 MOVS R0, #5
> 0x80095b4: 0xbeab BKPT #0xab
0x80095b6: 0x1a18 SUBS R0, R3, R0
0x80095b8: 0x0021 MOVS R1, R4
0x80095ba: 0x46c0 MOV R8, R8
0x80095bc: 0x46c0 MOV R8, R8
0x80095be: 0xb004 ADD SP, SP, #0x10
0x80095c0: 0xbd10 POP {R4, PC}
_LocaleC_isalpha:
0x80095c2: 0xf1a0 0x0161 SUB.W R1, R0, #97 ; 0x61
0x80095c6: 0x291a CMP R1, #26 ; 0x1a
0x80095c8: 0xd201 BCS.N 0x80095ce
0x80095ca: 0x2001 MOVS R0, #1
0x80095cc: 0x4770 BX LR
0x80095ce: 0x3841 SUBS R0, R0, #65 ; 0x41
0x80095d0: 0x281a CMP R0, #26 ; 0x1a
0x80095d2: 0x4180 SBCS R0, R0, R0
0x80095d4: 0x0fc0 LSRS R0, R0, #31
Что это и как с ним бороться?
UPD 29/01 15:14
Дополнительная информация.
В Debug log при остановке программы появляется строчка Invalid file handle 6. Это валидный хэндл, программа пишет через него поток во внешнее устройство на шине I2C. Функции __read, __write, __open, __close, __lseek переопределены соответствующим образом.
Стек вызовов: fflush - fflushOne - __write_buffered - __dwrite - __iar_sh_write.