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();
}
}
}
文章评论(0条评论)
登录后参与讨论