TI中文支持网
TI专业的中文技术问题搜集分享网站

关于TI-RTOS的休眠,使用例程rfWsnNode

您好: 我使用例程rfWsnNode和rfWsnConcentrator进行通信,请问rfWsnNode这个例程是否没有休眠呢? 我目前去除了传感器控制器这部分,想单纯的用一个定时器,超时就发送一组包,发生完成就休眠,我使用的是NodeTask.c文件中已经配置好的定时器

/* setup timeout for fast report timeout
Clock_setTimeout(fastReportTimeoutClockHandle,NODE_ADCTASK_REPORTINTERVAL_FAST_DURIATION_MS * 1000 / Clock_tickPeriod);
/* Start fast report and timeout */
Clock_start(fastReportTimeoutClockHandle);

然后在回调中发生数据包,重置定时器

工程有两个进程:

NodeRadioTask_init();
NodeTask_init();

里面分别有一个while(1)循环,NodeRadioTask中是在等待数据发送和接收的事件,NodeTask的循环是在等待定时器超时改变标志位进入,讲数据发送事件抛出。

我阅读了该工程的代码,没有发现在哪里能进入休眠,请问我如何才能在发送完数据包后进入休眠,然后再用定时器唤醒呢?谢谢

Viki Shi:

如果程序中已经无其他任务,你可以调用 task_sleep进入睡眠;或者使用时钟定时,这部分可以参考SDK里的时钟example

user4820439:

回复 Viki Shi:

你好,我查看了时钟的例程,但发现里面没有使用到休眠和唤醒,貌似仅仅是定时,然后超时输出。主程代码如下:

int main()
{/* Construct BIOS Objects */Clock_Params clkParams;/* Call driver init functions */Board_initGeneral();Clock_Params_init(&clkParams);clkParams.period = 5000/Clock_tickPeriod;clkParams.startFlag = TRUE;/* Construct a periodic Clock Instance */Clock_construct(&clk0Struct, (Clock_FuncPtr)clk0Fxn,5000/Clock_tickPeriod, &clkParams);clkParams.period = 0;clkParams.startFlag = FALSE;/* Construct a one-shot Clock Instance */Clock_construct(&clk1Struct, (Clock_FuncPtr)clk1Fxn,11000/Clock_tickPeriod, &clkParams);clk2Handle = Clock_handle(&clk1Struct);Clock_start(clk2Handle);BIOS_start();/* does not return */return(0);
}/**======== clk0Fxn =======*/
Void clk0Fxn(UArg arg0)
{UInt32 time;time = Clock_getTicks();System_printf("System time in clk0Fxn = %lu\n", (ULong)time);
}/**======== clk1Fxn =======*/
Void clk1Fxn(UArg arg0)
{UInt32 time;time = Clock_getTicks();System_printf("System time in clk1Fxn = %lu\n", (ULong)time);System_printf("Calling BIOS_exit() from clk1Fxn\n");BIOS_exit(0);
}

user4820439:

回复 Felix ZF:

非常感谢,我刚才在阅读低功耗的文档,是否需要 在 主函数中调用Power_enablePolicy(); 这个函数来启动呢?还是直接如你说所直接pend即可?

user4820439:

回复 Felix ZF:

真的非常感谢,愿你身体健康,工作顺利~

赞(0)
未经允许不得转载:TI中文支持网 » 关于TI-RTOS的休眠,使用例程rfWsnNode
分享到: 更多 (0)