MicroPython开发之--用C添加接口(框架介绍)

 

       MicroPython留给用户的是python的接口,语法规则也是遵循python的。有时候我们想自己添加自己的python接口。有两种方法:第一种在官方的python接口之上直接使用python的语法写自己的python脚本来实现相应的功能,这种方式比较简便,无需自己编译MicroPython的代码固件,但是缺点就是可扩展性有限,有些偏底层的功能单纯用python接口无法完成;那么就还有第二种自己基于MicroPython的代码用C语言写底层的实现,然后留出来python的接口。我会写几篇文章来深入聊一下第二种方法,用c语言扩展MicroPython的接口。 

       首先从代码上看,添加自己的接口只用关注micropython项目下的ports文件夹,github地址在这里:https://github.com/micropython/micropython/tree/master/ports   这个文件夹下面可以看到有stm32、esp32 、esp8266、nrf等平台。你使用的是哪种平台,只用去关注对应的文件夹里面的内容就可以了。当然如果自己想把MicroPython移植到自己的平台可以在ports下新建自己的平台文件夹,然后移植对应的代码,但是这里不做探讨, 因为我也还没有研究到那么深入去。 

       我自己是基于esp32 来添加接口的。所以就只关注ports/esp32文件夹下的代码就可以了。可以看到里面很多文件,我们自己要添加c语言接口要修改哪些文件?c语言的函数如何和python语言对接?这在后面的文章我会慢慢写。这篇文章先聊聊整个框架,我们把需要实现的类型搞明白,添加一个接口就只是照葫芦画瓢而已。

       我自己总结了一张图,可以清晰的看出来我们实现的接口的分类:

MicroPython开发之--用C添加接口(框架介绍)_第1张图片

       从图中可以看出来我们实现的接口分为三大类:module、type、function。这几类的关系也很明显可以看得出来。module在python层是一个比较大的类,比如esp32 里面的machine,在module下面会有function和type两种类型,machine.Pin  和machine.UART  都属于type类型。在type类的下面就是具体的函数了,比如Pin.value() 用来设定io的高低电平。

       在运行的有MicroPython的esp32串口REPL交互中,可以输入type(machine)    type(machine.Pin)    type(machine.Pin.value) 分别查看下他们的类型,如下图所示:

MicroPython开发之--用C添加接口(框架介绍)_第2张图片

       有了这个分类,之后我们实现的c语言接口就只用把这三种类型先进行划分,再用c语言套用对应的实现代码就可以了。后面文章我会讲用c代码如何定义module、type和function以及python代码中的函数参数如何和c语言函数的参数对应起来。

(喜欢MicroPython的开发就点击关注我,后续会慢慢分享)

你可能感兴趣的:(MicroPython)