Mbed编译depthwise_conv.cc报错求助:CMSIS-NN适配及Python版本疑问
Mbed编译tinyML项目问题排查与解决
问题汇总
- 按《tinyML》书籍步骤部署时Mbed编译失败
- 修改
make命令的TAGS为CMSIS-NN disco_f746ng后,出现depthwise_conv.cc的类型转换、函数未声明错误 - 同时触发Python错误:
_queue.SimpleQueue' object has no attribute 'queue" - 面临Python版本冲突:有人建议用Python2.7,但ARM CLI1要求Python3.7.x
解决步骤
1. 解决Python版本冲突
用虚拟环境隔离Python3.7.x环境,避免全局版本干扰:
- 安装对应系统的Python3.7.x版本
- 创建虚拟环境:
python3.7 -m venv tinyml_env - 激活虚拟环境:
- Windows:
tinyml_env\Scripts\activate - Linux/macOS:
source tinyml_env/bin/activate
- Windows:
- 在激活的虚拟环境中安装ARM CLI1所需依赖,重新执行编译流程
2. 修复depthwise_conv.cc编译错误
- 核对CMSIS-NN版本:书中可能指定了特定版本,当前使用的CMSIS-NN API可能有变更,导致代码不兼容。切换到书中推荐的CMSIS-NN版本
- 修正代码错误:
- 类型转换问题:将不匹配的类型强制转换为目标类型(比如
(int32_t)或(uint8_t),根据上下文调整) - 函数未声明:检查是否遗漏了头文件引用(比如
#include "arm_nnfunctions.h"),或函数名是否因版本更新变更(比如旧版本函数名在新版本中被重命名)
- 类型转换问题:将不匹配的类型强制转换为目标类型(比如
- 确认
TAGS参数正确性:确保CMSIS-NN disco_f746ng拼写、大小写无误,目标板标识disco_f746ng是Mbed支持的正确板名
3. 解决SimpleQueue Python错误
这个错误是因为代码直接访问了SimpleQueue的内部queue属性,而Python3.7+的queue.SimpleQueue不对外暴露该属性:
- 修改涉及的Python脚本:将访问
_queue.queue的代码替换为官方API,比如用get()/put()操作队列,或通过迭代器遍历队列元素 - 如果是书籍提供的部署脚本,检查是否有适配Python3.7+的更新版本,手动替换或修改代码
内容的提问来源于stack exchange,提问作者ghjeon
相关产品推荐
相关产品推荐

