Skip to main content

用于处理寄存器映射信息的数据结构

项目描述

r_map

用于处理寄存器映射数据的库。

数据源是抽象的,因此如果用户想要使用

特定数据源,他/她可以:

  1. 提供适当格式的序列化数据源(可能是

    最简单)

  2. 创建源数据的解析器并动态生成数据

    使用提供的数据类的结构

目的

  1. 轻松利用寄存器映射数据

  2. 能够从任意位置遍历寄存器映射

  3. 为数据遍历提供便利

  4. 提供序列化/反序列化数据的能力

  5. 提供机制来轻松子类基元素实现

  6. 提供方法来注册在数据库中访问哪些元素并创建

    此数据的子树

特征

键和属性访问

对元素子元素的键和属性访问。访问的关键是

对于子元素碰巧有一个名字的情况特别有用

Python 中的保留关键字。

    r_map1.reg.value = 10

    r_map1['reg'].value = 10

该元素不打算通过基于键的分配添加到节点

像字典一样。_add为此提供了一个方法:

不支持基于密钥的分配,因为它可能导致

具有别名的子元素会令人困惑并且不太可能是用例。

简单迭代

基 Node 类支持迭代,因此由所有节点提供

子类。

例如:

    for reg in reg_map:

        for bf_ref in reg:

            print(f"bitfield reference: {bf_ref.name} has value: {bf_ref.value}")

寄存器到位域值映射

寄存器的值基于其组件位域的值。事实上,有

是额外的间接层,以支持仅具有

位域的部分视图。因此,多个寄存器可以

可以访问相同的位域。对这个级别的支持是复杂的

进入数据结构并使用类建模:BitFieldRef。

使用带有节点的公共字典序列化完整的寄存器映射树

通过他们的 uuid 引用其他人。

例如:

"1b99635555e647638f8a1ff38a1e3cf1": {

    "name": "root",

    "type": "Node",

    "children": [

        "3e2f9ba277e44050b52b5111fd814008"

    ]

},

"3e2f9ba277e44050b52b5111fd814008": {

    "name": "r_map1",

    "descr": "An example register map containing r

    "local_address": 268435456,

    "type": "RegisterMap",

    "children": [

        "c897cf71021449bdbdc819e7255fcab7",

        "569715f765f14ba09313796ee98b6db6"

    ]

},

"c897cf71021449bdbdc819e7255fcab7": {

    "local_address": 0,

    "name": "reg1",

    "width": 32,

    "type": "Register",

    "children": [

        "8cded8916e014bb3ab621e327f9c0ae8"

    ]

},

"8cded8916e014bb3ab621e327f9c0ae8": {

    "reg_offset": 8,

    "field_offset": 7,

    "name": "bf1_ref",

    "slice_width": 6,

    "type": "BitFieldRef",

    "children": [

        "b138d3d5335442479f25ec4d57859cda"

    ]

},

"b138d3d5335442479f25ec4d57859cda": {

    "access": "RW",

    "name": "bf1",

    "reset_val": 74565,

    "width": 20,

    "doc": "Some documentation to describe the bit

    "type": "BitField",

    "children": [

        "ba75ebd0924a46f29f0dd1726fd5fb5f",

        "36b5d3a221e6400bba2d76a303dac2c2"

    ]

},

"ba75ebd0924a46f29f0dd1726fd5fb5f": {

    "name": "use_auto_inc",

    "value": 20,

    "type": "Enumeration"

},

"36b5d3a221e6400bba2d76a303dac2c2": {

    "name": "use_auto_dec",

    "value": 10,

    "type": "Enumeration"

},

"569715f765f14ba09313796ee98b6db6": {

    "local_address": 4,

    "name": "reg2",

    "width": 32,

    "type": "Register",

    "children": [

        "14b8d11fea244200a6d0efee16d740f7",

        "37a9c221ab77446aafe9f74ec14c78c6",

        "6f695b3dbdd74cb3abaddf82c9594e4b"

    ]

},

"14b8d11fea244200a6d0efee16d740f7": {

    "_alias": true,

    "reg_offset": 0,

    "field_offset": 0,

    "name": "bf4_ref",

    "slice_width": 2,

    "_ref": "6f695b3dbdd74cb3abaddf82c9594e4b",

    "type": "BitFieldRef"

},

"6f695b3dbdd74cb3abaddf82c9594e4b": {

    "reg_offset": 5,

    "field_offset": 2,

    "name": "bf3_ref",

    "slice_width": 5,

    "type": "BitFieldRef",

    "children": [

        "28c6a9c6929a4ad2baabc18751ec21d3"

    ]

},

"28c6a9c6929a4ad2baabc18751ec21d3": {

    "access": "R",

    "name": "bf2",

    "reset_val": 26505,

    "width": 20,

    "type": "BitField"

},

