Micropython 扩展C模块<HelloWorld>

开发环境

  • MCU:Pico1(无wifi版)
  • 使用固件:自编译版本
  • 开发环境:MacBook Pro Sonoma 14.5
  • 开发工具:Thonny 4.1.6
  • 开发语言:MicroPython 1.24

执行示例

  1. 在github上获取micropython,我使用的1.24版本(开发版生成固件暂时有问题)
  2. 可以在找到“micropython/examples/usercmodule/cexample”文件夹,这是官方给的一个示例,包括三个文件“examplemodule.c”、“micropython.cmake”、“micropython.mk”,可以直接执行如下指令,即可将该模块加入到固件中,就可以直接使用了。
# 在micropython目录下执行
make -j -C ports/rp2 BOARD=PICO USER_C_MODULES=../../examples/usercmodule/cexample/micropython.cmake

改造学习

  • 在micropython同级目录创建了一个myModules文件夹,再创建了一个myHello文件夹,目录结构如下:
-micropython
-MyModules
--myhello
---hello.c
---micropython.cmake
---micropython.mk
  • micropython.mk文件初探
# 设置目录
CHELLO_MOD_DIR := $(USERMOD_DIR)# 将咱们的C模块加入到 SRC_USERMOD中.
SRC_USERMOD += $(CHELLO_MOD_DIR)/hello.c
  • micropython.cmake文件初探
# 创建我们的C模块库
add_library(usermod_hello INTERFACE)# 把我们的模块加入到库中
target_sources(usermod_hello INTERFACE${CMAKE_CURRENT_LIST_DIR}/hello.c
)# 把我们的模块加入到目录中
target_include_directories(usermod_hello INTERFACE${CMAKE_CURRENT_LIST_DIR}
)# 把我们的模块链接到库中
target_link_libraries(usermod INTERFACE usermod_hello)
  • hello.c文件初探
// 需要用到的包
#include "py/runtime.h"
#include <string.h>// 这是原来例子里带的一个加法函数
static mp_obj_t add_ints(mp_obj_t a_obj, mp_obj_t b_obj) {int a = mp_obj_get_int(a_obj);int b = mp_obj_get_int(b_obj);return mp_obj_new_int(a + b);
}
// 和上边这个函数是配套的,需要输入两个参数所以函数名带了个“2”
static MP_DEFINE_CONST_FUN_OBJ_2(add_ints_obj, add_ints);// 这是我新增的一个函数,实现返回一个字符串的操作
static mp_obj_t hello() {char str[] = "Hello, World!";return mp_obj_new_str(str, strlen(str));
}
// 和上边这个函数是配套的,不需要输入参数所以函数名带了个“0”
static MP_DEFINE_CONST_FUN_OBJ_0(hello_obj, hello);// 配置模块属性,这里需要注意xxhello,将会是我们在python中调用函数时需要import的名字
static const mp_rom_map_elem_t example_module_globals_table[] = {{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_xxhello) },{ MP_ROM_QSTR(MP_QSTR_add_ints), MP_ROM_PTR(&add_ints_obj) },{ MP_ROM_QSTR(MP_QSTR_hello), MP_ROM_PTR(&hello_obj) },
};
static MP_DEFINE_CONST_DICT(example_module_globals, example_module_globals_table);// 注意里边的元素都是环环相扣的引用
const mp_obj_module_t example_user_cmodule = {.base = { &mp_type_module },.globals = (mp_obj_dict_t *)&example_module_globals,
};// 注意里边的元素都是环环相扣的引用
MP_REGISTER_MODULE(MP_QSTR_xxhello, example_user_cmodule);

执行测试

  • 重新打包编译烧录并执行代码,执行如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并查集基础

abstract 并查集&#xff08;Union-Find Set&#xff09;是一种数据结构&#xff0c;主要用于处理动态连通性问题&#xff08;Dynamic Connectivity Problem&#xff09;&#xff0c;例如在图论中判断两点是否属于同一个连通分量&#xff0c;以及动态地合并集合。 它广泛应用…

CloudberryDB(一)安装部署多节点分布式数据库集群

CloudberryDB&#xff1a; 一个 Greenplum Database 分布式数据库开源版本的衍生项目&#xff0c; 针对开源 Greenplum Database 优化的地方&#xff0c; CloudberryDB制定了路线图&#xff08;https://github.com/orgs/cloudberrydb/discussions/369&#xff09;并在逐步改…

解决Logitech G hub 无法进入一直转圈的方案(2024.12)

如果你不是最新版本无法加载尝试以下方案&#xff1a;删除AppData 文件夹下的logihub文件夹 具体路径&#xff1a;用户名根据实际你的请情况修改 C:\Users\Administrator\AppData\Local 如果你有通过lua编译脚本&#xff0c;记得备份&#xff01;&#xff01; ↓如果你是最新…

数据库范式与反范式化:如何权衡性能与数据一致性

目录 1. 什么是数据库范式&#xff08;Normalization&#xff09;&#xff1f;第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式&#xff08;3NF&#xff09; 2. 什么是反范式化&#xff08;Denormalization&#xff09;&#xff1f;3. 反范式…

Nmap使用总结

0X00 背景 nmap是测试中常用的网络探测工具&#xff0c;但是这回简单的操作&#xff0c;一直了解不深入&#xff0c;现在深入的了解和学习一下。 在文章结构上&#xff0c;我把平时常用的内容提前了&#xff0c;以便再次查阅的时候&#xff0c;比较方便。 0X01 安装 nmap可…

