1.L4的FLASH只支持双字写入,写入连续的字符就必须进行64位整型转换。 2.如下面这个程序:
关键就在于LDRD指令,这个指令 LDRD Ra,Rb,[xxx] "从XXX地址中取出64位数据,存入Ra、Rb寄存器中"。 XXX这个地址必须双字对齐(即是8的倍数) !!出错的第五步,ID[11]的首地址的确不是8的倍数,后来我换了一个变量(地址满足双字对齐),果然第五步就没有问题了。 那么,问题就来了,这种变量分配,不可能每个都去指定固定地址,一旦出现双字不对齐的地址,就会导致转换出错,这怎么搞? 3.问题如下: (1)上述程序错误是否真的是LDRD指令的问题? (2)L4芯片内部FLASH写入字符型数据,有更好的方式么?【官方例程用的64位强制转换】 |
评分
查看全部评分
程序中展示了一个64位强制转换,强制转换针对的是两个相同的数据(唯一不同就是这两个想通过数据存储地址不同),其中一个64位强制转换没问题,另一个则会触发硬件错误。分析两者汇编,发现引发错误的调用了LDRD这个汇编指令,我就问下,是不是因为LDRD针对的数据地址必须双字对齐导致了错误?
我懂, 哈哈哈, 但是回答不了你的问题。
终于遇到理解我在说什么的人了。