小编rdr*_*ntn的帖子

未对齐访问会导致ARM Cortex-M4出错

我有一个对象,其地址不是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, …

c c++ arm memory-alignment cortex-m

8
推荐指数
1
解决办法
9896
查看次数

Bash正在删除换行符

当我这样做时:

 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)

我希望结果作为第一个示例中的列,但也希望它在变量中.我怎样才能做到这一点?

bash

0
推荐指数
1
解决办法
92
查看次数

标签 统计

arm ×1

bash ×1

c ×1

c++ ×1

cortex-m ×1

memory-alignment ×1