找回密码
 立即注册
查看: 3118|回复: 9

一个有意思的提案,将sfr寄存器地址空间映射到xdata区

[复制链接]

1

主题

1

回帖

24

积分

新手上路

积分
24
发表于 2022-12-23 17:02:19 | 显示全部楼层 |阅读模式
早期我写MCS51-ELL库的时候,曾经参考过STM32的HAL库和LL库,后来深入学习ARM架构以后,发现与MCS51架构还是有很大差异的。

库地址如下:MCS51-ELL: 这是一个专门为增强型1T8051内核MCU设计的硬件抽象平台。 (gitee.com)

从编写驱动库的角度来说,如果可以把sfr映射到xdata区,软件层面,就可以通过指针来间接寻址,对数据进行操作。这样写驱动库会变得简洁很多。

对IO操作,可以直接访问sfr寄存器,如果是初始化阶段,可以通过xdata映射sfr区,来操作。

其实软件上,也可以实现这个操作,但是性价比不高。

有没有大佬来讨论一下,这个方案的可行性,还有硬件层这么做的可行性。
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2022-12-23 17:39:08 | 显示全部楼层
如果可以把sfr映射到xdata区======STC8H/STC8G 已有大量的扩展 XSFR/XFR 硬件放在 xdata 区
回复

使用道具 举报 送花

2

主题

21

回帖

1342

积分

金牌会员

积分
1342
发表于 2022-12-23 18:07:00 | 显示全部楼层
应该是类似与IAP的设计吧?就是说在SFR里设计寄存器间接操作xram?
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2022-12-23 19:16:00 | 显示全部楼层
1.png
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2022-12-23 19:18:25 | 显示全部楼层
1.png
回复

使用道具 举报 送花

1

主题

1

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2022-12-24 17:43:11 | 显示全部楼层

是的,我之前写这些外设的驱动的时候,如果他的寄存器有部分在xdata区,那么我就可以通过指针来间接操作,非常方便。

但是sfr区的寄存器,由于仅仅支持直接寻址,所以编写库就麻烦的多,最简单的例子,就是IO。

可以看官方的驱动库,对于IO操作的接口,里面的实现,要繁琐的多,因为不支持间接寻址。
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2022-12-24 17:59:48 | 显示全部楼层
后续8051是32位8051,STC32G12K128, STC32G8K64的 时代,库在 STC32上会大显身手,
STC8H系列是8位8051的代表,寄存器配置入门CPU运行原理到应用精通为主,照顾8051老用户
===库在8位8051这,作用不大,现在STC在大力推 DMA, 这是个好东西,简化程序设计
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=376&extra=page%3D1

回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2022-12-25 09:41:41 | 显示全部楼层
STC扩展的很多外设,就大量用了放置在xdata区间的特殊功能寄存器,比如DMA、PWM、IO设置、LCD驱动、LED驱动、LCM驱动等等。
回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
发表于 2023-1-16 10:08:12 | 显示全部楼层
zev*** 发表于 2022-12-24 17:43
是的,我之前写这些外设的驱动的时候,如果他的寄存器有部分在xdata区,那么我就可以通过指针来间接操作, ...

51的 DPTR单指针对 外部 XDATA寻址, 功能很弱, 代码消耗大, 后来改进的双数据指针, 也是个鸡肋, 要很小心的使用, 否则极易出错.

51是早期构架, 你硬要把晚期的先进构架 ARM的那一套, 用在 51上, 代码长度大大增加, 执行效率极速降低.

理论上部分能实现, 但现实中走不通. 这是由 51的构架决定的, 早期的数据处理量相对少, 51主要依靠 片内RAM来处理, 片外 XRAM 仅作数据缓冲及数据保存.

像 BIT位操作(含I/O操作), 是世界上仅存的, 也是 51最强大最亮眼的地方, 你把她去掉, 用其他没有位处理器的CPU(比如 ARM) 风格取代, 代码增加好多不说,

执行效率低很多. 那还不如直接把 51扔到历史的长河里去算了.

因为 51的构架, 决定的片外 XRAM操作, 比不上同等级别的 8080(Z80)系, 6800(6502)系, 指令系统除了 位处理器是亮点, 其他没什么优势, 那还要她干嘛?

后来 英特尔升级的 251, 这方便作了很大的改进, 这构架在当时也算 先进的, 放在现在 和 后期的 ARM相比, 当然没法比, 像 ARM的 桶式处理, 移位和加法,

一条指令打天下, 而 251要好多条指令, 才能模拟此功能.

至于官方仿 ARM风格的库, 大量使用指针间接操作, 代码长度长执行效率低, 正如官方自已存认的, 作用不大.

但官方仿 ARM风格的库, 用在 251(STC32)上, 用户体验就在不一样了, 251的间接寻址功能, 比原 51要强大的多了, 无论代码长度长执行效率,

都逼近直接用 汇编编写的代码, 我相信, 喜欢使用的客户也会多起来.

回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
发表于 2023-1-16 10:17:58 | 显示全部楼层
玩 硬件抽像平台, 8位机中, AVR, STM8, PIC18 都行, 唯 51不太合适(这和外围扩展功能模块无关, 主要是51的指令系统太弱)

楼主想玩, 推荐在 251(STC32)上实现  硬件抽像平台.
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-7 14:37 , Processed in 0.085391 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表