You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于C宏内容生成指定名称的MicroPython QSTR?

在MicroPython中生成对应C宏内容的QSTR

要生成名为MP_QSTR_MY_MACRO且内容为C宏MY_MACRO值的QSTR,需要绕过QSTR默认的标识符转字符串逻辑,让预处理器先展开宏内容再传递给QSTR定义工具,具体方法如下:

方法1:直接在.qstr文件中指定

如果项目使用独立的.qstr文件管理QSTR定义,可直接添加一行显式指定QSTR名称和对应内容:

Q(MY_MACRO, "hello")

这样生成的MP_QSTR_MY_MACRO对应的字符串就是"hello"。若要复用MY_MACRO宏的值,可先在.qstr文件中包含定义宏的头文件,再写:

#include "your_macro_header.h"
Q(MY_MACRO, MY_MACRO)

方法2:在C代码中使用宏展开技巧

如果要在C代码中动态基于宏内容生成QSTR,可借助双重宏展开确保预处理器先解析MY_MACRO的值:

#define MY_MACRO "hello"

// 辅助宏实现先展开宏内容,再定义QSTR
#define QSTR_DEF_NAME_CONTENT(name, content) QSTR_TABLE_ENTRY(name, content)
#define QSTR_FROM_MACRO(macro) QSTR_DEF_NAME_CONTENT(macro, macro)

// 生成MP_QSTR_MY_MACRO,内容为MY_MACRO的值"hello"
QSTR_FROM_MACRO(MY_MACRO)

QSTR_TABLE_ENTRY是MicroPython用于定义QSTR表项的内部宏,会生成对应名称的QSTR常量并关联指定字符串内容。

注意事项

  • 确保MY_MACRO的定义在QSTR生成工具扫描代码前被预处理器展开,否则工具会把MY_MACRO当作普通字符串处理。
  • 不同MicroPython端口的QSTR定义宏可能略有差异,若QSTR_TABLE_ENTRY不可用,可尝试使用MP_QSTR_DEF宏(部分端口支持):
    MP_QSTR_DEF(MY_MACRO, MY_MACRO);
    

内容的提问来源于stack exchange,提问作者Pablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:48:18