SDCC编译器快速入门指南
4星 · 超过85%的资源 需积分: 13 119 浏览量
更新于2024-09-16
收藏 658KB DOC 举报
"SDCC簡明手冊是关于SDCC Compiler快速上手的指南,主要关注8051微控制器和Windows环境的应用。"
SDCC(Small Device C Compiler)是一款开源的C编译器,特别适合于小型嵌入式系统,如8051微控制器。在使用SDCC之前,你需要在Google上搜索并从SourceForge官方网站下载最新版本的SDCC安装包。
安装完成后,在Windows环境下设置环境变量PATH,以便于命令行调用SDCC。为了测试SDCC是否安装成功,你可以编写一个简单的C程序,如`chartest.c`,包含如下代码:
```c
void main(void) {
test = 0;
}
```
然后通过命令行执行`sdcc -c chartest.c`,这将生成`.asm`, `.sym`, `.lst`, 和 `.rel`文件,表明编译过程顺利完成。如果希望进行链接并生成可烧录的二进制文件,可以使用`sdcc test.c`,这将生成`.ihx`文件,例如`test.ihx`。
接下来,你可以尝试使用标准库,如`string.h`。下面是一个示例程序:
```c
#include <string.h>
char str1[10];
void main(void) {
strcpy(str1, "testing");
}
```
编译这个程序,使用`sdcc test1.c`,同样会生成`.ihx`文件,即`test1.ihx`。这表明SDCC支持标准库函数的编译。为了生成Intel Hex格式的文件,用于在目标硬件上加载,你可以运行`packihx test1.ihx > test1.hex`。
在SDCC中,有多种数据类型和内存模型供选择,以适应不同需求:
1. `__data`: 默认的数据类型,适用于小型内存模型,存储在内部RAM。
2. `__xdata`: 默认的大内存模型,用于外部RAM。
3. `__idata`: 用于间接访问的数据。
4. `__pdata`: 适用于外部RAM的低地址部分。
5. `__code`: 用于存储代码的区域。
6. `__bit`: 位类型变量,用于操作单个位。
7. `__sfr`, `__sfr16`, `__sbit`: 分别用于定义特殊功能寄存器(SFR)、16位SFR和单一位SFR。
指针变量也有不同的类型,例如:
- `__data unsigned char *__datap`: 指向内部RAM的数据指针。
- `__xdata unsigned char *__xdatap`: 指向外部RAM的数据指针。
- `__code unsigned char *__codep`: 指向代码区的指针。
- `unsigned char *p`: 通用的数据指针。
- `char (*__data fp)(void)`: 定义一个在内部RAM中的函数指针。
8051微控制器的存储结构通常分为几个区域,如00-1F地址范围属于内部RAM的一部分。了解这些内存模型和数据类型对于有效地利用SDCC进行8051编程至关重要。在实际项目中,根据目标硬件的内存布局和资源限制,选择合适的内存模型和数据类型,能够优化程序性能并节省宝贵的存储空间。
185 浏览量
119 浏览量
2011-06-01 上传
175 浏览量
hclin168
- 粉丝: 0
- 资源: 14
最新资源
- 埃森哲如何帮助沃尔玛成就卓越绩效
- ElectricRCAircraftGuy/MATLAB-Arduino_PPM_Reader_GUI:使用 Arduino 从 RC Tx 中的 PPM 信号中读取操纵杆和开关位置,并绘制和记录-matlab开发
- C#写的IOC反转控制源代码例子
- 供应商质量体系监察表
- Hedgewars: Continental supplies:centinental 供应的“主要”开发页面-开源
- 元迁移学习的小样本学习(Meta-transfer Learning for Few-shot Learning).zip
- .NET Core手写ORM框架专题-代码+脚本
- 《物流管理》第三章 物流系统
- Python_Basic:关于python的基本知识
- 王者荣耀段位等级图标PNG
- 使用 PVsystem 升压转换器的逆变器设计.mdl:带有使用 PV 的升压转换器的简单逆变器模型-matlab开发
- touchpad_synaptics_19.0.24.5_w1064.7z
- Analise播放列表做Spotify --- Relatorio-Final
- 开放式旅行商问题 - 遗传算法:使用 GA 为 TSP 的“开放式”变体找到近乎最优的解决方案-matlab开发
- fr.eni.frontend:培训前端
- kracs:克拉斯