找回密码
 立即注册
查看: 315|回复: 0

工欲善其事必先利其器,开源SDCC编译器--基本介绍(搬运)

[复制链接]
  • TA的每日心情
    奋斗
    15 小时前
  • 签到天数: 185 天

    [LV.7]常住居民III

    24

    主题

    38

    回帖

    686

    积分

    高级会员

    积分
    686
    发表于 2024-2-23 10:11:44 | 显示全部楼层 |阅读模式
    本帖最后由 xujibicool 于 2024-2-24 19:48 编辑

    开源SDCC编译器--基本介绍
    值得收藏:sdcc man阅读笔记


    一、文件说明
        1sdcc compiler
         这个是编译器,可以单纯编译代码,但是没有对生成文件进行链接
      2sdcpp prepocessor
        这个是预处理器,可以对头文件和相关宏进行预处理
      3sdas assemblers and sdld linker
         这个是汇编语言处理器和链接器,可以编译汇编语言,并且链接所有的生成文件,生成ihx格式的烧录文件。
      4sdbinutils utiltiessdarsdranlibsdnmsdobjcopy
        这个主要是由GUN Binutils分离出来的,比如可以用sdobject进行反汇编。
      5ucsim simulator
         这是软件仿真器
      6sdcdb debugger
        这个是代码调试器
      7Packihx
          这个工具可以把ihx后缀的文件转换成hex后缀的文件
      8makebin
         这个工具可以将ihx文件转换成bin文件
      9SDCC run-time libraries

    二、SDCC源码编译说明
             ./configure--disable-pic14-port --disable-pic16-port --prefix=/opt/SDCC/

             1、缺少bison
             configure:error: Cannot find required program bison
             解决方法:sudo apt-get install flex bison

             2、找不到adjacency_list.hpp
             configure:error: boost library not found (boost/graph/adjacency_list.hpp).
             解决方法:sudo apt-get installlibboost-date-time-dev libboost-program-options-dev libboost-system-devlibboost-filesystem-dev    libboost-iostreams-dev

             3、没有PIC14PIC16设备
             failedfor device/lib/pic14
             解决方法:./configure --disable-pic14-port--disable-pic16-port

             4fatal error: zlib.h:
             解决方法: sudo apt-get install zlib1g-dev

    三、生成文件说明
       sourcefile.asm - 由编译器创建的汇编文件
      sourcefile.lst - 由汇编器创建的汇编链接文件
      sourcefile.rst - 由链接编辑器创建的具有链接信息更新的汇编链接文件
      sourcefile.sym - 由汇编器创建的源文件链接标识
      sourcefile.rel - 由汇编器产生的目标文件,可以作链接编辑器的输入
      sourcefile.map - 由链接器创建的加载模块的内存映射
      sourcefile.mem - 带有内存使用情况的文件
      sourcefile.ihx - Intel hex forma格式的加载模块

    四、编译选项
             sdcc--code-loc 0x2000 source.c,可以指定程序从0x2000开始存放
             sdcc--opt-code-speed source.c,可以让SDCC对代码的运行速度做优化
             Sdcc--model-large source.c,可以指定单片机的数据存储模型为large
             sdcc-mmcs51 source.c可以选择目标处理器为MCS51,这个也是SDCC的默认选项,可以不用指定。但是如果要编译STM8单片机的源文件,则要sdcc -mstm8 source.c,指定STM8。为目标处理器。

    五、存储类型
             1__data/__near  这个是默认的存储类型,声明变量被分配到8051内存存储器RAM的可直接寻址的地址空间data里。访问此类型变量也是速度最快的
             __dataunsigned char value;

              2__xdata/__far 变量被分配到外部存储器RAM(xdata)中去,这个是large数据存储模型单片机的默认地址分配(意思就是如果指定-model-large数据存储模型,定义变量就算不加__xdata,变量也会被自动分配到外部存储器RAM(xdata)中)
             __xdataunsigned char value;

             3__idata                这种存储器类型的声明被分配到8051内部存储器RAM的间接寻址空间(idata)
             __idataunsigned char value;

             4__pdata     变量被分配到外部存储器RAM(xdata)的前256字节空间去,这个是medium数据存储模型单片机的默认地址分配。
             __pdataunsigned char value;

             5__code                 变量被分配到代码存储区,这种类型的变量是只读的,常用__code来声明一些常量,比如查表数据等
             __codeunsigned char value;

             6__bit           变量被分配到8051存储器的可寻址区域。8051内核有16字节的可寻址RAM0x20-02F),总共可以提供16x8=128bits寻址位。
             __bitvalue;

             7__sfr / __sfr16 / __sfr32 / __sbit       特殊功能寄存器,可以以位、字节和字访问
             __sfr__at (0x80) P0  //端口P0
             __sbit__at (0x80+1)   //端口P0_1

    六、绝对地址    通常使用__at来指派一个绝对地址,可以指定一个变量的RAM存储地址
             __xdata__ar (0x2000) unsigned char value //指定变量value存放在外部RAM0x20000x2001地址。
             __code__at (0x3000) char name[5] = "SDCC";//字符串SDCC存放0x3000ROM空间

    七、指针
             __xdataunsigned char * __data p;//内部ram的指针p指向外部ram的数据对象
             __dataunsigned char * __xdata p;//外部ram的指针p指向内部ram的数据对象
             __xdataunsigned char * __code p;//rom的指针p指向外部ram的数据对象
             __codeunsigned char * __code p;//rom的指针p指向rom的数据对象
             usignedchar * __xdata p;//位于xdata空间的普通指针
             unsignedchar * p;//位于默认存储空间的普通指针
             char(* __data fp) (void);//位于data空间的函数指针

    八、中断服务例程
             void函数名 (void)__interrupt (n) __using(n)

    九、使用内嵌汇编代码
             第一种:__asm __endasm
             第二种:__asm__("inline_assembler_code")

    sdcc说明.docx

    12.74 KB, 下载次数: 13

    回复 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-30 23:22 , Processed in 0.069556 second(s), 32 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表