使用 C 代码构建 Tensorflow lite micro

Building Tensorflow lite micro with C code

本文关键字:lite micro Tensorflow 构建 代码 使用      更新时间:2023-10-16

我想在我的tensorflow lite项目中使用一些C代码,但是tensorflow lite存储库中提供的所有示例项目都是C++示例。

特别是,我正在使用 AmbiqSDK 存储库,它提供了 apollo3 平台的示例,所有示例都是 C 语言,我现在想将其与其中一个 tensorflow lite 示例合并。

相关的生成文件部分在这里:

MICRO_SPEECH_SRCS := 
tensorflow/lite/experimental/micro/examples/micro_speech/main.cc 
...
tensorflow/lite/experimental/micro/examples/micro_speech/command_responder.cc 
new_c_file_here.c  ---->> HERE I LINK MY ADDITIONAL C CODE
$(MICRO_FEATURES_GENERATOR_SRCS)
...
# Builds a standalone speech command recognizer binary.
$(eval $(call microlite_test,micro_speech,
$(MICRO_SPEECH_SRCS),$(MICRO_SPEECH_HDRS)))
...
# For normal manually-created TensorFlow C++ source files.
$(OBJDIR)%.o: %.cc third_party_downloads
@mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
...
# For normal manually-created TensorFlow C source files.
$(OBJDIR)%.o: %.c third_party_downloads
@mkdir -p $(dir $@)
$(CC) $(CCFLAGS) $(INCLUDES) -c $< -o $@

在我的 new_c_file_here.c 文件中,我将所有内容都包装在 extern "C"{} 中。

但是我仍然收到链接器错误,在编译 C++ 张量流精简版示例项目或 C apollo3 示例项目时,我没有得到这些错误与它们各自的编译器:

....

tensorflow/lite/experimental/micro/tools/make/gen/sparkfun_edge_cortex-m4/obj//Users/macuser/Desktop/tf115/tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/third_party/exactle/sw/hci/ambiq/apollo3/hci_drv_apollo3.o: 在函数HciDrvHandler': /Users/macuser/Desktop/tf115/tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/third_party/exactle/sw/hci/ambiq/apollo3/hci_drv_apollo3.c:1099: undefined reference toDmDevReset' tensorflow/lite/experimental/micro/tools/make/gen/sparkfun_edge_cortex-m4/obj//Users/macuser/Desktop/tf115/tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/third_party/exactle/sw/profiles/hrps/hrps_main.o: 在函数hrpsFindNextToSend': /Users/macuser/Desktop/tf115/tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/third_party/exactle/sw/profiles/hrps/hrps_main.c:125: undefined reference toAttsCccEnabled' tensorflow/lite/experimental/micro/tools/make/gen/sparkfun_edge_cortex-m4/obj//Users/macuser/Desktop/tf115/tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/third_party/exactle/sw/profiles/hrps/hrps_main.o: In functionhrpsSendHrmNtf': /Users/macuser/Desktop/tf115/tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/third_party/exactle/sw/profiles/hrps/hrps_main.c:204: undefined reference toAttsHandleValueNtf'

....

如何正确编译 tensorflow lite C++ 项目中的 C 代码?

我正在使用Tensorflow 1.15.0。

我也在使用TFlite使用AmbiqSDK制作项目,我将向您解释我是如何制作界面的: 但首先你要知道TF是用C++写的,最好这样编译。

例如在 PDM .h/.c 中

PDM_mein.c -> write your code exactly in C
void pdm_data_get(void)
{
am_hal_pdm_transfer_t sTransfer;
sTransfer.ui32TargetAddr = (uint32_t )  g_ui32PDMDataBuffer;

sTransfer.ui32TotalCount = PDM_FFT_BYTES;
am_hal_pdm_enable(PDMHandle);
am_hal_sysctrl_sleep(AM_HAL_SYSCTRL_SLEEP_DEEP);
am_hal_pdm_fifo_flush(PDMHandle);
am_hal_pdm_dma_start(PDMHandle, &sTransfer);
}
////////////////////////////////////
PDM_mein.h
#ifdef __cplusplus
extern "C"
{
#endif
void pdm_data_get(void);
#ifdef __cplusplus
}
#endif

这样写的时候,可以在C++程序中使用C函数 并且不要忘记在Makefile.inc中添加.c和.h文件