MicroPython 是一种适用于微控制器和其他受限环境的 Python 编程语言的实现。它旨在提供与 Python 3 语言的紧密兼容,同时考虑到内存和计算资源的限制。MicroPython 库是这门语言的核心组成部分,提供了一系列的模块和函数,使得开发者能够在硬件上执行各种任务。
下面将通过系列文章,逐一解读microPython,以便让读者了解掌握microPython的整个核心逻辑.,以便读者可以透过这个Python的最小内核,掌握Python解析器的核心实现逻辑,学习世界上最优秀的源码设计之一.
#include <assert.h>
#include <string.h>
// 引入MicroPython对象和错误码相关的头文件
#include "py/obj.h"
#include "py/mperrno.h"
// 如果定义了MICROPY_PY_ERRNO,则表示需要使用错误码模块
#if MICROPY_PY_ERRNO
// 这个列表可以根据不同的端口在mpconfigport.h中定义,以适应特定端口的需求。
// 如果没有定义,则提供默认的错误码列表。
#ifndef MICROPY_PY_ERRNO_LIST
#define MICROPY_PY_ERRNO_LIST \
X(EPERM) // 操作不被许可
X(ENOENT) // 文件或目录不存在
X(EIO) // 输入/输出错误
X(EBADF) // 错误的文件描述符
X(EAGAIN) // 资源不可用,需重试
X(ENOMEM) // 内存不足
X(EACCES) // 访问被拒绝
X(EEXIST) // 文件或目录已存在
X(ENODEV) // 没有相应的设备
X(EISDIR) // 非法操作:非块设备
X(EINVAL) // 参数无效
X(EOPNOTSUPP) // 操作不支持
X(EADDRINUSE) // 地址已被占用
X(ECONNABORTED) // 连接被对方软件终止
X(ECONNRESET) // 连接被对方重置
X(ENOBUFS) // 缓冲区不足
X(ENOTCONN) // 套接字未连接
X(ETIMEDOUT) // 连接超时
X(ECONNREFUSED) // 连接被拒绝
X(EHOSTUNREACH) // 目标主机不可达
X(EALREADY) // 操作已在进行中
X(EINPROGRESS) // 操作正在执行中
#endif
// 如果定义了MICROPY_PY_ERRNO_ERRORCODE,则声明错误码表
#if MICROPY_PY_ERRNO_ERRORCODE
static const mp_rom_map_elem_t errorcode_table[] = {
// 定义错误码和对应的字符串映射
#define X(e) {
MP_ROM_INT(MP_##e), MP_ROM_QSTR(MP_QSTR_##e) },
MICROPY_PY_ERRNO_LIST