收藏 分享(赏)

RealViewMDK中使用内联函数时需要注意的问题.doc

上传人:czsj190 文档编号:7334782 上传时间:2019-05-15 格式:DOC 页数:1 大小:25.50KB
下载 相关 举报
RealViewMDK中使用内联函数时需要注意的问题.doc_第1页
第1页 / 共1页
亲,该文档总共1页,全部预览完了,如果喜欢就下载吧!
资源描述

1、笔者在做移植时,将 Embest IDE环境下的例程移到 RealView MDK的过程中,曾经遇到这样一个问题:在生成工程时,编译全部通过,但在链接时提示许多符号未定义!如果读者也遇到过这个问题,请继续看下去,如果链接时提示未定义的变量是一些内联函数(即使用了关键字_inline)。那么就是笔者遇到的问题了。希望这篇文章对您有所帮助。在 MDK中使用关键字_inline 时,除了执行速度和占用空间和普通函数不一样之外,还有以下与普通函数不一样的地方:表现为,不能将其申明为外部函数,即不能将_inline 函数定义在一个外部文件中然后在引用的文件中申明为 extern类型。原因是 MDK中使用

2、的_inline 函数时和标准 C+中的 inline函数有相同的语义。在 C+标准中,一个内联函数在用到它的每个解释单元需要相同的定义,这样看来只有内部链接的才可能内联。将外部文件中的函数链接并内联似乎不可能,特别是外部函数是非内联的。为了在不同文件之间的函数可以内联,必须: 将这些函数放在一个通用的头文件中,例如 foo.h; 将这些函数标记为 extern _inline; 在需要该内联函数时,#include 内联函数所在的头文件。当编译器决定不内联某个函数时,在编译链接之后该函数只有一个拷贝。注:根据笔者的实验发现也可以将内联函数直接定义为_inline。在 MDK中如果将_inli

3、ne 函数申明为 extern的话,在编译时会通过,而在链接时会说这些函数没定义。这点与 Embest IDE不同。Embest IDE 允许将内联函数在外部文件中定义,在引用的文件中,只须申明为 extern类型即可通过编译链接。解决办法,将内联函数定义在.h 文件中,在需要引用的文件中包含该头文件。这样就可以调用头文件中的内联函数了。并且能正确通过编译、链接。其实在 MDK中 AT91RM9200的标准库中也是这么做的,AT91RM9200 的标准库有两个.h 文件AT91RM9200.h 和 lib_AT91RM9200.h,其中 AT91RM9200.h中定义一些常量和外围接口结构体。其中 lib_AT91RM9200.h中存放的就是库函数,其库函数均为内联函数。注:以上两个头文件存放的路径为 C:KeilARMINCAtmelRM9200。(其中 MDK安装路径为 C:Keil)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报