ITRON同步和通信管理

在多任务的实时系统中,一项工作的完成往往要通过多个任务或多个任务与多个中断处理过程(ISRs)共同完成。它们之间必须协调动作互相配合,甚至需要交换信息进行通信。这些通信和同步的需要是:
1.任务能和其他任务及ISRs 交换数据
2.任务能以以下方式与其他任务进行同步
单向同步一个任务与另一个任务或一个ISR 同步
双向同步两个任务相互同步
与同步 一个任务与几个事件同时同步
或同步 一个任务与几个事件中的任何第一个到达事件同步
3.任务必须能对共享资源进行互斥访问
为了满足任务间通信同步和互斥的需要,同时保证资源被安全的使用,必须对多个相关任务在执行的次序上进行协调。ITRON系统主要提供了如下一些同步机制。
Event Flag,任务间的协调功能。
Semaphore,对系统资源进行排他访问。
MailBox,任务之间进行的信息通信。
 Event Flag
在多任务处理系统中,需要等到一个任务终了后,其他任务再开始启动的等候功能,这个时候,需要拥有对其他任务是否终了进行判断的能力,ITRON系统中提供了Event Flag.来实现这个机能。
ITRON系统中,一个Event Flag是ITRON工作区中的一个32 位的变量。32 位中的每一位都是表示一个事件标志,事件标志有两种状态,设置(1)和清除(0)。当一个标志处于设置状态时,表示相关的事件已经发生了,任务和ISRs可以使用事件标志来向其他任务发送信号, 表示事件已发生。

上图中,人相当于任务,火把表示Event Flag,在没有得到通知之前,等待信号的人处于等待状态,当发送信号的人发送了通知之后,处于等待状态的人将被激活,便开始自己的作业了,这就是一个完整的Event Flag使用过程事例。

基本调用
 ITRON系统中提供下面基本调用,实现了Event Flag的基本机能,详细描述可以参照手册:
cre_flg: Generates an event flag.
del_flg: Deletes an event flag.
set_flg: Sets a bit pattern.
clr_flg: Clears a bit pattern.
wai_flg: Checks a bit pattern.
pol_flg: Checks a bit pattern (by polling).
twai_flg: Checks a bit pattern (with timeout setting).
ref_flg: Acquires event flag information.
vget_flg: Acquires event flag ID number.
vset_flg1: Sets a bit.
vwai_flg1:Checks a bit.
 Event Flag的应用
一般来说,Event Flag为任务之间的等待操作提供了场所,下面是其操作方法:
任务间的等候需要能够传达Event的任务和等待Event发生的任务,传达Event任务通过发行set_flag调用来传递信息,另一方面等待Event任务对事件发行等待调用,并且参照等候模式。
如果event flag的位模式与等待位模式一致时,任务可以继续进行处理,如果不一致,任务就不做继续处理,迁移到wait状态,并进入到event的等待队列中。
下图表示了两个Task通过32Bit Event Flag传递信息的范例:

下图表示了4个Task利用1Bit Event Flag传递信息的执行范例:

Event Flag的生成
Event Flag的生成是通过cre_flg系统调用进行的,在Itron系统中,cre_flg调用从系统工作区中创建一个32bit的事件标志组,并返回Event Flag的ID号。
Event Flag的删除
通过del_flg调用可以实现对Event Flag的删除,当产生删除操作的时候,该系统中存在等待本Flag操作的任务,这个时候,处于等待Eveng Flag的任务将解除等待操作,并迁移到Ready状态。
Event Flag的设定
通过set_flg调用,可以实现Event Flag的设定,当本调用发行后,处于等待Event Flag发行的任务的状态将由等待状态迁移到Ready状态。
Event Flag的清除
通过clr_flg调用,可以实现Event Flag的清除,保证Event Flag能够有初始化值。
Event Flag的等待
关于Event Flag的等待有三种方式,wai_flg, pol_flg, 和twai_flg,他们存在一些细微的差别。
wai_flg:如果Event Flag已经被设置,系统将保持运行,如果没有存在满足运行条件的Flag,系统将迁移到等待状态,一直到满足运行条件的事件发生。
pol_flg:任务直接查询Event Flag,如果满足运行条件的事件发生,系统保持运行状态不变,如果没有满足运行条件的事件发生,系统将直接返回,不仅性等待操作。
twai_flg:在制定的时间内,如果存在满足运行条件的事件发生,系统将保持运行状态不变,否则系统将按照指定的时间进行等待,Timer Out之后,系统迁移到Ready状态。
等待条件的设定:
因为Event Flag是一个32Bit的位群,所以在进行Event Flag的设定的时候可以按照条件的逻辑进行设定,主要的逻辑有And和Or两种,需要根据实际情况进行有选择的使用。
And:多个条件同时存在的时候,才满足任务的运行条件。
Or:当设定的多个条件有一个满足的时候,运行条件成立。

