首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microchip RF调制器问题

Microchip RF调制器问题
EN

Stack Overflow用户
提问于 2014-04-18 01:52:54
回答 2查看 136关注 0票数 0

我正在使用一对MRF24J40无线电芯片让一块PIC32微控制器板通过射频传输与另一块板进行通信。我可以很好地编译我的所有代码,但我一直收到与此代码相关的错误。

代码语言:javascript
复制
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等的值。我试着在他们声明之后直接改变值,但这似乎是位长度,而不是值。代码(直接从microchip的网站)有注释1= this和0=那个,但我没有找到可以更改这些值的地方。任何熟悉这些MRF24J40芯片的人的帮助都将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-04-18 02:30:02

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

MAC_RECEIVED_PACKET是一个struct,它有一个名为flags的字段。flagsBYTE和名为bitsstruct位字段之间的union

在声明中,bits中的每个字段后面都跟有它的位长度。因此,例如,2位的packetType可以采用值0、1、2、3。您可以这样设置这些值:

代码语言:javascript
复制
MAC_RECEIVED_PACKET foo;
foo.flags.bits.packetType = 3;
foo.flags.bits.secEn      = 1;
/* etc. */
票数 0
EN

Stack Overflow用户

发布于 2014-04-18 02:32:18

这取决于您说您试图更改值​​时的意思。例如,如果您想选择数据包类型并设置PACKET_TYPE_ACK确认类型:

代码语言:javascript
复制
MAC_RECEIVED_PACKET myrpacket; 

myrpacket.flags.bits.packetType=2;

packetType可以采用以下值:

代码语言:javascript
复制
00 =0 --> PACKET_TYPE_DATA
01 =1 --> PACKET_TYPE_COMMAND
10 =2 --> PACKET_TYPE_ACK
11 =3 --> PACKET_TYPE_RESERVE

为什么?

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

代码语言:javascript
复制
  BYTE    packetType      :2;

因此,如果您想要设置ackReq

代码语言:javascript
复制
  myrpacket.flags.bits.ackReq=1;

希望这能对你有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23140087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档