Bir Modülün Uygulanması#
Bu bölüm, MicroPython’da bir çekirdek modülün nasıl uygulanacağını ayrıntılı olarak açıklar. MicroPython modülleri aşağıdakilerden biri olabilir:
Yerleşik modül: MicroPython deposunun bir parçası olan genel bir modül.
Kullanıcı modülü: Kendi deponuzda veya özel kod tabanınızda tuttuğunuz, belirli projeniz için yararlı olan bir modül.
Dinamik modül: Çalışma zamanında cihazınıza dağıtılabilen ve içe aktarılabilen bir modül.
MicroPython’da bir modül aşağıdaki konumlardan birinde uygulanabilir:
py/: Çekirdek CPython işlevselliğini yansıtan bir çekirdek kütüphane.
extmod/: Birden fazla port arasında paylaşılan, CPython’a veya MicroPython’a özgü bir modül.
ports/<port>/: Porta özgü bir modül.
Not
Bu bölüm, py/ içinde uygulanan modülleri veya çekirdek modülleri açıklar. Harici bir modülün uygulanmasına ilişkin ayrıntılar için MicroPython’u C ile Genişletme bölümüne bakın. Porta özgü modüllere ilişkin ayrıntılar için MicroPython’u Taşıma bölümüne bakın.
Bir çekirdek modülün uygulanması#
CPython gibi, MicroPython’un da import deyimleri aracılığıyla erişilebilen çekirdek yerleşik modülleri vardır. Buna bir örnek, Bellek Yönetimi bölümünde ele alınan gc modülüdür.
>>> import gc
>>> gc.enable()
>>>
MicroPython’un io, array vb. gibi başka birkaç yerleşik standart/çekirdek modülü daha vardır. Yeni bir çekirdek modül eklemek birkaç değişiklik gerektirir.
İlk olarak, py/ dizininde C dosyasını oluşturun. Bu örnekte, modsubsystem.c dosyasında varsayımsal yeni bir subsystem modülü ekliyoruz:
#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
Uygulama, modülle ilgili tüm fonksiyonların bir tanımını içerir ve fonksiyonları modülün mp_module_subsystem_globals_table içindeki global tablosuna ekler. Ayrıca mp_module_subsystem ile modül nesnesini oluşturur. Modül daha sonra MP_REGISTER_MODULE makrosu aracılığıyla daha geniş sisteme kaydedilir.
Değiştirilmiş MicroPython derlenip çalıştırıldıktan sonra, modül artık içe aktarılabilir olmalıdır:
>>> import subsystem
>>> subsystem.info()
42
>>>
info() fonksiyonumuz şu anda yalnızca tek bir sayı döndürüyor, ancak herhangi bir şey yapacak şekilde genişletilebilir. Benzer şekilde, bu yeni modüle daha fazla fonksiyon eklenebilir.