公司购买了某公司的一块FPGA的板卡,想给这个板卡发送图片,然后得到返回的坐标,再往图片上框出识别到的物体。
驱动已经由供应商给出,编译安装正常,板卡端的软件由同事烧写,所以我的任务是写一个应用软件,给板卡发送数据并读取处理结果。
参考例程为供应商给出的例程2.
主机平台为龙芯,mips64架构
首先看Makefile——这也是自己一直想掌握却没有掌握的知识点
从头部的注释中知道,这个makefile会搜索指定目录下所有的c/c++源文件并进行编译和链接。除了可以编译使用标准的c/c++库的程序之外,使用者还可以添加其他库,即定制化。
使用的是gnu make,如果是其它版本的make则可能无法工作。
使用方法:
1、将Makefile拷贝到指定目录
2、定制化。
修改第一部分的makefile即可,包含编译选项MY_CFLAGS和MY_LIBS,可以看到,这里没有使用特殊的编译选项,但是添加了数学库和线程库MY_LIBS = $(LIBS) ——LIBS = -lm -lpthread
修改源码目录,此处为src文件夹
定义程序的名称,此处为pcie_image_trd
3、执行make即可启动编译。
make的目标:
make:编译和链接
make NODEP=yes:编译和链接但是不产生依赖文件
make objs:只编译不链接
make tags:
make ctags: //这两个应该是配合一些ide使用的
make clean:清除工程和可执行文件
make distclean:清除工程文件、可执行文件和依赖文件
make help:查看帮助
进入到Makefile正文:
1、设置环境
MY_CFLAGS = //未添加自定义的编译选项
LIBS = -lm -lpthread //指定链接数学库和线程库
MY_LIBS = $(LIBS)
CPPFLAGS = -Wall //打开警告信息
LDFLAGS = //链接选项未设置
SRCDIRS += ./src //指定源文件路径
PROGRAM = pcie_image_trd //指定名称
2、默认的选项
SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp //源文件的扩展名类型
HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp //头文件的扩展名类型
INCLUDES = -I ./src //指定头文件的保存路径
COMPILE_OPTS = -g $(INCLUDES) //指定c编译选项,可以看到,添加了调试信息
CXXFLAGS= $(COMPILE_OPTS) -DBSD=1 //指定c++编译选项,可以看到,添加了调试信息并且定义了一个宏BSD
CC = gcc
CXX = g++ //指定c和c++编译器
ETAGS = etags
ETAGSFLAGS =CTAGS = ctags
CTAGSFLAGS = //这两个变量应该是为其他的代码阅读器生成一些工程文件
3、固定的部分
SHELL = /bin/sh //指定shell
EMPTY =
SPACE = $(EMPTY) $(EMPTY) //定义空格,为之后规范化名称使用
ifeq ($(PROGRAM),) //如果没有定义工程名称,则使用当前路径信息
CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR))) //定义当前路径名字为:先获得当前路径/home/loongson/FPGA/pcie_image_trd,并使用下划线替换空格,然后使用空格替换反斜杠\最后得到CUR_PATH_NAMES = home loongson FPGA pcie_image_trd
PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))//指定工程名字为路径中最后一个单词
ifeq ($(PROGRAM),) //如果这时工程名还是空,那么应该是位于根目录下或者比较怪异的目录下,使用a.out
PROGRAM = a.out
endif
endif
ifeq ($(SRCDIRS),) //如果没有定义源文件路径,则默认为当前路径
SRCDIRS = .