sdcc 51 迁移记录



sdcc 51 迁移记录

这是makefile中的核心内容

out.ihx:$(object)
 @echo ------------------连接$^------------------
 sdcc --iram-size 256 --xram-size 1024 -o $@ $^

%.hex:%.ihx
 packihx $^ > $@
 
%.bin:%.hex
 objcopy -I ihex -O binary $^ $@

%.rel:%.c $(hfile)
 @echo ------------------编译$<------------------
 sdcc --iram-size 256 --xram-size 1024 -c $<

sdcc -c xxx.c
用来把.c文件编译成.rel文件,相当于object文件,把所有的.c文件都用这个命令编译成.rel文件
全部编译成.rel文件后,
sdcc -o out.ihx x1.rel x2.rel .....
这样把所有的.rel连接成最后的.ihx文件,
packihx out.ihx>out.hex
把ihx文件转换成.hex文件。
注意这个hex文件可能是格式不太对头,用stc的isp软件写入无法正常工作。需要用
objcopy -I ihex -O binary out.hex out.bin
把.hex转换成.bin格式,这个文件stc读入才是正常的。

sdcc扩展了一些保留字,都是双下划线开头的,比如 __bit,__code,__interrupt这些,注意要调整加上双下划线。
_nop_()没有了,考虑定义一个
#define _nop_() __asm nop __endasm
来替代。

中断服务函数一定要把定义在main()函数所在的.c文件中写一份,否则不能正确调用中断服务函数。

unsigned char a,b;
if(a+b==0xff)

这样的判断居然也出错,看了一下.lst文件里的汇编代码,sdcc把a,b都扩展成了2字节的int来处理,还处理错了,真要命。
要改成
unsigned char a,b,c;
c=a+b;
if(c==0xff)
这样才可以正常处理。

你可能感兴趣的:(sdcc)