今天小编要和大家分享的是RF,无线相关信息,接下来我将从浅谈Contiki下进程与中断时序Bug解决方案,cc2650launchpad 运行contiki hello-world示例程序这几个方面来介绍。

RF,无线相关技术文章浅谈Contiki下进程与中断时序Bug解决方案cc2650launchpad 运行contiki hello-world示例程序

RF,无线相关技术文章浅谈Contiki下进程与中断时序Bug解决方案

几天前一个Bug,调试了2天才解决(已经有几年没有遇到过了),为此将该问题的原因和解决思路记载,以备忘和共享。生命有限,错误不能重犯。欢迎讨论,更欢迎您共享经验和智慧给我们。

需求引入:在无线组网通信中,为充分节能,Node一般需要深度睡眠,4秒内唤醒。Sink和Node通信时序如下

实现代码:基于Contiki操作系统的进程实现代码如下,其中PROCESS_YIELD()用于阻塞进程,等待信号。

/* Turn on RF to listen awake tone. */

NETSTACK_RADIO.on();

temptimer_Start(s_wWaitAwakeTime, InformTimeout);

PROCESS_YIELD();/* #1 阻塞进程,等待超时或接收到唤醒信号 */

if (PROCESS_EVENT_RX_AWAKE_TONE == ev) /* RX awake tone */

{

/* EXPLAIN: TIM is turned off by ISR of RF. */

temptimer_Start(s_wWaitDataTime, InformTimeout);

PROCESS_YIELD();/* #2 阻塞进程,等待超时或接收到数据帧 */

......

}

else /* Rx data that not to us */

{

......

}

错误原因:如下图所示,当node_process同时接收到2个信号时,上面代码的#2无法阻塞进程,导致出错。