调用命令(Calling Commands)和触发事件(Signaling Events)
发布时间:2012/4/2 14:38:41 访问次数:1354
下面的C语法扩展语法SPR1024A定义了如调用命令和触发事件:
postfix-expression:
postfix-expression [ argument-expression-list ]
call-kindopt primary ( argument-expression-listopt
call-kind: one of call signal post
可以使用can a(…)调用一个简单的命令a,使用signal a(…)来触发一件简单的事件a。例如,在模块中使用接口Send的SendMsg类型:call Send.send(l,sizeof(Message),&msgl)。
具有玎个Tl….,T聆类型的接口参数的参数化命令a(或事件a)可以使用call a[el](…)来调用(相应的,可以使用signal a[el,,,EN](...)来触发事件)。接口参数表达式ei必须匹配类型Ti;实际的接口参数值是映射到Ti。例如,在模块中使用Send接口的SendMsg类型的命令Send[uint8 t id]:
int X=…;
call Send.send[x+1](1, sizeof (Message), &msgl);
调用命令和触发事件后,它们的执行是立即完成的,即call和signal与函数调用是相似的。被call和signal表达式实际执行的命令或事件取决于程序配置(configuration)中的连接( wiring)声明。这些wiring语句可能指定0个、1个或更多的实现将被运行。当超过1个实现被执行时,称此模块昀命令或事件有“扇出”( fan-out)特性。
任务(task)
一个任务是一个返回类型为void且无参数的task存储类的函数。在TinyOS中,任务是一个可以被调度的逻辑实体,它类似于传统操作系统中的进程/线程概念。一个任务可以有一个预先声明,如task void myTask()。
使用带post前缀的任务调用来提交(post)任务,如post myTask()。post将任务挂入任务队列中,并立即返回;任务成功提交后,post返回l,否则返回O。post表达式的类型是unsigned char。相关定义如下:
storage-class-specifier: also one of
task
call- kind: also one of
post
原子(atomic)
nesC使用“原子”(atomic)指出该段代码“不可被打断”。原子的语法如下:
atomic-stmt:
atomic statement
下面是一个简单的例子:
bool busy;//全局变量
void f() {
bool available;
atomic f
available= !busy;
busy=TRUE;
if (available) do_something;
atomic busy=FALSE;
原子部分应该很短;为了达到这一要求,nesC禁止在原子声明内部调用命令或触发事件。任何的goto、return、break或continue、case、default和标签都不能在原子声明内部使用(也许在nesC的后续版本中会允许使用)。
postfix-expression:
postfix-expression [ argument-expression-list ]
call-kindopt primary ( argument-expression-listopt
call-kind: one of call signal post
可以使用can a(…)调用一个简单的命令a,使用signal a(…)来触发一件简单的事件a。例如,在模块中使用接口Send的SendMsg类型:call Send.send(l,sizeof(Message),&msgl)。
具有玎个Tl….,T聆类型的接口参数的参数化命令a(或事件a)可以使用call a[el](…)来调用(相应的,可以使用signal a[el,,,EN](...)来触发事件)。接口参数表达式ei必须匹配类型Ti;实际的接口参数值是映射到Ti。例如,在模块中使用Send接口的SendMsg类型的命令Send[uint8 t id]:
int X=…;
call Send.send[x+1](1, sizeof (Message), &msgl);
调用命令和触发事件后,它们的执行是立即完成的,即call和signal与函数调用是相似的。被call和signal表达式实际执行的命令或事件取决于程序配置(configuration)中的连接( wiring)声明。这些wiring语句可能指定0个、1个或更多的实现将被运行。当超过1个实现被执行时,称此模块昀命令或事件有“扇出”( fan-out)特性。
任务(task)
一个任务是一个返回类型为void且无参数的task存储类的函数。在TinyOS中,任务是一个可以被调度的逻辑实体,它类似于传统操作系统中的进程/线程概念。一个任务可以有一个预先声明,如task void myTask()。
使用带post前缀的任务调用来提交(post)任务,如post myTask()。post将任务挂入任务队列中,并立即返回;任务成功提交后,post返回l,否则返回O。post表达式的类型是unsigned char。相关定义如下:
storage-class-specifier: also one of
task
call- kind: also one of
post
原子(atomic)
nesC使用“原子”(atomic)指出该段代码“不可被打断”。原子的语法如下:
atomic-stmt:
atomic statement
下面是一个简单的例子:
bool busy;//全局变量
void f() {
bool available;
atomic f
available= !busy;
busy=TRUE;
if (available) do_something;
atomic busy=FALSE;
原子部分应该很短;为了达到这一要求,nesC禁止在原子声明内部调用命令或触发事件。任何的goto、return、break或continue、case、default和标签都不能在原子声明内部使用(也许在nesC的后续版本中会允许使用)。
下面的C语法扩展语法SPR1024A定义了如调用命令和触发事件:
postfix-expression:
postfix-expression [ argument-expression-list ]
call-kindopt primary ( argument-expression-listopt
call-kind: one of call signal post
可以使用can a(…)调用一个简单的命令a,使用signal a(…)来触发一件简单的事件a。例如,在模块中使用接口Send的SendMsg类型:call Send.send(l,sizeof(Message),&msgl)。
具有玎个Tl….,T聆类型的接口参数的参数化命令a(或事件a)可以使用call a[el](…)来调用(相应的,可以使用signal a[el,,,EN](...)来触发事件)。接口参数表达式ei必须匹配类型Ti;实际的接口参数值是映射到Ti。例如,在模块中使用Send接口的SendMsg类型的命令Send[uint8 t id]:
int X=…;
call Send.send[x+1](1, sizeof (Message), &msgl);
调用命令和触发事件后,它们的执行是立即完成的,即call和signal与函数调用是相似的。被call和signal表达式实际执行的命令或事件取决于程序配置(configuration)中的连接( wiring)声明。这些wiring语句可能指定0个、1个或更多的实现将被运行。当超过1个实现被执行时,称此模块昀命令或事件有“扇出”( fan-out)特性。
任务(task)
一个任务是一个返回类型为void且无参数的task存储类的函数。在TinyOS中,任务是一个可以被调度的逻辑实体,它类似于传统操作系统中的进程/线程概念。一个任务可以有一个预先声明,如task void myTask()。
使用带post前缀的任务调用来提交(post)任务,如post myTask()。post将任务挂入任务队列中,并立即返回;任务成功提交后,post返回l,否则返回O。post表达式的类型是unsigned char。相关定义如下:
storage-class-specifier: also one of
task
call- kind: also one of
post
原子(atomic)
nesC使用“原子”(atomic)指出该段代码“不可被打断”。原子的语法如下:
atomic-stmt:
atomic statement
下面是一个简单的例子:
bool busy;//全局变量
void f() {
bool available;
atomic f
available= !busy;
busy=TRUE;
if (available) do_something;
atomic busy=FALSE;
原子部分应该很短;为了达到这一要求,nesC禁止在原子声明内部调用命令或触发事件。任何的goto、return、break或continue、case、default和标签都不能在原子声明内部使用(也许在nesC的后续版本中会允许使用)。
postfix-expression:
postfix-expression [ argument-expression-list ]
call-kindopt primary ( argument-expression-listopt
call-kind: one of call signal post
可以使用can a(…)调用一个简单的命令a,使用signal a(…)来触发一件简单的事件a。例如,在模块中使用接口Send的SendMsg类型:call Send.send(l,sizeof(Message),&msgl)。
具有玎个Tl….,T聆类型的接口参数的参数化命令a(或事件a)可以使用call a[el](…)来调用(相应的,可以使用signal a[el,,,EN](...)来触发事件)。接口参数表达式ei必须匹配类型Ti;实际的接口参数值是映射到Ti。例如,在模块中使用Send接口的SendMsg类型的命令Send[uint8 t id]:
int X=…;
call Send.send[x+1](1, sizeof (Message), &msgl);
调用命令和触发事件后,它们的执行是立即完成的,即call和signal与函数调用是相似的。被call和signal表达式实际执行的命令或事件取决于程序配置(configuration)中的连接( wiring)声明。这些wiring语句可能指定0个、1个或更多的实现将被运行。当超过1个实现被执行时,称此模块昀命令或事件有“扇出”( fan-out)特性。
任务(task)
一个任务是一个返回类型为void且无参数的task存储类的函数。在TinyOS中,任务是一个可以被调度的逻辑实体,它类似于传统操作系统中的进程/线程概念。一个任务可以有一个预先声明,如task void myTask()。
使用带post前缀的任务调用来提交(post)任务,如post myTask()。post将任务挂入任务队列中,并立即返回;任务成功提交后,post返回l,否则返回O。post表达式的类型是unsigned char。相关定义如下:
storage-class-specifier: also one of
task
call- kind: also one of
post
原子(atomic)
nesC使用“原子”(atomic)指出该段代码“不可被打断”。原子的语法如下:
atomic-stmt:
atomic statement
下面是一个简单的例子:
bool busy;//全局变量
void f() {
bool available;
atomic f
available= !busy;
busy=TRUE;
if (available) do_something;
atomic busy=FALSE;
原子部分应该很短;为了达到这一要求,nesC禁止在原子声明内部调用命令或触发事件。任何的goto、return、break或continue、case、default和标签都不能在原子声明内部使用(也许在nesC的后续版本中会允许使用)。
上一篇:模块(module)
上一篇: 配置( configuration)
热门点击
- GAFT和TopDisc
- DSWare
- 功率控制技术
- ZigBee协议栈
- 无线传感器网络安全防护技术
- 无线传感器网络安全问题概述
- ADC动态范围
- PEGASIS及 Hierarchical-
- 无线传感器网络信道接入概述
- 覆盖目标分类
推荐技术资料
- 泰克新发布的DSA830
- 泰克新发布的DSA8300在一台仪器中同时实现时域和频域分析,DS... [详细]