位置:51电子网 » 技术资料 » 模拟技术

调用命令(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的后续版本中会允许使用)。
    下面的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的后续版本中会允许使用)。

上一篇:模块(module)

上一篇: 配置( configuration)

相关IC型号
SPR1024A
SPR16100A-53A-P

热门点击

 

推荐技术资料

泰克新发布的DSA830
   泰克新发布的DSA8300在一台仪器中同时实现时域和频域分析,DS... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!