原创 tinyos编程

2011-6-29 13:33 1089 6 6 分类: 消费电子

module RealMain {
  uses {
    command result_t hardwareInit();
    interface StdControl;
    interface Pot;
  }
}
implementation
{
  int main() __attribute__ ((C, spontaneous)) {
     /********************************************
     //关于_attribute_((C,spontaneous))的说明
     /***nesC主要支持以下三种属性.
     /*(1)C: 该属性用于C声明中 或模块顶层配件文档中的定义d,使其能够出现在
     /*      全局域内,而不是该模块所在的域内.如RealMain模块所示:  
     /*      int main() __attribute__ ((C, spontaneous))
     /*
     /*(2)spontaneous: 该属性能够用于任何函数f(无论是在模块中还是在C代码中),
     /*                表示该函数f能够在其他文档中被访问,而不但仅限于本文档。
     /*上面的main()文档就表示能够被其他文档访问.实际上NCC在编译生成C语言程式
     /*的时候,假如函数没有声明spontaneous属性的话,就在该函数前加上static.如下:
     /* int main() __attribute__ ((C, spontaneous))  编译成 int main(void)
     /* void TOSH_sched_init(void) 编译成 static inline void TOSH_sched_init(void)
     /*
     /*(3)combine(fnname): 该属性指定typedef中定义的数据类型的组合函数.改组合函数
     /*           指明了如何组合命令和事件.如:
     /*           typedef  uint8_t result_t  _attribute_((combine(recombine)));
     /*           result_t recomnine(result_t r1,result_t r2)
     /*           {
     /*            return ( r1 == FAIL) ? FAIL: r2;
     /*           }            
     ************************************************/
   
    call hardwareInit();//调用硬件初始化函数。
    call Pot.init(10);//调用初始化典雅的值为10。
    TOSH_sched_init();//初始化调度器数据结构的值,主要是队列的头指针和尾指针
   
    call StdControl.init();
    //调用StdControl接口中的命令init()完成特定的初始化
    //具体的初始化在Blink中指定
   
    call StdControl.start();//调用StdControl接口中的命令start(),具体在BLink中指定
    __nesc_enable_interrupt();//开中断

    while(1) {//从以下的任务队列中取出任务执行
       TOSH_run_task();
    }
  }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条