在哪里可以找到 uctypes micropython 模块

Posted

技术标签:

【中文标题】在哪里可以找到 uctypes micropython 模块【英文标题】:Where to find uctypes micropython module 【发布时间】:2021-12-31 19:45:50 【问题描述】:

我正在使用 circuitpython,需要访问 micropython uctypes 模块。我已经从 github 下载了 micropython 文件,但似乎找不到该模块。有人可以帮忙吗?

【问题讨论】:

您使用的是哪个端口/板? Metro M4 Express 等效 【参考方案1】:

看到这个CircuitPython issue:这是一个已知的事情,看起来没有一个端口实际上启用了 uctypes 模块:为此,MICROPY_PY_UCTYPES 预处理器定义在构建时必须非零,这通常是在端口的 mpconfigport.h 中设置,但此处并非如此。

因此,要么您必须自己构建(参见例如 https://learn.adafruit.com/building-circuitpython/),要么将所述定义添加到 mpconfigport.h 中或在命令行中传递它,要么找到替代解决方案(相同的链接提到 struct 模块可以而是使用它,它可能确实取决于确切的用例)。

【讨论】:

感谢您指出正确的方向。我已经尝试定义和构建,但现在我收到了其他头文件未包含的错误和其他警告。 我觉得该模块还没有准备好使用,因为我不需要包含 -Wall cflag 来构建它。 你可能想用 Circuitpython 来解决这个问题并在 github 上创建一个问题【参考方案2】:

要在 CircuitPython 7.0 中启用 uctypes,请尝试以下补丁。它对我有用。

--- extmod/moductypes.c.orig    2021-11-27 00:07:08.000000000 +0900
+++ extmod/moductypes.c 2021-11-27 00:11:13.000000000 +0900
@@ -544,7 +544,7 @@
             
 
          else if (agg_type == PTR) 
-            byte *p = *(void **)self->addr;
+            byte *p = *(void **)((void *)self->addr);
             if (mp_obj_is_small_int(t->items[1])) 
                 uint val_type = GET_TYPE(MP_OBJ_SMALL_INT_VALUE(t->items[1]), VAL_TYPE_BITS);
                 return get_aligned(val_type, p, index);
@@ -574,7 +574,7 @@
                 mp_int_t offset = MP_OBJ_SMALL_INT_VALUE(t->items[0]);
                 uint agg_type = GET_TYPE(offset, AGG_TYPE_BITS);
                 if (agg_type == PTR) 
-                    byte *p = *(void **)self->addr;
+                    byte *p = *(void **)((void *)self->addr);
                     return mp_obj_new_int((mp_int_t)(uintptr_t)p);
                 
             

【讨论】:

谢谢,我现在不再使用 uctypes,但对未来会有帮助。

以上是关于在哪里可以找到 uctypes micropython 模块的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以找到系统调用参数的定义?

在哪里可以找到 DeskUtil 文档?

我在哪里可以找到这个 LinkedIn 插件?

在哪里可以找到 MySQL 事务日志?

我在哪里可以找到模式的数据目标

在哪里可以找到 Raku 核心转储文件?