简单介绍:
- 系统:ubuntu16.04.4
- 平台:zcu102
- 软件:SDx/SDSOC-v2018.3
- 代码内容:图像处理
- 文章内容:SDSOC编译过程中的可能错误,持续更新…
1.未添加硬件函数
问题1:未写入HLS语句,显示无法识别arm_neo.h内类型转换语句; \arm_neon.h:38:9: error: unknown type name’__Int8x8_t’
回答:需要添加针对SDSCC的编译条件;#if __SDSCC__ #undef __ARM_NEON__ #undef __ARM_NEON #include "opencv2/opencv.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/features2d.hpp" #define __ARM_NEON__ #define __ARM_NEON #else #include "opencv2/opencv.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/features2d.hpp" #endif
2.已添加硬件函数
问题1:/tools/Xilinx/SDK/2018.3/gnu/aarch64/lin/aarch64-linux/bin/…/lib/gcc/aarch64-linux-gnu/7.3.1/…/…/…/…/aarch64-linux-gnu/bin/ld: warning: libopencv_highgui.so.3.4, needed by /usr/local/aarchopencv3/lib/libopencv_features2d.so, not found (try using -rpath or -rpath-link)
回答:该问题说明添加的库少了,需要在工程内添加缺少对应的opencv动态库。
问题2:无法调用vivado_hls,或者找不到‘_sds_sw_main‘
- ERROR: [SdsCompiler 83-5019] Exiting sds++ : Error when calling
- undefined reference to `_sds_sw_main’
回答:该问题主要由链接顺序导致,即SDSOC中使用的编译器对源文件进行编译和链接过程中没有按照顺序进行链接,主函数没有放在第一位导致找不到其依赖文件。因此必须让文件遵循其内在逻辑的由顶到下的原则,保证符合文件的相互依赖,具体做法是在文件命名过程中让main.cpp在字母排序中就排在第一个。
问题3:ERROR: [DMAnalysis 83-4432] An unsupported inferred interface type (ap_memory) was detected
回答:SDSOC不支持ap_memory接口,需要在函数实现前添加下列语句#pragma SDS data access_pattern("_src.data":SEQUENTIAL, "_dst.data":SEQUENTIAL) #pragma SDS data copy("_src.data"[0:"_src.size"], "_dst.data"[0:"_dst.size"]) #pragma SDS data mem_attribute("_src.data":NON_CACHEABLE|PHYSICAL_CONTIGUOUS) #pragma SDS data mem_attribute("_dst.data":NON_CACHEABLE|PHYSICAL_CONTIGUOUS)
问题4:ERROR: [SYNCHK 200-11] /home/nahs/SDx_workspace/Test001/test2/src/xf_bianli.cpp:3: Argument ‘_src’ of function ‘method_accel1’ (/home/nahs/SDx_workspace/Test001/test2/src/xf_bianli.cpp:3) has an unsynthesizable type (possible cause(s): forward declared type is not supported).
回答:不清楚。。。挖坑待填
问题5:写入HLS语句后报编译错误
回答:SDSOC不支持硬件函数中使用cv::Mat作为参数使用。