instance_run();
if((instance_data[0].monitor == 1) && ((portGetTickCnt() - instance_data[0].timeofTx) > instance_data[0].finalReplyDelay_ms))

ACHOR 返回到Main函数(其它设备代码一样)执行下面的判断,我们先看monitor,看看之前有没有初始化,我们前面分析代码没有设置monitor所以只能找初始化了。---没有找到,我们认为它是0,所以不满足条件。

if(instancenewrange())
{

进去看看

int instancenewrange(void)
{
if(instance_data[0].newrange)
{
instance_data[0].newrange = 0;
return 1;
}
return 0;
}

同理,变量newrange,我们也没有找到初始化,所以认为它是0,所以最终也不满足if,接着往后。

发现后面在我们开始删减Main 函数,都删空了,没有内容。 感觉ANCHOR 第一次返回来什么实际东西都没有做。

由于while(1)循环,所以又会进入instance_run了

while(1)
{
instance_run();

instance_run

int done = INST_NOT_DONE_YET;
int message = instance_peekevent(); //get any of the received events from ISR
while(done == INST_NOT_DONE_YET)
{
//int state = instance_data[instance].testAppState;
done = instance_localdata[instance].testapprun_fn(&instance_data[instance], message) ;
// run the communications application
//we've processed message
message = 0;
}

与之前一样,我们假定peekevent 还是没有任何事件发生,message等于0。

由代码可以看出,每次必然会执行testapprun_s。

再次进入testapprun_s,回想一下,与前面AHCOR二进宫类似,inst->testAppState = TA_RXE_WAIT ; 进去执行一样的动作,打开接收器。然后退出,然后回到Main。然后在…… 感觉一直往复循环,是的,ANCHOR在这里等待TAG发送数据量,因为接收器打开了。 那何时能退出这个无限循环呢,但接收到无线信号,产生一个事件,message不为0. 回头再看一下之前的代码。

if(message == 0) break;

 假如我们接到无线数据,ANCHOR由于inst->testAppState 没有改变,所以依然执行case TA_RXE_WAIT 部分代码,但是最后没有break了,会把下面的一个case也执行,我们看看代码执行了啥

// end case TA_RXE_WAIT, don't break, but fall through into the TA_RX_WAIT_DATA state to process it immediately.
if(message == 0) break;
}
case TA_RX_WAIT_DATA : //already recive a message
// Wait RX data
//printf("TA_RX_WAIT_DATA %d", message) ;
switch (message)

会执行“already receive a message”,我们就不要无线循环ANCHOR了,我们该去看看TAG了

【DWM1000】 code 解密5一ACHOR 第一次回家Main 函数的更多相关文章

  1. 【DWM1000】 code 解密1一 去掉Main 函数多余内容

    蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 正文: 室内定位兴起,DWM1000 作为超宽带UWB的代表,在国内用的越来越多,但是可见资料非常少. 一方面 ...

  2. 【DWM1000】 code 解密6一TAG 状态机第一步

    我们前面分析过,不论ANCHOR 还是TAG,前面变量的初始化基本都是一样的,只是状态机必须明确区分不同的设备类型.我们从开始看TAG.由于初始化TAG的 testAppState一样初始化为TA_I ...

  3. 【DWM1000】 code 解密10 一 TAG 发送最后一个消息

    更上面ANCHOR发送信息时的RTLS_DEMO_MSG_ANCH_RESP, 我们很快就可以找到如下代码 case RTLS_DEMO_MSG_ANCH_RESP: { 这里面一部分是设置重要变量, ...

  4. 【DWM1000】 code 解密7一ANCHOR接收到BLINK

    接着之前ANCHOR的代码分析,但接收到无线数据,应该执行如下代码 case TA_RX_WAIT_DATA :   //already recive a message                ...

  5. 【DWM1000】 code 解密4一 ANCHOR 二进宫testapprun_s

    上面我们的代码分析到ANCHOR 调用了一次testapprun_s,但是后面退出后发现还是满足while 条件,逼不得已还得再次调用testapprun_s.testapprun_s 也就是这样一点 ...

  6. 【DWM1000】 code 解密3一ANCHOR RUN起来

    int done = INST_NOT_DONE_YET; #define INST_DONE_WAIT_FOR_NEXT_EVENT 1 //this signifies that the curr ...

  7. 【DWM1000】 code 解密2一 工程初始化代码分析

    instance_init 函数追下去,绝大多数的代码都在初始化如下结构体 typedef struct { INST_MODE mode; instance_init -ANCHOR //insta ...

  8. 【DWM1000】 code 解密9一 ANCHOR response poll message

    根据上面TAG发送的代码,我直接找到如下代码 case RTLS_DEMO_MSG_TAG_POLL: { if(inst->mode == LISTENER)                  ...

  9. 【DWM1000】 code 解密8一 TAG接收blink response 信号

    在分析这个部分前,目前我看到DWM1000 的资料,data可以分为blink和一般无线数据,后面有内容我们再扩充, 上面我们已经看到接收到blink触发的事件为 case SIG_RX_BLINK ...

随机推荐

  1. MySQL5.7.20报错Access denied for user 'root'@'localhost' (using password: NO)

    在centos6.8上源码安装了MySQL5.7.20,进入mysql的时候报错如下: 解决办法如下: 在mysql的配置文件内加入: vim  /etc/my.cnf skip-grant-tabl ...

  2. bootstrap和easyui

    1.easyui:自定义的样式要在原先的easyui样式之前引入,这样自定义的样式才能把原先的样式覆盖,即放置顺序为: <link rel="stylesheet" href ...

  3. Docker相关释义

    Docker相关释义 基础网站:http://www.runoob.com/docker/docker-tutorial.html Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上, ...

  4. Cookie中设置了 HttpOnly,Secure 属性,有效的防止XSS攻击,X-Frame-Options 响应头避免点击劫持

    属性介绍: 1) secure属性当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输(ssl),即 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证, 如果是 HT ...

  5. C++11 中的function和bind、lambda用法

    std::function 1. std::bind绑定一个成员函数 #include <iostream> #include <functional> struct Foo ...

  6. WCF 配置App.Config

    <system.serviceModel> <bindings> <basicHttpBinding> <binding name="/> & ...

  7. javascript 中 x offsetX clientX screenX pageX的区别

    在javascript的事件对象中的关于事件鼠标位置的几个属性(x, pageX, offsetX, scrrenX clientX)及(y, pageY, offsetY, screenY, cli ...

  8. Sway

    啥是Sway: http://livesino.net/archives/7520.live 地址:http://sway.com 现在又可以申请了   试试效果

  9. Java实现Redis消息队列

    这里我使用Redis的发布.订阅功能实现简单的消息队列,基本的命令有publish.subscribe等. 在Jedis中,有对应的java方法,但是只能发布字符串消息.为了传输对象,需要将对象进行序 ...

  10. 学习之"setjmp和longjmp函数"

    Linux学习之"setjmp和longjmp函数"   转贴,原文地址:http://www.cnblogs.com/lq0729/archive/2011/10/23/2222 ...