micropython运行机制_在 MicroPython 中调用 ujson 内置模块的功能的实例,讲点 MicroPython C 层面的解释执行、异常捕获、内存回收、内置对象等内容。...

本文介绍了如何在 MicroPython 中调用 ujson 模块,并深入探讨了 MicroPython 的解释执行机制、bytecode 结构、C 函数调用、异常处理、内存回收以及如何在 C 层面操作 dict 对象。通过实例展示了如何在 C 语言中调用 json.loads() 方法,以及如何处理异常和内存管理。文章适合对 MicroPython 有一定基础的读者,有助于理解 MicroPython 内部工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oh!!!想起来了,刚好可以写一篇关于深度使用 micropython 的文章!会有一些额外的知识讲解哒。

起因

这次的起因是需要一个 C 与 Python 层面共用的配置模块,就是想在 micropython 中准备一个配置项的功能,刚好也讨论到了不妨直接使用 ujson 的模块功能。(ujson 就是 json),然后这个模块的 Python 代码通常是这样的。

#!/usr/bin/python3

import json

# Python 字典类型转换为 JSON 对象

data1 = {

'no' : 1,

'name' : 'Runoob',

'url' : 'http://www.runoob.com'

}

json_str = json.dumps(data1)

print ("Python 原始数据:", repr(data1))

print ("JSON 对象:", json_str)

# 将 JSON 对象转换为 Python 字典

data2 = json.loads(json_str)

print ("data2['name']: ", data2['name'])

print ("data2['url']: ", data2['url'])

这个代码,在 MicroPython 中本来就实现了,也同样可以直接使用。

但有个问题,我要如何在 C 语言的层面调用它呢?我 Python 代码的层面和 C 代码的层面,它们彼此间是如何共通的呢?

这个就涉及到对 Python 解释器的理解了,刚好上次介绍了 MicroPython 后,说好要给源码分析的一直没给,那趁着这次机会,稍微提及提及。

理解 MicroPython 的 bytecode (bc) 结构

事实上,很多人都理不清 Python 的解释执行的机制,但实际上我们只需要理清几个节点就可以帮助我们构造整个 MicroPython 的架构了。

说点 micropython 的接口调用关系来说明内部的调用关系,但事实上在调用各类模块的过程中是动态加载到内存的,并非直接的函数调用过程,而是动态的从 globals dict 中提取模块的指针和参数进行执行,这个部分就不能在静态分析中表达出来了。

(以后把图放上来,现在生成的图基本没法看,诺,就跟下面这个一样)

3103ca421501d56b1f6c930f05b5a172.png

我还是简单画个图说明一下吧。

df10dbd91006966cb2a920115395fa79.png

这是第一层,当我们使用 execute_from_lexer 进行执行的载体可能有 file \ repl \ str 这三类输入源,mp_parse_compile_execute 进行 Python 代码的解释(Python)、编译(bytecode)、执行(bytecode)。

其中,我们平时所认知的层次只在解释这一层,这次我就多说一点了。

1aa9cca67656dae2bfd0df37aba8f984.png

在代码中是这样的关系。

f981e2ea73e4f26cd9fdf0c482e7b4cf.png

基本上你看到这里已经算是知道一点基础的内容了,现在我们直接开始看代码。

MicroPython 中的 C 函数关系

自上次介绍添加 C 层面的看门狗模块,我就没有再提及和 MicroPython 核心有关的内容,这里不讲解 QSTR 的编译生成,我假设你已经具备一些基本的 MicroPython 基础。

我们要知道 Python 层面可以实现的功能,在 C 层面一定也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值