你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用L073做项目,请教一个HAL库中宏定义应用方式的问题

[复制链接]
ataudio 提问时间:2017-6-16 16:46 /
stm32l073xx.h中有定义中断函数:
#define  LPUART1_IRQHandler     RNG_LPUART1_IRQHandler
......
#define  AES_RNGLPUART1_IRQHandler     RNG_LPUART1_IRQHandler
......

并且在stm32l0xx_it.c中,定义了函数AES_RNGLPUART1_IRQHandler(){}


按照预编译原理分析,A 用 B替换, C用B替换,是不是说明调用A,执行是按照C执行的呢?
如果这样,上面的define等同于#define A B,  #define   B  C,原文中这种换位置的定义的意义何在?


如果不是上面这种理解,
那么调用 AES_RNGLPUART1_IRQHandler()时,到底使用的是哪个函数?是自己的定义过程,还是RNG_LPUART1_IRQHandler过程(没有发现实现过程)。如是后者,AES_RNGLPUART1_IRQHandler()实现过程是不是多余了?




以前没见过这种定义方式,想确认一下,有没有网友在其他地方遇到过?


收藏 评论3 发布时间:2017-6-16 16:46

举报

3个回答
moyanming2013 回答时间:2017-6-16 17:50:20
你这么写:
  1. #define  AES_RNGLPUART1_IRQHandler     RNG_LPUART1_IRQHandler
复制代码

只是定义了个符号,遇到AES_RNGLPUART1_IRQHandler会用RNG_LPUART1_IRQHandler替换掉。
如果一些函数没有加weak修饰,而你又重复定义的话,应该会提示重复定义error吧。
xuguomin 回答时间:2017-6-17 08:36:17
不同的名称体现不同的属性,主要是帮助理解容易记忆
ataudio 回答时间:2017-6-19 10:04:31
moyanming2013 发表于 2017-6-16 17:50
你这么写:

只是定义了个符号,遇到AES_RNGLPUART1_IRQHandler会用RNG_LPUART1_IRQHandler替换掉。

一般来说,会更习惯用
#define A B
#define C B

...
然后定义函数:
B()
{
}


而文件中的
#define  A  B
#define  C  B

..
函数:
C()
{
}


预编译本意是替换,替换后的结果,还是要定义函数B了。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版