位置:51电子网 » 技术资料 » 嵌入式系统

VxWorks下实时多任务程序的实现

发布时间:2008/8/28 0:00:00 访问次数:911

  摘要:本文介绍了vxworks操作系统的技术特点,给出了一种vxworks操作系统下实现实时多任务程序的一种方法,并利用软件逻辑分析仪windview对程序运行结果进行了分析。

  关键词:嵌入式实时操作系统;信号量;中断服务程序

  1 引言

  随着信息技术的快速发展和应用,计算机的发展正显示出微型化和专业化的趋势。目前,嵌入式系统已得到广泛应用,实时系统在各高精尖技术领域得到迅猛发展,具有实时操作系统的计算机系统也得到了广泛的应用。实时操作系统是嵌入式应用软件的基础和开发平台,它不同于分时操作系统,它的主要任务是对事件进行实时的处理。虽然事件可能在无法预知的时刻到达,但是软件必须在事件发生时在严格的时限内做出响应。在实时操作系统下设计实时多任务程序是实现实时系统的重要一环,本文介绍了vxworks操作系统的技术特点,给出了一种在vxworks操作系统下实时多任务程序的设计方法,经过仿真,验证了这种设计方法的可行性和有效性。

  2 vxworks操作系统简介

  vxworks就是一个由wrs公司推出的嵌入式实时操作系统,具有多任务、可裁减、可靠性好、实时性高等特点, 是业界公认的性能出色的一种实时操作系统。vxworks实时操作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。系统的链接器可按应用的需要自动链接一些目标模块。这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。vxworks操作系统的基本构成模块主要包括以下部分:高效的实时内核wind、兼容实时系统标准posix、i/o系统、本机文件系统、文件i/o系统、网络特性、虚拟内存(可选单元vxvmi)、共享内存(可选单元vxmp)、驻留目标工具、wind基类、工具库、性能优化、目标代理、板级支持包、vxworks仿真器(vxsim)。

  vxworks中与构建实时多任务系统有关的内容如下:

  1)wind内核任务调度策略

  wind内核采用基于优先级的抢占式调度法作为它的缺省策略,同时它也提供了轮转调度法。

  基于优先级的抢占式调度,具有很多优点。这种调度方法为每个任务指定不同的优先级。没有处于阻塞或悬置态的最高优先级任务将一直运行下去。当更高优先级的任务由就绪态进入运行时,系统内核立即保存当前任务的上下文,切换到更高优先级的任务。而轮转调度法分配给处于就绪态的每个同优先级的任务一个相同的执行时间片。

  2)信号量

  vxworks信号量是提供任务间通信、同步和互斥的最优选择,也是提供任务间同步和互斥的主要手段。vxworks 提供3 种信号量来解决不同的问题。

  a. 二进制信号量:二进制信号量(binary)能够满足任务间的互斥和同步,需要的系统开销最小。当一个任务调用semtake()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。

  b. 互斥:互斥信号量(mutex)用来实现对共享资源的保护,当两个以上的任务共享同一块内存缓冲区或同一个i/o设备之类的资源时,可能会发生竞争状态。互斥信号量可以通过对共享资源上锁,实现高效的互斥访问。

  c. 计数器信号量:计数器信号量(count)是实现任务同步和互斥的另一种手段。计数器信号量除了像二进制信号量那样工作外,还保持对信号量释放次数的跟踪。

  3) 中断服务程序

  vxworks的所有中断服务程序使用同一中断堆栈,它在系统启动时就已根据具体的配置参数进行了分配和初始化,因此,必须保证它的大小,以使它能满足最坏的多中断情况。为了快速响应中断,中断服务程序isr运行在特定的空间,不同于其它任何任务,中断处理没有任务的上下文切换。中断也有缺陷:isr不运行在常规的任务上下文,它没有任务控制块。对于isr的基本约束就是它们不能激活那些可能使调用程序阻塞的函数。

  3 实时多任务程序设计

  在一个实时系统中,中断处理是至关重要的,系统通过中断机制响应外部事件,并对外部事件作出处理,系统对中断的响应速度和中断服务程序的处理速度直接反映了实时系统的性能。vxworks提供函数intconnect(),它允许将指定的c函数与任何中断相联系。这个指定的c函数就是这个中断的中断服务程序, 中断服务程序必须尽快结束,以免阻塞低优先级的中断,它不同于普通的任务模块,必须满足特殊的要求就是不许阻塞。为了既保证中断服务程序尽快结束而且又避免isr在调用函数时受到约束,这时可以使用信号量来将中断与任务相联系,用任务来完成irs的功能,建立实时多任务系统。

  具体的做法为,先利用函数taskspamn()来创建多个任务,建立多任务环境,与中断相联系的任务处于高优先级,利用semtake(semid)使该任务等待信号量而处于阻塞状态,只有当相应的中断到来时,中断服务程序执行semgive(s

  摘要:本文介绍了vxworks操作系统的技术特点,给出了一种vxworks操作系统下实现实时多任务程序的一种方法,并利用软件逻辑分析仪windview对程序运行结果进行了分析。

  关键词:嵌入式实时操作系统;信号量;中断服务程序

  1 引言

  随着信息技术的快速发展和应用,计算机的发展正显示出微型化和专业化的趋势。目前,嵌入式系统已得到广泛应用,实时系统在各高精尖技术领域得到迅猛发展,具有实时操作系统的计算机系统也得到了广泛的应用。实时操作系统是嵌入式应用软件的基础和开发平台,它不同于分时操作系统,它的主要任务是对事件进行实时的处理。虽然事件可能在无法预知的时刻到达,但是软件必须在事件发生时在严格的时限内做出响应。在实时操作系统下设计实时多任务程序是实现实时系统的重要一环,本文介绍了vxworks操作系统的技术特点,给出了一种在vxworks操作系统下实时多任务程序的设计方法,经过仿真,验证了这种设计方法的可行性和有效性。

  2 vxworks操作系统简介

  vxworks就是一个由wrs公司推出的嵌入式实时操作系统,具有多任务、可裁减、可靠性好、实时性高等特点, 是业界公认的性能出色的一种实时操作系统。vxworks实时操作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。系统的链接器可按应用的需要自动链接一些目标模块。这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。vxworks操作系统的基本构成模块主要包括以下部分:高效的实时内核wind、兼容实时系统标准posix、i/o系统、本机文件系统、文件i/o系统、网络特性、虚拟内存(可选单元vxvmi)、共享内存(可选单元vxmp)、驻留目标工具、wind基类、工具库、性能优化、目标代理、板级支持包、vxworks仿真器(vxsim)。

  vxworks中与构建实时多任务系统有关的内容如下:

  1)wind内核任务调度策略

  wind内核采用基于优先级的抢占式调度法作为它的缺省策略,同时它也提供了轮转调度法。

  基于优先级的抢占式调度,具有很多优点。这种调度方法为每个任务指定不同的优先级。没有处于阻塞或悬置态的最高优先级任务将一直运行下去。当更高优先级的任务由就绪态进入运行时,系统内核立即保存当前任务的上下文,切换到更高优先级的任务。而轮转调度法分配给处于就绪态的每个同优先级的任务一个相同的执行时间片。

  2)信号量

  vxworks信号量是提供任务间通信、同步和互斥的最优选择,也是提供任务间同步和互斥的主要手段。vxworks 提供3 种信号量来解决不同的问题。

  a. 二进制信号量:二进制信号量(binary)能够满足任务间的互斥和同步,需要的系统开销最小。当一个任务调用semtake()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。

  b. 互斥:互斥信号量(mutex)用来实现对共享资源的保护,当两个以上的任务共享同一块内存缓冲区或同一个i/o设备之类的资源时,可能会发生竞争状态。互斥信号量可以通过对共享资源上锁,实现高效的互斥访问。

  c. 计数器信号量:计数器信号量(count)是实现任务同步和互斥的另一种手段。计数器信号量除了像二进制信号量那样工作外,还保持对信号量释放次数的跟踪。

  3) 中断服务程序

  vxworks的所有中断服务程序使用同一中断堆栈,它在系统启动时就已根据具体的配置参数进行了分配和初始化,因此,必须保证它的大小,以使它能满足最坏的多中断情况。为了快速响应中断,中断服务程序isr运行在特定的空间,不同于其它任何任务,中断处理没有任务的上下文切换。中断也有缺陷:isr不运行在常规的任务上下文,它没有任务控制块。对于isr的基本约束就是它们不能激活那些可能使调用程序阻塞的函数。

  3 实时多任务程序设计

  在一个实时系统中,中断处理是至关重要的,系统通过中断机制响应外部事件,并对外部事件作出处理,系统对中断的响应速度和中断服务程序的处理速度直接反映了实时系统的性能。vxworks提供函数intconnect(),它允许将指定的c函数与任何中断相联系。这个指定的c函数就是这个中断的中断服务程序, 中断服务程序必须尽快结束,以免阻塞低优先级的中断,它不同于普通的任务模块,必须满足特殊的要求就是不许阻塞。为了既保证中断服务程序尽快结束而且又避免isr在调用函数时受到约束,这时可以使用信号量来将中断与任务相联系,用任务来完成irs的功能,建立实时多任务系统。

  具体的做法为,先利用函数taskspamn()来创建多个任务,建立多任务环境,与中断相联系的任务处于高优先级,利用semtake(semid)使该任务等待信号量而处于阻塞状态,只有当相应的中断到来时,中断服务程序执行semgive(s

相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式