2394072_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2394072_zh-CN

2394072_zh-CN

如何将 C++ TFLite 模型集成到基于 C 的 MCUXpresso 项目中?

您好,NXP团队,

我正在将 TensorFlow Lite Micro 模型集成到我的 MCUXpresso 项目中,用于 MCXN947。我的应用程序是用 C 编写的,而 TensorFlow Lite Micro 推理代码和生成的模型是用 C++ 编写的。

在合并 C 和 C++ 源文件时,我遇到了编译和链接问题。我已经尝试使用“extern "C"”,但问题仍然存在。

请问您能否就以下问题提供建议?

在 MCUXpresso 项目中混合使用 C 和 C++ 源文件是否可行?

将 C++ TensorFlow Lite Micro 模型集成到基于 C 的应用程序中的推荐方法是什么?

此集成是否需要任何编译器/链接器设置或参考示例?

任何指导都将不胜感激。谢谢。

开发板MCX NRe: How to Integrate a C++ TFLite Model into a C-Based MCUXpresso Project?

你好@sivamankomb ,

感谢你的帖子。

当然,您可以在 MCUXpresso 项目中混合使用 C 和 C++ 源文件。事实上,我们的 SDK 演示也采用了这种方法。您可以参考 SDK 中包含的几个与 eIQ 相关的示例项目。您可以从“选择开发板 | MCUXpresso SDK 构建器”下载 SDK。

Celeste_Liu_0-1784012914332.png

要点如下:

- .c文件被编译成 C 代码。
- .cpp文件被编译成 C++ 代码。
- 最终的链接阶段必须使用支持 C++ 运行时和 C++ 符号解析的工具链。
- C 代码只能调用通过 extern "C" 包装器公开的函数,而不能直接包含或使用 TFLM C++ 类、模板或命名空间。

因此,推荐的方法是将 TFLM 推理实现封装在一个 .cpp 文件中。文件仅向 C 应用程序公开与 C ABI 兼容的包装接口。
例如,在 SDK 的 tflm_label_image 演示中,核心 TFLM 推理逻辑在 common/tflm/model.cpp 中实现。此文件使用了 TFLM C++ API,例如:

#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/micro/micro_op_resolver.h"

static const tflite::Model* s_model = nullptr;
static tflite::MicroInterpreter* s_interpreter = nullptr;
extern tflite::MicroOpResolver &MODEL_GetOpsResolver();



然后创建一个 tflite::MicroInterpreter 实例,并在 MODEL_Init() 中调用 AllocateTensors() 来执行初始化。

外部暴露的模型.h,提供 C 语言友好的接口。

#if defined(__cplusplus)
extern "C" {
#endif

status_t MODEL_Init(void);
uint8_t* MODEL_GetInputTensorData(tensor_dims_t* dims, tensor_type_t* type);
uint8_t* MODEL_GetOutputTensorData(tensor_dims_t* dims, tensor_type_t* type);
void MODEL_ConvertInput(uint8_t* data, tensor_dims_t* dims, tensor_type_t type);
status_t MODEL_RunInference(void);
const char* MODEL_GetModelName(void);

#if defined(__cplusplus)
}
#endif



函数声明通过 extern "C" 导出,这样 C 源文件就可以简单地 #include "model.h"无需了解 tflite::MicroInterpreter 或 MicroMutableOpResolver 等 C++ 类型,即可调用 MODEL_Init() 和 MODEL_RunInference() 等函数。
这种架构也是我们的 SDK 示例所采用的方法,并且在将 TFLM 集成到基于 C 的应用程序中时通常建议采用这种方法,因为它能够干净利落地隔离 C++ 实现细节,同时为应用程序层保留纯 C 接口。

如果您想将客户 ML 模型集成到 SDK 演示中,您可以参考AN14241 。

希望对您有所帮助。

BR

塞莱斯特

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎07-15-2026 04:30 AM
更新者: