我是靠谱客的博主 个性羽毛,这篇文章主要介绍IAR和KEIL防止编译器优化未使用的变量或者函数以及变量地址的绝对定位,现在分享给大家,希望可以做个参考。

IAR:__root
带有__root属性的函数或者变量,只要包含(include)他们的模块,无论是否被引用,编译器都不会优化,都将保留到目标代码中。
示例:

__root const u32 temp  @0x9F00     = 0x12345678;

注意:const表示的是常量类型,将temp这个只读变量保存到flash中,@0x9F00则代表的是flash的地址。

KEIL:attribute((used))

__attribute__((used))  //不知道为什么,文章不显示"__",有大佬知道的说一声

示例:

const uint32_t temp __attribute__((used)) __attribute__((at(0x9F00))) = 0x12345678;

注意:上面的示例中去掉__attribute__((used)),即使未引用变量,ARMCC编译器也可以把temp变量编译进去目标文件。

最后

以上就是个性羽毛最近收集整理的关于IAR和KEIL防止编译器优化未使用的变量或者函数以及变量地址的绝对定位的全部内容,更多相关IAR和KEIL防止编译器优化未使用内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(138)

评论列表共有 0 条评论

立即
投稿
返回
顶部