Semaphore
虽然多任务系统中的各个Task可以共享各类资源,但是有些资源却一次只能被一个任务使用,因此防止同时动作的多个任务出现资源争执的需要,ITRON系统中提供了非负计数器-Semaphore,由管理资源个数的计数器进行资源使用得调配。
一个计数信号量是ITRON工作区中的一个16 位的变量,初始值可以是0~65535,表示可以使用的资源数量,初始值为0表示资源开始处于锁住状态,一个非0的值表示有多个资源供多个任务访问。
基于FIFS方式的等待机制
基于上图的示例,ITRON系统提供的方法是为任务提供等待队列,并且系统分配消息的方式是基于FIFS方法的,不区分任务的优先级别。
表示了三个Task共享n个资源的情况,请参照:

基本调用

ITRON系统中提供下面基本调用,实现了Semaphore的基本机能,详细描述可以参照手册:

cre_sem: Generates a semaphore

del_sem: Deletes a semaphore

sig_sem: Returns a resource

wai_sem: Acquires a resource

preq_sem: Acquires a resource (by polling)

twai_sem: Acquires a resource (with timeout setting)

ref_sem: Acquires semaphore information

vget_sid: Acquires semaphore ID number

创建信号量
Itron系统提供两种创建Semaphore的方法,一种是静态注册,另一种是通过系统调用来动态创建。动态创建是通过cre_sem的方法来实现的。
删除信号量
Itron系统中通过del_sem调用实现semaphore的删除。当删除semaphore被执行的时候,如果与本资源关联的任务等待队列中存在等待资源的任务时候,这些任务的状态将自动切换到Ready状态。
释放资源
Itron系统中通过sig_sem调用实现资源的释放,可以归还资源的数量由sig_sem的参数决定。
资源请求
主要有下面三种方式可以实现资源的请求:wai_sem、preq_sem和twai_sem;他们虽然都实现资源的申请,但是使用时还有一些细微的差别:
wai_sem:当系统没有满足任务需要的资源数量的时候,系统状态将迁移到等待状态,直到系统中存在可以使用的资源为止。
preq_sem:查询系统资源,如果存在满足系统需要的资源,则申请使用,如果没有满足需要的资源,系统将不申请资源,但是运行状态保持不变。
twai_sem:在申请资源的时候,可以指定等待的时间,如果在制定的时间内申请到资源,则系统继续保持运行,如果在制定的时间内没有申请到可用的资源,系统将解除等待状态。

MailBox

为了实现任务之间的通信功能,ITRON提供了邮箱,并且邮箱包含有多任务应用的等待队列和邮箱专用的信息等待队列,除了任务之间的通信功能使用,也作为任务之间的协作功能使用。当一个任务执行发送原语时,有两种可能性,一种可能是接收者已经处于等待状态;另外一种可能是消息发送时,接收者没有处于等待收信状态;下面将针对这两种情况进行示例说明:

1.下图表示了消息先于收信者到达的情况,这时信件被投入信箱之后,便被缓存了起来,等待收信者取得信件。同时收信者到达之后,取得信件之后,便根据信件的指示进行相关作业。

基于上图消息等待方式的实现在ITRON系统的实现方法是为Message提供等待队列作为缓冲,并且对于从队列中取得信息的方式提供了两种方式作为支持,一种是FIFS,即先到达的信件被优先取走,另一种是对消息进行优先级别的指定,这样就可以保证高优先级别的消息可以得到优先的取得权。
基于FIFS方式的等待机制
这种机制下所有消息都是平等的,他们的取得顺序完全取决于他们到达邮箱的时间,在邮箱中等待时间长的消息有优先被执行的权力。

