Microchip RF调制器问题

时间:2014-04-17 17:52:54

标签: c microchip pic32

我使用一对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 =这个和0 =那但我找不到任何可以改变这些值的地方。任何熟悉这些MRF24J40芯片的人的帮助都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

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

MAC_RECEIVED_PACKETstruct,其中有一个名为flags的字段。 flags是名为union的{​​{1}}和BYTE位域之间的struct

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

bits

答案 1 :(得分:0)

当你说你试图改变价值时,

取决于你的意思。 例如,如果要选择数据包类型并设置PACKET_TYPE_ACK - 确认类型:

MAC_RECEIVED_PACKET myrpacket; 

myrpacket.flags.bits.packetType=2;

packetType可以采用以下值:

00 =0 --> PACKET_TYPE_DATA
01 =1 --> PACKET_TYPE_COMMAND
10 =2 --> PACKET_TYPE_ACK
11 =3 --> PACKET_TYPE_RESERVE

为什么?

位,是BYTE数据,而packetType是该字节的前2位,如结构中声明的那样:

  BYTE    packetType      :2;

所以如果你想设置ackReq

  myrpacket.flags.bits.ackReq=1;

希望这能帮到你