DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 431|回复: 0
打印 上一主题 下一主题

DSP实时操作系统及其应用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 20:11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
     
摘 要:由DSP处理器单独承担原来需要微控器和DSP处理器共同完成的任务的新一代DSP处理系统,已经开始成为嵌入式DSP系统开发领域主流。而且为了有效的发挥DSP处理器不断增加的性能,一个DSP已经开始用于同时并发的多个任务处理。在多任务或多个DSP处理器的系统中采用实时操作系统可以有效的降低开发难度,提高系统的可靠性和可升级性。本文对基于VDK的DSP实时操作系统内核进行了研究,详细描述了内核采用的多线程调度机制,并以一个多任务应用系统为例,实现了新线程的创建和取消,多线程之间的优先级排列和调度策略,给出了其API函数使用方法。
  关键词:DSP;嵌入式处理器;RTOS;内核
DSP Real Time Operating System and Its Applications
  ZHANG Xin
  (Institute of Electronic Engineering,Xi′an Shiyou University,Xi′an,710065,China)
  Abstract:As update ofthe architecture,the DSPs(DigitalSignalProcessors)become more and more powerfulin processingperformance.The tasks,completed by DSPs and microcontroller together before,can be done by a DSP alone.Nowadays,thisdeveloping methodology has become mainstream in embedded system design.Using realtime operating system in DSPapplicationsystem willbe helpfulto reduce the difficulty in developing and improve the reliability and portability ofDSPprograms.Thispaperanalyzes the realtime operating system based on VisualDSP++kernel(VDK)and gives some examples using APIfunctions.
  Keywords:DSP;embedded processor;RTOS;kernel
 
  目前的嵌入式微控器性能指标越来越高,一个微控制器往往可以完成很多任务,因此一般的微控制器程序也从单一任务的软件结构变为多任务的软件结构[1]。软件工程师适应这一变化的初期阶段是自觉或不自觉地在应用程序中增加一个任务调用循环,作为系统的主程序。随着软件规模的上升和对实时性的提高,这一方法逐渐不能满足应用要求,于是实时多任务操作系统(RTOS)作为一种软件平台逐步成为目前国际嵌入式系统的应用主流。实时多任务操作系统是嵌入式应用软件的基础和开发平台,是一段嵌入在目标代码中的软件,用户的其他应用程序都建立在RTOS之上。由操作根据各个任务的优先级,采用用户指定的调度策略,合理地在不同进程之间分配CPU时间,从而保证了实时数据处理的需要,而且维持CPU具有较高的使用效率[2]。
  做为嵌入式处理中使用越来越多的DSP处理器,对实时数据处理具有更高的要求。另外,许多DSP处 理器在系统中不仅要完成实时数据处理任务,还需要完成整个系统的控制功能[3]。例如,在消费电子产品MP3播放器等产品中,为了降低系统成本,原来由微控器完成的功能现在大多数由DSP处理器单独完成了。所有这些功能只有操作系统来管理才能较好实现。

1 嵌入式应用对DSP实时操作系统的要求
  当前,嵌入式应用范围的发展更为广泛,他们绝大多数都以多媒体、通讯设备和智能设备的形式出现在人们生活中。所有这些设备都离不开一个数字化的过程,当然更需要DSP处理器的参与。现在的DSP处理器的处理能力已经远远超过了单任务实时性的要求。新一代DSP构架大多采用面向编译优化的VLIW结构,是基于传统的DSP处理器和微控器二者功能合一的产物[4]。因为这种新型处理器具有足够的处理能力,必将会把传统的DSP软件和微控器软件集成到一个处理器平台上来,形成一种集微控器和DSP处理器功能为一体,具有自己操作管理系统的嵌入式系统开发平台,如图1所示。
  使用DSP实时操作系统和标准设备驱动程序,可以使程序员从繁重的与DSP处理器内部结构和硬件接口相关的编程中解放出来,更加专注于数字信号处理算法研究和程序控制流程的实现。而且集成有DSP实时操作系统的DSP程序,具有更好的可读性、可移植性和可维护性,这些方面对于开发大型程序和提高开发效率是非常重要的。

  


 作为一个操作系统,在简化开发和系统管理的同时,必然要消耗一些系统资源。RTOS主要占用两方面的资源,操作系统本身计算开销和操作系统代码存储开销。可以分以下几点来考虑:
   (1)在计算方面的开销,可以分2点来考虑:
  ①RTOS要完成一些用于维护系统正常运行的功能,例如任务的调度,即同一个DSP中按时间片对多个任务进行切换,这需要一些计算开销,他在很大程度上取决于时间片的划分,一般来说,所用开销大约在1%。
  ②RTOS要完成DSP软件中的系统调用,系统调用要花费时间。这一部分是系统的核心,在时间要求严格的情况下,程序员仍然可以从较低的层次入手构筑软件,许多DSP开发软件允许程序员从2个不同的层次编程,结合使用,既能降低软件工作量,又能兼顾软件效率。
  (2)在存储方面,一方面,许多DSP开发软件采用了模块化技术,根据实际需要组成模块化RTOS,删减未用到的系统功能,可以使RTOS所占空间从0.5~10 kB,这在DSP芯片RAM容量大大增加的今天,是微不足道的。另一方面,在DSP硬件性能飞速发展,价格大幅度下降,而人力资源价格上涨的今天,以硬件性能的冗余换取编程工作的简化,是非常合理的。

2 DSP实时操作系统的设计实现
2.1 实时操作系统的任务调度
  实时的含义是指在规定的时限内能够传递正确的结果,迟到的处理结果就是错误。实时操作系统的首要任务是调度一切可利用的资源完成实时控制任务,其次才是着眼于提高计算机系统的使用效率,其重要特点是要通过任务或线程调度来满足对于重要事件在规定的时间内做出正确的响应。调度过程如图2所示。
  


