什么是 SDCC?

SDCC 是一个可重新定位的优化标准 C(ANSI C89、ISO C99、ISO C11)编译器套件,面向基于英特尔 MCS51 的微处理器(8031、8032、8051、8052 等)、Maxim(原达拉斯)DS80C390 变体、飞思卡尔(前摩托罗拉)HC08(hc08、s08)、基于Zilog Z80的MCU(Z80、Z180、SM83、Rabbit 2000、2000A、3000A、TLCS-90)、Padauk(pdk14、pdk15)和意法半导体STM8。支持Padauk pdk13和MOS 6502目标的工作正在进行中;微芯片PIC16和PIC18靶标未维护。SDCC 可以针对其他微处理器进行重定向。

SDCC套件是来自具有不同FOSS许可证的不同来源的多个组件的集合。SDCC 编译器套件包括:

sdas和sdld,一个可重定向的汇编器和链接器,基于ASXXXX,由Alan Baldwin编写;(GPL)。
sdcpp 预处理器,基于 GCC cpp;(GPL)。
ucsim模拟器,最初由Daniel Drotos编写;(GPL)。
sdcdb源代码级调试器,最初由Sandeep Dutta编写;(GPL)。
sdbinutils 库存档实用程序,包括 sdar、sdranlib 和 sdnm,源自 GNU Binutils;(GPL)
SDCC 运行时库;(GPL+LE)。Pic 设备库和头文件派生自 Microchip 头文件 (.inc) 和链接器脚本 (.lkr) 文件。Microchip要求“头文件应声明它们只能与真正的Microchip设备一起使用”,这使得它们与GPL不兼容。
gcc-test回归测试,源自gcc-testsuite;(没有明确指定的许可证,但由于它是GCC的一部分,因此可能是GPL许可的)
packihx;(公有领域)
马克宾;(zlib/libpng License)
sdcc C编译器,最初由Sandeep Dutta编写;(GPL)。一些功能包括:
广泛的MCU特定语言扩展,允许有效使用底层硬件。
许多标准优化,如全局子表达式消除、循环优化(循环不变、感应变量强度降低和循环反转)、常量折叠和传播、复制传播、死代码消除和“switch”语句的跳转表。
特定于 MCU 的优化,包括全局寄存器分配器。
自适应MCU特定的后端,应该非常适合其他8位MCU
基于独立规则的窥视孔优化器。
全系列数据类型:char(8 位,1 字节)、短(16 位,2 字节)、int(16 位,2 字节)、长(32 位,4 字节)、长(64 位,8 字节)、浮点型(4 字节 IEEE)和 _Bool/布尔。
能够在函数中的任何位置添加内联汇编程序代码。
能够报告函数的复杂性,以帮助决定应该在汇编器中重写的内容。
一个很好的自动回归测试选择。
SDCC最初由Sandeep Dutta编写,并在GPL许可证下发布。自首次发布以来,已经进行了许多错误修复和改进。截至1999年12月,代码被移动到SourceForge,所有“用户变身为开发人员”都可以访问相同的源代码树。SDCC不断更新所有用户和开发人员的意见。

新闻

2022 年 3 月 8 日:SDCC 4.2.0 发布。

SDCC的新版本,适用于STM8,MCS-51,DS390,HC08,S08,Z80,Z180,Rabbit,SM83,eZ80的Z80模式,Z80N,TLCS-90,6502,Padauk和PIC微处理器的便携式优化编译器现已上市。
官网网站:http://sdcc.sourceforge.net

GNU/Linux amd64、Windows amd64、macOS amd64 和 Windows x86 的源代码、文档和二进制文件可用。

SDCC 4.2.0 新功能列表:

C23 memset_explicit
对 –oldralloc 的支持已从 z80、z180、tlcs90、z80n、ez80_z80、r2k、r2ka、r3ka 后端中删除。
gbz80 端口现在使用更高效的全局变量块初始化(自定义 crt0 的用户需要调整其变量)。
完全支持 z80、z180、gbz80、tlcs90、z80n、ez80_z80、r2k、r2ka、r3ka、stm8 后端的z88dk_callee。
支持 stm8 的
raisonance、iar和cosmic调用约定。
支持新的sdcccall(1) 将 stm8 端口中的约定作为新默认值调用。
支持 gbz80 端口中的新 sdcccall(1) 调用约定作为新默认值。
支持 z80、z80n 和 z180 端口中新的
sdcccall(1) 调用约定作为新默认值。
支持 r2k、r2ka、r3k、tlcs90 和 ez80_z80 端口中的新
sdcccall(1) 调用约定。
删除了对 gbz80、z80、z180、tlcs90、z80n、ez80_z80、r2k、r2ka、r3ka 后端的 –profile 的支持。
z80n 端口 Z80N 核心最低版本已从 1.0 提升至 2.0。
改进了 stm8、gbz80、z80、z180、tlcs90、z80n、ez80_z80、r2k、r2ka、r3ka 后端中的重现支持。
gbz80 端口已重命名为 sm83。
正在开发的新 mos6502 端口。
还包括许多其他新功能和错误修复。

