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)
这样才可以正常处理。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值