Mengimplementasikan Modul#
Bab ini menjelaskan cara mengimplementasikan modul inti di MicroPython. Modul MicroPython dapat berupa salah satu dari berikut:
Modul built-in: Modul umum yang merupakan bagian dari repositori MicroPython.
Modul pengguna: Modul yang berguna untuk proyek spesifik Anda yang Anda pelihara di repositori Anda sendiri atau basis kode privat.
Modul dinamis: Modul yang dapat di-deploy dan diimpor saat runtime ke perangkat Anda.
Modul di MicroPython dapat diimplementasikan di salah satu lokasi berikut:
py/: Pustaka inti yang mencerminkan fungsionalitas inti CPython.
extmod/: Modul khusus CPython atau MicroPython yang dibagikan di berbagai port.
ports/<port>/: Modul khusus port.
Catatan
Bab ini menjelaskan modul yang diimplementasikan di py/ atau modul inti. Lihat Memperluas MicroPython dalam C untuk detail tentang mengimplementasikan modul eksternal. Untuk detail tentang modul khusus port, lihat Melakukan Porting MicroPython.
Mengimplementasikan modul inti#
Seperti CPython, MicroPython memiliki modul builtin inti yang dapat diakses melalui pernyataan import. Contohnya adalah modul gc yang dibahas di Manajemen Memori.
>>> import gc
>>> gc.enable()
>>>
MicroPython memiliki beberapa modul standar/inti builtin lainnya seperti io, array, dll. Menambahkan modul inti baru melibatkan beberapa modifikasi.
Pertama, buat file C di direktori py/. Dalam contoh ini kita menambahkan modul baru hipotetis subsystem di file 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
Implementasi mencakup definisi semua fungsi yang terkait dengan modul dan menambahkan fungsi ke tabel global modul di mp_module_subsystem_globals_table. Ini juga membuat objek modul dengan mp_module_subsystem. Modul kemudian didaftarkan dengan sistem yang lebih luas melalui makro MP_REGISTER_MODULE.
Setelah membangun dan menjalankan MicroPython yang telah dimodifikasi, modul sekarang harus dapat diimpor:
>>> import subsystem
>>> subsystem.info()
42
>>>
Fungsi info() kami saat ini hanya mengembalikan satu angka tetapi dapat diperluas untuk melakukan apa saja. Demikian pula, lebih banyak fungsi dapat ditambahkan ke modul baru ini.