基于优先级方式的等待机制
这种机制下的消息是存在优先级别的,高优先级别的消息会获得优先执行权力,但是对于拥有相同优先级别的消息,他们的等待方式还是基于FIFS的方式进行的。

2.下图表示了收信者先于发信者到达的等待方式,这时收信者开始处于等待状态,当发信者将消息投入到邮箱之后,收信者便重新处于激活状态,这时只要执行条件满足,便可以根据消息的指示进行相关作业。

基于FIFS方式的等待机制
基于上图的示例,ITRON系统提供的方法是为任务提供等待队列,并且系统分配消息的方式是基于FIFS方法的,不区分任务的优先级别。

基本调用
对邮箱的操作,系统主要提供了如下的调用:
cre_mbx: Generates a mailbox.
del_mbx: Deletes a mailbox.
snd_msg: Sends a message.
rcv_msg: Receives a message.
prcv_msg: Receives a message (by polling).
trcv_msg: Receives a message (with timeout setting).
ref_mbx: Acquires mailbox information
vget_mid: Acquires mailbox ID number
 MailBox的应用
一般来说,邮箱是任务之间信息通信过程中的场所,下面是使用方法:
在任务之间的信息通信里,需要给邮箱分配送信的任务(发报任务)和接受这个信息的任务(接受任务)。这时如果邮箱里已经有任务被排列在队列里,信息就会被传递给等待队列里的任务中。任务专用队列的先头任务将会从Wait状态迁移到Ready状态。但是如果邮箱中还没有任务被排列在队列中,信息就会被排列到信息专用的队列中。不过发行snd_msg调用的任务不进行状态迁移。
还有接受信息的任务,对邮箱发行rcv_msg系统调用,接受消息,这时对象邮箱中已经有信息排列在队列里时,任务就会收取排列在队列里的信息。但是如果对象邮箱中还没有信息被排列在队列中的场合,任务就不能继续处理,被排列在对象邮箱的任务专用队列中,并且迁移到wait状态。不过在处于wait状态过程中,如果从其他任务那里得到信息的话,就可以接受信息,任务同时也会从wait状态解脱出来,迁移到ready状态。如此循环进行,任务之间的通信便不断地进行下去。

创建邮箱
系统提供两种方式创建邮箱,静态注册和动态创建。系统动态创建邮箱是通过cre_mbx调用来实现的。
删除邮箱
系统提供的del_mbx功能可以实现邮箱的删除,del_mbx发行后,如果等待队列中存在任务的时候,这些任务的状态将自动迁移到Ready状态。
发送Event
系统提供的snd_msg调用实现Event的发送,当snd_msg发送之后,处于等待Event的任务的状态将由Wait状态迁移到Ready状态。
接收Event
Itron系统提供三种方式来实现Event的接收,rcv_msg, prcv_msg,和trcv_msg,他们的差异是:
rcv_msg:当邮箱中存在Evnet,则任务将直接获取Event并保持执行状态,当邮箱中没有Event的时候,任务将迁移到等待状态,直到邮箱中存在Event为止。
prcv_msg:任务查询邮箱状态,如果存在Event,则取得Event,并继续执行,如果不存在Event,则任务不进行等待,继续保持执行。
trcv_msg:在制定的时间内,邮箱中存在Event,则任务取得Event并执行,否则任务将等待指定的时间,之后迁移到Ready状态。

