我可能很蠢,但它就是行不通。它引发了一个 HardFault,如果我检查缓冲区,它没有数字,只是“字符串:”。我无法通过反编译来解决它。我正在开发一个 STM32f4 MCU 项目。缓冲区已经足够长来容纳字符串和数字。
从拆解来看:
ffffffe9: Failed to execute MI command:
-data-disassemble -s 4294967273 -e 4294967423 -- 3
Error message from debugger back end:
Cannot access memory at address 0xffffffe8
这是调用树中的最后一个函数:
__sfputs_r:
08007feb: push {r3, r4, r5, r6, r7, lr}
08007fed: mov r6, r0
08007fef: mov r7, r1
08007ff1: mov r4, r2
08007ff3: adds r5, r2, r3
08007ff5: cmp r4, r5
08007ff7: bne.n 0x8007ffc <__sfputs_r+18>
08007ff9: movs r0, #0
08007ffb: b.n 0x800800c <__sfputs_r+34>
08007ffd: ldrb.w r1, [r4], #1
08008001: mov r2, r7
08008003: mov r0, r6
08008005: bl 0x8007fbc <__sfputc_r>
08008009: adds r3, r0, #1
0800800b: bne.n 0x8007ff4 <__sfputs_r+10>
0800800d: pop {r3, r4, r5, r6, r7, pc}
0800800f: movs r0, r0
这是电脑所指向的位置(第一个地址):
20017f28: str r6, [sp, #228] ; 0xe4
20017f2a: ldrge r2, [r0, r0]
20017f2c: strlt r6, [sp, #228] ; 0xe4
20017f2e: ldr r2, [r0, r0]
20017f30: strb r1, [r5, r2]
20017f32: subs r7, #145 ; 0x91
20017f34: ldr r0, [sp, #220] ; 0xdc
20017f36: lsrs r0, r0, #32
20017f38: strb r1, [r5, r2]
我尝试使用 snprintf 但没有成功。
可能是
%f
需要double
,而不是float