打印
[STM32F1]

C51和ARM读写寄存器方式的疑惑?

[复制链接]
729|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jack_shine|  楼主 | 2019-7-15 09:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位关于C51和ARM读写寄存器方式区别的疑惑
C51里访问寄存器的方式是:例如sfr P0 = 0x80;  然后对P0的赋值就可以读写这个寄存器了, C语言和汇编语言的接口就是这个sfr指令

而ARM架构里,在C程序中翻到最后就只能看到define定义了一个地址,例如 #define UART1_BASE   (APB2PERIPH_BASE+0x3800),然后对UART_BASE赋值就可以读写这个相关寄存器,难道在Arm架构里,C语言和汇编的接口就是#define指令?

使用特权

评论回复
沙发
airwill| | 2019-7-15 21:56 | 只看该作者
51 的内存容量有限, 用 SFR 定义高 128 字节直接地址.
stm32 的内存空间很大, 所以内存和寄存器统一编址, 用相同的方式访问

使用特权

评论回复
板凳
ayb_ice| | 2019-7-16 10:38 | 只看该作者
内核都不一样,没有什么奇怪的

使用特权

评论回复
地板
yiyigirl2014| | 2019-7-16 15:27 | 只看该作者
这也跟编译器有关系吧,人家设计的就是这样

使用特权

评论回复
5
yiyigirl2014| | 2019-7-16 15:28 | 只看该作者
我们只是用,就按人家规定的方式就行了,研究太深也没用。

使用特权

评论回复
6
木木guainv| | 2019-8-8 13:14 | 只看该作者
位数不一样吧

使用特权

评论回复
7
toofree| | 2019-8-8 16:26 | 只看该作者
本帖最后由 toofree 于 2019-8-8 16:34 编辑

你这还是没理解51的总线架构。

ARM是全片统一编址,无论寄存器、RAM、还是Flash,都统一编址到2的32次方,0x00000000到0xFFFFFFFF范围内,理论上用指针可以访问到任意地址的内容,指针访问属于间接访问。

51的总线分为外部RAM、内部RAM、内部寄存器0x80--0xFF、外部ROM、内部ROM。外部ROM与内部ROM的地址是重叠的,但是好在有个EA引脚,EA引脚的状态决定了只能访问外部和内部ROM中的其中一个,不能同时访问。
外部RAM、外部ROM,分别用MOVX和MOVC来访问,在C51中就得在定义数据类型的时候来区分,得加上xdata或code指示数据是存在外部RAM还是ROM。
内部RAM的低128字节,包括地址为0x80到oxFF的内部寄存器,可以用MOV指令直接访问,MOV Ri #12H 之类的。C51定义内部RAM低128字节变量时用data。
内部RAM的高128字节,只能MOV间接访问,MOV @Ri, A,也就是要访问的地址必须先存入Ri中,然后@Ri就是Ri值对应的地址。C51定义内部RAM高128字节变量时用idata。
内部寄存器只能直接访问。

使用特权

评论回复
8
磨砂| | 2019-8-9 11:06 | 只看该作者
是不是就是位数不一样啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3044

帖子

2

粉丝