简介

__weak 或 [weak] 具有相同的功能,用于定义变量或者函数,常见于定义函数,在 MDK 链接时优先链接定义为非 weak 的函数或变量,如果找不到则再链接 weak 函数。

在STM32 的启动文件中有以下定义:

; Reset handler
Reset_Handler   PROCEXPORT  Reset_Handler             [WEAK]IMPORT  __mainIMPORT  SystemInitLDR     R0, =SystemInitBLX     R0               LDR     R0, =__mainBX      R0ENDP; Dummy Exception Handlers (infinite loops which can be modified)NMI_Handler     PROCEXPORT  NMI_Handler                [WEAK]B       .ENDP
HardFault_Handler\PROCEXPORT  HardFault_Handler          [WEAK]B       .ENDP
MemManage_Handler\PROCEXPORT  MemManage_Handler          [WEAK]B       .ENDP

如上所述,如果链接时没有找到与 [weak] 定义相同的函数名,那么此函数的功能即为“ B . ”循环。

再举一个关于 __weak 的例子(来自百度):

weakTest.c 文件:

__weak void weakFunctioin(void){            //定义为__weak类型的函数logInfo("print weakFunction\r\n");
}int weakFunctionTest(unsigned int tst){logInfo("print A\r\n");if (tst) {logInfo("print B\r\n");weakFunctioin();                   //调用函数logInfo("print C\r\n");}else{logInfo("print D\r\n");}logInfo("print E\r\n");return 0;
}

main.c 文件:

void weakFunctioin(void){                 //定义为正常的函数logInfo("print nonWeakFunction\r\n");return;
}int main(void){logInit(logLevelDebug);logInfo("Build @ %s %s,system start\r\n", __DATE__, __TIME__);weakFunctionTest(1);logInfo("Build @ %s %s,system stop\r\n", __DATE__, __TIME__);while(1);return 0;
}

编译链接运行后,结果如下:

-I: Build @ Jun 12 2017 15:14:18,system start
-I: print A
-I: print B
-I: print nonWeakFunction
-I: print C
-I: print E
-I: Build @ Jun 12 2017 15:14:18,system stop

转载于:https://www.cnblogs.com/GyForever1004/p/8893866.html

MDK 中 [WEAK] 的作用相关推荐

  1. Keil-MDK 中 [WEAK] 的作用

    转自:http://blog.csdn.net/kissmonx/article/details/21622187 一句话:标记__weak 或 [weak]的函数 就是用在本文件占位的,如果别的文件 ...

  2. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  3. Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用

    文章目录 亚硝酸盐氧化细菌在黑暗海洋中的主要作用 写在前面 摘要 热心肠日报 背景 结果 图1 非全长16S rRNA基因序列的系统发育树 图2 通过募集宏基因组片段的方法确定亚硝酸盐氧化细菌单扩增基 ...

  4. 丰度决定了细菌在复杂群落中的功能作用

    本文转载自"微生态笔记",已获授权 标题:Abundance determines the functional role of bacterial phylotypes in c ...

  5. tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率 损失率,便于判断模型的训练效果:是过拟合还是欠拟合(过拟合)

    tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率,便于判断模型的训练效果:是过拟合还是欠拟合 过拟合:训练数据的准确率较高而测试数据的准确率较低 欠 ...

  6. C#中构造函数的作用

    C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有, ...

  7. python里dir是什么意思_python中dir什么作用

    python中dir的作用是:1.dir函数传入数据类型返回该数据类型的所有内置方法:2.dir函数传入模块名返回该模块的所有属性和方法. dir() 内置函数的作用 python 内置方法有很多,无 ...

  8. 浅析SEO优化中标签的作用?

    目前,已经有很多企业网站有专门的优化人员来进行SEO优化,在网站SEO优化的过程中会使用到很多标签来利于搜索引擎的读取,提升网站的排名和权重.就以大连网龙科技旗下产品云霸屏为例来讲,云霸屏作为一款全网 ...

  9. Hibernate 中lazy的作用

    Hibernate 中lazy的作用 上一篇 / 下一篇  2009-06-24 20:02:20 / 个人分类:java 查看( 506 ) / 评论( 2 ) / 评分( 5 / 0 ) < ...

  10. 【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )

    文章目录 一.调试进程中寄存器的作用 二.通过 EIP 寄存器控制程序运行 三.EIP 寄存器的存档与恢复 一.调试进程中寄存器的作用 内存是一个线性结构 , 将动态库加载到内存中后 , 每个动态库文 ...

最新文章

  1. 模型大小 与参数量计算
  2. 搜索引擎学习(五)Lucene操作索引
  3. 为什么要设置环境变量,环境变量有什么用?
  4. [html] 如何构建“弱网络环境”友好的项目?
  5. 惹恼程序员的10件事
  6. linux 16.04系统下载,【ubuntu16.04】ubuntu(乌班图系统)镜像文件下载 v16.04 稳定版本-七喜软件园...
  7. 【Codecs系列】HEVC标准(九):环路滤波技术之SAO
  8. 森林笔记之Qt:消息对话框(消息盒子)
  9. latex图片的子标题放在中间
  10. Kaldi中如何使用已经训练好的模型进行语音识别ASR呢?
  11. 服务器看门狗芯片电路图,看门狗电路简介(低成本)
  12. 信息安全快讯丨生日快乐,我的国
  13. 魔乐科技安卓开发教程----李兴华----19 传感器
  14. html父级添加伪类after,关于伪类after后续追加,实现js事件(如点击事件)
  15. [日推荐]『旅行云清单』列好清单,准备出发!
  16. 解决Arduino环境下ESP8266模块无限重启崩溃问题
  17. p20华为云电脑白屏_强大的华为云电脑真的可以让我们彻底丢掉电脑?
  18. Unity3D骨骼动画的分解(CleanData.Ani详解)
  19. i211网卡在Monterey及以上驱动方法
  20. Java基本注解详解(超级详细)

热门文章

  1. (9)数据结构-双端队列
  2. Ubuntu 18.04 8T硬盘挂载
  3. 【leetcode】栈(python)
  4. pandas常用函数总结
  5. Python机器学习库sklearn几种分类算法建模可视化(实验)
  6. 自然语言处理基础技术工具篇之NLTK
  7. BP神经网络预测(人口)程序(matlab)
  8. python之format函数学习
  9. 安装python报错
  10. itex将html转成pdf加水印,Springboot 中集成itextpdf HTML转PDF并添加水印(支持中文)