为micropython添加模块(1)-全局模块

本文详细介绍了如何按照官方文档使用C语言为MicroPython添加一个全局LED控制模块,包括创建源文件、封装函数、更新Makefile和在mpconfigport.h中注册模块。在实践中遇到问题并解决,最终实现对硬件LED的控制。虽然官方文档存在一些偏差,但通过调试和学习,成功实现了预期功能。

使用官方文档的方式为micropython添加一个全局模块

概述

官方提供的开发指导文档中, 描述了一个最简单的增加模块的样例:

http://docs.micropython.org/en/latest/develop/porting.html#adding-a-module-to-the-port

在本文中, 我分析管官方开发指导文档中的代码撰写流程, 根据自己的理解, 创建一个新的模块. 并试图通过实践, 观察代码的实际工作效果.

在我的样例代码中, 我将要创建一个LED灯的模块, 并包含on()和off()两个函数对应开灯和关灯两个动作。

根据官方描述步骤创建一个led模块

为新模块创建一个源文件

参考官方样例的命名规范, 这里在lpc5500移植项目的目录下创建mod_led.c

PS: 原始的命名范例中没有使用下划线"_"将前缀"mod"单独分隔出来, 但我通过阅读代码发现, 增加下划线的命名方式更符合micropython的命名规范. 实际上, 在micropython的源代码中, 都是使用下划线作为命名单词的分隔符的. 我有点不明白为什么文件的命令没有使用分隔符. 按照我的开发习惯, 在规模比较大的软件项目中, 使用分隔符的命名方式可读性更好, 所以在我自己的练习代码中, 将会使用下划线作为名字之间的分隔符.

在新模块中首先编写最基本的led模块对应底层驱动的三个函数:

  • hw_led_init()
  • hw_led_on()
  • hw_led_off()

目前先做一个最简单的样例, 实现从python到c语言函数的调用. 目前的样例中仅仅传递函数指针, 不传入任何参数, 在后续的文章中将专门探讨传递参数的问题.

逐层封装

毕竟使用了armgcc编译器, 底层的代码还是以C语言方式运行的, 从python到底层的C就是层层调用. 反过来在开发过程中, 准备好底层的C代码之后, 想要在python层面上被识别, 就需要层层封装并注册.

从官方的样例代码中可以看到, 大体上分为三个层次的封装, 对应了三个封装的宏操作:

  • MP_DEFINE_CONST_FUN_OBJ_0. 将函数封装成对象. 在python中, 一切皆是对象.
  • MP_DEFINE_CONST_DICT. 将所有的函数对象封装成一个操作清单.
  • MP_REGISTER_MODULE. 将操作清单和对象绑定在一起, 注册到python系统中.

到目前为止, 完整的mod_led.c源文件内容如下:

/* mod_led.c */
#include "py/runtime.h"

#include "fsl_common.h"
#include "fsl_iocon.h"
#include "fsl_clock.h"
#include "fsl_gpio.h"

/******************************************************************************
 * hardware level functions.
 *****************************************************************************/
void hw_led_init(void)
{
   
   
    CLOCK_EnableClock(kCLOCK_Iocon);
    CLOCK_EnableClock(kCLOCK_Gpio1);

    uint32_t pinmode = IOCON_FUNC0
                     | IOCON_MODE_INACT
                     
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值