微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > zll灯端问题求解,关于zllSampleLight_OnOffCB函数

zll灯端问题求解,关于zllSampleLight_OnOffCB函数

时间:10-02 整理:3721RD 点击:

我的片子是cc2530f256,现在遇到一个问题,请ti的工程师帮帮忙

我在桥端发了一个开灯的命令,也就是COMMAND_ON,灯端收到命令后,会调用zllSampleLight_OnOffCB这个函数

我的问题是,为什么在这边函数中,条件满足后却不执行,我在线debug,这个地方也不能打断点,而是直接跑到下面的taggle的部分去了

后来我又试了下关灯的命令,结果是一样的,也是直接跑到下面的taggle部分去了,我不能理解,为什么条件满足却不能执行

static void zllSampleLight_OnOffCB( uint8 cmd )
{
// Turn on the light
if ( cmd == COMMAND_ON )  //当收到COMMAND_ON时为什么条件满足却不执行
{
zllSampleLight_OnOff = LIGHT_ON;      //此处为什么不能打断点
zllSampleLight_GlobalSceneCtrl = TRUE;
if ( zllSampleLight_OnTime == 0 )
{
zllSampleLight_OffWaitTime = 0;
}
}

// Turn off the light
else if ( cmd == COMMAND_OFF )//当收到COMMAND_OFF命令时,这边满足条件却不执行
{
zllSampleLight_OnOff = LIGHT_OFF;//此处为什么不能打断点
//zllSampleLight_GlobalSceneCtrl = FALSE; //see ZLL spec 11-0037-03 6.6.1.2.1
zllSampleLight_OnTime = 0;
}

// Toggle the light
else
{
if ( zllSampleLight_OnOff == LIGHT_OFF )  //当收到COMMAND_ON时,跑到这里,
{
zllSampleLight_OnOff = LIGHT_ON;   //这边都可以打断点
zllSampleLight_GlobalSceneCtrl = TRUE;
if ( zllSampleLight_OnTime == 0 )
{
zllSampleLight_OffWaitTime = 0;
}
}
else
{
zllSampleLight_OnOff = LIGHT_OFF;//当收到COMMAND_OFF命令时,执行这里
zllSampleLight_OnTime = 0;
}
}

hwLight_UpdateOnOff( zllSampleLight_OnOff );

zllSampleLight_SceneValid = 0;
}

不知道我的意思描述的清楚不?希望能看懂,并且尽快给我答复,谢谢了!

有没有人来帮我解答一下啊?

首先你发送的on/off命令,灯有没有正常的相应。

没办法断点,可能是IAR优化代码的缘故。

你也可以通过空中抓包把这个过程看下。

首先很感谢vv帮我解答问题,我发送的on/off命令,灯是可以正常的响应的 其次,我不知道为什么这边会被优化,这边应该是很正常的条件语句啊 我是在读灯的开关属性的时候,发现这边的问题的

VV

首先你发送的on/off命令,灯有没有正常的相应。

没办法断点,可能是IAR优化代码的缘故。

你也可以通过空中抓包把这个过程看下。

首先很感谢vv帮我解答问题,我发送的on/off命令,灯是可以正常的响应的 其次,我不知道为什么这边会被优化,这边应该是很正常的条件语句啊 我是在读灯的开关属性的时候,发现这边的问题的,灯的属性读出来总是0 ,不知道zll官方协议对这边有没有做

Ann:

前面@VV 说得对,这是IAR优化代码的缘故。

分析一下汇编代码,先看我用红色框起来的部分:

执行到  else if ( cmd == COMMAND_OFF ) 这句,如果为真,跳转的位置是直接到下面的0x68FE0,从C代码来看,就是跑到toggle里面去了,执行的语句是一样的,都是:

      zllSampleLight_OnOff = LIGHT_OFF;
      zllSampleLight_OnTime = 0;

这个原因是编译器发现两种条件都会调用同样的代码块,就不再把同样的代码块复制一份了,而是直接合成一个,两种条件都会跳转到那同一个代码块里面,以优化生成文件的体积。

我试了把IAR的优化关掉,然而那样生成的代码CC2530F256就放不下了,直接报错,所以,只能这样了……

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top