MicroPython开发之--用C添加接口(给module添加function)

 

       上一篇我们已经给micropython添加好了一个自定义的module:modtest,但是没有实现任何功能,这一篇就讲讲如何给modtest添加function功能。

       函数是分为有参数和无参数的,那么我们就来添加两个function,一个没有参数的,一个有一个参数的。

第一种,先来添加无参数的函数,我们给他起名为test0(这个名字是最终在python层面显示的)。

下面我们先看代码再解释:

       所有我们和python对接的函数都要是返回mp_obj_t类型的 ,如果该函数实际不需要返回任何数据我们最后就调用return mp_const_none;

       比较重要的一条就是这个了STATIC const MP_DEFINE_CONST_FUN_OBJ_0(modtest_obj_test0,modtest_test0);  micropython针对不同参数类型提供了好几个这种类似的宏定义。这里不深做解释,我们是用的OBJ_0就是代表改函数是0个参数的。

最后一步就是把我们定义的function注册进modtest_globals_table中去,和前面注册module类型类似,MP_QSTR_test0   该名称中的test0会作为我们在pythonfunction显示的名字。

这样就算添加好了,编译烧录看结果:

  

可以看到python层我们调用 modtest.test0()就可以执行到我们函数中打印的内容。

这里还有个坑需要注意一下,在接口函数里面调用printf的时候,最后的’\n’要加上,要不然打印不出来。

 

第二种:添加一个带有一个参数的函数接口

有了前面的例子,添加带有一个接口的函数就更容易理解了,可以重点看和不带参数的区别,先上代码:

       看起来是不是大同小异,定义的函数我们添加了一个mp_obj_t 类型的参数,实际上mp_obj_t 就是一个空指针,这样他可以用来传递任何类型,不管是整数,字符串都可以。具体是什么类型我们在函数内部用mp提供的对应的方法把他提取出来,比如这里认为传进来的是一个int型的,就是用mp_obj_get_int(data) 来提取出来整型。当然micopython还提供了很多其他类似的,需要注意一下是提取字符串的稍微形式上看起来有点区别:           mp_obj_str_get_str(arg)  。

       接下来就是使用的宏定义不一样,这个是一个参数的就用MP_DEFINE_CONST_FUN_OBJ_1  (官方一共提供了七种接口,请自行慢慢研究)

后面注册的方式是一样的。好了,下面继续看编译烧录结果:

可以看到我们调用modtest.test1(100)已经成功把参数100传递了进去。

接下来是预告时间:下一篇会讲在module中添加type和在type中添加function的方法步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Lanson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值