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

NesC学习经验总结 第一篇和第二篇相关推荐

  1. 【操作系统】Oranges学习笔记(一) 第一章、第二章

    文章目录 零.Oranges相关资源 一.工作环境和准备工作 二.第一章 马上动手写一个最小的"操作系统" 1. 第一章笔记 2. nasm学习 3. 实际操作 三.第二章 搭建你 ...

  2. 黑马程序员C++学习笔记<第一阶段_基础篇>

    配套视频网址: 黑马程序员:http://yun.itheima.com/course/520.html?bili B站:https://www.bilibili.com/video/BV1et411 ...

  3. Vue 生命周期篇探索 - 第二篇:生命周期-挂载流程

    文章目录 探索学习 Vue 生命周期篇 第二篇:生命周期-挂载流程 以图例分析挂载流程 1. new Vue 2. init Events & Lifecycle 3. beforeCreat ...

  4. 「代码家」的学习过程和学习经验分享(挺好的一篇文章,转载侵删)

    转自:https://kb.cnblogs.com/page/554260/ 感悟:多写多练,抓住灵感. 每天,都会有人在微博上私信我,问我关于学习和成长的问题.这种问题我一般都不会回复某个j,毕竟每 ...

  5. python123数值运算_python基础篇【第二篇】:数据运算、数据类型

    一.数据运算 举个例子一目了然就明白什么是运算符了:例子10+20=30,其中10,20为操作符 ,"+" 称为运算符. python支持支持的类型运算符有:算术运算.比较(关系) ...

  6. 【网络篇】第二篇——IP协议与MAC地址详解

    IP协议 理解源IP地址和目的IP地址 网段划分 IP地址的数量限制 私有IP地址和公网IP地址 路由 NAT(网络地址转换) ​编辑NAT IP转换过程 NAPT MAC地址 理解源MAC地址和目的 ...

  7. 第二篇:阿里数据中台之OneData体系1

    今天来介绍数据中台的第二篇,第二篇共分为三个大部分分别对应的是阿里的数据中台三大体系(阿里的数据中台体系架构见上一篇),OneData体系,OneEntity体系,OneService体系,三大体系相 ...

  8. 读书笔记——阿里数据中台(第二篇:OneData体系1)

    今天来介绍数据中台的第二篇,第二篇共分为三个大部分分别对应的是阿里的数据中台三大体系(阿里的数据中台体系架构见上一篇),OneData体系,OneEntity体系,OneService体系,三大体系相 ...

  9. Karpathy更新深度学习开源框架排名:TensorFlow第一,PyTorch第二

    上周,Keras作者.谷歌研究科学家François Chollet晒出一张图,他使用Google Search Index,展示了过去三个月,ArXiv上提到的深度学习框架排行,新智元也做了报道: ...

最新文章

  1. java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》
  2. SharePoint品牌化和自定义--第三章节--收集品牌化需求(3)--要当心的地方
  3. Redis启动多端口,运行多实例(转)
  4. Java编程中写出好代码的建议
  5. SocketIO---bio2---带线程池处理任务
  6. php 不喜欢用对象,为什么PHP不在其默认库中使用对象?
  7. 怎样设置电脑壁纸_怎样设置电脑的资料定时备份到移动硬盘里
  8. WM6.0系统WIFI与笔记本点对点互联详细解析
  9. # C语言程序设计第二次作业——顺序结构
  10. 开源转场库HYBControllerTransitions
  11. 1.Java学习笔记第一节(尚硅谷视频整理)
  12. SSIM结构相似性算法
  13. 压力测试工具Jmeter使用详解
  14. pip安装faiss
  15. 锚点(anchor)的理解
  16. Hibernate 中出现表名(XXX) is not mapped 问题
  17. SAP JCo应用方案
  18. Krpano全景:在javascript中动态添加/删除/修改(位置)热点(向后端写入)
  19. 计算机网络哈勃,美国 NASA 努力修复哈勃太空望远镜 1980 年代的计算机故障
  20. 阿里文娱永叔:利器or成本损耗?算法不是黑匣子

热门文章

  1. python是什么意思中文 好学吗-python软件开发好学吗
  2. 今天我收到了未来--记一次迟到两年的Airpods开箱
  3. QSettings 用法(例子)
  4. 【matlab】Frequency Fusion
  5. 微程序控制器实验实验报告_程序性景观实验
  6. 人民币转换(20200327)
  7. 硬件设计基础 —— 电流、电压、功率
  8. java删除字符串最后一个字符
  9. xcode ios swift视频压缩使用hevc编码
  10. Ubuntu如何安装rpm软件包,ubuntu安装输入法、WPS软件