sdcc 51 迁移记录

原创 2016年09月14日 21:26:32


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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【解决】缺少libstdc++.so.6库的原因及解决办法

【解决】缺少libstdc++.so.6库的原因及解决办法

解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found问题

我遇到这个问题的时候是在连接库的时候出现的问题,出现

Linux 下编译安装 PHP 5.6

系统环境: CentOS 6.5 / 7.0 x86_64Fedora 20 x86_64 下载 PHP 源码包 # wget http://cn2.php.net/distributions/p...

sdcc man阅读笔记(四)——存储类型关键字

一、存储类型关键字 1.1 sdcc中特殊关键字的使用 sdcc提供和keil一样的特殊关键字来指定变量的存储类型,和keil不同的是,sdcc在使用c51专用的特殊关键字时,要用两个下划线作...

linux下使用SDCC开发MCS51单片机

在linux下使用SDCC开发MCS51单片机

关于缺少libstdc++.so.6问题

在学校做个服务器,因为我的机器是新配的,用的是5000+  配个HELIX流媒体服务器,那个配置过程就不说了,网上大堆  在安装过程中,遇到个问题  在32位系统里      ...

sdcc man阅读笔记(三)——c51专用编译选项

一、C51专用编译选项

【解决】centos缺少共享库:libstdc++.so.6

当在centos6.2下执行某些命令时,有缺少共享库的报错: error while loading shared libraries: libstdc++.so.6: cannot open sh...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)