MICROPYTHON添加自定义模块

MicroPython external C modules

在开发用于Micropython的模块时,您可能会遇到Python环境的限制,通常是由于无法访问某些硬件资源或Python速度限制。
如果您的限制无法通过:ref: ’ speed_python '解决,用C语言编写部分或全部模块是一个可行的选择。
如果您的模块设计为访问或使用通常可用的硬件或库请考虑在MicroPython中实现它源代码树与类似的模块一起,并将其作为拉请求提交。然而,如果你的目标是模糊的或专有的系统,它可能使将其放在主Micropython库之外更有意义。
本章描述了如何将这些外部模块编译成MicroPython可执行文件或固件镜像。
另一种方法是使用:ref: ’ natmod ',它允许编写自定义C放在.mpy文件中的代码,可以动态地导入到一个运行中的Micropython系统,不需要重新编译主固件。

外部C模块的结构

MicroPython用户C模块是一个包含以下文件的目录:
.c “和”.H” 源代码文件。
这些模块的实现通常要包含miccroPython 函数
目前编写这些函数/模块的最佳参考是在MicroPython中查找类似的模块并将它们用作示例。

*“micropython。mk “包含此模块的Makefile片段。

$(USERMOD_DIR)micropython。可作为通往你的编译模块路径。因为它是为每个c模块重新定义的,所以在你的makfile中他是一个局部变量。例如“EXAMPLE_MOD_DIR:= $(USERMOD_DIR)”
“micropython.mk ‘必须将你的C文件添加到编译目标.例如:编译目标expample.c的需要加入一下参数:SRC_USERMOD += $(EXAMPLE_MOD_DIR)/example.c
如果你有自定义的“CFLAGS”设置或包括文件夹来定义,这些应该添加到’ ’ CFLAGS_USERMOD ’ '。

下面是完整的用法示例。

这个名为example的简单模块提供了一个函数的例子。add_ints(a, b) 将两个整数args相加并返回结果。
Directory::

example/
├── example.c
└── micropython.mk

example.c

 #include "py/obj.h"
 #include "py/runtime.h"
 #include "py/builtin.h"
 // 这个函数将会以example.add_ints(a, b) 调用.
STATIC mp_obj_t example_add_ints(mp_obj_t a_obj, mp_obj_t b_obj) {
        // 从microPython中 抽取int对象
        int a = mp_obj_get_int(a_obj);
        int b = mp_obj_get_int(b_obj);

        // 计算并返回microPython对象
        return mp_obj_new_int(a + b);
    }
    //为上面的函数定义一个Python引用
STATIC MP_DEFINE_CONST_FUN_OBJ_2(example_add_ints_obj, example_add_ints);

//定义模块的所有属性
//数组定义,函数名参数列表
//所用标识符都定义为MP_QSTR_XXX(一般脚本生成)
//内存对齐一般位四字节
STATIC const mp_rom_map_elem_t example_module_globals_table[] = {
        { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_example) },
        { MP_ROM_QSTR(MP_QSTR_add_ints), MP_ROM_PTR(&example_add_ints_obj) },
};
STATIC MP_DEFINE_CONST_DICT(example_module_globals, example_module_globals_table);

// 定义模块调用目标
const mp_obj_module_t example_user_cmodule = {
        .base = { &mp_type_module },
        .globals = (mp_obj_dict_t*)&example_module_globals,
};

    //注册该模块,使其在Python中可用
MP_REGISTER_MODULE(MP_QSTR_example, example_user_cmodule, MODULE_EXAMPLE_ENABLED);

micropython.mk

EXAMPLE_MOD_DIR := $(USERMOD_DIR)
# 添加所有的需要编译的c文件
SRC_USERMOD += $(EXAMPLE_MOD_DIR)/example.c
# 添加模块编译所需目录
# 这个示例并不需要
CFLAGS_USERMOD += -I$(EXAMPLE_MOD_DIR)

编译文件到固件

