micropyton源码-添加C扩展类模块(1)

本文详细介绍了如何在micropython中,以mimxrt模板为基础,自顶向下地添加Pin模块,包括其在内核中的注册过程和模块之间的关联。重点讲解了machine_pin_type的定义和在machine、machine_module以及mp_builtin_module_map中的嵌套关系。
摘要由CSDN通过智能技术生成

Introduction
在前文《为micropython添加模块(2)-类模块》中,我按照源代码排列的顺序,大体阅读了micropython添加C扩展模块的编程方式及其源代码。在通读micropython源码之后,我认为使用自顶向下的方式阅读和描述这部分更有助于开发者理解和编程。经年之前,我对micropython中用引脚创建引脚的方式百思不得其解,但对这种用法觉得比较有趣,此次再阅读代码,颇有一些收获,在此也一并做些记录,同时也可作为开发指南参考。

本文以mimxrt的port为参考模板,添加一个Pin模块,并撰写在mm32f3270上的Pin模块。

注意: 本文同前文讲述内容和对象相同,只是换了一个思路,加了一些心得而已,也考虑了micropython版本迭代的一些更新。

在python内核中注册machine模块包含的Pin模块
本节解释Pin作为machine的子模块,建立在代码中用“machine.Pin”的引用关系。

从ports/mimxrt/machine_pin.c文件开始说起。这个文件是为了实现Pin模块。 Pin模块底层的细节等下再看,但我们知道了整个源文件就是为了创建这一个machine_pin_type对象
 


const mp_obj_type_t machine_pin_type = {
    {&mp_type_type},
    .name = MP_QSTR_Pin,
    .print = machine_pin_obj_print,
    .call = machine_pin_obj_call,
    .make_new = mp_pin_make_new,
    .locals_dict = (mp_obj_dict_t *)&machine_pin_locals_dict,
};

machine_pin_type这个实例被包含在machine模块中,见同目录下的modmachine.c文件中:


STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
    { MP_ROM_QSTR(MP_QSTR___name__),            MP_ROM_QSTR(MP_QSTR_umachine) },
    { MP_ROM_QSTR(MP_QSTR_reset),               MP_ROM_PTR(&ma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值