我有一个对象,其地址不是4字节对齐的.当存在STR指令保存2个寄存器时,这会在cpu中导致HardFault错误.
这是生成的代码:
00000000 <_ZN8BaseAreaC1EPcmm>:
0: b510 push {r4, lr}
2: 4604 mov r4, r0
4: 6042 str r2, [r0, #4]
6: e9c4 3102 strd r3, r1, [r4, #8]
a: 2001 movs r0, #1
c: 7420 strb r0, [r4, #16]
e: b921 cbnz r1, 1a <_ZN8BaseAreaC1EPcmm+0x1a>
Run Code Online (Sandbox Code Playgroud)
这些是在"4:6042 ......"行的寄存器
R0 08738B82 R8 0
R1 08738BAE R9 0
R2 0 R10 082723E0
R3 2FCC R11 0
R4 08738B82 R12 0
R5 20007630 R13 2000CB38
Run Code Online (Sandbox Code Playgroud)
如图所示,STR指令的目标寄存器未在4字节上对齐.该指令STR r2, [r0, #4]执行正常.但它就是HardFaults的下一个STRD r3, r1, …
当我这样做时:
echo -e "test1 test2 test3\ntest1 test2 test3" | awk '{print($2)}'
Run Code Online (Sandbox Code Playgroud)
我得到打印输出:
test2
test2
Run Code Online (Sandbox Code Playgroud)
但是当我喜欢这样的时候:
test=`echo -e "test1 test2 test3\ntest1 test2 test3" | awk '{print($2)}'`
echo $test
Run Code Online (Sandbox Code Playgroud)
我得到打印输出:
test2 test2
Run Code Online (Sandbox Code Playgroud)
我希望结果作为第一个示例中的列,但也希望它在变量中.我怎样才能做到这一点?