Lesson6---启动顺序_第1页
Lesson6---启动顺序_第2页
Lesson6---启动顺序_第3页
Lesson6---启动顺序_第4页
Lesson6---启动顺序_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Lesson6启动顺序,main()函数在哪里?从前面几节课可以知道,应用程序处理Boot.booted事件,然后从此处开始运行。下面将介绍这个事件的前后过程,如何适宜地初始化组件。,一、TinyOS2.x的启动接口,Init:初始化组件和硬件状态;Scheduler:初始化和运行任务;Boot:通知系统已经成功地启动。,interfaceInitcommanderror_tinit();,interfaceBooteventvoidbooted();,interfaceSchedulercommandvoidinit();commandboolrunNextTask(boolsleep);commandvoidtaskLoop();,TinyOS的启动顺序有以下4步:Step1:调度程序初始化;Step2:组件初始化;Step3:发送启动boot过程完成的信号;Step4:运行调度程序。,MainC组件(位于tos/system)是一个应用层级别的启动组件。MainC组件提供了Boot接口,使用一个Init接口(SoftwareInit)。调用SoftwareInit.init()作为step2的一部分,并在step3触发Boot.booted()事件。,二、TinyOS2.x的启动顺序,2.1RealMainP组件,implementationintmain()_attribute_(C,spontaneous)atomicplatform_bootstrap();/启动硬件平台callScheduler.init();/调度器初始化callPlatformInit.init();/平台初始化while(callScheduler.runNextTask();callSoftwareInit.init();/软件初始化while(callScheduler.runNextTask();_nesc_enable_interrupt();/使能中断signalBoot.booted();/触发启动完成的事件callScheduler.taskLoop();/开启调度循环return-1;defaultcommanderror_tPlatformInit.init()returnSUCCESS;defaultcommanderror_tSoftwareInit.init()returnSUCCESS;defaulteventvoidBoot.booted(),RealMainP使用接口:PlatformInit接口和Scheduler接口。MainC把这些在应用程序里隐藏掉了,并自动连接它们到系统调度程序(scheduler)和平台初始化(platforminitialization)。PlatformInit和SoftwareInit两者主要就是硬件与软件的区别。PlatformInit是把核心平台的服务初始为有意义的状态。如果调度程序没有在组件之前初始化好,那么组件的初始化程序就不能发布任务。,2.1RealMainP组件,2.2组件初始化,平台初始化阶段是平台实现者的责任。因此,把PlatformInit接口连接到特定平台的初始化组件PlatfomC。任何需要初始化的组件也可以实现Init接口,连接到MainC组件的SoftwareInit接口。特定硬件初始化直接由每个平台的PlatformC组件来处理。系统服务(例如,定时器,无线电)被设计成独立地初始化。,2.3Boot.booted()事件,一旦所有的初始化完成了,MainC的Boot.booted()事件就触发了。组件可以自由地调用start()命令以及其他组件使用的其他命令。在Blink应用程序里,定时器就是在booted()事件里启动的。这个booted事件就是TinyOS的main函数。,eventvoidBoot.booted()callTimer0.startPeriodic(TIMER_PERIOD_MILLI);,2.4调度循环,TinyOS就会进入核心的调度循环(coreschedulingloop)。只要有任务在排队,调度者就会继续运行。一发现任务队伍为空,调度就会把微处理器调节到硬件资源允许的低能耗状态。处理器进入休眠状态直到它碰到中断。当一个中断到达时,MCU退出休眠模式,运行中断程序。,三、系统启动和软件初始化,从一个应用程序或高级别服务的角度来看,在启动顺序中有两个由MainC提供的重要的接口:Boot接口和SoftwareInit接口。Boot接口只处理顶层的应用程序:它启动如定时器或无线电之类的服务。相比之下,SoftwareInit接口接触到系统中很多不同的组成部分。如果有一些只需运行一次即可的代码,比如某些初始化或配置工作,就可以把它们连接到SoftwareInit接口。,3.1自动绑定(auto-wire),当MainC调用SoftwareInit.init,它会在很多的组件里调用Init.init()命令。在典型的大型应用程序里,初始化顺序可能包含30多个组件。为了简化应用程序的开发,应当使需要初始化的服务组件自动绑定到SoftwareInit接口。,genericconfigurationPoolC(typedefpool_t,uint8_tPOOL_SIZE)providesint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论