nesC——模块和配件的细节总结

模块和配件的细节总结
0.关于模块:
(1)默认的代码实现
<1>模块能为使用的接口命令或事件a指定默认的代码实现
<2>模块不能为提供的接口命令或事件a指定默认的代码实现
<3>如果a未与任何命令或事件进行绑定,就会执行默认的实现
<4>默认的命令或事件在定义时以default作为前缀
举例:

default command result_t Send.send(uint16_t address,uint8_t length,TOS_MsgPtr msg)
{
return SUCCESS;
}

(2)任务
<1>任务的返回类型为void,且无参数
<2>任务用post提交,提交后放入任务队列,然后立即返回
<3>post的返回值:提交成功返回1,否则返回0。post表达式的类型为unsigned char
(3)原子
<1>原子是运行的最小单位
<2>主要目的是确保运行时没有其他运算同时发生
<3>一般用于更新并发性的互斥变量
<4>原子代码内不能调用命令或触发事件
<5>原子代码内,控制只能正常流入和流出,禁止跳入跳出(goto、break、continue等)语句。
示例:

atomic{
语句;
语句;
……
}
或者
atomic 变量名=值;

一些关于configuration的细节总结
1.外部规范元素和内部规范元素
外部规范元素:configuration XXX{}中的元素(原文不是这样,用词比较专业化,个人理解应该是这个意思)
内部规范元素:implementation{}中的规范元素
2.一个组件始终只有一个实例。如果组件K被用于两个不同的配件,或是在同一个配件中被使用两次,在程序中仍然只有K的唯一实例。
3.同一个规范元素可以被多次绑定
举例:
(1)

configuration C{
	provides interface X;
}
implementation{
	components C1,C2;
	X=C1.X;
	X=C2.X;
}

当X中的命令被调用时,X中的事件将会被多次触发(“扇入”),以及多个函数的执行(“扇出”)
原因:因为C1、C2组件的X接口都与X接口关联,所以C1、C2组件中的X接口的对应命令代码都会被执行,两个代码都会触发事件。
(2)
当两个配件独立地绑定同一个接口时,多重绑定也会发生
举例:

configuration C{}
implementation{
	components C1,C2;
	C1.Y->C2.Y;
}

configuration D{}
implementation{
	components C3,C2;
	C3.Y->C2.Y;
}

4.隐式绑定
这个感觉没有什么重要的知识点,既然是初学,还是用完整写法,这方面以后用的时候再补充。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>