用L073做项目,请教一个HAL库中宏定义应用方式的问题
stm32l073xx.h中有定义中断函数:#defineLPUART1_IRQHandler RNG_LPUART1_IRQHandler
......
#defineAES_RNGLPUART1_IRQHandler RNG_LPUART1_IRQHandler
......
并且在stm32l0xx_it.c中,定义了函数AES_RNGLPUART1_IRQHandler(){}
按照预编译原理分析,A 用 B替换, C用B替换,是不是说明调用A,执行是按照C执行的呢?
如果这样,上面的define等同于#define A B,#define BC,原文中这种换位置的定义的意义何在?
如果不是上面这种理解,
那么调用 AES_RNGLPUART1_IRQHandler()时,到底使用的是哪个函数?是自己的定义过程,还是RNG_LPUART1_IRQHandler过程(没有发现实现过程)。如是后者,AES_RNGLPUART1_IRQHandler()实现过程是不是多余了?
以前没见过这种定义方式,想确认一下,有没有网友在其他地方遇到过?
你这么写:
#defineAES_RNGLPUART1_IRQHandler RNG_LPUART1_IRQHandler
只是定义了个符号,遇到AES_RNGLPUART1_IRQHandler会用RNG_LPUART1_IRQHandler替换掉。
如果一些函数没有加weak修饰,而你又重复定义的话,应该会提示重复定义error吧。 不同的名称体现不同的属性,主要是帮助理解容易记忆 moyanming2013 发表于 2017-6-16 17:50
你这么写:
只是定义了个符号,遇到AES_RNGLPUART1_IRQHandler会用RNG_LPUART1_IRQHandler替换掉。
一般来说,会更习惯用
#define A B
#define C B
...
然后定义函数:
B()
{
}
而文件中的
#defineAB
#defineCB
..
函数:
C()
{
}
预编译本意是替换,替换后的结果,还是要定义函数B了。
页:
[1]