nesC1.1语法总结

1.接口:可参数化,在usesprovides中可加入event/command也可以参数化。

2.  实现部分:实现所有提供的commandevent和接口中的event/command

类型:commandeventasync

定义前可以加default

3.一个模块可以为usescommandevent提供默认实现,如果commandevent没有连接到任何实现,默认实现被执行。

4.Task:返回值为void,无参数

使用post调用,成功返回1,失败返回0,返回值为unsigned char

5.Atomic{}实现互斥。

1)代码要短

2)禁止调用commandevent

3)禁止使用gotoreturnbreakcontinuecasedefaultlabels以后可能使用。

6.每一个组件只有一个实例,不管是在不同的配置文件中,还是在相同的配置文件中使用两次。

7.如果规格元素参数化而endpoint没有参数值,则称endpoint参数化。

如果endpoint有参数值,那么参数值必须是常量,规格元素必须参数化。

如果参数值的个数与规格元素的参数个数不等,参数值类型不符合规格元素中规定的参数类型,都会报错。

这里的规格元素是指provideuses中的interfacecommandevent

下面的外部规格元素是provideuses中的interfacecommandevent。内部规格元素是调用的其他components中的interfacecommandevent

8.Wiring

1=,涉及外部的规格元素的连接,S1=S2,且一下两个条件必须要满足其一:

   一是S1S2其一为外部,其一为内部且同为provide或同为uses

   二是S1S2均为外部,其一为provide,另一个为uses

2->涉及两个内部连接,将一个used的规格元素连接到一个provide的规格元素

3<-2)相反。

9.在连接中,同类型连接同类型,并且如果是commandevent,要有相同的函数标识(即同名),若是interface应有相同的接口类型(不同名也可以)。

10.一边的endpoint是参数化的,另一边的endpoint也应该是参数化的。

11.一个规格元素可以被连接多次,结果是:

   1)会导致多个eventssignal和多个commandcall

   2)注意,相互独立的配置文件也会引起多连接现象(如两个组件的接口连接到同一个组件的接口)。

12.外部规格元素必需被连接,而内部规格元素可以不被连接(可能在另外的配置中连接或有默认实现)。

14.我们使用中间函数来标识commandevent

中间函数的函数体就是对一系列所连接函数的调用。

I1<->I2表示连接关系,则其中一个为caller,一个为callee

15.满足如下条件的Icallee

1I为内部规格元素,且为provide

2I为外部规格元素,且为used

3I为一接口实例Xcommand并且接口X是内部provide或外部used

4I为一接口实例Xevent,并且X是外部provide或内部used

如果不满足以上条件,则Icallers

其实条件就是commandevent的实现方为callee

16.一个I连接多个,对多个返回值使用associate combing function,如果该函数返回结果为空,那么就调用默认实现,如果没有默认实现,报错。

17NesC的运行模型:

1run-to-completion task (非抢占)(tasks之间为原子操作)

2interrupt handler (抢占)(taskhandler之间不是原子操作)

18.代码:

1synchronous codeSC),同步代码只能在tasks中调用。(functionscommandeventstasks

2Asynchronous codeAC),异步代码至少能被一个中断调用。

Race-free Invariant:任何更新只能发生在SC中或atomic

异步代码要加async,否则要报错。

19UniqueuniqueCount函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值