无法使用SDCC编译简单代码用于debian上的pic

时间:2014-09-10 18:46:36

标签: makefile pic sdcc

我尝试使用SDCC编译以下代码,在Debian中仅使用VIM和Makefile:

void main(void) {

}

是的,很简单,它还没有工作。我正在使用像这样的Makefile:

# GNU/Linux specific Make directives.

# Declare tools.
SHELL = /bin/sh
CC = sdcc 
LD = gplink 
ECHO = @echo

MCU = 16f88
ARCH = pic14

CFLAGS  = -m$(ARCH) -p$(MCU) 
LDFLAGS = -c -r -w -m I /usr/share/sdcc/lib/$(ARCH)/

EXECUTABLE = t1

SOURCES = test2.c 
OBJECTS = $(SOURCES:.c=.o)
CLEANFILES = test2.o test2.asm test2.map test2.lst

.SUFFIXES: .c .o
.PHONY: clean

# Compile
all: $(EXECUTABLE)

.c.o:
    $(AT) $(CC) $(CFLAGS) -o $*.o -c $<

$(EXECUTABLE): $(OBJECTS)
    $(AT) $(LD) $(LDFLAGS) $(OBJECTS) -o $(EXECUTABLE)

clean:
    $(AT) rm -rf $(CLEANFILES)

完成所有这些后,运行makefile后的输出是:

sdcc  -mpic14 -p16f88  -o test2.o -c test2.c
gplink  -c -r -w -m I /usr/share/sdcc/lib/pic14/ test2.o -o t1
make: *** [t1] Segmentation fault

我尝试过更复杂的代码,结果相同, 我看不出有什么不对,有人吗?

1 个答案:

答案 0 :(得分:1)

我看到几件可能导致问题的事情:

  • 使用SDCC编译PIC时,需要选项--use-non-free,因为某些PIC头文件具有不与GPL兼容的特殊Microchip许可证。此外,如果您从存储库安装SDCC,则可能无法在Debian上使用--use-non-free,因为它们具有自由策略。您需要从official website安装最新的SDCC。

  • 在链接阶段,您应该包含运行所需的PIC库。尝试执行sdcc -mpic14 -p16f88 --use-non-free -V test2.c。这样,SDCC自动链接,并且使用-V(详细),您可以看到对汇编器和链接器的调用,并且可以看到链接上添加的库。