特殊的结构类型

Peculiar struct type

所以我在查看 Microchip 的 dsPIC MCU 头文件时偶然发现了这个结构:

/* Generic structure of entire SFR area for each UART module */
typedef struct tagUART {
        uint16_t uxmode;
        uint16_t uxsta;
        uint16_t uxtxreg;
        uint16_t uxrxreg;
        uint16_t uxbrg;
} UART, *PUART;

我似乎无法弄清楚这里的类型或实例是什么(以及这样设计的目的):

  1. 什么是tagUART?
  2. 什么是 UART?
  3. 什么是*PUART?

它是一体化形式的

struct tagUART { // the structure itself with all its details
        uint16_t uxmode;
        uint16_t uxsta;
        uint16_t uxtxreg;
        uint16_t uxrxreg;
        uint16_t uxbrg;
};

typedef struct tagUART UART; // UART is a shorter name for struct tagUART
typedef struct tagUART *PUART; // PUART is a pointer-type to such a struct

What is tagUART?

这是结构的名称。

What is UART?

这是结构的 typedef/alias。

What is *PUART?

它是一个 typedef/alias 指向结构的指针。