找回密码
 立即注册
查看: 1841|回复: 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区,来操作。

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-23 17:39:08 | 显示全部楼层
如果可以把sfr映射到xdata区======STC8H/STC8G 已有大量的扩展 XSFR/XFR 硬件放在 xdata 区
  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-04-28 17:44:26

2

主题

21

回帖

1266

积分

金牌会员

积分
1266
发表于 2022-12-23 18:07:00 | 显示全部楼层
应该是类似与IAP的设计吧?就是说在SFR里设计寄存器间接操作xram?
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-23 19:16:00 | 显示全部楼层
1.png
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

1

主题

1

回帖

24

积分

新手上路

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

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

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

可以看官方的驱动库,对于IO操作的接口,里面的实现,要繁琐的多,因为不支持间接寻址。
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 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

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2022-12-25 09:41:41 | 显示全部楼层
STC扩展的很多外设,就大量用了放置在xdata区间的特殊功能寄存器,比如DMA、PWM、IO设置、LCD驱动、LED驱动、LCM驱动等等。
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 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要强大的多了, 无论代码长度长执行效率,

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

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

楼主想玩, 推荐在 251(STC32)上实现  硬件抽像平台.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-2 02:19 , Processed in 0.145338 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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