更根据自己的所用芯片略有不同

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MicroPython 1.19版本中,可以通过以下步骤来添加C模块: 1. 首先,需要准备好C编写环境。可以使用常用的C编译工具链,如GCC等。确保在编写C模块时,使用的是兼容的编译器和工具。 2. 创建一个新的C模块源文件。在文件中,可以定义C函数或类,并且可以与MicroPython的运行时系统进行交互。 3. 在C模块源文件中,可以使用特定的宏来声明模块。例如,可以使用`PYBIND_MODULE`宏声明模块的名称和初始化函数。这些宏定义了模块的属性和方法,使其能够在MicroPython中使用。 4. 在编写C函数或类时,可以使用MicroPython提供的API来与Python对象和运行时系统进行交互。API包括函数用来获取和设置Python对象的属性,创建新的Python对象等。 5. 编译C模块源文件。根据具体的开发环境和配置,可以使用相应的编译命令将C源文件编译为模块文件。编译完成后,可以生成一个二进制的C模块文件(.mpy文件)。 6. 将编译好的C模块文件导入到MicroPython中。可以通过复制C模块文件到MicroPython的设备或通过文件传输协议将模块文件传输到设备上。 7. 在MicroPython中使用C模块。一旦导入了C模块,就可以在MicroPython的交互式环境或脚本中使用C模块中定义的函数和类。 需要注意的是,添加C模块需要具备一定的C编程经验和对MicroPython运行时系统的了解。在开发过程中,可以参考MicroPython官方文档和示例代码来更好地理解和使用C模块功能。 ### 回答2: 在Micropython 1.19中添加C模块是一种扩展Micropython的方法,可以通过C语言编写更高效和功能强大的模块来增强Micropython的能力。 要添加C模块,首先需要了解Micropython的C语言接口和模块扩展API。Micropython提供了一些API函数和宏,使开发者能够在C语言中调用Micropython的功能。 首先,您需要编写C代码来实现您想要的功能。这个C模块可以是一个单独的文件,也可以是多个文件的集合。您可以使用标准的C开发工具来编写和调试您的C代码,确保它的正确性和可靠性。 然后,您需要为您的C模块创建一个Micropython模块定义。这个定义是一个包含模块名称、模块函数映射和其他信息的结构体。您可以使用Micropython模块定义API来创建和注册您的模块定义。 接下来,您需要将您的C模块编译为与Micropython兼容的二进制文件。Micropython的构建系统提供了一些工具和Makefile来帮助您进行这个过程,并将最终生成的二进制文件链接到Micropython的运行时环境中。 最后,您可以将生成的模块文件加载到Micropython中并使用它。您可以使用Micropython的标准导入语句来导入您的C模块,并使用模块中定义的函数和变量。 总的来说,通过添加C模块,您可以在Micropython中编写高性能和功能强大的功能,扩展其能力并使其适用于更广泛的应用领域。这为开发者提供了更多的自由和灵活性,使他们能够实现更复杂的任务和项目。 ### 回答3: 在Micropython 1.19中,我们可以使用C语言编写自己的模块并将其添加Micropython中。 首先,我们需要创建一个新的C文件来实现我们的模块功能。然后,我们可以在C文件中定义一个或多个新的函数,这些函数可以被Micropython调用。 在C文件中,我们需要包含"py/compile.h"和"py/runtime.h"头文件,以便我们可以使用Micropython提供的API进行操作。 接下来,我们需要定义一个针对特定功能的C函数,并使用"mp_obj_t"作为返回值和参数类型。该函数将使用"mp_arg_check_num"来检查传入的参数数量,并使用"mp_obj_new_<type>"来创建返回值。 当定义完所有函数后,我们需要在C文件的末尾创建一个函数表,将我们的C函数映射到Micropython可以调用的函数名上。函数表包含一个或多个"MP_DEFINE_CONST_FUN_OBJ_<n>"宏,其中<n>是函数的参数数量。 最后,在我们的C文件中,我们需要使用"MP_REGISTER_MODULE"宏来注册我们的模块名称和函数表。 完成以上步骤后,我们需要将C文件编译为字节码文件。可以使用Micropython中的mpy-cross编译器来完成这个步骤。 一旦我们编译了我们的字节码文件,我们就可以将其复制到目标设备上,并在Micropython中使用"import"语句导入我们的模块。 通过以上步骤,我们可以成功地在Micropython 1.19中添加并使用我们的自定义C模块

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值