NesC学习经验总结 第一篇和第二篇

NesC语言作为一个新的TinyOS语言在程序架构中很重要,这里我会对这个语言的一些难点进行解释,希望对大家起到帮助的作用,每一小节我都会放上一个总结看过的资料供大家参考,英文好的可以直接参考链接忽略我写的东西,呵呵!如果转载,请注明出处:www.tinyosstudy.com .

第一篇:nx类型的应用和理解
今天先说一下为什么TinyOS2.x要引入nx类型的结构,大家都明白在C语言中,我们直接用struct结构体就可以了,这个nx到底是什么意思?其实nx是为了wsn网络传输特别引用的一种独特的数据类型,第一个原因是提高跨平台传输的兼容性;第二个原因是使包的结构可以和bytes的单位一致,这样可以保证在包缓存和域偏移量之间的兼容性问题得到解决,不会导致包在接受过后出现错乱的问题。

也要记住编译程序的时候,nx只可以在nesC1.2或者以上的版本才可以通过,否则会出现编译时间错误,如果不了解这点,对调试程序会难度会很大,因为错误确实很难发现。而且nx是用big endian,如果你要使用little endian,你需要找到定义你的域的头文件将nx加一个le也就是nxle来区别。

这里要注意big endian is 16 bits 而little endian是32 bits,不知道哪位知道endian的中文翻译是什么?我到现在都不知道那个词对应的。如果上面有说错的地方还望高人指出!

引用:
tinyos programming by Philip Levis

第二篇:event和task的理解
TinyOS里面有event和task两个类型的调度,如何合理的利用这两个事件让自己的程序高效运行显得尤为重要。

首先让我们先学习一下如何使用event和task时间,event我们需要用signal来触发,task我们需要用post来触发,event可以带参数运行,而task不能带任何参数这点要注意。

task的功能模块里面我们尽量利用少而精的代码来完成,保证task的代码尽可能的短来提高程序的高效性,而event的调度尽可能不要在command中完成因为这样做的结果会导致调度在tinyos的堆栈中积累越来越多,导致程序锁死这点非常关键因为节点牺牲了大量的性能来保证他的低功耗传输和应用,所以相应的程序的代码也要作出一定的调整。从我的角度理解,task可以是并发处理,而event只能放入堆栈一个一个处理,由于节点的内存有限以及CPU处理缓慢导致容易程序挂起。

举一个简单的例子,我们在处理节点读取感测外部数据时,由于要频繁调用read.read命令时可以使用下面两种代码:
command error_t Read.read() {
post readDoneTask();
return SUCCESS;
}
task void readDoneTask() {
signal Read.readDone(SUCCESS, filterVal);
}

command error_t Read.read() {
signal Read.readDone(SUCCESS, filterVal);
}

可以肯定的说第二个代码很简洁,但是他在执行中的效率一定很高吗?让我们来分析一下,由于read.read的命令要频繁调用一边采集外部数据,导致stack持续增加而程序执行缓慢,就会出现问题,而第一个代码因为task会在稍后的时间执行并且是并发处理机制,不会独占处理时间,但是采用FIFO机制,对程序的处理起到了缓和的作用,所以可以打打加速程序的运行,节省时间,而这也是我们要保证task的代码比较短,因为一个task要执行完另一个才可以执行,所以要保证不被一个task独占的时间太久。

如果你觉得还是很难理解task的应用的话,这样说可能会简单点,如果运行大型的运算程序,像tinyos因为硬件的局限性很难做到,所以我们把它分成许多小的task来完成 这样就保证程序一次执行一点,避免出现loop call问题。

下面附上commands,events和tasks的区别大家可以记下来学习了!
Commands
Should be non-blocking i.e. take parameters start the processing and return to app;
postpone time-consuming work by posting a task
Can call commands on other components

Events
Can call commands, signal other events, post tasks but cannot be signal-ed by commands
Pre-empt tasks, not vice-versa

Tasks
FIFO scheduling
Non pre-emptable by other task, pre-emtable by events
Used to perform computationally intensive work
Can be posted by commands and/or events

引用:
http://www.tinyos.net/tinyos-1.x/doc/tutorial/lesson3.html
http://docs.tinyos.net/index.php ... yOS_Execution_Model
http://en.wikipedia.org/wiki/TinyOS
TinyOS programming by Philip Levis

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值