"37a9c221ab77446aafe9f74ec14c78c6": {

    "_alias": true,

    "reg_offset": 4,

    "field_offset": 3,

    "name": "bf2_ref",

    "slice_width": 4,

    "_ref": "8cded8916e014bb3ab621e327f9c0ae8",

    "type": "BitFieldRef"

},

"root": "1b99635555e647638f8a1ff38a1e3cf1"

}

_ref属性有助于建模一个节点可以是一个实例

其他。这节省了序列化中公共信息的重复

树。该_alias属性表示一个实例可以是

其他。这仅仅意味着新实例的位域将与

源节点。

r_map 类

通用属性

所有树对象都具有以下共同属性:

  1. 姓名

    商品名称

  2. 描述

    项目的简短描述

  3. 文档

    项目的更长描述

请注意,descr 和 doc 属性可能为 None 或空

细绳。

还有其他常见的属性,但作为 r_map 树的用户,它们不是

出于兴趣。

注册地图

用于保存寄存器对象。

RegisterMap 属性

这个类的对象有:

  1. 地址

    寄存器映射的起始地址。这可能不是非常有用,因为

    最有趣的地址可能是子寄存器的地址。

  2. 本地地址

    上述地址是通过对local_address求和动态找到的

    使用树层次结构中父节点的 local_addresses。除非

    您正在使用子类 FixedRegisterMap 其中 local_address ==

    地址。

RegisterMap 方法

  1. 此方法可用于读取当前寄存器映射的数据并更新

    子寄存器的值。它依赖于一个_block_read_func函数

    已添加到它或树层次结构中的某个父级。

  2. 将寄存器映射的子寄存器值写入某个目的地。

    请注意,如果相邻子寄存器之间存在间隙,则零是

    写到那些地址。

    此方法依赖于_block_write_func已添加的 a。

登记

注册属性

此类的对象具有与 RegisterMap 对象相同的属性,并且在

另外还有一个width属性,表示寄存器的宽度。

这些是 RegisterMap 实例的子级。

寄存器具有以下附加属性:

  1. 价值

    这是寄存器的当前值。它是基于动态计算的

    来自所有子 BitFieldRefs 的当前值。可以赋值

    也是直接的,并且该值将相应地更新子位域。

  2. 重置值

    这是寄存器的复位值

  3. 使用权

    这表示寄存器的访问级别,基于动态计算

    在子 BitFieldRef 的访问级别上。如果不同的孩子有

    不同的访问级别,它们将被'|'.join一起编辑。

注册方法

  1. 此方法可用于读取当前寄存器的数据并更新

    寄存器的值。它依赖于_reg_read_func已添加的功能

    到它或树层次结构中的某个父级。

  2. 将寄存器的值写入某个目的地。与读取类似的工作

    上面的功能,同样依赖于一个_reg_write_func已经

    添加。

位域参考

这些对象代表寄存器中位域的贡献。他们

允许寄存器仅提供对位域的一部分的访问。

或者,它们还允许多个寄存器提供对公共的访问

位域或位域跨越多个寄存器。

BitFieldRef 属性

此类的对象是 Register 实例的子对象。他们有

以下附加属性:

  1. reg_offset

    这是主机寄存器中的偏移量,来自此的贡献

    对象的子位域开始于。

  2. 切片宽度

    这是此贡献的子位域的切片宽度

    代表。

  3. field_offset

    这就像 reg_offset ,但它是孩子内的偏移量

    此贡献来自的位域。

  4. 价值

    这是子位域的贡献值,上移

    reg_offset

  5. 表示value上述在重置时的情况。

  6. 男朋友

    此属性返回位域引用的子位域。

位域

位域属性

此类的对象代表一个位域。

它们具有以下附加属性:

  1. 宽度

    位域的宽度(以位为单位)

  2. 重置值

    复位时该位域的值。

  3. 使用权

    reset_val 的访问级别。这目前仅用于文档

    清酒,但可以想象被用户使用。它将包含一个字符串

    例如“RW”或“R”。

  4. 价值

    这是位域的当前值。

位域

位域方法

  1. 重置

    将此位域的值重置为 指定的值reset_val

  2. 注解

    查找子注释的名称,其值是否与当前值匹配

    值,否则返回十六进制值。

枚举

此类的对象用于表示枚举。他们是

位域对象。它们可以直接分配给 BitField 的值。

枚举属性

枚举对象有一个 value Attribute 来提供它的值。

笔记

  1. _nb_attrsclass 属性用于控制每个序列化的内容

    类实例。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

r_map-0.9.0-py3-none-any.whl (23.2 kB 查看哈希

已上传 py3