MicroPython核心:实现一个模块

本文详细介绍如何在MicroPython中实现一个核心模块,MicroPython模块可以是下面的其中之一:

  • 内置模块:作为 MicroPython 资源库一部分的通用模块。
  • 用户模块:对您的特定项目有用的模块,由您在自己的资源库或私人代码库中维护。
  • 动态模块:可在设备运行时部署和导入的模块。

MicroPython 中的模块可在以下位置实现:

  • py/:反映 CPython 核心功能的核心库。
  • extmod/:跨多个移植共享的 CPython 或 MicroPython 专用模块。
  • ports//:特定于移植的模块。

实现核心模块

与CPython类似,MicroPython 也有核心内置模块,可以通过import语句访问。内存管理中讨论的gc模块就是一个例子。

>>> import gc
>>> gc.enable()
>>>

MicroPython 还有其他一些内置的标准/核心模块,如 io、数组等。添加新的核心模块需要进行一些修改。

首先,在py/目录下创建C文件。本例会在modsubsystem.c文件中添加一个假定的新模块子系统:

#include "py/builtin.h"
#include "py/runtime.h"

#if MICROPY_PY_SUBSYSTEM

// info()
STATIC mp_obj_t py_subsystem_info(void) {
   
    return MP_OBJ_NEW_SMALL_INT(42);
}
MP_DEFINE_CONST_FUN_OBJ_0(subsystem_info_obj, py_subsystem_info);

STATIC const mp_rom_map_elem_t mp_module_subsystem_globals_table[] = {
   
    {
    MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_subsystem) },
    {
    MP_ROM_QSTR(MP_QSTR_info), MP_ROM_PTR(&subsystem_info_obj) },
};
STATIC MP_DEFINE_CONST_DICT(mp_module_subsystem_globals, mp_module_subsystem_globals_table);

const mp_obj_module_t mp_module_subsystem = {
   
    .base = {
    &mp_type_module },
    .globals = (mp_obj_dict_t *)&mp_module_subsystem_globals,
};

MP_REGISTER_MODULE(MP_QSTR_subsystem, mp_module_subsystem);

#endif

以上实现包括与模块相关的所有函数的定义,并将这些函数添加到mp_module_subsystem_globals_table中的模块全局表中。它还通过mp_module_subsystem创建了模块对象。然后通过MP_REGISTER_MODULE宏向系统更广泛的注册模块。

构建并运行修改后的MicroPython后,模块就可以导入了:

>>> import subsystem
>>> subsystem.info()
42
>>>

目前,info()函数只返回一个数字,但可以扩展到任何功能。同样,这个新模块还可以添加更多的函数。

相关推荐

  1. MicroPython核心实现一个模块

    2024-02-03 19:14:01       36 阅读
  2. MicroPython核心:编译器

    2024-02-03 19:14:01       48 阅读
  3. MicroPython核心:用C扩展MicroPython

    2024-02-03 19:14:01       36 阅读
  4. MicroPython核心:字符串驻留(String interning)

    2024-02-03 19:14:01       31 阅读
  5. MicroPython核心(1):源码获取、编译构建

    2024-02-03 19:14:01       34 阅读
  6. c++实现一个日志模块

    2024-02-03 19:14:01       10 阅读

最近更新

  1. Matlab 使用

    2024-02-03 19:14:01       0 阅读
  2. AI学习指南机器学习篇-层次聚类原理

    2024-02-03 19:14:01       0 阅读
  3. k8s-第一节-minikube

    2024-02-03 19:14:01       1 阅读
  4. 基于gunicorn+flask+docker模型高并发部署

    2024-02-03 19:14:01       1 阅读
  5. 数据无忧:Ubuntu 系统迁移备份全指南

    2024-02-03 19:14:01       1 阅读
  6. 3.配置MkDocs

    2024-02-03 19:14:01       1 阅读
  7. AI学习指南机器学习篇-层次聚类距离度量方法

    2024-02-03 19:14:01       1 阅读
  8. 中介子方程五十

    2024-02-03 19:14:01       1 阅读

热门阅读

  1. 网安面试宝典

    2024-02-03 19:14:01       33 阅读
  2. 【数据结构】 - 队列 & 栈

    2024-02-03 19:14:01       27 阅读
  3. 力扣202-快乐数

    2024-02-03 19:14:01       41 阅读
  4. 力扣反转两次的数字

    2024-02-03 19:14:01       30 阅读
  5. leetcode-用栈实现队列

    2024-02-03 19:14:01       34 阅读
  6. Unity DOTween插件常用方法(一)

    2024-02-03 19:14:01       31 阅读
  7. MySQL进阶之触发器

    2024-02-03 19:14:01       27 阅读
  8. mysql b+搜索的算法次数的计算

    2024-02-03 19:14:01       31 阅读