2.2 VDK实时操作系统内核的设计实现
  Visual DSP++kernel(VDK)是Analog Devices公司开发的可裁减的DSP实时操作系统内核的工具。该内核主要用于完成多个线程之间的上下文切换和实时操作系统内部模块之间的通讯管理[5]。
  VDK一般调度策略总是采用抢先式(Preemptive)调度方式。程序设计人员也可以利用几种调度方式的合理组合,设计出适合自己的其他类型的多线程调度方式。VDK多线程主要调度方式有3种:
   (1)合作调度方式(Cooperative Scheduling)
  该方式是最简单的调度方式,系统中所有线程被赋予相同优先级的调度权。系统中线程在运行态占用处理器资源,在阻塞态时被排列在等待队列的最后,也可以自己调用yield函数,使线程退出运行态,进入等待队列。另外,任何系统调用都会引起当前正在运行的线程阻塞。
  (2)时间片轮转调度方式(Round-robin scheduling)
  时间片调度方式给予每一个优先权相同的线程固定的执行时间间隔。VDK中时间间隔是通过设定tick参数确定的。
    (3)抢先式调度方式(Preemptive Scheduling)
  如果等待队列中有比正在运行的线程优先级更高的线程,则正在运行的线程阻塞后进入等待队列,等待队列中优先级最高的线程获得执行权。该方式提供了比其他2种更有效,而且灵活的调度方式。
  VDK允许在编程中同时使用这3种调度策略。例如,对于没有执行时间限制要求的线程可以赋予较低的优先级,使用时间片轮转调度方式。对于实时性要求严格的线程可以赋予较高优先级,使用抢先式调度策略,如图3所示。
  VDK应用程序接口是以库函数的方式提供,程序员可以在编写程序时直接调用系统API函数,来实现自己的实时操作系统功能。VDK的API函数包括中断控制、调度器管理、线程管理、信号量管理、Memory缓冲池管理、事件、设备驱动和消息传递等功能。
 


3 实时操作系统中多线程调度应用举例
  在有DSP实时操作系统的平台上实现多线程、多任务程序编程,已变得非常容易了。下面以一个ADSP2191 DSP处理器为核心的电路系统为例,说明多线程程序在实时操作系统条件下的编写。该系统中5个可能并发的线程:
  (1)SPORT 高速同步数据传输任务。
  (2)UART 通用异步数据传输任务。
  (3)PFX中断 可编程外部触发中断任务。
  (4)数据处理 对传输数据进行压缩和解压。
  (5)结果显示 对用户要求的结果进行显示。
  考虑到系统对不同任务的实时性要求和用户对系统响应时间的要求,我们可以将这5个任务排列为不同的调度方式和优先级,具体的划分方法如图4所示。
  


  
程序员此时需要在编程中考虑的最重要的问题是,正确地创建和撤销线程。可以通过相应API函数的调用进行单个线程的创建和撤销。下面举例说明。以默认方式创建线程:




创建一个新的线程,返回新线程的ID号。InType参数,在vdk.h和vdk.cpp文件中有定义。他指明新创建线程所需要的默认堆栈的大小,最初时的优先级和其他一些属性。
   以用户自定义方式创建线程:



    


  
自定义方式创建线程,可以由用户自己配置堆栈的大小、线程的优先级等参数,有利于优化线程运行时的内存占用空间和准确的实时处理任务的完成。
  线程的撤销:
  VDK_DestroyThread(My_VDK_ThreadID,inDestroyNow);
  将系统中某特定ID号的线程撤销,调度器将不再激活该线程号的线程。操作系统内核还将会把该线程释放出来的Memory等资源分配给优先级更低的线程。InDestroyNow参数,在线程撤销成功时返回1,线程撤销失败或系统中没有正在运行的用户线程,则返回0。
  由此可见,在DSP实时操作系统下开发多任务应用程序,程序员只需要考虑如何正确地设置任务之间的优先级关系和调度方式,如何正确地实现单任务的功能,而将大量繁琐的任务之间的调度和实时性保证工作交给实时操作系统去做。这样的做法,极大地方便了程序员开发多任务应用程序。

4 结 语
  随着DSP处理器性能的提高和使用功能的复杂化,现在开发的DSP系统中软件的开发费用越来越大,周期越来越长,已经不能适应市场的需要,因此急需要采用新的开发方式来适应这一变化。基于DSP处理器的实时操作系统的出现,正好满足这方面的需要。他不仅具有实时多任务并行处理能力,还可以保证系统的可升级性和源代码的可移植性。由于操作系统已经承担了对多任务和虚拟设备的管理,从而极大地降低了DSP系统的开发难度,提高了系统开发的整体性能。所以,采用DSP实时操作系统将成为今后复杂DSP系统的主流开发方式。
参考文献


[1]Steven Persyn C,MichaelMcLelland,MichaelEpperly,et al.Evolution of digital signal processing based spacecraft computing solutions[C].Aerospace ConferenceProceedings IEEE,2002,(4):1899-1907.
[2]张尧学,史美林.计算机操作系统教程[M].第2版.北京:清华大学出版社,2000.
[3]Alan Gatherer,Trudy Stetzler,Mike McMa-han,et al.DSP-Based architectures for mobile communications:past,present and future[J].IEEE Communications Magazine,2000,(1):84-90.
[4]沈戈,荆元利,高德远,等.一种支持并行互连的DSP处理器结构设计[J].高技术通讯,2002,(12),增刊:31-35.
[5]VisualDSP++kernel(VDK)user guide[EB/OL].http://www.analog.com.
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-21 20:33 , 耗时 0.089981 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表