microPython的源码解析之 modmicropython.c

MicroPython 是一种适用于微控制器和其他受限环境的 Python 编程语言的实现。它旨在提供与 Python 3 语言的紧密兼容,同时考虑到内存和计算资源的限制。MicroPython 库是这门语言的核心组成部分,提供了一系列的模块和函数,使得开发者能够在硬件上执行各种任务。
下面将通过系列文章,逐一解读microPython,以便让读者了解掌握microPython的整个核心逻辑.,以便读者可以透过这个Python的最小内核,掌握Python解析器的核心实现逻辑,学习世界上最优秀的源码设计之一.

microPython Python最小内核源码解析
这段代码是 MicroPython 运行时环境的一部分,它定义了 micropython 模块以及其中包含的各种函数和对象。这些函数和对象提供了对 MicroPython 运行时环境的控制和管理,例如内存信息、栈使用情况、垃圾收集器的操作等。

#include <stdio.h>

#include "py/builtin.h" // 包含 MicroPython 内置对象和函数的头文件
#include "py/stackctrl.h" // 包含 MicroPython 栈控制的头文件
#include "py/runtime.h" // 包含 MicroPython 运行时环境的头文件
#include "py/gc.h" // 包含 MicroPython 垃圾收集机制的头文件
#include "py/mphal.h" // 包含 MicroPython 硬件抽象层的头文件

#if MICROPY_PY_MICROPYTHON // 如果定义了 MICROPY_PY_MICROPYTHON,则编译以下代码

// 以下代码是 MicroPython 运行时特有的各种内置函数,
// 它们位于 micropython 模块中

#if MICROPY_ENABLE_COMPILER // 如果启用了编译器支持
static mp_obj_t mp_micropython_opt_level(size_t n_args, const mp_obj_t *args) {
   
    // 用于获取或设置优化级别
    if (n_args == 0) {
   
        // 如果没有参数,则返回当前的优化级别
        return MP_OBJ_NEW_SMALL_INT(MP_STATE_VM(mp_optimise_value));
    } else {
   
        // 如果有参数,则设置优化级别
        MP_STATE_VM(mp_optimise_value) = mp_obj_get_int(args[0]);
        return mp_const_none; // 返回 None 对象
    }
}
static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_micropython_opt_level_obj, 0, 1, mp_micropython_opt_level);
#endif

#if MICROPY_PY_MICROPYTHON_MEM_INFO // 如果定义了 MICROPY_PY_MICROPYTHON_MEM_INFO,则编译以下代码

#if MICROPY_MEM_STATS // 如果启用了内存统计
// 以下函数用于获取内存统计信息

static mp_obj_t mp_micropython_mem_total(void) {
   
    // 返回总共分配的内存大小
    return MP_OBJ_NEW_SMALL_INT(m_get_total_bytes_allocated());
}
static MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_total_obj, mp_micropython_mem_total);

static mp_obj_t mp_micropython_mem_current(void) {
   
    // 返回当前分配的内存大小
    return MP_OBJ_NEW_SMALL_INT(m_get_current_bytes_allocated());
}
static MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_current_obj, mp_micropython_mem_current);

static mp_obj_t mp_micropython_mem_peak(void) {
   
    // 返回内存分配的峰值大小
    return MP_OBJ_NEW_SMALL_INT(m_get_peak_bytes_allocated());
}
static MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_peak_obj, mp_micropython_mem_peak);
#endif

// 用于显示内存信息
mp_obj_t mp_micropython_mem_info(size_t n_args, const mp_obj_t *args) {
   
    (void)args;
    #if MICROPY_MEM_STATS
    // 打印内存统计信息
    mp_printf(&mp_plat_print, "mem: total=" UINT_FMT ", current=" UINT_FMT ", peak=" UINT_FMT "\n",
        (mp_uint_t)m_get_total_bytes_allocated(), (mp_uint_t)m_get_current_bytes_allocated(), (mp_uint_t)m_get_peak_bytes_allocated());
    #endif
    #if MICROPY_STACK_CHECK
    // 打印栈使用情况
    mp_printf(&mp_plat_print, "stack: " UINT_FMT " out of " UINT_FMT "\n",
        mp_stack_usage(), (mp_uint_t)MP_STATE_THREAD(stack_limit));
    #else
    // 打印栈使用情况,不包括栈限制
    mp_printf(&mp_plat_print, "stack: " UINT_FMT "\n", mp_stack_usage());
    #endif
    #if MICROPY_ENABLE_GC
    // 打印垃圾收集器的信息
    gc_dump_info(&mp_plat_print)</
  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

openwin_top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值