还是前面的main.c,分割成两个源文件,main.c如下:
#include <at89x52.h>
#include "delay.h"
#define led1 P2_0
void main(void)
{
while (1) {
led1 = 0;
delayms(1000);
led1 = 1;
delayms(1000);
}
}
delay.c和delay.h分别如下:
void delayms(unsigned int ms)
{
unsigned int x, y;
for (y = ms; y > 0; y--) {
for (x = 227; x > 0; x--);
}
}
#ifndef __DELAY_H
#define __DELAY_H
extern void delayms(unsigned int ms);
#endif /* __DELAY_H */
编译时可以使用以下的命令:
$ sdcc -c main.c $ sdcc -c delay.c $ sdcc main.rel delay.rel需要注意的是,在sdcc中,编译的目标文件后缀名为.rel,而不是Linux下常见的.o。sdcc -c为编译步骤生成目标文件,最终链接成所需要的.ihx文件main.ihx,Makefile如下:
CC = sdcc
all:led.bin
#led.bin:led.hex
# objcopy -I ihex -O binary led.hex led.bin
#led.hex:main.ihx
# packihx main.ihx > led.hex
led.bin:main.ihx
makebin main.ihx led.bin
main.ihx:main.rel delay.rel
$(CC) main.rel delay.rel
main.rel:main.c delay.h
$(CC) -c main.c
delay.rel:delay.c
$(CC) -c delay.c
.PHONY:clean
clean:
-rm led.bin main.asm main.ihx main.lk main.lst\
main.map main.mem main.rel main.rst main.sym
-rm delay.asm delay.lst delay.rel delay.rst delay.sym