MDK 中 [WEAK] 的作用
简介
__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] 的作用相关推荐
- Keil-MDK 中 [WEAK] 的作用
转自:http://blog.csdn.net/kissmonx/article/details/21622187 一句话:标记__weak 或 [weak]的函数 就是用在本文件占位的,如果别的文件 ...
- VMware虚拟机文件夹中各文件作用详解
VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...
- Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用
文章目录 亚硝酸盐氧化细菌在黑暗海洋中的主要作用 写在前面 摘要 热心肠日报 背景 结果 图1 非全长16S rRNA基因序列的系统发育树 图2 通过募集宏基因组片段的方法确定亚硝酸盐氧化细菌单扩增基 ...
- 丰度决定了细菌在复杂群落中的功能作用
本文转载自"微生态笔记",已获授权 标题:Abundance determines the functional role of bacterial phylotypes in c ...
- tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率 损失率,便于判断模型的训练效果:是过拟合还是欠拟合(过拟合)
tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率,便于判断模型的训练效果:是过拟合还是欠拟合 过拟合:训练数据的准确率较高而测试数据的准确率较低 欠 ...
- C#中构造函数的作用
C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有, ...
- python里dir是什么意思_python中dir什么作用
python中dir的作用是:1.dir函数传入数据类型返回该数据类型的所有内置方法:2.dir函数传入模块名返回该模块的所有属性和方法. dir() 内置函数的作用 python 内置方法有很多,无 ...
- 浅析SEO优化中标签的作用?
目前,已经有很多企业网站有专门的优化人员来进行SEO优化,在网站SEO优化的过程中会使用到很多标签来利于搜索引擎的读取,提升网站的排名和权重.就以大连网龙科技旗下产品云霸屏为例来讲,云霸屏作为一款全网 ...
- Hibernate 中lazy的作用
Hibernate 中lazy的作用 上一篇 / 下一篇 2009-06-24 20:02:20 / 个人分类:java 查看( 506 ) / 评论( 2 ) / 评分( 5 / 0 ) < ...
- 【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )
文章目录 一.调试进程中寄存器的作用 二.通过 EIP 寄存器控制程序运行 三.EIP 寄存器的存档与恢复 一.调试进程中寄存器的作用 内存是一个线性结构 , 将动态库加载到内存中后 , 每个动态库文 ...
最新文章
- 模型大小 与参数量计算
- 搜索引擎学习(五)Lucene操作索引
- 为什么要设置环境变量,环境变量有什么用?
- [html] 如何构建“弱网络环境”友好的项目?
- 惹恼程序员的10件事
- linux 16.04系统下载,【ubuntu16.04】ubuntu(乌班图系统)镜像文件下载 v16.04 稳定版本-七喜软件园...
- 【Codecs系列】HEVC标准(九):环路滤波技术之SAO
- 森林笔记之Qt:消息对话框(消息盒子)
- latex图片的子标题放在中间
- Kaldi中如何使用已经训练好的模型进行语音识别ASR呢?
- 服务器看门狗芯片电路图,看门狗电路简介(低成本)
- 信息安全快讯丨生日快乐,我的国
- 魔乐科技安卓开发教程----李兴华----19 传感器
- html父级添加伪类after,关于伪类after后续追加,实现js事件(如点击事件)
- [日推荐]『旅行云清单』列好清单,准备出发!
- 解决Arduino环境下ESP8266模块无限重启崩溃问题
- p20华为云电脑白屏_强大的华为云电脑真的可以让我们彻底丢掉电脑?
- Unity3D骨骼动画的分解(CleanData.Ani详解)
- i211网卡在Monterey及以上驱动方法
- Java基本注解详解(超级详细)