我正在使用一对MRF24J40无线电芯片来使一个PIC32微控制器板通过RF传输与另一个进行通信。我的所有代码都可以正常编译,但是不断出现与此代码相关的错误。

typedef struct
    {
        union
        {
            BYTE        Val;
            struct
            {
                BYTE    packetType      :2;             // type of packet. Possible types are
                                                        // * PACKET_TYPE_DATA - Data type
                                                        // * PACKET_TYPE_COMMAND -  Command type
                                                        // * PACKET_TYPE_ACK -  Acknowledgement type
                                                        // * PACKET_TYPE_RESERVE - Reserved type
                BYTE    broadcast       :1;             // 1: broadcast, 0: unicast
                BYTE    secEn           :1;             // 1: secure the MAC payload, 0: send plain text
                BYTE    repeat          :1;             // 1: allow repeaters to forward the message, 0: send message directly
                BYTE    ackReq          :1;             // 1: acknowledgement required, 0: no acknowldgement
                BYTE    destPrsnt       :1;             // 1: destination address in the packet, 0: destination address not in the packet
                BYTE    sourcePrsnt     :1;             // 1: source address in the packet, 0: source address not in the packet
            } bits;
        } flags;

        BYTE *      SourceAddress;                      // Address of the Sender
        BYTE *      Payload;                            // Pointer to the payload
        BYTE        PayloadLen;                         // Payload size
        BYTE        RSSIValue;                          // RSSI value for the received packet
        BYTE        LQIValue;                           // LQI value for the received packet
        #if defined(IEEE_802_15_4)
            BOOL        altSourceAddress;               // Source address is the alternative network address
            WORD_VAL    SourcePANID;                    // PAN ID of the sender
        #endif
    } MAC_RECEIVED_PACKET;


基本上,我已经尝试了地球上的所有内容,以便能够更改变量packetTypesecEnackReq等的值。我已经尝试在声明之后直接更改值,但这似乎是位长,而不是价值。该代码(直接来自微芯片网站)有注释,说1 = this和0 = that,但是我找不到可以更改这些值的地方。熟悉这些MRF24J40芯片的任何人的任何帮助将不胜感激。谢谢。

最佳答案

我不认为这与您的微控制器有任何特定关系,只是您可能不熟悉如何使用structunion定义C中的位域。

MAC_RECEIVED_PACKET是具有称为struct的字段的flagsflags是介于unionBYTE位域之间的struct,该位域称为bits

在声明中,bits中的每个字段后跟其位长。因此,例如2位的packetType可以取值0、1、2、3。您可以这样设置值:

MAC_RECEIVED_PACKET foo;
foo.flags.bits.packetType = 3;
foo.flags.bits.secEn      = 1;
/* etc. */

关于c - Microchip RF调制器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23140087/

10-11 16:01