【记录49】vue2 vue-office在线预览 docx、pdf、excel文档

vue2 在线预览 docx、pdf、excel文档 docx npm install vue-office/docx vue-demi0.14.6 指定版本 npm install vue-office/docx vue-demi <template><VueOfficeDocx :src"pdf" style"height: 100vh;" rendere"rendereHandler" error&…

MVC模式的理解和实践

在软件开发中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;模式是一种经典的设计模式&#xff0c;特别适用于构建用户界面复杂的Web应用程序。MVC通过将应用程序的业务逻辑、数据显示和用户交互分离&#xff0c;使代码结构更加清晰&#xff0c;易于维护和扩展…

[A-22]ARMv8/v9-SMMU多级页表架构

ver0.1 [看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章] 前言 前文我们对SMMU的系统架构和基本功能做了简要的介绍,现在大家大致对SMMU在基于ARM体系的系统架构下的总线位置和产品形态有了基本的了解。这里我们还是简单做个前情回顾,从总线架构角度看…

【UE5 “RuntimeLoadFbx”插件】运行时加载FBX模型

前言 为了解决在Runtime时能够直接根据FBX模型路径直接加载FBX的问题&#xff0c;推荐一款名为“RuntimeLoadFBX”的插件。 用法 插件用法如下&#xff0c;只需要指定fbx的地址就可以在场景中生成Actor模型 通过指定输入参数“Cal Collision”来设置FBX模型的碰撞 还可以通过…

(11)(3.1) ESC接地和接线注意事项

文章目录 前言 1 归纳 2 电容式 3 电阻 前言 ESC 接地问题由 3 种形式的 ESC 信号/耦合问题组成&#xff0c;即电阻、电容和电感。在制造飞机时&#xff0c;应考虑这三个因素。 1 归纳 这是电流突然变化导致系统中出现大电压尖峰的趋势。电源系统中的电感主要是由 ESC 和…

精品基于Python实现的微信小程序校园导航系统-微信小程序

[含文档PPT源码等] [包运行成功永久免费答疑辅导] 《django微信小程序校园导航系统》该项目采用技术Python的django框架、mysql数据库 &#xff0c;项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等 软件开发环境及开发工具&#xf…

Rstudio-server的安装、配置、维护

一、安装Rstudio-server (1)安装R语言&#xff1a; sudo apt install r-base # 如果没有管理员权限无法操作 # 这样装上R默认在/usr/bin/R其实基本上的流程都可以参考posit的官网&#xff08;也就是Rstudio的官网&#xff09;&#xff1a; https://posit.co/download/rstudio…

Python序列的应用(八):元组、字典

前言&#xff1a;在Python编程语言中&#xff0c;序列是一种非常重要的数据结构&#xff0c;它允许我们存储和操作有序的数据集合。在前几期的内容中&#xff0c;我们已经探讨了列表&#xff08;List&#xff09;和集合&#xff08;Set&#xff09;这两种序列的应用&#xff0c…

OpenCV 功能函数介绍

一&#xff0c; 二值化函数 功能&#xff1a; 用于对图像进行二值化处理 参数&#xff1a; cv2.threshold(输入你的图像所对应的灰度图&#xff0c; 阈值&#xff1a;是浮点还是整数取决予图像的数据类型 最大值;高于阈值的像素值&#xff0c; 阈值类型&#xff1a;cv2.THR…

【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)

发现了一个使用Selenium的find_element模块&#xff0c;快速获取文字和表格的方法&#xff0c;很实在&#xff0c;以后爬网的时候&#xff0c;就不用beautifulSoup 和 pandas的read_html 混起来用了&#xff01; 文字部分&#xff1a;实现网络节点下&#xff0c;某个节点下的其…

APP渗透测试记录(一、Android应用基本构造)

Android应用基本构造 雷电模拟机进入 adb shell# 如果不是root权限 su一下 su 1.了解APK文件 安卓应用的扩展名为.apk(Android Application Package),它是一个包含多个文件和文件夹的数据存档文件。 1.1 apk文件解压后的目录结构 AndroidManifest.xml:包含应用的大部分…

【AI知识】有监督学习之回归任务(附线性回归代码及可视化)

1. 回归的基本概念 在机器学习的有监督学习中&#xff0c;回归&#xff08;Regression&#xff09;是一种常见的任务&#xff0c;它的目标是通过观察数据来建立一个模型&#xff0c;用一个或多个自变量来预测因变量的值。 回归分析通常用于&#xff1a; a.预测&#xff0c;基于…

fastadmin批量压缩下载远程视频文件

后端代码 // 批量下载并压缩 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(记录不存在);}$arr [];$tempFiles []; // 用来存储临时下载的视频文…

边缘计算+人工智能:让设备更聪明的秘密

引言&#xff1a;日常生活中的“智能”设备 你是否发现&#xff0c;身边的设备正变得越来越“聪明”&#xff1f; 早上醒来时&#xff0c;智能音箱已经根据你的日程播放舒缓音乐&#xff1b;走进厨房&#xff0c;智能冰箱提醒你今天的食材库存&#xff1b;而在城市道路上&…

JVM 双亲委派模型以及垃圾回收机制

目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程&#xff0c;其实就是一个 JVM 虚拟机。 而进程是…