上一篇已经创建了一个machine的模块并实现了函数,按照这个方式可以将引脚、串口、定时器等所有外设的功能都添加到这个模块里面。但是,这么多的外设,每个外设还有不少的操作函数,全部一起加到模块里,使用起来非常的不方便。MicroPython支持将一个class添加到模块里,因此我们可以将每个外设设计成一个单独的class,外设的操作作为class的method,这样添加到模块里,调用时就比较便捷了。本文以LED为例进行说明。
classes
跟模块类似,类也是一个c结构体,只是跟模块的字段不完全一样而已。
STATIC const mp_rom_map_elem_t led_locals_dict_table[] = {
};
STATIC MP_DEFINE_CONST_DICT(led_locals_dict, led_locals_dict_table);
const mp_obj_type_t pyb_led_type = {
{&mp_type_type},
.name = MP_QSTR_LED,
.print = led_obj_print,
.make_new = led_obj_make_new,
.locals_dict = (mp_obj_dict_t *)&led_locals_dict,
};
可以看到,一个类需要两个函数:make_new用于构造类并分配类需要的所有内存空间,print用于打印该类的对象。
// this is the actual C-structure for our new object
type