SDCC编译器及asxxxx汇编编译器

使用as8051 来汇编汇编程序:as8051 -o -l -s xx.asm

源代码与Keil C的稍许不同

对于已经习惯使用Keil C的用户需要注意一下,SDCC的源代码和Keil C有所不同,需要做一点调整才能编译通过.SDCC比较多的使用像8051.h这样的头文件(include/mcs51目录下也有reg51.h这样的头文件).

对于一些非ANSI C的关键字,SDCC均采用双下滑线开头的方式定义,如__code,__idata,__sbit......对于单片机引脚的定义SDCC采用了 __at关键字和十六进制地址(用户对底层地址信息要弄清楚,不过我觉得__at关键字是一个比较有特色的改进),如下:个人建议还是用#define 来定义引脚方便

//SDCC Keil C __sbit __at  0x94 blackLineLeft ; sbit blackLineLeft =P1 ^ 4 ; __sbit __at  0x95 blackLineRight ; sbit blackLineRight =P1 ^ 5 ; __sbit __at  0x80 in1 ; sbit in1 =P1 ^ 0 ; __sbit __at  0x81 in2 ; sbit in2 =P1 ^ 1 ; __sbit __at  0x82 in3 sbit in3 =P1 ^ 2 ; __sbit __at  0x83 in4 ; sbit in4 =P1 ^ 3 ;

更多的地址信息可以查看附录

对于内嵌汇编代码,SDCC使用__asm和__endasm两个关键字,参考代码如下:

void delay0_1 (uint n )  {  for (i = 0 ;i <n;++i) { for(j=0;j<10000;++j) { __asm nop __endasm; } } }

源代码编译 单文件项目

对于单源文件8051项目的编译过程非常简单.用下面的命令编译你的程序

SDCC sourcefile. c

这一步将完成编译,汇编和链接的源文件.输出文件如下:

  • sourcefile.asm - 程序的汇编文件
  • sourcefile.lst - 程序的列表文件
  • sourcefile.rst - 被链接器更新的列表文件
  • sourcefile.sym - 由链接器生成的符号清单
  • sourcefile.rel - 由汇编器生成的对象文件,提供给链接器使用
  • sourcefile.map - 被链接器更新的最终存储器映射
  • sourcefile.mem - 内存的使用情况摘要
  • sourcefile.ihx - 用于生成Intel Hex格式文件模块

可能还有一些其他文件,查看SDCC手册可以了解更多!

attentions:


然后烧录就可以了.

多文件项目

SDCC并不支持同时编译多个源代码文件,所以多文件项目的编译需要分步进行.假如你的项目包含foo1.c foo2.c main.c三个文件,那么编译过程如下:

sdcc  -c foo1.c 
sdcc  -c foo2.c 
sdcc main.c foo1.rel foo2.rel

还可以使用以下方式编译:

sdcc  -c main.c 
sdcc main.rel foo1.rel foo2.rel

最后处理一下ihx文件就可以了.对于多文件项目最好是写一个makefile文件用make维护或者写一个批处理文件.



sdcc自带的packihx转换的bin烧写到51有问题,需要下载hex2bin转换hextobin



你可能感兴趣的:(51)