文档章节

stm32h7 __attribute__((weak)) 使用说明

青春无极限
 青春无极限
发布于 03/26 10:20
字数 421
阅读 14
收藏 0

在用stm32h7 板子的时候,看了一个usmart历程,里面有个usart.c函数,声明了一个函数叫做HAL_UART_RxCpltCallback(UART_HandleTYpeDef *huart)

然后再stm32h7xx_hal_uart.c里看到了同样的一个函数

__weak void HAL_UART_RxCpltCallback(UART_HandleTYpeDef *huart)

{

}

然后看了下__weak的定义:#define __weak __attribute__((weak))

场景:
A,B两个模块,A模块调用了不确定B模块是否提供了函数,但是又不得不调用,这个时候在A模块中再申明一个弱符号函数,即用weak,如果外部提供了调用外部的,如果没提供调用申明的。

弱符号:
若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak属性,则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号。

示例:
//模块A中调用func,但是不确定外部是否提供了该函数
...
extern int func(void);
 
...
 
int a = func();
 
...
如果直接这么调用,如果外部不提供该函数程序可能出现crash。

所以在本模块中__attribute__((weak))就派上了用场

int  __attribute__((weak))  func(......)
 
{
 
    return 0;
 
}

 

© 著作权归作者所有

青春无极限
粉丝 2
博文 129
码字总数 71498
作品 0
卢湾
程序员
私信 提问
GCC _attribute__ weak weakref

#include <stdio.h> /void test(){printf("the test for weak refrence!n");}/ static attribute ((weakref("test"))) void foo(); int main(){if(foo) foo();} 如果test函数有定义,执行mai......

j_m
2012/09/13
1K
0
请问有人用过GNU的__attribute__么,第一次碰到,请教个问题

大家好,我想问一下, #define WEAK_DEF __attribute__ ((weak, alias("default_api"))) int default_api(void) { return -9999; } 这里的attribute是给WEAK_DEF设置了一个属性? 对齐这个d......

Bearnerd
2016/06/06
130
0
代码中weak, alias

weak弱符号alias当弱符号没有其它定义时使用指定函数以下是u-boot的例子 u-boot中允许根据硬件自定义cpu级和板级的net初始化函数,当不需要定制时,可以不定义,以默认函数代替。上面的代码将...

lgl88911
2015/08/29
79
0
数据挖掘-决策树ID3分类算法的C++实现

数据挖掘课上面老师介绍了下决策树ID3算法,我抽空余时间把这个算法用C++实现了一遍。 决策树算法是非常常用的分类算法,是逼近离散目标函数的方法,学习得到的函数以决策树的形式表示。其基...

SibylY
2014/01/05
298
0
GNU __attribute__

attribute可为函数,变量,类型设置属性 const ISRfunc isrvector[76] attribute ((section(.isr_vector))) 该变量放在.isr_vector的section内 static void sysreset(void) attribute_((nak......

lgl88911
2012/07/15
127
0

没有更多内容

加载失败,请刷新页面

加载更多

黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
6
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
9
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
5
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
昨天
9
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部