查看: 78|回复: 0

[IDE系列教程] ESP32 常用的模块 uctypes 3.1.14

[复制链接]

uctypes模块用来访问二进制数据结构,该模块为MicroPython实现“外部数据接口”。

  • uctypes.LITTLE_ENDIAN — 小端压缩结构。
  • uctypes.BIG_ENDIAN — 大端压缩结构类型。

构造函数

class uctypes.struct(addr, descriptor, type)

函数说明:将内存中以c形式打包的结构体或联合体转换为字典,并返回该字典。

addr:开始转换的地址
descriptor:转换描述符
    格式:"field_name":offset|uctypes.UINT32
    offset:偏移量,单位:字节
        VOID、UINT8、INT8、UINT16、INT16、UINT32、INT32、UINT64、INT64、BFUINT8、BFINT8、BFUINT16、BFINT16、BFUINT32、BFINT32、BF_POS、BF_LEN、FLOAT32、FLOAT64、PTR、ARRAY
type:c结构体或联合体存储类型,默认为本地存储类型
    NATIVE —  mricopython本地的存储类型
    LITTLE_ENDIAN — 小端存储
    BIG_ENDIAN — 大端存储    

示例:

#如果需要C文件中的结构体,需要使用VC或者VS生成.dll(windows)或.os(linux、mac)文件,然后下载进入MCU中,使用MCU打开此文件,获取结构体或联合体
>>> a = b"0123"
>>> s = uctypes.struct(uctypes.addressof(a), {"a": uctypes.UINT8 | 0, "b": uctypes.UINT16 | 1}, uctypes.LITTLE_ENDIAN)
>>> print(s)
<struct STRUCT 3ffc7360>
>>> print(s.a)
48
>>> s.a = 49
>>> print(a)
b'1123'

函数

1. uctypes.sizeof(struct)

函数说明:按字节返回数据的大小。参数可以是类或者数据对象 (或集合)。
示例:

>>> a = b"0123"
>>>b = uctypes.struct(uctypes.addressof(a), {"a": uctypes.UINT8 | 0, "b": uctypes.UINT16 | 1}, uctypes.LITTLE_ENDIAN)
>>> b.a
48
>>> print(uctypes.sizeof(b))
3

2. uctypes.addressof(obj)

函数说明:返回对象地址。参数需要是 bytes, bytearray 。
示例:

>>> a = b"0123"
>>> print(uctypes.addressof(a))
1073504048

3. uctypes.bytes_at(addr, size)

函数说明:捕捉从 addr 开始到 size 个地址偏移量结束的内存数据为 bytearray 对象并返回。
示例:

>>> a = b"0123"
>>>print( uctypes.bytes_at(uctypes.addressof(a), 4))
b'0123'

4. uctypes.bytearray_at(addr, size)

函数说明:捕捉给定大小和地址内存为 bytearray 对象。与bytes_at()函数不同的是,它可以被再次写入,可以访问给定地址的参数。
示例:

>>> a = b"0123"
>>> print(uctypes.bytearray_at(uctypes.addressof(a), 2))
bytearray(b'01')
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail