• 【MicroPython】生成模块表py\objmodule.c中结构mp_rom_map_elem_t的脚本 py\makemoduledefs.py


    • 查找文件中的模块注册标记MP_REGISTER_MODULE
    pattern = re.compile(r"[\n;]\s*MP_REGISTER_MODULE\((.*?),\s*(.*?),\s*(.*?)\);", flags=re.DOTALL)
    
    def find_module_registrations(c_file):
        """Find any MP_REGISTER_MODULE definitions in the provided c file.
    
        :param str c_file: path to c file to check
        :return: List[(module_name, obj_module, enabled_define)]
        """
        global pattern
    
        if c_file is None:
            # No c file to match the object file, skip
            return set()
    
        with io.open(c_file, encoding="utf-8") as c_file_obj:
            return set(re.findall(pattern, c_file_obj.read()))
    • 生成模块表
    def generate_module_table_header(modules):
        """Generate header with module table entries for builtin modules.
    
        :param List[(module_name, obj_module, enabled_define)] modules: module defs
        :return: None
        """
    
        # Print header file for all external modules.
        mod_defs = []
        print("// Automatically generated by makemoduledefs.py.\n")
        for module_name, obj_module, enabled_define in modules:
            mod_def = "MODULE_DEF_{}".format(module_name.upper())
            mod_defs.append(mod_def)
            print(
                (
                    "#if ({enabled_define})\n"
                    "    extern const struct _mp_obj_module_t {obj_module};\n"
                    "    #define {mod_def} {{ MP_ROM_QSTR({module_name}), MP_ROM_PTR(&{obj_module}) }},\n"
                    "#else\n"
                    "    #define {mod_def}\n"
                    "#endif\n"
                ).format(
                    module_name=module_name,
                    obj_module=obj_module,
                    enabled_define=enabled_define,
                    mod_def=mod_def,
                )
            )
    
        print("\n#define MICROPY_REGISTERED_MODULES \\")
    
        for mod_def in mod_defs:
            print("    {mod_def} \\".format(mod_def=mod_def))
    
        print("// MICROPY_REGISTERED_MODULES")
    • 执行脚本

    $ python py/makemoduledefs.py py/modarray.c

    $ python py/makemoduledefs.py examples/usercmodule/cppexample/examplemodule.c

    • 模块表

  • 相关阅读:
    聊聊Flame Graph(火焰图)的那些事
    Dynamometer:HDFS性能扩展测试工具
    论分布式系统中单一锁控制的优化
    聊聊磁盘数据的损坏
    分级副本存储:一种更具效益成本的数据容错策略
    分布式存储系统中的Data Scrubbing机理
    论一个成熟分布式系统的工具类设计
    聊聊Raft一致性协议以及Apache Ratis
    ListenableFuture的状态同步和原子更新
    2018-9-1-win10-uwp-轻量级-MVVM-框架入门-2.1.5.3199
  • 原文地址:https://www.cnblogs.com/skullboyer/p/16230075.html
Copyright © 2020-2023  润新知