ITRON系统使用方法.docx
- 文档编号:10033556
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:41
- 大小:594.15KB
ITRON系统使用方法.docx
《ITRON系统使用方法.docx》由会员分享,可在线阅读,更多相关《ITRON系统使用方法.docx(41页珍藏版)》请在冰豆网上搜索。
ITRON系统使用方法
ITRON系统使用方法
目录
1引言4
2ITRON系统介绍5
2.1概要5
2.2构成5
2.2.1ITRON系统构成5
2.2.2ITRON体系结构5
2.3应用领域6
2.4如何使用ITRON系统6
3ITRON的基本机能8
3.1Task管理机能8
3.1.1Task8
3.1.2任务调度8
3.1.2.1调度产生条件9
3.1.2.2调度方式9
3.1.3任务的状态管理9
3.1.3.1ITRON系统状态定义9
3.1.3.2任务状态迁移与系统调用10
3.1.4任务的应用12
3.1.5任务的设计13
3.1.5.1任务划分的原则13
3.1.5.2I/O依赖性13
3.1.5.3时间关键性的功能13
3.1.5.4计算功能14
3.1.5.5时间内聚14
3.1.5.6周期执行功能14
3.1.5.7任务设计的误区14
3.2同步和通信管理15
3.2.1EventFlag15
3.2.1.1基本调用16
3.2.1.2EventFlag的应用16
3.2.2Semaphore18
3.2.2.1基本调用19
3.2.2.2Semaphore的应用19
3.2.3MailBox20
3.2.3.1基本调用22
3.2.3.2MailBox的应用22
3.3内存管理24
3.3.1概述24
3.3.2基本调用25
3.3.3内存池的创建25
3.3.4内存池的清除26
3.3.5内存申请26
3.3.6内存释放26
3.4中断处理26
3.4.1中断处理的管理26
3.4.2中断例程的登录27
3.4.3中断中的处理27
3.5时钟管理28
3.5.1周期唤醒28
3.5.2延迟唤醒28
3.5.3TimeOut指定29
4初始化处理29
4.1硬件初始化29
4.2内核初始化29
4.3软件初始化30
5附录31
5.1思考题31
5.2参考资料:
31
1引言
对于这样一个处处存在计算机的时代,计算机已经不再是像现在这样有显示器和键盘的样子,而是内只与各种各样的机器设备中,用户不会意识到是在使用计算机,而是在不知不觉中愉快的接受了计算机提供的各种服务。
为了实现处处存在计算机的设想,在TRON项目中研制了内置于形式各异的机器设备中的操作系统ITRON。
ITRON与现在的大多数计算机中的操作系统的最大不同就是具有实时性。
另外ITRON还有一个特点就是其标准的开放性,由于他的开发体系标准,任何人都可以自由的以ITRON为基准,创建操作系统。
课程目的:
本教材从应用的角度出发,比较详尽的解析ITRON系统的基本原理,并且理论结合实际,由浅入深,逐步引导大家,从而保证每位学员能够独立在基于ITRON系统内核上进行应用软件的设计和开发。
授课目标:
通过本课程的学习,能够让大家对ITRON系统有比较深入的了解,并能够独立开发基于ITRON系统的应用软件。
面向对象:
本教材主要面向有一定操作系统原理基础知识,并立志于基于ITRON体系开发的人。
教材构成:
1.ITRON系统概要
2.ITRON基本功能
✓任务管理
✓同步管理
✓内存管理
✓时钟管理
✓中断管理
3.初始化处理
4.系统调用详细说明
2ITRON系统介绍
2.1概要
ITRON(IndustrialtheReal-TimeOperationSystemNucleus,工业实时操作系统中心)提出的实时多任务系统规范。
它具有标准的实时内核,适用于任何小规模的嵌入式系统,日本国内现有很多基于该内核的产品,其中消费电器较多,目前已成为日本事实上的工业标准。
ITRON和日本的精密机械工业相结合,使日本在数据系统、工业机器人、办公机器方面处于世界领先地位。
ITRON系统具有以下特点:
Ø多任务支持
Ø事件驱动基于优先级的调度
Ø任务间的通信与同步
Ø实时时钟控制
Ø完全可抢占内核硬实时响应
2.2构成
2.2.1ITRON系统构成
ITRON系统主要由内核、接口库、辅助工具这三个基本子系统组成。
内核:
ITRON的核心部分,和处理程序一起组装到目标系统中,进行实时、多任务控制。
主要包括调度程序、Task管理、同步管理、初始化以及各种资源的管理等。
接口库:
用外部函数的形式提供系统服务,实现将外部函数形式发行的系统调用转变为内核识别管理的形式的接口程序。
图2.2-1表明接口库在系统中的位置。
图2.2.1-1接口库的定位
辅助工具:
包括编译工具、TaskDebuger等,为用户方便式用系统提供了可能。
2.2.2ITRON体系结构
建立在ITRON基础上的系统根据功能来分层,每一层都使用下一层提供的功能,系统
图2.2.2-1ITRON系统体系结构
硬件构成了系统的最底层,紧接着一层包括了最简单的大多是硬件相关的操作系统,功能最上层是应用程序。
2.3应用领域
随着信息终端的高性能化,在终端上搭栽操作系统的实例越来越多。
根据TRON协会提供的资料,下面将列举出ITRON系统的主要应用领域。
Ø娱乐/教育设备
Ø通信设备
ØAV设备
Ø测量仪器
Ø医疗设备、航空设备的数据收集以及数据计算系统等
Ø家用电器
在上述应用领域中,ITRON规范的操作系统的使用率比较高,普遍超过40%,除去其中没有使用操作系统的设备,这些领域中的ITON的使用率将超过60%,因此ITON规范的操作系统还是得到了广泛的认可和应用的。
2.4如何使用ITRON系统
ITRON规范中定义了一系列C语言接口库,应用系统可以利用这些接口库实现应用与操作系统的相连。
下面是基于itron系统的软件构建过程:
图2.4-1基于Itron系统的软件构建过程
3ITRON的基本机能
作为通常的实时操作系统,一般需要包含下面这些基本的管理功能:
Ø中断管理
Ø任务管理
1.创建、撤消
2.状态迁移
3.调度
4.同步(任务协调、资源的互斥访问、任务之间通信)
Ø资源管理(内存、时间、端口、外设等)
ITRON系统也不例外的实现了这些功能,下面将针对这些机能进行详细讲解。
3.1Task管理机能
3.1.1Task
任务就是一个具有独立功能的无限循环的程序段的一次运行活动。
任务具有动态性并行性异步独立性的特点。
动态性任务的状态是不断变化的,一般分为:
休眠态(dormant),就绪态(ready),运行态(running),挂起态suspended睡眠态sleep等如图3.1
并行性是指系统中同时存在多个任务,它们宏观上是同时运行的。
异步独立性任务是系统中独立运行的基本单元也是内核分配和调度的基本单元每个任务各自按相互独立的不可预知的速度运行走走停停。
每个任务都要按排一个决定其重要性的优先级,都有一个无限循环的程序段规定其功能(如一个C语言过程),并相应有一个数据段、堆栈段及一个任务控制块(保存CPU的现场,状态等)。
下面是一个ITRON系统任务应用的典型范例:
voidXXX_Task(INTstacd)
{
MSGmsg;
while
(1)
{
rcv_msg(&msg,MbxID);//从某个Mailbox中获取情报
用户程序
}
}
3.1.2任务调度
操作系统必须为多个任务可能有竞争的请求分配资源,对于处理器来讲,可分配的资源主要是处理器运行时间,分配的途径是通过内核的调度来完成的。
3.1.2.1调度产生条件
从表面上看,任务切换功能很简单,在某个时刻,一个正在运行的任务被终止,操作系统指定另一个任务为运行状态,并把控制权交给这个任务。
但是什么事件触发了任务控制权的切换?
ITRON系统中,当有如下几个条件发生时,会发生任务的调度。
Ø处理程序的返回
Ø发生改变系统运行状态的系统调用。
Ø产生时钟中断。
3.1.2.2调度方式
1.优先级方式:
对于每个任务都事先分配有优先级,这里的优先级是指决定调度顺序的东西,调度程序首先会参照优先级别,从Ready队列中找到优先级别最高的任务赋予CPU使用权。
在实时操作系统中任务的优先级是应用程序设计者按照任务的重要程度来安排的,并且任务在运行中其优先级可以动态改变,这个完全需要根据实际的需求进行设计。
图3.1.2.2-1ItronReady队列状态和处理器使用权
2.FIFS方式
当拥有同一优先级的任务存在多个时,调度程序将赋予成为Ready状态时间最长的任务CPU的使用权。
3.任务的禁止/许可
4.时间片轮旬
作为Itron系统并没有提供这种支持,但是可以通过现有系统提供的服务实现这种支持,这个在后面进行说明,详细内容请参考:
3.1.3任务的状态管理
任务根据运行时所必须的资源获得状况,以及有无事件发生来实现状态的迁移,所以内核必须管理各任务当前所处的状态。
3.1.3.1ITRON系统状态定义
操作系统的职责是控制任务的执行,这里包括决定任务交替的方式和资源的分配原则,所以为了达成这个目标,就需要描述任务的行为---即任务的状态。
在ITRON中,将任务划分为如下七个状态进行管理,在任意时刻,任务状态只能属于这七个状态之一。
未登录状态:
non_existent
没有作为任务的注册到系统中,或被消除没能登录到系统中的状态。
也就是说虽然已经装配到内存中,但不受OS管理的程序。
休眠状态:
dormant
任务生成时的状态(cre_tsk系统调用时)或者是运行终了时的状态。
处于dormant状态的任务,已经从调度对象中删除掉了。
就绪状态:
ready
成为内核调度对象管理的状态。
虽然已经具备除了处理机之外的所有必要资源,但是由于有比该任务优先级别更高(或者相同任务优先级别)的任务正在运行,等待运行权到达的状态,也就是说,只要运行权到达,马上迁移到run状态的状态。
运行状态:
run
得到了系统的控制权,正在处于运行处理中的状态。
系统中处于运行状态的任务只能有一个。
等待状态:
wait
由于缺少运行的必要条件,不能进入到运行状态的状态,也就是说正在等待必要运行条件到达的状态。
从wait状态的重新执行是从进入到wait状态时中断的场所开始执行,也就是说运行程序时必要的各种内部环境(寄存器、堆栈等)会复原。
挂起状态:
suspend
被其他任务情知中断执行(sus_tsk调用的发行)的状态,还有可以通过多重发行sus_tsk调用,使suspend状态嵌套。
Suspend状态的解除是通过发行rsm_tsk系统调用来进行的。
但是如果要发行依次rsm_tsk系统调用来解除被嵌套的suspend状态,必须要选择参数T_FRCPSM(0X1)。
从syspend状态重新实行是指从为进入suspend状态处理中断的位置开始。
也就是说运行程序时必要的各种内部环境(寄存器、堆栈等)会复原。
双重等待状态:
wait_suspend
由上面wait状态和suspend状态合成的状态,也就是对应于wait状态发行了sus_tsk调用的场合迁移到的场合。
Wait_suspend状态是当suspend状态被解除时,就迁移到wait状态,而wait状态被解除时,就迁移到suspend状态。
3.1.3.2任务状态迁移与系统调用
各个任务是通过系统调用的发行,来实现状态的迁移的,具体的状态迁移关联关系情参考图3.1.3.2-1:
图3.1.3.2-1任务的状态迁移关系图
各迁移过程的详细说明请参照表3.1.3.2-1
状态迁移
说明
系统调用
Nonexistent->dormant
任务生成
cre_tsk
Nonexistent->ready
不可
-
Nonexistent->run
不可
-
Nonexistent->wait
不可
-
Nonexistent->suspend
\不可
-
Dormant->nonexistent
任务的删除
del_tsk
Dormant->ready
任务的启动
sta_tsk
Dormant->run
不可(注1)
-
Dormant->wait
不可
-
Dormant->suspend
不可
-
Ready->nonexistent
不可
-
Ready->dormant
任务的强制终了
ter_tsk
Ready->run
在ready状态的任务中,优先级成为最高的任务
-
Ready->wait
不可
-
Ready->suspend
任务的强制等待
sus_tsk
Run->nonexistent
任务的终了并自删除
Exd_tsk
Run->dormant
正常终了
Ext_tsk
Run->ready
任务的自中断,接受系统的调度(注2)
-
Run->wait
等待要因的发生:
时间等待
唤醒等待
EventFlag等待
Semaphore等待
消息等待
内存块等待
Wai_tsk
Slp_tsk
Wai_flg
Wai_sem
Rcv_msg
Get_blk
Run->suspend
不可
-
Wait->nonexistent
不可
-
Wait->dormant
任务的强制终了
Tet_tsk
Wait->ready
等待要因发生:
Timeout
唤醒等待
Eventflag等待
Semaphore等待
消息等待
内存块等待
Wup_tsk
Sys_wup
Set_flg
Sig_sem
Snd_msg
Rel_blk
Wait->run
不可(注3)
-
Wait->wait_suspend
任务的强制等待
Sus_tsk
Suspend->nonexistent
不可
-
Suspend->dormant
任务的强制终了
Ter_tsk
Suspend->ready
强制等待的解除
Rsm_tsk
Suspend->run
不可(注4)
-
Suspend->wait
不可
-
Suspend->wait_suspend
不可
-
Wait_suspend->wait
强制等待的解除
Rsm_tsk
Wait_suspend->suspend
等待要因的解除
Vsnd_sig
表3.1.3.2-ITRON任务的状态迁移关系表
※1.通过sta_tsk调用后有时会从dormant状态迁移到run状态,但实际上是经过ready状态后迁移到run状态的。
※2.当出现比自任务有更高有限级的任务或对于自任务发行rot_rdp系统调用。
※3.通过等待要因发生后,有时从suspend状态迁移到run状态名单实际上是经过ready状态的。
※4.通过rsm_tsk系统调用发现有时从suspend状态迁移到run状态,但实际上是经过ready状态的。
3.1.4任务的应用
✓创建任务
在Itron系统中创建任务存在两种方式,一种方式是静态注册任务;另一种方法是动态的创建任务。
动态创建任务主要通过cre_tsk调用来实现的。
✓激活任务
Itron系统中,初始创建的任务的状态是Dormant状态,这个时候任务还处于系统无法调度的状态,所以必须激活任务,激活任务的系统调用是sta_tsk,作用就是将指定任务由Dormant状态迁移到Ready状态。
✓终止任务
在Itron系统中如果需要实现将任务由readystate,runstate,waitstate,suspendstate,wait-suspendstate迁移到Dormant状态的话,需要通过下面两种方式实现,正常终止和强制终止。
正常终止是任务自身主动放弃系统的使用权。
强制终止是任务自身出现错误,无法自主释放系统使用权,这个时候只能通过其他任务来完成对本任务使用权的剥夺。
实现任务终止的系统调用主要有下面三个:
✧ext_tsksystemcall
Thetaskthatissuedtheext_tsksystemcallisswitchedfromtherunstatetothedormantstate.
✧exd_tsksystemcall
Thetaskthatissuedtheexd_tsksystemcallisswitchedfromtherunstatetothenon-existentstate.
✧ter_tsksystemcall
Thetaskspecifiedbytheparametersisforciblyswitchedtothedormantstate.
✓删除任务
实现任务状态从Run或者Dormant状态切换到nonexistent状态,实现这个功能主要通过下面两个调用来完成的。
✧exd_tsksystemcall
Thetaskthatissuedtheexd_tsksystemcallisswitchedfromtherunstatetothenon-existentstate.
✧del_tsksystemcall
Thetaskspecifiedbytheparametersisswitchedfromthedormantstatetothenon-existentstate.
3.1.5任务的设计
3.1.5.1任务划分的原则
在将一个软件系统分解成并行任务时,主要需考虑的是系统内功能的异步性。
可以通过分析数据流图中的变换,确定哪些变换可以并行,而哪些变换在本质上是顺序的,通过这种方法,划分出任务:
一个变换对应一个任务,或者一个任务包括几个变换。
一个变换是应该成为一个独立的任务,还是应该和其它变换一起组成一个任务,决定的原则如下:
ØI/O依赖性(DependencyonInput/OutputDevice)
Ø时间关键性的功能(Time-criticalfunctions-HardDeadline)
Ø计算量大的功能HeavyComputationfunction
Ø功能内聚Functionalrelations
Ø时间内聚Temporalrelations
Ø周期执行的功能Cyclicexecutingfunction
3.1.5.2I/O依赖性
如果换依赖于I/O,那么它运行的速度常常受限于与它互操作的I/O设备的速度在这种情况下,变换应成为一个独立的任务。
Ø在系统中创建多个与I/O设备相当数目的I/O任务
ØI/O任务只实现与设备相关的代码
ØI/O任务的执行只受限于I/O设备的速度而不是处理器
Ø在任务中分离设备相关性
3.1.5.3时间关键性的功能
对于事件关键性的功能对响应的时间要求的第一重要的,所以对于这类任务的响应的优先级别比较高。
Ø将有时间关键性的功能分离出来组成独立运行的任务
Ø赋予这些任务高的优先级以满足对响应时间的需要
3.1.5.4计算功能
复杂的计算功能一般运行时间比较长,所以对于这类功能的设计的原则如下:
Ø计算功能占用CPU的时间多
Ø捆绑计算功能成任务赋予它们较低优先级运行,能被高优先级的任务
Ø抢占消耗CPU的剩余时间
Ø保持高优先级的任务是轻量级的
Ø多个计算任务可安排成同优先级按时间片循环轮转
3.1.5.5时间内聚
Ø将在同一时间内完成的各功能,即使这些功能是不相关的组成功能组形成一个任务
Ø功能组的各功能是由相同的外部事件驱动的,如时钟等这样每次任务接收到一个事件,它们都可以同时执行
Ø组成一个任务,减少了系统的开销
虽然时间内聚在结构化设计中并不被认为是一个好的模块分解原则,但在任务级是可以被接受每个功能都作为一个独立的模块来实现,从而达到了模块级的功能内聚,这些模块组合在一起,又达到了任务级的时间内聚
3.1.5.6周期执行功能
Ø将在相同周期内执行的各功能组成一个任务
Ø频率高的赋予高优先级
3.1.5.7任务设计的误区
Ø错误的任务划分原则
任务使用SUPSPEND/RESUME太频繁,是由于任务划分过细任务的当成功能使用,改进的方法是将任务变成子程序使用。
当事件发生时调用子程序,任务划分的太粗将子程序划分为任务,
得到消息后又立即检查另外的信息,不要使用轮循的方式直接使用事件驱动方式
Ø优先级倒置
当低优先级的任务向高优先级的任务发送消息时,高优先级的任务不能运行,直到低优先级的任务发送消息后才能运行。
这种情况下就没有必要分为两个任务只需要使低优先级的任务调用子程序即可。
Ø死锁
两个任务同时相互等待对方的信号,导致它们永远不能运行。
为了避免死琐将共享资源统一排序所有的任务按序来访问多个资源。
等待的事件没有发生过或者不具备等待事件的发生条件。
3.2同步和通信管理
在多任务的实时系统中,一项工作的完成往往要通过多个任务或多个任务与多个中断处理过程(ISRs)共同完成。
它们之间必须协调动作互相配合,甚至需要交换信息进行通信。
这些通信和同步的需要是:
1.任务能和其他任务及ISRs交换数据
2.任务能以以下方式与其他任务进行同步
✧单向同步一个任务与另一个任务或一个ISR同步
✧双向同步两个任务相互同步
✧与同步一个任务与几个事件同时同步
✧或同步一个任务与几个事件中的任何第一个到达事件同步
3.任务必须能对共享资源进行互斥访问
为了满足任务间通信同步和互斥的需要,同时保证资源被安全的使用,必须对多个相关任务在执行的次序上进行协调。
ITRON系统主要提供了如下一些同步机制。
✓EventFlag,任务间的协调功能。
✓Semaphore,对系统资源进行排他访问。
✓MailBox,任务之间进行的信息通信。
以下章节将针对这些系统同步方式进行详细的说明。
3.2.1EventFlag
在多任务处理系统中,需要等到一个任务终了后,其他任务再开始启动的等候功能,这个时候,需要拥有对其他任务是否终了进行判断的能力,ITRON系统中提供了EventFlag.来实现这个机能。
ITRON系统中,一个EventFlag是ITRON工作区中的一个32位的变量。
32位中的每一位都是表示一个事件标志,事件标志有两种状态,设置
(1)和清除(0)。
当一个标志处于设置状态时,表示相关的事件已经发生了,任务和ISRs可以使用事件标志来向其他任务发送信号,表示事件已发生。
图3.2.1-1EventFlag示意图
上图中,人相当于任务,火把表示EventFlag,在没有得到通知之前,等待信号的人处于等待状态,当发送信号的人发送了通知之后,处于等待状态的人将被激活,便开始自己的作业
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ITRON 系统 使用方法
![提示](https://static.bdocx.com/images/bang_tan.gif)