This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于BasicRF单步测试的问题

Other Parts Discussed in Thread: CC2530

您好,首先非常您感谢阅读此贴!

一、下面是正题:

1、使用两个CC2530的节点,一个作为发送节点,另一个作为接受节点。

2、使用BasicRF中的light_switch例程做单步测试实验,程序稍作改动,把灯控功能改做串口传输。

3、在IAR6.3上单步测试

 

二、下面是问题:

1、程序的第一个主循环正常,但是在第二个循环中始终停在while(!basicRfPacketIsReady());语句上。rxi.isReady的值在第二个接受循环中无法置1,请问有哪些情况会导致这样的问题?Ps:没有改动basicrf.c文件。

 

三、下面是接受节点的主循环:

while (TRUE)
    {
        while(!basicRfPacketIsReady());

        if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0)
        {
            for(i=0;i<10;i++)
            {
                Uart1_SendByte(pRxData[i]);
                pTxData[i]=pRxData[i];
            }
 
            basicRfSendPacket(SEND_ADDR, pTxData, APP_PAYLOAD_LENGTH);
        }
    }

 

四、下面是发送节点的主循环:

while (TRUE)
    {        
     if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0)
        {
            for(i=0;i<10;i++)
            {
                pTxData[i]=pRxData[i]+1;
            }           
            if(count==10)
            {
              count=0;
              basicRfSendPacket(SEND_ADDR, pTxData, APP_PAYLOAD_LENGTH);
            } 
        }
    }

再次感谢阅读此贴~感谢您宝贵的看法~
 

  • 跳出这个while循环的变量是

    rxi.isReady = TRUE

    这个变量是在static void basicRfRxFrmDoneIsr(void)函数里修改的,这个函数就是RF RX接收的中断处理函数。

    你看你的无线接收是否正确?

  • 好的,谢谢回复,很抱歉啊,无法确定是无线接收有问题,还是发生有问题,上网查阅过资料,有部分网友也碰到同样问题,有一种说法是basicRF不支持断网重组,每次发送都要初始化。

  • Hi Ziming,

    请尝试在basicRfSendPacket(SEND_ADDR, pTxData, APP_PAYLOAD_LENGTH);之后加入

    basicRfReceiveOn();

    查看basicRfSendPacket(SEND_ADDR, pTxData, APP_PAYLOAD_LENGTH);函数可以看到以下语句,

    // Turn off the receiver if it should not continue to be enabled
    if (!txState.receiveOn) {
    halRfReceiveOff();
    }

    也就是说在发送完之后默认是将接收功能关闭的。 也可以将以上语句注释掉。


  • Hi Wellin,非常感谢您的回复,我验证后再反馈信息,但是先提问一下if (!txState.receiveOn) {
    halRfReceiveOff();
    }条件判定中 (!txState.receiveOn) 有取非操作,我把它理解为当txState.receiveOn为0时,即当接收为关闭时,关闭接收功能,如果发生完之后是默认关闭接收功能,那就是说在发生后,txState.receiveOn会被清零,是这样的吗?

  • 我也遇到这个问题,我是直接用的官方代码,控制LED,结果,只有第一次控制时候,LED会有反应,之后再发送,接收节点就卡死在  while(!basicRfPacketIsReady()); 没反应了。 一直没解决。

  • 这个问题,是不是basicRF的一个Bug啊。

    我也遇到同样的问题:当第1次按键时,灯亮,第2次按键时灯不灭,仍然亮着

  • 这个问题最终是怎么解决的呢?
x 出现错误。请重试或与管理员联系。