首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么STR仅适用于0x40000000到0x40003FFF之间的地址?

为什么STR仅适用于0x40000000到0x40003FFF之间的地址?
EN

Stack Overflow用户
提问于 2019-03-25 08:54:58
回答 1查看 109关注 0票数 0

代码:

代码语言:javascript
复制
dest EQU 0x40000000

AREA name, CODE, READONLY

ENTRY

MOV r0, #2  
LDR r1, =dest   
STR r0, [r1]    
stop B stop

END

此代码将值2写入内存位置0x40000000。当我将其更改为0x20000000时,2无法写入其中。0x3FFFFFFF也是如此。当我将内存位置设置为0x40003FFF时,2将打印到该位置,但当我将地址更改为0x40004000时,2无法在该位置打印。对于任何更高的地址位置也是如此,如0x50000000。因此,根据这些输出,STR似乎只将值写入到0x40000000和0x40003FFF之间的有限范围的内存中。

有人知道为什么会这样吗?或者是我的代码出了什么问题?我使用的是恩智浦LPC2140的Keil uVision5。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 05:35:45

我找不到"LPC2140“的数据表,但我找到了似乎是一系列设备的数据表,并且您拥有的具体设备可能是LPC2142/2144。第6.4节的datasheet显示静态随机存取存储器映射到0x40000000-0x40003FFF (假设您已经说过您有16 kB的静态随机存取存储器变体)。这是您应该将其视为通用RAM的唯一地址空间。根据数据表,超出这个范围的一切看起来都很可怕,除非你完全知道你在做什么,否则你应该避免它。

还有一件事你也应该知道,那就是unaligned accessSTR一次写入一个完整的字(4字节),因此地址应该在字边界上对齐。0x40003FFF不与4字节边界对齐;您应该改为写入0x40003FFC。如果您只想向0x40003FFF写入一个字节,则应该使用STRB

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55330044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档