OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4635|回复: 3

__attribute__((used))的使用问题

[复制链接]

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2018-7-24
在线时间
77 小时
发表于 2018-8-19 22:35:24 | 显示全部楼层 |阅读模式
1金钱
请问中断服务函数前的__attribute__((used))表示什么意思呀?网上只查到了几句话但是看不懂。
attribute.png

最佳答案

查看完整内容[请看2#楼]

在普通的C/C++程序中,有的时候为了调试,我们会特别地注释掉某个函数的调用。然而在编译时,编译器会发现,我的逗比程序员主人废了老鼻子劲写了一个函数,但是最终却没有调用它。那么为什么还要写这个函数呢?不行不行我一定要提醒他。于是就会有了这样的警告: 源代码,在keil2上进行的测试: [mw_shl_code=c,true]#include void fun(void); void main(void) { unsigned char a; while(1) { a++; } ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-19 22:35:25 | 显示全部楼层
在普通的C/C++程序中,有的时候为了调试,我们会特别地注释掉某个函数的调用。然而在编译时,编译器会发现,我的逗比程序员主人废了老鼻子劲写了一个函数,但是最终却没有调用它。那么为什么还要写这个函数呢?不行不行我一定要提醒他。于是就会有了这样的警告:

TIM截图20180819225743.png

源代码,在keil2上进行的测试:
[mw_shl_code=c,true]#include <reg51.h>

void fun(void);

void main(void)
{
        unsigned char a;
        while(1)
        {
                a++;
        }
}

void fun(void)
{
        static unsigned char b=0;

        b++;
}[/mw_shl_code]


虽然咱们知道原因是什么,但是如果这样操作的函数一多,这些警告会把可能真正有用的“警告”给淹没掉,而且看着也心烦。
于是我们就可以给那些我们声明并定义,但是可能会不调用的函数加上这个__attribute__((used)),表示对于这个函数我可能不会调用它、可能用不到它,编译器请你乖乖听话不吵不闹不上吊。

而在咱们单片机的编程中,像楼主贴图中的中断函数都是由单片机内部的中断处理机制通过中断向量做跳转调用的,不是咱们开发人员“显式”去调用的,因此在一些规则检查比较严格的编译器上编译时,就会出现类似于上面的警告,为了视野干净我们就添加这个属性。

十六进制带我飞。
回复

使用道具 举报

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2018-7-24
在线时间
77 小时
 楼主| 发表于 2018-8-20 08:58:42 | 显示全部楼层
DreamWaterPro 发表于 2018-8-19 22:35
在普通的C/C++程序中,有的时候为了调试,我们会特别地注释掉某个函数的调用。然而在编译时,编译器会发现 ...

哇,好形象呀,多谢多谢
回复

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-6-25
在线时间
71 小时
发表于 2018-11-21 13:24:09 | 显示全部楼层
DreamWaterPro解释的很形象,不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表