/*
I fucking love tinyOS right now!
*/
module AppM{
uses interface Boot;
uses interface Leds;
uses interface Timer<TMilli> as Timer;
uses interface Alarm<T32khz,uint32_t> as Alarm;
}
//通用组件
//即与接口实际的组件接口进行连接起来
implementation {
uint8_t i=0;
void set_powermode(int mode)//设置能源模式
{
int j=0;
if(mode<4) //休眠
{
SLEEPCMD |= mode; //选择模式,置1
PCON |= 0x01; //休眠模式.idle位置1表示休眠
for(j=0;j<4;j++); //???延时
}
else //工作
PCON=0; //系统唤醒,idle位置零
}
event void Boot.booted()
{
i=0;
// call Timer.startPeriodic(1024);
call Alarm.start(1024*3);
set_powermode(2);
}
/*因为timer或者alarm(抢占)镶嵌在彼此,没有再booted里面,所以,一次之后,就会被抹掉???*/
task void demo(){ //在这个demo任务里,睡眠的时间上限就30多秒,达不到一分钟~可能是一个任务不阔以被阻塞或挂起太久????
EA = 1; //开中断?
i=0;
call Alarm.start(1024*3);
set_powermode(2);
}
event void Timer.fired(){
if(i==5){
i=0;
post demo(); //这里如果直接把post任务里的东西放这里,效果完全不一样
//也许是竞争寄存器资源导致的死锁????
}
i++;
call Leds.led0Toggle();
}
async event void Alarm.fired(){//中断处理程序里用同步函数,只有用布置的方法 ???
call Timer.startPeriodic(100);
}
}
tinyOS
最新推荐文章于 2023-04-21 19:25:00 发布