我是靠谱客的博主 个性羽毛,最近开发中收集的这篇文章主要介绍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防止编译器优化未使用的变量或者函数以及变量地址的绝对定位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部