首页 理论教育 如何进行8.1系统初始化?三个阶段详解

如何进行8.1系统初始化?三个阶段详解

时间:2023-06-28 理论教育 版权反馈
【摘要】:系统初始化的功能主要是通过对硬件平台、软件代码进行基本配置操作,使程序可执行。系统初始化在模块文件中体现为event void Boot.booted(),表示系统初始化完毕,触发启动事件,由此开始下面代码的执行。系统初始化分为三个阶段:1)任务调度器初始化。系统初始化主要是由组件MainC来完成,在组件MainC中提供了接口Boot,使用了接口Init,用来初始化组件。系统初始化的具体实现是在其模块文件RealMainP中进行,在文件夹C:\cygwin\opt\tinyos-2.x\tos\system中可以找到。

如何进行8.1系统初始化?三个阶段详解

每个应用实例中都会有系统初始化,只是实例中不同的功能使得系统初始化也不同。系统初始化的功能主要是通过对硬件平台、软件代码进行基本配置操作,使程序可执行。系统初始化在模块文件中体现为event void Boot.booted(),表示系统初始化完毕,触发启动事件,由此开始下面代码的执行。Boot接口是由MainC组件提供,因此每个应用实例的顶层配置文件中都会包含MainC组件。

系统初始化分为三个阶段:

1)任务调度器初始化。

2)硬件平台和软件组件初始化。

3)触发Boot接口中的事件。

系统初始化主要是由组件MainC来完成,在组件MainC中提供了接口Boot,使用了接口Init,用来初始化组件。以下是MainC文件的具体代码,可以发现Boot接口实际上是由组件RealMainP提供的。(www.xing528.com)

系统初始化的具体实现是在其模块文件RealMainP中进行,在文件夹C:\cygwin\opt\tinyos-2.x\tos\system中可以找到。

在系统初始化过程中涉及三个接口,分别是:init接口用来初始化组件或者硬件状态;Scheduler接口用来初始化任务调度器和执行任务;Boot接口是系统完成初始化后程序运行的起始位置,每个应用实例中都会从这个接口的事件触发开始。

int main()@C()@spontaneous()的@C()表示main()应该出现在全局域内,而不是出现在RealMain域内,main()就是一个全局函数。@spontaneous()表示main()可以被其他文件访问,不仅限于本文件。

因为任务和硬件事件句柄可能被其他异步代码抢占,所以nesC程序易于受到特定竞争条件的影响,导致产生不一致或不正确的数据。避免竞争的办法通常是在任务内排他地访问共享数据,或访问所有数据都使用原子语句。这里用到了原子语句,原子语句用atomic作为关键字,表示在执行以下语句时不受硬件中断的影响,直至语句执行完毕。

在模块RealMainP中首先执行的是platform_bootstrap()函数,使系统进入可执行状态,这个函数仅包括为以后编码所必需的操作,一般是空函数,也可对其编辑。然后是任务调度器初始化call Scheduler.init(),使任务可投递、可执行。如果任务调度器初始化没有完成,随后的其他组件初始化时就不能提交任务,以至于程序不能正常运行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