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语言对接?这在后面的文章我会慢慢写。这篇文章先聊聊整个框架,我们把需要实现的类型搞明白,添加一个接口就只是照葫芦画瓢而已。
我自己总结了一张图,可以清晰的看出来我们实现的接口的分类:
从图中可以看出来我们实现的接口分为三大类: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) 分别查看下他们的类型,如下图所示:
有了这个分类,之后我们实现的c语言接口就只用把这三种类型先进行划分,再用c语言套用对应的实现代码就可以了。后面文章我会讲用c代码如何定义module、type和function以及python代码中的函数参数如何和c语言函数的参数对应起来。
(喜欢MicroPython的开发就点击关注我,后续会慢慢分享)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于 JavaScript 错误处理的最完整指南(下半部)
- 踩坑记录 | Android 逆向之如何处理 Kali Nat 模式无法上网?
- gson 替换 fastjson 引发的线上问题分析
- P1003 铺地毯
- 花10分钟写一个 Python 脚本,搞定了初中老师一个下午的工作
- 微信小程序导航栏页面滑动切换
- SwiftUI:本地通知
- 领导大怒:建表不加主键的都是耍流氓
- (美团)巧用数组下标,轻轻松松找出所有元素
- Docker容器网络-基础篇
- 【Java面试总结】常用框架之Spring
- 【学以致用】C++操作Redis
- 商业鬼才教你 工厂方法 && 抽象工厂 模式
- redis学习(十四)
- 用动态路由打通各Virtual L2网络 By HKL,