GCC and the PROGMEM Attribute.pdf, 介绍 GCC 编译器.rar
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
**GCC编译器详解** GCC(GNU Compiler Collection)是由GNU项目开发的一套开源编译器套件,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada、Go等。它不仅是一个编译器,还包括了预处理器、汇编器和链接器等组成部分,是GNU/Linux操作系统及其他类UNIX系统中的标准编译工具。 **ProGMEM属性** 在GCC中,特别是针对嵌入式系统,ProGMEM是一个非常重要的属性,特别是在使用Arduino或其他基于AVR微控制器的平台上。ProGMEM(Program Memory)是一个关键字,用于指定变量存储在程序存储器(Flash Memory)而不是默认的数据存储器(SRAM)中。这样做的主要原因是程序存储器的容量通常大于数据存储器,且读取速度较慢,但可以减少对有限的SRAM的占用,从而节省宝贵的内存资源。 **ProGMEM的使用** 1. **声明变量**:要将变量存储在ProGMEM,你需要在声明时使用`PROGMEM`关键字,如`const char myString[] PROGMEM = "Hello, World!";` 2. **访问变量**:由于程序存储器和数据存储器之间的访问方式不同,访问ProGMEM变量需要特殊函数。例如,对于字符串,可以使用`pgm_read_byte()`或`pgm_read_word()`等函数来读取单个字节或字。对于数组,可以使用`PSTR()`宏来创建一个指向PGMN内存的指针。 3. **与函数参数交互**:当函数参数需要使用ProGMEM变量时,需要特别注意。GCC不支持直接将ProGMEM变量作为函数参数,因此通常需要先读取到SRAM中,再传递给函数。 **GCC编译过程** 1. **预处理**:GCC的预处理器处理源代码中的宏定义、条件编译指令以及包含的头文件,生成预处理后的.i文件。 2. **编译**:编译器将预处理后的文件转换为汇编代码,生成.asm文件。这个阶段会进行语法检查、类型检查和优化。 3. **汇编**:汇编器将汇编代码转化为机器码,生成.o目标文件。 4. **链接**:链接器将多个.o文件(包括库文件)合并,解决符号引用,生成可执行文件或库。 **GCC的优化选项** GCC提供了一系列的优化级别选项,如-O1、-O2、-O3和-Os,分别代表不同级别的优化强度。优化可以提高代码的运行效率,但可能会影响调试信息和代码大小。例如,-Os选项专注于减小程序大小,而-O3则倾向于最大化性能。 **总结** GCC和ProGMEM属性在嵌入式开发中扮演着关键角色。GCC提供了强大的编译和优化功能,而ProGMEM则是应对嵌入式系统内存限制的有效手段。理解并熟练运用这些工具和特性,能帮助开发者更高效地利用资源,创建出更加高效、可靠的嵌入式应用程序。
- 1
- 粉丝: 515
- 资源: 3067
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
- 树莓派物联网智能家居基础教程
- YOLOv5深度学习目标检测基础教程