设置MCU头

时间:2017-08-07 03:06:36

标签: c macros cpu-registers

我在设置图书馆时遇到了一些麻烦。

我期待得到像PINSEL(P,N)这样的宏,P为GPIO端口号,N为端口引脚号。

#ifndef uint32_t
typedef unsigned int uint32_t;
#endif

#ifndef __RW
#define __RW volatile
#endif
#ifndef __R
#define __R volatile const
#endif

typedef union{
     struct {
         uint32_t PINSELP4:2;
     } PINSELP4[16];
    struct{
        __RW uint32_t PINSEL9_;
    };
    struct{
        __RW uint32_t RES1_:24;
        __RW uint32_t PINSELP4_28_:2;
        __RW uint32_t PINSELP4_29_:2;
        __RW uint32_t RES2_:4;
    };
}PINSELP4_t;

#define PINSELP4_ ((PINSELP4_t *)(0x4002C024))
#define PINSELP4(N) PINSELP4_->PINSELP4_[N]->PINSELP4
#define PINSEL9 PINSELP4_->PINSEL9_
#define PINSELP4_28 PINSELP4_->PINSELP4_28_
#define PINSELP4_29 PINSELP4_->PINSELP4_29_

上面的例子显示了我定义的5个较短的结构。

所以我已经定义了这两个宏

#define PINSEL__(N)[] {PINSELP0(N),PINSELP1(N),PINSELP2(N),PINSELP3(N),PINSELP4(N)}
#define PINSEL(P,N) PINSEL__(N)[P]

我正在尝试制作一个“宏阵列”来实现这个目的。这是我弄明白的唯一方法。它仍然无法正常工作。当我调用宏时,我得到了

../src/../Includes/PINSEL_LPC1769.h:246:20: error: expected expression before '[' token
#define PINSEL__(N)[]={PINSELP0(N),PINSELP1(N),PINSELP2(N),PINSELP3(N),PINSELP4(N)}
                    ^

为错误。

我正在尝试制作一个非常完整的下层,以便我可以获得更清晰的应用层。所以,如果有另一种方法,我会听。

谢谢大家!

0 个答案:

没有答案
相关问题