您可以从以下位置下载版本:
https://sourceforge.net/projects/sdcc/files/

2022 年 2 月 27 日:SDCC 4.2.0 RC2 发布。

适用于 amd64 GNU/Linux、32 位和 64 位 Windows 和 amd64 macOS 的 SDCC 4.2.0 Release Candidate 2 源代码、文档和二进制软件包可在相应的文件夹中找到: http://sourceforge.net/projects/sdcc/files/

支持哪些平台?

Linux – x86,Microsoft Windows – x86,Microsoft Windows – x86_64和Mac OS X是主要的,所谓的“官方支持”平台。

SDCC 使用 gcc 在 Linux 和 Mac OS X 上进行本机编译。Windows 版本和快照版本是通过在 Linux 主机上交叉编译为 mingw32 而创建的。

建议Windows 9x/NT/2000/XP/Vista/7/8用户使用
Cygwin http://sources.redhat.com/cygwin/

,或者尝试使用不受支持的Microsoft Visual C++构建脚本。

正在下载 SDCC

有关最后发布的版本,请参阅Sourceforge下载页面,包括Linux的源代码和二进制软件包 – amd64,Microsoft Windows – x86,Microsoft Windows – amd64和Mac OS X – ppc和amd64。

主要的Linux发行版本身负责SDCC安装包,您可以在其存储库中找到SDCC。不幸的是,Linux发行版中包含的SDCC包通常已经过时了。在这种情况下,鼓励用户自行编译最新的官方SDCC版本或最近的快照版本,或者从Sourceforge下载页面下载预编译的二进制文件。

此外,SDCC应该在任何现代类Unix操作系统上编译;自动回归测试中包含以下内容,如发布包:

Linux – x86
FreeBSD – aarch64
SDCC一直处于积极开发之中。如果您遇到错误,或者上述版本已超过两个月,请考虑下载其中一个快照版本。

最新的开发源代码可以使用 Subversion 访问。以下内容将获取最新的来源:

svn checkout svn://svn.code.sf.net/p/sdcc/code/trunk/sdcc sdcc

…将在当前目录中创建sdcc目录,并将所有下载的代码放在其中。你可以在这里浏览 Subversion 仓库。

在报告错误之前,请使用 -v 选项检查您的 SDCC 版本和构建日期,并确保在错误报告中包含完整版本字符串。例如:

sdcc/bin > sdcc -v
SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.8 (Feb 10 2004) (UNIX)

支持 SDCC

SDCC 和随附的支持包附带了大量文档和示例。如果它们还不够,您可以在下面列出的地方找到帮助。以下是一个简短的提示清单,可以大大提高您获得有用回复的机会。

附加使用 SDCC 编译的代码。它应该“开箱即用”地编译。代码段必须编译,并且必须包含任何必需的头文件等。不完整的信息将妨碍您及时回复的机会。
指定用于运行 SDCC 或附加生成文件的确切命令。
指定 SDCC 版本(键入“sdcc -v”),您的平台和操作系统。
提供任何错误消息或不正确输出的精确副本。
请尝试在所有支持请求中或在报告SDCC的任何问题或错误时包含这4个重要部分(如果适用)。虽然这会使您的消息冗长,但它将大大提高SDCC用户和开发人员能够为您提供帮助的机会。一些SDCC开发人员对没有代码的错误报告感到沮丧,前提是他们可以使用代码来重现并最终解决问题,因此,如果您报告错误,请务必提供示例代码!

