NewKing 发表于 2013-11-12 17:41:37

宏定义函数

最近在研究ARM,看到这样的代码:

#if defined(TARGET_IS_BLIZZARD_RA1) ||                                        \
    defined(TARGET_IS_BLIZZARD_RA3) ||                                        \
    defined(TARGET_IS_BLIZZARD_RB1)
#define ROM_UARTIntStatus                                                   \
      ((uint32_t (*)(uint32_t ui32Base,                                     \
                     bool bMasked))ROM_UARTTABLE)
#endif

#define ROM_UARTTABLE         ((uint32_t *)(ROM_APITABLE))

#define ROM_APITABLE            ((uint32_t *)0x01000010)

很多函数都是这样定义的,哪位高手能够指点一下迷津?

先谢啦!

cmheia 发表于 2013-11-12 18:03:10

mark 看到指针就心烦

qufuta 发表于 2013-11-12 18:48:41

我来解释下,首先要满足第一个宏的三个条件中的一个,那么就顶一个宏,这个代表后面数组里一个元素,这个元素是一个函数指针,并且被强制转成了前面写的哪个函数指正的形式。。。

NewKing 发表于 2013-11-12 20:30:37

qufuta 发表于 2013-11-12 18:48 static/image/common/back.gif
我来解释下,首先要满足第一个宏的三个条件中的一个,那么就顶一个宏,这个代表后面数组里一个元素,这个元 ...

最近看的一些代码总是指针指来指去,能再详细点不,谢谢!

qufuta 发表于 2013-11-13 12:19:32

NewKing 发表于 2013-11-12 20:30 static/image/common/back.gif
最近看的一些代码总是指针指来指去,能再详细点不,谢谢!

#if defined(TARGET_IS_BLIZZARD_RA1) ||                                        \
   defined(TARGET_IS_BLIZZARD_RA3) ||                                        \
   defined(TARGET_IS_BLIZZARD_RB1)
#define ROM_UARTIntStatus                                                   \
         ((uint32_t (*)(uint32_t ui32Base,                                     \
                        bool bMasked))ROM_UARTTABLE)
#endif

#define ROM_UARTTABLE         ((uint32_t *)(ROM_APITABLE))

#define ROM_APITABLE            ((uint32_t *)0x01000010)
你最不明白我想是这句:
#define ROM_UARTIntStatus                                                   \
         ((uint32_t (*)(uint32_t ui32Base,                                     \
                        bool bMasked))ROM_UARTTABLE)
其实这句话我们可以从右边到左边依次看,首先ROM_UARTTABLE这个代表一个数组的元素,具体什么元素,我不知道,因为你没贴出来,但是前面:((uint32_t (*)(uint32_t ui32Base,bool bMasked))这个就能够知道这个数组当中存放的一定是函数指针,所以这句话的意思就是把ROM_UARTTABLE这个元素强制转换成:((uint32_t (*)(uint32_t ui32Base,bool bMasked))这种类型的,然后用ROM_UARTIntStatus这个宏来替换,这些明白了吗???

NewKing 发表于 2013-11-13 15:34:47

qufuta 发表于 2013-11-13 12:19 static/image/common/back.gif
#if defined(TARGET_IS_BLIZZARD_RA1) ||                                        \
   defined(TARGE ...

谢谢指点,长进了,多谢!!!
页: [1]
查看完整版本: 宏定义函数