ITRON同步和通信管理相关推荐

  1. ComM(通信管理)和CanNm(network)

    1      网络管理组成部分 网络管理部分由通信管理器(简称ComM),通用网络管理器接口(简称NmIf),总线相关的网络管理器(简称NM,包括CanNM,LinNM,FrNM),总线相关的状态管理 ...

  2. Adaptive AUTOSAR (AP) 平台设计(6)——通信管理

    前言 Hello!大家好! 欢迎来到<搞一下汽车电子> 本期为<搞一下 AP AUTOSAR 平台设计>第6期:通信管理 更多精彩内容欢迎订阅微信公众号 " 搞一下汽 ...

  3. 实验2linux进程控制与通信,实验2 进程控制与通信管理word文档良心出品

    <实验2 进程控制与通信管理word文档良心出品>由会员分享,可在线阅读,更多相关<实验2 进程控制与通信管理word文档良心出品(13页珍藏版)>请在人人文库网上搜索. 1. ...

  4. 假定某计算机的cpu,假定某计算机字长16位,CPU内部结构如图5.1所示,CPU和存储器之间采用同步方式通信,按字编址。采_搜题易...

    假定某计算机字长16位,CPU内部结构如图5.1所示,CPU和存储器之间采用同步方式通信,按字编址.采用定长指令字格式,指令由两个字组成,第一个字指明操作码和寻址方式,第二个字包含立即数Imm16.若 ...

  5. 任务中断间的同步与通信概述

    文章目录 1 任务中断间的同步与通信概述 1 任务中断间的同步与通信概述 通常情况下,任务并不是独立运行的,总是要与其他任务或中断发生联系. RTOS提供的协同机制: 我们需要解决的问题: 同步的概念 ...

  6. java同步通信方式_java多线程同步与通信示例(synchronized方式)

    java多线程同步示例,来自<疯狂java讲义>.通过synchronized,wait(),notify(),notifyAll()实现多线程同步与通信.假设现在系统中有两个线程,这两个 ...

  7. 专业课程设计之客户与服务器程序的同步与通信机制的设计(一)项目介绍

    源码下载地址为: http://download.csdn.net/detail/qq78442761/9856423 ---------------------------------------- ...

  8. 线程同步,通信与虚方法

    线程同步,通信与虚方法 目录 线程同步,通信与虚方法 进程同步,通信 事件event 旗语semaphore 信箱mailbox 虚方法 实例理解 将子类句柄赋值成父类句柄 将父类句柄赋值成子类句柄 ...

  9. GOSSIP PROTOCOL(又被称为反熵Anti-Entropy, 一种弱一致性, 同步信息交换通信的协议)...

    GOSSIP PROTOCOL(又被称为反熵"Anti-Entropy", 一种弱一致性, 同步信息交换通信的协议) 1.它是一种最终一致性算法 2.它是弱一致性的 1.https ...

最新文章

  1. 几种典型的软件自动化测试框架
  2. centos 修改ssh默认端口号
  3. 数据结构 线性链表栈
  4. .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践
  5. css 外弧_css 伪类实现弧形
  6. java一个进程可以村多少个线程_一台 Java 服务器可以跑多少个线程?
  7. 以下哪些可以成为html文件的扩展名_今天在我的visual studio code里装了以下插件,现在用着很爽...
  8. Mac的游戏开发配置环境笔记
  9. 我是如何从头写一篇顶级论文的
  10. 【百战GAN】适合所有人的第一个GAN项目:DCGAN图像生成代码实战
  11. python控制多个屏幕_使用Python控制屏幕
  12. Mac 下终端运行C++
  13. 【渝粤题库】广东开放大学 经济法实务 形成性考核
  14. 链塔小程序产品更新说明
  15. Task01 文件处理与邮件自动化
  16. 计算机上如何保存ico格式,PS怎么保存ico格式
  17. 中台之上(三):战略和组织结构,业务架构设计中不应被忽视的关键因素
  18. ENVI对GF-5高光谱数据进行FLAASH大气校正
  19. 《应用回归分析》何晓群 最新版数据下载
  20. 使用CH340遇到的问题

热门文章

  1. Elasticsearch教程 | 第三篇:审计设置
  2. 浪涌保护器,SPD浪涌保护器的分类和选型标准
  3. 信创办公--基于WPS的Word最佳实践系列(使用智能图形丰富表达内容)
  4. vmware 虚拟机启动失败, Intel VT-x 处于禁用状态
  5. 微信朋友圈会在服务器上保留多久,微信朋友圈设置多久可见,暴露了你的为人...
  6. win10计算机如何调到桌面上,win10系统下怎么将计算器放在桌面上
  7. 怎么把计算机里面的解压到桌面上,电脑桌面怎么加压文件
  8. 一打开控制台窗口就中文输入_一起来玩SiFive的RISCV平台,玩转起来就免费得
  9. 深度学习之10分钟入门h5py
  10. 铁柱学习node.js