网页 – 你是(X)在这里。
邮件列表:[如果您认为自己发现了错误,请使用下面的“错误报告”。
发送到开发人员列表 <sdcc-devel.AT.lists.sourceforge.net> – 用于SDCC的开发工作
发送到用户列表<sdcc-user。AT.lists.sourceforge.net> – [首选]所有开发人员和所有用户。
订阅用户列表
错误报告 – 如果您在使用SDCC时遇到问题,我们需要了解它。请附加代码以重现问题,并确保提供您的电子邮件地址,以便开发人员在需要更多信息来调查和修复错误时与您联系。
网站/文档问题 – 请报告错误、缺失或过时的信息
SDCC消息论坛 – 如果您要发布和回复,则需要在Sourceforge上建立一个帐户。简短易在线填写空白。
开放知识网站 – 由Thorsten Godau <thorsten.godau.AT.gmx.de>运营
谁是SDCC?
桑迪普·杜塔<桑迪普。AT.users.sourceforge.net> – 原作者(SDCC版本的Torvalds)
Jean Loius-VERN <jlvern.AT.writeme.com> – 后端代码生成的实质性改进。
丹尼尔·德罗托斯<drdani.AT.mazsola.iit.uni-miskolc.hu> – 8051的免费软件模拟器。
凯文·维格<凯文·AT.vigor.nu> – 对达拉斯 ds390 树进行了大量增强和错误修复。
Johan Knol <johan.knol.AT.users.sourceforge.net> – 测试和修补 ds390 树,bug 踩踏器 extrodanaire
斯科特·达塔洛<斯科特。AT.dattalo.com> – 用于微芯片 PIC 控制器目标的 sdcc
卡尔·邦格斯<卡尔。AT.turbobit.com> – mcs51支持,winbin构建和偶尔的错误。
伯恩哈德·赫尔德<伯恩哈德。AT.bernhardheld.de> – snpshot 构建和一般内务管理
Frieder Ferlemann <Frieder.Ferlemann.AT.web.de> – 对文档的贡献和代码生成的最后阶段
耶稣·卡尔维诺-弗拉加<耶稣AT.ece.ubc.ca> – 数学函数,AOMF51,链接器改进
Borut Ražem <borut.razem.AT.gmail.com> – WIN32 MSC,cygwin和mingw端口,NSIS安装程序,预处理器和前端改进,错误修复,在Distibuted Compile Farm上构建的快照,…
范吉利斯·罗卡斯 <vrokas.AT.otenet.gr> – PIC16 TAGET 开发用于微芯片 PIC18F 微控制器
埃里克·佩特里奇<epetrich.AT.users.sourceforge.net> – 前端 8051、z80 和 hc08 的错误修复和改进
戴夫·赫尔顿<ave.AT.kd0yu.com> – 网站设计
保罗·斯托夫雷根 <保罗.AT.pjrc.com> – mcs51优化和网站维护。
迈克尔·霍普<迈克尔·AT.juju.net.nz> – 初始 Z80 目标、其他编码和错误修复。
Maarten Brock<sourceforge.brock.AT.dse.nl>– 一些错误修复和改进,特别是对于mcs51目标
拉斐尔·内德<RNeider.AT.web.de> – PIC16的错误修复和优化,PIC14目标的完成
菲利普·克劳斯·克劳斯 <pkk.AT.spth.de> – 在STM8,Z80,Z180,Rabbit,GBZ80,TLCS-90后端上工作,编译器研究
利兰·莫里森<enigmalee.AT.sourceforget.net> – Rabbit 2000 支持:目标代码生成器、sdasrab 汇编程序和 ucsim 支持
Molnár Károly <molnarkaroly.AT.users.sf.net> – 添加图片设备,开发和维护图片设备文件生成脚本
本·施<力量练习1st.AT.163.com> – 前端、STM8 后端和 MCS-51 后端维护
SDCC得到了许多外部来源的帮助,包括:

艾伦·鲍德温<鲍德温。AT.shop-pdp.kent.edu> – ASXXXX和ASLINK的初始版本。
约翰·哈特曼<noice.AT.noicedebugger.com> – 为 8051 移植 ASXXXX 和 ASLINK。
德米特里·奥布霍夫 <dso.AT.usa.net> – malloc 和串行 I/O 例程。
Pascal Felber – 一些与 Z80 相关的文件是从 Gameboy 开发工具包 (GBDK) 借来的。
GCC 开发团队 – 用于 GNU C 预处理器,sdcpp 预处理器和 gcc 测试套件的基础,部分包含在 SDCC 回归测试套件中
GNU Binutils 开发团队 – 对于 GNU Binutils,sdbinutils 的基础
Boost 社区 – 用于加速 sdcc 编译器中使用的C++库
Timo Bingmann – 用于 STX B+ 树C++ sdcc 编译器中使用的模板类
马利尼·杜塔 <马里尼。AT.mediaone.net> – 桑迪普的妻子,感谢她的耐心和支持。

过往新闻

2022 年 2 月 22 日:SDCC 4.2.0 RC1 发布。

适用于 amd64 GNU/Linux、32 位和 64 位 Windows 和 amd64 macOS 的 SDCC 4.2.0 版本候选版本 1 源代码、文档和二进制软件包可在相应的文件夹中找到: http://sourceforge.net/projects/sdcc/files/

8 年 2021 月 4 日:SDCC 1.0.<> 发布。

SDCC的新版本,适用于8051,DS390,Z80,Z180,Rabbit 2000,GBZ80,eZ80,TLCS-90,HC08,STM8,Padauk和PIC微处理器的便携式优化编译器现已上市(http://sdcc.sourceforge.net)。GNU/Linux amd64、Windows amd64、macOS amd64 和 Windows x86 的源代码、文档和二进制文件可用。

SDCC 4.1.0 新功能列表:

  • 用于Spectrum Next CPU(Z80变体)的新z80n端口。
  • 在 gbz80 后端中更好地分配寄存器。
  • r2k 后端中兔子等待状态错误的解决方法。
  • 新的 r2ka 端口可以更好地支持 Rabbit 2000A、2000B、2000C、3000。
  • 兔子的默认 crt0 和 –data-loc 适用于典型的兔子硬件配置,如 RCM。
  • 在 z80 和相关端口的代码生成方面进行了许多改进。
  • 兔子 2000、2000A、2000B、2000C、3000、3000A 的兔子寄存器定义标头。
  • C23 数字分隔符。
  • 还包括许多其他新功能和错误修复。

您可以从以下位置下载版本:
https://sourceforge.net/projects/sdcc/files/