- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Lesson2---模块和tinyos执行模型 TinyOS系统经典PPT教程 教学课件
Lesson2 模块和执行模型 介绍模块、事件、命令及其与接口的深层次关系。 详细解释 TinyOS 的执行模型,进一步介绍分阶段的运行过程。 解释任务机制,解释在TinyOS系统中组件之间如何协作共享处理器的工作机理。 一、模块与状态 由于大多数的节点平台没有基于硬件的内存保护措施,也没有将用户地址空间和系统地址空间分离开,只有一个所有组件都能共享的地址空间。 最好的办法就是保持内存尽可能少的共享。 组件声明的任何状态变量都是私有的:没有任何其他组件可以对它进行命名或者直接访问它。 两个组件直接交互的唯一方式是通过接口。 BlinkSingle实例 原Blink程序中无状态变量,现在稍作修改。使用一个定时器和一个状态变量将实现和Blink一样的效果。 节省了CPU资源和内存。 另存Blink为BlinkSingle: 注释掉timer1,timer2所有相关; 增加一个单字节状态变量uint8_t; 在timer0触发事件里根据状态变量采取不同动作。 BlinkSingle实例 module BlinkC @safe() { uses interface TimerTMilli as Timer0; //删除其他timer1,timer2 uses interface Leds; uses interface Boot; } implementation { uint8_t counter = 0; event void Boot.booted() {call Timer0.startPeriodic( 250 );} event void Timer0.fired() { counter++; if(counter0x01){call Leds.led0On(); } else {call Leds.led0Off();} if(counter0x02){call Leds.led1On();} else{call Leds.led1Off();} if(counter0x04){call Leds.led2On();} else{call Leds.led2Off();} } } 变量类型 为了跨平台使用,变量的类型和标准C语言的int 、long 和char不一样。 TinyOS代码使用的是更清楚直接的类型,直接声明字节大小。事实上,这些能映射到基本的C类型,在不同的平台上是不同的映射。 大多数平台支持浮点数运算。(double可能不行) 二、接口、命令及事件 一个组件使用了一个接口,它可以调用这个接口的命令,但必须实现其事件。 BlinkC使用了这些接口:Boot、Leds 和 Timer 接口,所以它必须实现这些事件处理函数Boot.booted()和Timer.fired()。但Leds 接口没有包含任何事件,所以BlinkC没有必要为了调用Leds的命令而去先实现什么。 调用接口命令需要关键字“call” ,调用接口事件需要关键字“signal” 。 三、任务 到目前为止,所有代码都是同步(synchronous,sync)的。它运行在单一的前后执行顺序,没有任何形式的抢占。 也就是说,当同步代码开始运行后,直到完成前它不会释放CPU给其他的同步代码。 但是,如果一段同步代码运行时间很长, 它会阻止其他同步代码运行,从而不利于系统的反应。 三、任务 在大多数情况下,因为同步代码是非抢占的,这种编程方式行之有效。但是,这种做法并不适合大规模计算。 当一个组件需要做什么且此时还有宽裕的时间,最好给TinyOS延迟计算的能力,即处理完之前已在等待的事情后再执行。 任务是一个函数,组件告诉TinyOS稍后再运行而不是立即运行。 三、任务 任务在模块的实现里声明句法如下: task void taskname(){……} taskname是设定的任务名称。 任务必须空返回,并不能带有任何参数。 派遣一个任务去(稍后)执行,句法: post taskname(); 一个组件可以在命令、事件或者任务里派遣一个任务。 一个任务可以安全地调用命令和触发事件。 三、任务 提交操作(post)将任务放入内部的先进先出(FIFO)的任务队列 ,当一个任务被执行时,它必须一直运行到结束,才能让下一个任务运行。 一个任务的运行周期不该太长久。一系列长作业应分成几个独立的小任务。 任务之间不能相互抢占顺序。 硬件中断可以抢断任务(但至今还没见过这种情况)。 任务的提交操作返回一个error_t,其值可以是SUCCESS 或者 FAIL。 当且仅当任务已经等待运行(已经成功提交,但是还未运行)才会提交失败
您可能关注的文档
- J analysis 天然物结构化学课件.pdf
- I_DEAS 动力分析day3.ppt
- java 精品教案 (全套).doc
- Java 编程基础 java项目课件.ppt
- JavaBean 章 J2EE概述 JavaEE教学课件PPT.ppt
- JavaScript jsp课件.ppt
- JavaScript 章 J2EE概述 JavaEE教学课件PPT.ppt
- JavaScript(navigator 物件).ppt
- JavaScript入門篇.ppt
- Jason6 教程.ppt
- 精编汽车维修工(考评员、高级考评员) 练习题通用题库含答案AB卷.docx
- 精编汽车维修工(考评员、高级考评员) 练习题通关秘籍题库附答案(综合卷).docx
- 精编汽车维修工(考评员、高级考评员) 练习题通用题库附答案【突破训练】.docx
- 道路交通安全专项整治工作总结 .pdf
- 精编汽车维修工(考评员、高级考评员) 练习题精品题库含答案(满分必刷).docx
- 精编汽车维修工(考评员、高级考评员) 练习题大全含答案(新).docx
- 精编汽车维修工(考评员、高级考评员) 练习题大全(研优卷).docx
- 精编汽车维修工(考评员、高级考评员) 练习题精选题库【夺分金卷】.docx
- 精编汽车维修工(考评员、高级考评员) 练习题完整版(网校专用).docx
- 精编汽车维修工(考评员、高级考评员) 练习题通关秘籍题库【预热题】.docx
最近下载
- 2024年中考语文二轮复习:名家散文阅读(汪曾祺)练习题汇编(含答案解析).docx
- 职业资格认证 三.鉴定细目表 中式烹调师(中级)理论知识鉴定要素细目表.doc
- 来访人员登记表(模板).pdf VIP
- 中小型企业安全生产事故应急救援预案范文.doc
- 《中华民族一家亲》第一课时 教案.doc
- 【智慧树】【知到】大学生劳动就业法律问题解读(2024最新版) 章节测试答案.docx VIP
- 酒厂危险源辨识及风险分级管控清单范本参考模板范本.pdf VIP
- 人教版四年级数学上册《田忌赛马》教案及教学反思.docx VIP
- 创业模拟实训培训.pptx
- 2024《城市居民参与生活垃圾分类的问题研究—以北京市A社区为例》论文答辩稿1700字.docx VIP
文档评论(0)