ImageVerifierCode 换一换
格式:PPT , 页数:11 ,大小:271.50KB ,
资源ID:8493915      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-8493915.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Lesson6---启动顺序.ppt)为本站会员(fmgc7290)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

Lesson6---启动顺序.ppt

1、Lesson6 启动顺序,main()函数在哪里?从前面几节课可以知道,应用程序处理Boot.booted事件,然后从此处开始运行。下面将介绍这个事件的前后过程,如何适宜地初始化组件。,一、TinyOS 2.x的启动接口,Init:初始化组件和硬件状态; Scheduler:初始化和运行任务; Boot:通知系统已经成功地启动。,interface Init command error_t init(); ,interface Boot event void booted(); ,interface Scheduler command void init();command bool runN

2、extTask(bool sleep);command void taskLoop(); ,TinyOS的启动顺序有以下4步: Step1:调度程序初始化; Step2:组件初始化; Step3:发送启动boot过程完成的信号; Step4:运行调度程序。,MainC组件(位于tos/system)是一个应用层级别的启动组件。 MainC组件提供了Boot接口,使用一个Init接口( SoftwareInit )。调用SoftwareInit.init()作为 step 2的一部分,并在step 3触发Boot.booted()事件。,二、TinyOS 2.x的启动顺序,2.1 RealMai

3、nP组件,implementation int main() _attribute_ (C, spontaneous) atomic platform_bootstrap(); /启动硬件平台call Scheduler.init(); /调度器初始化call PlatformInit.init(); /平台初始化while (call Scheduler.runNextTask(); call SoftwareInit.init(); /软件初始化while (call Scheduler.runNextTask();_nesc_enable_interrupt(); /使能中断signal

4、 Boot.booted(); /触发启动完成的事件call Scheduler.taskLoop(); /开启调度循环return -1;default command error_t PlatformInit.init() return SUCCESS; default command error_t SoftwareInit.init() return SUCCESS; default event void Boot.booted() ,RealMainP使用接口:PlatformInit接口和Scheduler接口。MainC把这些在应用程序里隐藏掉了,并自动连接它们到系统调度程序(s

5、cheduler)和平台初始化( platform initialization ) 。 PlatformInit和SoftwareInit两者主要就是硬件与软件的区别。PlatformInit是把核心平台的服务初始为有意义的状态。如果调度程序没有在组件之前初始化好,那么组件的初始化程序就不能发布任务。,2.1 RealMainP组件,2.2 组件初始化,平台初始化阶段是平台实现者的责任。因此,把PlatformInit接口连接到特定平台的初始化组件PlatfomC。 任何需要初始化的组件也可以实现Init接口,连接到MainC组件的SoftwareInit接口。 特定硬件初始化直接由每个平台

6、的PlatformC组件来处理。 系统服务(例如,定时器,无线电)被设计成独立地初始化。,2.3 Boot.booted()事件,一旦所有的初始化完成了,MainC的Boot.booted()事件就触发了。组件可以自由地调用start()命令以及其他组件使用的其他命令。在Blink应用程序里,定时器就是在booted()事件里启动的。这个booted事件就是TinyOS的main函数。,event void Boot.booted() call Timer0.startPeriodic(TIMER_PERIOD_MILLI);,2.4 调度循环,TinyOS 就会进入核心的调度循环(core

7、scheduling loop)。只要有任务在排队,调度者就会继续运行。 一发现任务队伍为空,调度就会把微处理器调节到硬件资源允许的低能耗状态。 处理器进入休眠状态直到它碰到中断。当一个中断到达时,MCU退出休眠模式,运行中断程序。,三、系统启动和软件初始化,从一个应用程序或高级别服务的角度来看,在启动顺序中有两个由MainC提供的重要的接口:Boot接口和SoftwareInit接口。Boot接口只处理顶层的应用程序:它启动如定时器或无线电之类的服务。相比之下,SoftwareInit接口接触到系统中很多不同的组成部分。 如果有一些只需运行一次即可的代码,比如某些初始化或配置工作,就可以把它

8、们连接到SoftwareInit接口。,3.1 自动绑定(auto-wire),当MainC调用SoftwareInit.init,它会在很多的组件里调用Init.init()命令。在典型的大型应用程序里,初始化顺序可能包含30多个组件。 为了简化应用程序的开发,应当使需要初始化的服务组件自动绑定到SoftwareInit接口。,generic configuration PoolC(typedef pool_t, uint8_t POOL_SIZE) provides interface Pool; implementation components MainC, new PoolP(pool_t, POOL_SIZE);MainC.SoftwareInit - PoolP;Pool = PoolP; ,谢谢!, 浙江工业大学浙江省嵌入式系统联合重点实验室,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报