C语言--weak的作用

2023-10-27

weak 顾名思义是“弱”的意思,在汇编中, 在函数名称后面加[WEAK]来表示, 而在 C语言中,在函数名称前面加上__weak 修饰符来表示, 这样的函数我们称为“弱函数”。

被[WEAK]或__weak 声明的函数, 我们可以在自己的文件中重新定义一个同名函数,最终编译器编译的时候,会选择我们定义的函数,如果我们没有重新定义这个函数,那么编译器就会执行[WEAK]或__weak 声明的函数,并且编译器不会报错。

例如,在正点原子战舰开发板 HAL 库例程实验 1 跑马灯实验。我们用 HardFault_Handler中断函数举例。在启动文件的 161 行到 165 行,定义了 HardFault_Handler 中断函数,且声明为“弱函数”,如图
在这里插入图片描述
同样我们打开stm32f1xx_it.c文件的60行到66行也定义了HardFault_Handler中断函数,如图
在这里插入图片描述
在 stm32f1xx_it.c 文件定义了 HardFault_Handler 中断函数的情况下,当HardFault_Handler 中断来到的时候,代码会运行到 stm32f1xx_it.c 文件的 HardFault_Handler中断函数,且进入 while(1)。
下面,我们注释掉 stm32f1xx_it.c 的 HardFault_Handler 中断函数,然后进行编译,发现不会报错。这时候当 HardFault_Handler 中断来到的时候,代码会运行到启动文件的“弱函数”中,即在启动文件中 164 行代码,进行原地跳转(即无限循环)

需要注意的是在C语言中__weak是一个宏,和__packed是同一种东西都是gcc的扩展属性:

#define __packed __attribute__((packed))
#define __weak __attribute__((weak))

如果这个关键字用在函数定义上面,一般情况下和一般函数没有两样。但是当有一个同名函数但是不带__weak被定义时,所有对这个函数的调用都是指向后者(不带__weak那个), 如果有两个一样的函数都用了__weak,那么真正调用那个,就要看连接器了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言--weak的作用 的相关文章

