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

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

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

使用道具 举报

该用户从未签到

549

主题

9198

回帖

1万

积分

管理员

积分
13999
发表于 2022-12-23 17:39:08 | 显示全部楼层
如果可以把sfr映射到xdata区======STC8H/STC8G 已有大量的扩展 XSFR/XFR 硬件放在 xdata 区
  • TA的每日心情
    慵懒
    9 小时前
  • 签到天数: 87 天

    [LV.6]常住居民II

    2

    主题

    21

    回帖

    494

    积分

    中级会员

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

    该用户从未签到

    549

    主题

    9198

    回帖

    1万

    积分

    管理员

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

    该用户从未签到

    549

    主题

    9198

    回帖

    1万

    积分

    管理员

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

    该用户从未签到

    1

    主题

    1

    回帖

    24

    积分

    新手上路

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

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

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

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

    该用户从未签到

    549

    主题

    9198

    回帖

    1万

    积分

    管理员

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

    该用户从未签到

    45

    主题

    2897

    回帖

    6510

    积分

    超级版主

    积分
    6510
    发表于 2022-12-25 09:41:41 | 显示全部楼层
    STC扩展的很多外设,就大量用了放置在xdata区间的特殊功能寄存器,比如DMA、PWM、IO设置、LCD驱动、LED驱动、LCM驱动等等。
  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    37

    主题

    847

    回帖

    3882

    积分

    荣誉版主

    积分
    3882
    发表于 2023-1-16 10:08:12 | 显示全部楼层
    zevorn 发表于 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要强大的多了, 无论代码长度长执行效率,

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

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    37

    主题

    847

    回帖

    3882

    积分

    荣誉版主

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

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

    本版积分规则

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

    GMT+8, 2024-4-24 23:19 , Processed in 0.067850 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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