TinyOS系统与nesC程序设计课内实验指导书(4)
实验三:TinyOS任务及应用举例
一 实验目的
1、 了解TinyOS两层调度策略:任务和硬件事件句柄。 2、 掌握任务(Task)的建立、提交及其作用。
3、 掌握nesC语法中的分相操作(split-phase operation)。 4、 理解BlinkTask应用程序。
二 实验原理
1、任务(Task)
TinyOS 提供任务和硬件事件句柄组成的两层调度策略。关键字 async 声明了可被硬件事件句柄执行的命令或事件。这意味着它可以在任何时候执行(可能会抢占其它代码的执行)。因此,用 async 声明的命令和事件所做的工作应该做尽量少,且要快速完成。此外,还得注意被异步命令或事件访问的数据可能存在的数据竞争。任务则被用来处理一些较长时间的操作,例如:后台数据处理,但任务可以被硬件事件句柄抢占。 一个任务可以用以下语法在你的实现模块中声明:
task void taskname() { //…… }
其中,taskname 是程序员任意指定的任务的标识,也就是“函数名”。一个任务的返回值类型必须是void,并且不能有任何参数。而向操作系统提交任务则可以用以下语法:
post taskname();
一个任务可以在命令、事件或其它任务内部向操作系统提交。
post 操作把任务放置到一个以先进先出为处理方式的内部任务队列中去。当一个任务开 始执行的时候,只有它运行结束,下一个任务才能开始运行;因此,一个任务不应该占用或阻塞太长时间。任务之间不可以互相抢占,但是会被硬件事件句柄抢占。如果你的任务需要执行一系列长时间的操作,最好把任务分成几个而不是使用一个大的任务。 2、分相(split-phase)操作
在TinyOS中每一个长时间运行的操作都是分相的。在阻塞系统中,当一个调用长时间运行的操作时,只有操作完成时调用才会返回;而在分相系统中,调用会立即返回,当操作完成会发出callback。
分相操作相对于顺序代码有些复杂,但他可以使操作并行并且节省内存。Timer.StartOneShot就是一个分相调用的例子。
阻塞(Blocking) 分相(Split-Phase)
if (send() == SUCCESS) { sendCount++; } // start phase send(); //completion phase void sendDone(error_t err) { if (err == SUCCESS) { sendCount++; } }
三 实验环境
1、JDK1.6 for windows 2、Cygwin with TinyOS 2.x 3、UltraEdit / EditPlus
四 实验内容和步骤
(1) 进入tmp文件夹并创建文件夹,取名BlinkTask,进入这个文件夹。
cd /tmp
mkdir BlinkTask cd BlinkTask
(2) 把Blink文件夹里的所有文件复制到BlinkTask中。
cp –r /opt/tinyos-2.x/apps/Blink/* /tmp/
(3) 现给程序设置一个较长的计算任务。用UltraEdit打开模块文件BlinkC.nc,并修改
如下:
#include \
module BlinkC {
uses interface Timer
}
implementation {
event void Boot.booted() {
call Timer0.startPeriodic( 250 ); call Timer1.startPeriodic( 500 ); call Timer2.startPeriodic( 1000 ); }
event void Timer0.fired() { uint32_t i;
for (i = 0; i < 400001; i++) { call Leds.led0Toggle(); } }
event void Timer1.fired() {
call Leds.led1Toggle(); }
event void Timer2.fired() {
call Leds.led2Toggle(); } }
(4) 编译程序并把它下载到节点观察三盏灯情况,记录结果。若第一盏灯没有闪烁,则
将值改成20001,100001再观察结果。
(5)一个长的计算操作会一直占用CPU,从而阻塞其他操作的执行。所以,我们需要
使用建立任务(Task)任务的方法来解决上述问题,重新修改程序。 implementation{ …
task void computeTask() { uint32_t i;
for (i = 0; i < 400001; i++) {} }
event void Timer0.fired() { call Leds.led0Toggle(); post computeTask(); } …
}
(6)编译、安装程序,观察记录结果。若第一盏灯仍然没有闪烁(想想为什么?),则
将代码再次修改如下: uint32_t i;
task void computeTask() { uint32_t start = i;
for (;i < start + 10000 && i < 400001; i++) {} if (i >= 400000) { i = 0; } else {
post computeTask(); } }
(7)再次编译并安装程序,观察记录结果。 (8)编写实验报告
五 实验报告要求
①实验名称 ②实验内容说明 ③程序源代码
④实验步骤,实验中出现的问题,观察到的结果 ⑤实验总结
实验四:节点间的无线通信
一 实验目的
1、 了解TinyOS消息缓冲抽象—message_t。
2、 掌握用于抽象底层通信服务的基本通信接口名称及它们所实现的功能。 3、 掌握活动消息(AM)接口。 4、 掌握基本通信组件。
5、 理解BlinkToRadio程序代码,实现节点间的无线通信。
二 实验原理
1、message_t:TinyOS的消息缓冲
(1)TinyOS提供了许多接口去抽象底层通信服务,所有的这些接口以及许多提供这些接口的组件使用共同的消息缓冲抽象:message_t(底层通信数据的结构),用nesC结构体实现。
(2)message_t结构: typedef nx_struct message_t { nx_uint8_t header[sizeof(message_header_t)]; nx_uint8_t data[TOSH_DATA_LENGTH]; nx_uint8_t footer[sizeof(message_footer_t)]; nx_uint8_t metadata[sizeof(message_metadata_t)]; } message_t; 2、通信接口与组件 ? 基本通信接口:
(1)Packet:提供对message_t的基本访问
a. 清除消息内容(命令)
b. 得到有效载荷的长度(命令)
c. 得到指向有效载荷地址的指针(命令) (2)Send:提供与地址无关的发送接口
a. 发送消息内容(命令)
b. 取消挂起消息的发送(命令) c. 消息是否发送成功(事件) d. 得到有效载荷的长度(函数)
e. 得到指向有效载荷地址的指针(函数) (3)Receive:提供基本消息的接收接口
a. 接收消息(事件)
b. 得到有效载荷的长度(命令)
c. 得到指向有效载荷地址的指针(命令)
(4)PacketAcknowledgements:为每个包的请求确认提供机制 (5)RadioTimeStaming:提供时间戳 ? 活动消息接口
(1)AM层次实现了对radio的多路访问。“AM tpye”涉及到多路复用的领域。 (2)支持AM服务的接口:
…… 此处隐藏:1591字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




