定义方法的步骤

定义打印的方法

定义函数

其中括号内不写入参数,表示无参数的方法,引入该方法后,直接打印 “Test function”

在 MicroPython 中,使用 mp_obj_t 类型来表示 Python 对象,因此 lv_print 函数返回的是一个 mp_obj_t 类型的对象。

// 1. 定义 C 方法
STATIC mp_obj_t lv_print(){
    printf("Test function \n");

    return mp_const_none;   // 表示 Micropython 中不返回
}

 转换为micripython的方法对象

MP_DEFINE_CONST_FUN_OBJ_0 是 MicroPython 提供的宏定义,用于定义一个不带参数的 C 函数对象,其语法为:

// 2. 转换成 Micropython 方法对象
MP_DEFINE_CONST_FUN_OBJ_0(lv_print_obj, lv_print);

其中,name 是定义的函数对象的名称,func 是该函数对象对应的 C 函数名。

因此,MP_DEFINE_CONST_FUN_OBJ_0(lv_print_obj, lv_print) 定义了一个名为 lv_print_obj 的函数对象,它对应的 C 函数名为 lv_print,并且该函数对象不带参数。

 

 将定义的方法加到字典中

// 1. 创建模块字典 MP_QSTR_ __name__
// 方法定义的3. 加入到字典中
  STATIC const mp_rom_map_elem_t lvgl_globals_table[] = {
  { MP_ROM_QSTR(MP_QSTR_print), MP_ROM_PTR(&lv_print_obj) },          // 无参数方法
{
// 2. 将元素数组转换成字典对象
STATIC MP_DEFINE_CONST_DICT(lvgl_globals, lvgl_globals_table);          // 转换成字典对象

// 3. 定义模块
const mp_obj_module_t mp_mod_lvgl = {
    .base = { &mp_type_module },                    // 类型指向(模块的类型恒定为 &mp_type_module)
    .globals = (mp_obj_dict_t *)&lvgl_globals,      // 指向字典
};

// 4. 注册模块到系统
MP_REGISTER_MODULE(MP_QSTR_lvgl, mp_mod_lvgl);

定义打印内容的方法

STATIC mp_obj_t lv_hello(mp_obj_t name){
    const char * _name = mp_obj_str_get_str(name);
    

    printf("hello %s\n", _name);
    return mp_const_none; 
}
MP_DEFINE_CONST_FUN_OBJ_1(lv_hello_obj, lv_hello);
STATIC const mp_rom_map_elem_t lvgl_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_hello), MP_ROM_PTR(&lv_hello_obj) },  
}

与上述步骤大同小异,只是在第一部分的方法定义的内容是进行了扩充:

这段代码是定义了一个名为 lv_hello 的函数,它接受一个参数 name,并将其转换为 C 字符串类型后打印 "hello" 和参数值。最后返回 mp_const_none 对象。

在函数 lv_hello 中,使用了 MicroPython 提供的 mp_obj_str_get_str 函数来将参数 name 转换为 C 字符串类型。该函数返回一个指向参数字符串的指针。

MP_DEFINE_CONST_FUN_OBJ_1 宏定义用于定义一个带有一个参数的 C 函数对象,其语法为:

MP_DEFINE_CONST_FUN_OBJ_1(name, func)

 

其中,name 是定义的函数对象的名称,func 是该函数对象对应的 C 函数名。

因此,MP_DEFINE_CONST_FUN_OBJ_1(lv_hello_obj, lv_hello) 定义了一个名为 lv_hello_obj 的函数对象,它对应的 C 函数名为 lv_hello,并且该函数对象带有一个参数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值