上一篇已经讲了microPython的大致框架,下面我们来试着添加一个module。
定义一个module相对来说比较简单,下面分几个步骤详细说明一下:
第一步:在ports/esp32文件夹下新建一个文件modtest.c (如果你是在其他平台而非esp32 请在对应文件夹下新建文件)
下面打开该文件我们输入以下内容,来实现一个最简单的module:
可以看到modtest.c主要有三个部分,这三个部分是添加一个module必须要有的,可以打开官方的其他module文件,都是遵循这样的一个模型
- mp_rom_map_elem_t modtest_globals_table[];
- MP_DEFINE_CONST_DICT(mp_module_modtest_globals, modtest_globals_table);
- mp_obj_module_t mp_module_modtest;
这样一个简单的module已经定义好了。但是我们现在也仅仅是一个单独的c文件,还没有添加到编译文件里面,外部现在也没办法调用它。
第二步:毫无意外,要把module.c添加到Makefile文件中去
打开Makefile找到如下脚本的地方,按照格式添加modtest.c就可以了:
第三步:我们要把我们定义的module注册到micropython中去,这个是在mpconfigport.h文件中修改
找到MICROPY_PORT_BUILTIN_MODULES 定义的地方按照格式添加我们定义的module:
这里实际上需要我们添加的代码也就两行,第一行不用解释了吧,应用外部定义的结构体。第二个需要解释一下下,MP_QSTR_modtest这个名字要改成自定义的,MP_QSTR_这个一定要保留,后面的modtest就是在python中显示的module名字。
make编译一下,再使用make deploy烧录进esp32。执行一下代码,如下图所示可以看到我们添加的modtest 模块已经成功了,只是现在这个module内部没有添加任何type和function,只能看看而已。下一篇我会讲下如何在module中添加function