我使用一对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;
基本上我已经尝试过地球上的所有内容,以便能够更改变量packetType
,secEn
,ackReq
等的值。我已尝试更改在声明之后直接写入值,但这似乎是位长,而不是值。代码(直接来自微芯片的网站)有评论说1 =这个和0 =那但我找不到任何可以改变这些值的地方。任何熟悉这些MRF24J40芯片的人的帮助都将不胜感激。谢谢。
答案 0 :(得分:0)
我认为这与您的微控制器没有任何关系,只是您可能不熟悉struct
和union
如何用于定义位域在C.
MAC_RECEIVED_PACKET
是struct
,其中有一个名为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;
希望这能帮到你