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.