WinAVR编译库函数和项目中使用库函数
来源: 芯艺工作室
本站广告
  ENC28J60+uIP DHCP动态获取IP及UDP广播服务端示例
  ENC28J60+uIP 基于TCP的MODBUS IO示例
  C720H5上实现MODBUS远程IO
  ENC28J60+uIP HTTP GET方式将温度数据上传到web服务器
  FM1702读写S50(也叫M1)卡相关资料

WinAVR项目中的makefile文件一般都是由mfile生成的,这里介绍一下如何配置mfile生成的makefile文件,用于编译生成库文件(.a文件)

 在makefile中找到下面的这一段:


# Change the build target to build a HEX file or a library.
 build: elf hex eep lss sym
 #build: lib


将build改为下面的lib


 # Change the build target to build a HEX file or a library.
 #build: elf hex eep lss sym
 build: lib


好了,编译后就生成 lib为前缀加项目名,并以.a为扩展名的库文件;

如果需要修改生成文件名,则需要修改下面这一段代码中的LIBNAME符号:

elf: $(TARGET).elf
 hex: $(TARGET).hex
 eep: $(TARGET).eep
 lss: $(TARGET).lss
 sym: $(TARGET).sym
 LIBNAME=lib$(TARGET).a
 lib: $(LIBNAME)

至此我得到了一个.a为扩展名的c函数库文件,那么如何在项目中使用此库呢?

在使用库函数的项目makefile中找到下面的脚本

#---------------- Linker Options ----------------
#  -Wl,...:     tell GCC to pass this to linker.
#    -Map:      create map file
#    --cref:    add cross reference to  map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)


在其后面加上 

LDFLAGS += lib1.a


lib1.a 就是要使用的库文件,注意前面要留一空格;另外,库文件复制到项目目录中;

做库文件同时通常需要为库做一个内部函数声明文件 .h
.h文件中列出了库文件中实现的函数,在使用库函数的源文件中要包含这个.h文件。





声明:芯艺工作室(http://www.chipart.cn)保留所有权力,转载请注明出处!

芯艺工作室    蒙ICP备06005492号

Copyright© 2004-2020 ChipArt Studio All Rights Reserved