一个有意思的提案,将sfr寄存器地址空间映射到xdata区
早期我写MCS51-ELL库的时候,曾经参考过STM32的HAL库和LL库,后来深入学习ARM架构以后,发现与MCS51架构还是有很大差异的。库地址如下:MCS51-ELL: 这是一个专门为增强型1T8051内核MCU设计的硬件抽象平台。 (gitee.com)
从编写驱动库的角度来说,如果可以把sfr映射到xdata区,软件层面,就可以通过指针来间接寻址,对数据进行操作。这样写驱动库会变得简洁很多。
对IO操作,可以直接访问sfr寄存器,如果是初始化阶段,可以通过xdata映射sfr区,来操作。
其实软件上,也可以实现这个操作,但是性价比不高。
有没有大佬来讨论一下,这个方案的可行性,还有硬件层这么做的可行性。
如果可以把sfr映射到xdata区======STC8H/STC8G 已有大量的扩展 XSFR/XFR 硬件放在 xdata 区 应该是类似与IAP的设计吧?就是说在SFR里设计寄存器间接操作xram?
神农鼎 发表于 2022-12-23 19:16
是的,我之前写这些外设的驱动的时候,如果他的寄存器有部分在xdata区,那么我就可以通过指针来间接操作,非常方便。
但是sfr区的寄存器,由于仅仅支持直接寻址,所以编写库就麻烦的多,最简单的例子,就是IO。
可以看官方的驱动库,对于IO操作的接口,里面的实现,要繁琐的多,因为不支持间接寻址。
后续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
https://www.stcaimcu.com/data/attachment/forum/202212/17/135333kfiihushpp5pu5hh.png
STC扩展的很多外设,就大量用了放置在xdata区间的特殊功能寄存器,比如DMA、PWM、IO设置、LCD驱动、LED驱动、LCM驱动等等。 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要强大的多了, 无论代码长度长执行效率,
都逼近直接用 汇编编写的代码, 我相信, 喜欢使用的客户也会多起来.
玩 硬件抽像平台, 8位机中, AVR, STM8, PIC18 都行, 唯 51不太合适(这和外围扩展功能模块无关, 主要是51的指令系统太弱)
楼主想玩, 推荐在 251(STC32)上实现硬件抽像平台.
页:
[1]