随机推荐

  • Python random库详解

    一 常用方法 在使用random 的时候需要先导入函数包 import random 以下是一些常用的方法 import random result1 random random 随机生成一个浮点数 0 1 result2 random r
  • 第37步 深度学习图像识别:CNN建模(Tensorflow)

    基于WIN10的64位系统演示 一 写在前面 1 深度学习图像识别的原理 我们思考一下 当你看到一张椅子的图片 你的大脑会告诉你这是个椅子 但你有没有想过 为什么你知道这是椅子 你的大脑是怎么做推论的 你可能会说因为椅子有腿 有座位 有靠背
  • 十四. Kubernetes 工作负载 之 Deployment

    目录 一 Deployment 基础解释 RC RS 解释 二 Deployment 的更新机制 版本回滚 滚动升级 三 资源限制与动态扩缩容 安装 Metrics server HPA 动态扩缩容 五 蓝绿部署与金丝雀部署 六 Deplo
  • mybatis报错lineNumber:31,columnNumber:17,元素类型为configuration的内容必须匹配解决方法

    在写一个mybatis测试demo时发现配置mybatis xml报错如下 org apache ibatis exceptions PersistenceException Error building SqlSession Cause
  • osx制作u盘安装盘

    官方教程 为了方便我直接把所需文件放在 目录 打开终端执行 cd sudo createinstallmedia volume Volumes hp x750w applicationpath Install OS X El Capitan
  • BP神经网络回归---房价预测

    xue 学 tu 途 Hello 各位小伙伴们大家早上好呀 这期 博主给大家分享如何用BP神经网络回归去拟合波士顿的房价数据 从而训练出一个可以预测波士顿房价的神经网络模型 神经网络回归 BP神经网络 回归
  • 第八章 linux系统引导过程及引导修复

    1 bios初始化 虚拟机可通过如下方法进入 调整默认启动 关闭selinux vim etc sysconfig selinux 2 磁盘引导 mbr 主引导记录 0磁道1扇区446 作用 记录grub2引导文件的位置 当mbr数据丢失系
  • Mybatis 只返回特定字段的方法

    参考地址 https blog csdn net menghuannvxia article details 82906341 mybatis中如果返回对象集合的话 会把对象中的所有字段都返回 如果表中字段很多而我只需要部分字段 有几种解决
  • mysql及sql基础语法笔记

    一 mysql初始工作 安装卸载 服务启动停止 登陆退出 dos里面 mysql u root p 123321 quit 语言规范 1 SQL 语言大小写不敏感 数据大小写是敏感的 2 SQL 可以写在一行或者多行 3 关键字不能被缩写也
  • Python复习

    类似 xxx 这种格式的变量是特殊变量 允许被直接引用 但是会被用作特殊用途 比如 author name 就是属于特殊变量 hello模块定义的文档注释也可以用特殊变量 doc 访问 我们自己编程定义的变量一般不会用这种变量名 类似 xx
  • MyBatis总结(3)---映射文件的元素配置

    MyBatis 1 简介 映射文件是MyBatis框架中十分重要的文件 可以说 MyBatis框架的强大之处就体现在映射文件的编写上 映射文件的命名一般是实体类名 Mapper xml 例 Student类对应的映射文件是StudentMa
  • 删除PostgreSQL数据库中的所有表

    1 使用navicat建立连接 代码中的配置 jdbc driverClassName org postgresql Driver jdbc url jdbc postgresql localhost 5432 postgres jdbc
  • Python程序运行出现TypeError: run() missing 1 required positional argument: ‘test’

    TypeError run missing 1 required positional argument test 文章目录 源代码 错误类型 解决办法 源代码 import unittest from app import BASE DI
  • 积木画-蓝桥杯(dp)

    试题 G 积木画 问题描述 小明最近迷上了积木画 有这么两种类型的积木 分别为 I 型 大小为 2 个单位面积 和 L 型 大小为 3 个单位面积 同时 小明有一块面积大小为 2 N 的画布 画布由 2 N 个 1 1 区域构成 小明需要用
  • CSS布局-解决flex布局下多行元素既可以均匀对齐最后一行也可以从左到右排列

    首先 你有没有遇到过这种情况 你既想让它均匀分布 还想让最后一行从左向右排列 此时你的代码应该是这样的 box display flex justify content space evenly flex wrap wrap box inf
  • 在工作中学习,在学习中工作

    2011年八月第二周 时间还是和以前一样过的那么快 一周的时间转眼就过去了 这一周 对工作中所需的知识点进行了两天的培训 其余的时间都是Flex及其开源框架Caringorm的学习 因为之前没有接触过Flex 所以现在的学习是一种 即学式
  • 自定义注解注入属性值(基于类构造方法)

    本文将举例说明如何通过构造方法来处理注解 实现属性注入 自定义注解Name 实现超类 定义注解处理方法 子类使用注解 自定义注解Name 定义一个注解 Name Name注解可以接收一个String类型的属性 并且可以使用在类或者属性上 T
  • 机器学习——入门

    机器学习算法分类 监督学习 目标值是类别 gt 分类问题 k 近邻算法 贝叶斯分类 决策树与随机森林 逻辑回归 目标值是连续型的数据 gt 回归问题 线性回归 岭回归 无监督学习 没有目标值 gt 无监督学习 聚类k means 机器学习开
  • AD7124-4 精度

    AD7124芯片 是属于AD公司的较新产品 高达24位的精度 确实让人眼馋 究竟如何呢 寄存器配置顺序 1 AD上电后 先关闭SPI片选 2 使能开启单片机的 SPI 3 复位设备及所有内部寄存器 发送64位的1 也就是8个0xFF 4 读
  • C语言--weak的作用

    weak 顾名思义是 弱 的意思 在汇编中 在函数名称后面加 WEAK 来表示 而在 C语言中 在函数名称前面加上 weak 修饰符来表示 这样的函数我们称为 弱函数 被 WEAK 或 weak 声明的函数 我们可以在自己的文件中重新定义一