嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt

嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt

ID:56987811

大小:62.00 KB

页数:25页

时间:2020-07-25

嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt_第1页
嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt_第2页
嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt_第3页
嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt_第4页
嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt_第5页
资源描述:

《嵌入式学习资料之Linux 内核中的 GCC 特性课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式学习资料之Linux内核中的GCC特性概述功能性扩展清单1.使用typeof构建一个泛型宏范围扩展清单2.在case语句中使用范围零长度的数组判断调用地址常量检测清单3.使用常量检测优化宏函数函数属性清单4.函数属性定义优化扩展清单5.likely和unlikely宏的使用示例清单6.范围预抓取的包装器函数变量属性清单7.结构打包和设置多个属性结束语Linux®内核使用GNUCompilerCollection(GCC)套件的几个特殊功能。这些功能包括提供快捷方式和简化以及向编译器提供优化提示等等。了解这些特殊的GCC特性,学习如何在Linux内核中使用它们。GCC

2、和Linux是出色的组合。尽管它们是独立的软件,但是Linux完全依靠GCC在新的体系结构上运行。Linux还利用GCC中的特性(称为扩展)实现更多功能和优化。本文讨论一些重要的扩展,讲解如何在Linux内核中使用它们。GCC当前的稳定版本(版本4.3.2)支持C标准的三个版本:InternationalOrganizationforStandardization(ISO)最初的C语言标准(ISOC89或C90)●带修正1的ISOC90    ●当前的ISOC99(这是GCC使用的默认标准,本文也假设采用这种标准)●注意:本文假设使用ISOC99标准。如果指定比ISOC9

3、9版本旧的标准,那么可能无法使用本文描述的一些扩展。可以在命令行上使用-std选项指定GCC使用的实际标准。可以通过GCC手册查看哪个标准版本支持哪些扩展(见参考资料中的链接)。概述先讨论一些扩展标准C语言的GCC扩展。类型发现GCC允许通过变量的引用识别类型。这种操作支持泛型编程。在C++、Ada和Java?语言等许多现代编程语言中都可以找到相似的功能。Linux使用typeof构建min和max等依赖于类型的操作。清单1演示如何使用typeof构建一个泛型宏(见./linux/include/linux/kernel.h)。嵌入式学习资料之GCC功能性扩展#defin

4、emin(x,y)({typeof(x)_min1=(x);typeof(y)_min2=(y); (void)(&_min1==&_min2); _min1<_min2?_min1:_min2;})清单1.嵌入式学习资料之使用typeof构建一个泛型宏GCC支持范围,在C语言的许多方面都可以使用范围。其中之一是switch/case块中的case语句。在复杂的条件结构中,通常依靠嵌套的if语句实现与清单2(见./linux/drivers/scsi/sd.c)相同的结果,但是清单2更简洁。使用switch/case也可以通过使用跳转表实现进行编译器优化。嵌入式学

5、习资料之GCC范围扩展staticintsd_major(intmajor_idx) { switch(major_idx){ case0: returnSCSI_DISK0_MAJOR; case1...7: returnSCSI_DISK1_MAJOR+major_idx-1; case8...15: returnSCSI_DISK8_MAJOR+major_idx-8; default: BUG(); return0;/*shutupgcc*/ } }清单2.嵌入式学习资料之在case语句中使用范围还可以使用范围进行初始化,如下所示(见./linux/arch/cr

6、is/arch-v32/kernel/smp.c)。在这个示例中,spinlock_t创建一个大小为LOCK_COUNT的数组。数组的每个元素初始化为SPIN_LOCK_UNLOCKED值。/*Vectoroflocksusedforvariousatomicoperations*/spinlock_tcris_atomic_locks[]={[0...LOCK_COUNT-1]=SPIN_LOCK_UNLOCKED};范围还支持更复杂的初始化。例如,以下代码指定数组中几个子范围的初始值。intwidths[]={[0...9]=1,[10...99]=2,[100]=3

7、};嵌入式学习资料在C标准中,必须定义至少一个数组元素。这个需求往往会使代码设计复杂化。但是,GCC支持零长度数组的概念,这对于结构定义尤其有用。这个概念与ISOC99中灵活的数组成员相似,但是使用不同的语法。下面的示例在结构的末尾声明一个没有成员的数组(见./linux/drivers/ieee1394/raw1394-private.h)。这允许结构中的元素引用结构实例后面紧接着的内存。在需要数量可变的数组成员时,这个特性很有用。structiso_block_store{atomic_trefcount;size_tda

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。