嵌入式操作系统Visual DSP++Kernel的原理与应用

2011-01-27 01:07金伟正
电气电子教学学报 2011年2期
关键词:嵌入式操作系统信号量服务程序

金伟正,金 汤

(武汉大学电子信息学院电子工程系,湖北武汉 430079)

嵌入式操作系统Visual DSP++Kernel的原理与应用

金伟正,金 汤

(武汉大学电子信息学院电子工程系,湖北武汉 430079)

本文剖析了 ADSP中基于嵌入式操作系统Visual DSP++Kernel(VDK)开发工具的原理与应用、优点、常用库函数、DEBUG工具以及它的具体应用。通过对VDK的学习,可以使学生进一步理解和掌握嵌入式操作系统的工作原理,提高他们的应用和开发能力。

V isualDSP++;内核;数字信号处理器;嵌入式系统

嵌入式操作系统[1]如今已经大量地被MCU、DSP及SOC等处理器采用,它的引入加快了芯片集成度的发展,也提高了开发效率,缩短了开发周期。而嵌入式操作系统的工作原理对学生来说是一个难点。本文主要讨论ADSP中基于嵌入式操作系统的开发工具Visual DSP++Kernel(VDK)的特点及应用。通过对VDK[2]的学习,可以使学生进一步理解和掌握嵌入式操作系统的基本概念、基本原理和基本过程,同时提高他们的应用和开发能力。

1 Visual DSP++Kernel的特点

AD公司为其生产的DSP芯片提供了相应的开发环境Visual DSP++[3],而其中的Kernel则提供了基于嵌入式操作的系统的一个开发平台。利用VDK来进行DSP应用程序的开发有众多的优点:

(1)快速的应用程序开发。Visual DSP++和VDK紧密结合的开发环境使开发人员不必手工编写控制程序,它可以利用自动代码生成器、文件模板以及标准的设备驱动接口程序等来完成这些工作,使开发人员致力于感兴趣的算法或控制流研究,而不必过多的注意其执行细节。

(2)具有易调试的控制结构。VDK提供了一系列的工具库函数,利用这一工具提供的系统状态即时获取功能以及实时数据统计结果等,即使调试一个很复杂的应用程序也变得容易的多。

(3)具有代码复用性。VDK在它标准库中提供了可重用的函数,避免了手工编写。而且Kernel和与之紧密结合的Visual DSP++开发环境能够有效的将一个大的应用程序拆分成一些易保持便于理解的模块或子系统。通过这样屏蔽子系统的方法可以有效地防止在系统编程时频繁出现大片代码。

(4)VDK还提供了一个硬件抽象层。标准化的接口允许我们在一个独立的平台上,使用高级语言(C或C++)[4]编写大多数的应用程序。

2 VDK库函数及状态图

和大多数的嵌入式操作系统一样,VDK有着自己的一套关于线程调度、任务管理、时间管理、信号传递和中断服务等的库函数:

(1)调度管理函数(Scheduler Management Functions);PushUnscheduledRegion()、PopUnscheduledRegion()等。

(2)线程和系统信息函数(Thread and System Information Functions);GetThreadHandle()、GetThreadID()、GetThreadStatus()、GetThread-Type()等。

(3)线程创建和销毁函数(Thread Creation and Destruction Functions);CreateThread()、DestroyThread()、FreeDestroyedThreads()等。

(4)线程优先级管理函数(Thread Priority Management Functions);GetPriority()、ResetPriority()、SetPriority()等。

(5)信号量管理函数(Semaphore Management Functions);GetSemaphoreValue()、PendSemaphore()、PostSemaphore()、SetEventBit()等 。

(6)事件和事件位函数(Event and EventBit Functions);ClearEventBit()、GetEventBitValue()、GetEventData()、GetEventValue()、LoadEvent()、PendEvent()、SetEventBit()等。

线程执行过程,以及信号量的传递逻辑关系如图1所示。

图1 VDK进程的状态机

3 VDK的实现与应用

3.1 线程

一个应用程序可以划分为多个功能模块,每个模块可以用一个线程实现,线程间可以互相通信。线程并不是直接定义的,而是先定义线程类型,再由线程类型例化得到。一个线程类型可有多个例化,也就是说一个系统中多个线程可以属于相同的线程类型。线程类型实质上是各空间VDK下线程类的子类,而线程是该子类例化得到的对象。线程类型创建时被分配一个默认的优先级,该优先级可以通过调用函数SetPriority()改变,同一类型的线程具有相同的优先级。每个线程包含5个成员函数:创建函数、初始化函数、运行函数、错误处理函数和销毁函数。其中,创建函数类似于C++中类的构造函数,用于创建一个线程并为它分配资源。销毁函数类似于C++中类的析构函数,用于销毁一个线程并释放其所占资源。运行函数包含线程所要完成算法,是线程的核心部分,类似于C中的main()函数。

3.2 调度

调度是一种管理和协调线程的机制,它保证优先级最高的就绪线程能够最早占用处理器来运行。所谓就绪,就是线程已经具备运行所需的所有数据和参数等资源。调度在具有最高优先级的线程改变时被激发。调度的实现基于一种被称为就绪队列的内部数据结构。就绪队列中的就绪线程先按优先级排队,然后遵循“先进先服务”的原则占用处理器。线程最高优先级为0,是保留的;最低优先级为DSP数据字宽减去2,如32位的DSP为30。具有最低优先级的线程是预定义的IDLE线程,它在就绪队列为空时自动运行,使得DSP处于低功耗状态。

3.3 信号

信号是线程之间进行通信和同步的桥梁。它包括:信号量、事件位和事件和设备标志。

信号量是应用系统中所有线程都可访问的全局资源的抽象,有2个值:真和假。它的值为真时,表示该资源可用,所有正在等待该信标的线程中优先级最高的那一个进入就绪队列等候运行;它的值为假时,表示该资源已被占用。线程或者中断服务程序利用信号量所代表的资源完成自己的任务后调用API函数释放该资源以便其他线程或者中断服务程序使用。

事件和事件位是标识系统状态的信号,用于协调线程的执行。事件位用来指示系统某一要素所处状态;事件是所有事件位按照指定规则进行布尔操作的结果。任何一个事件位改变都会导致事件的值被重新计算。信标标识系统资源是否可用,而事件位和事件标识线程中的操作主体利用系统资源完成其工作后所处的状态。线程可以调用PendEvent()等候一个事件发生。

设备标志是设备驱动与线程之间联系的纽带。例如它可以将A/D采样数据的到来这一事件通知多个等待这些数据的线程,而信号量、事件和事件位就不能描述它。

3.4 中断服务程序

VDK的中断服务程序必须用汇编语言编写而且应该比较短小,完成释放信号量、改变事件位、激活设备驱动与线程交换数据等工作,而所有的计算应该在线程域完成。中断可以调用API函数被允许或禁止。

3.5 设备驱动

基于VDK的应用程序可以分解为两个域:线程域和中断域。图2所示线程域中对线程进行管理的机制称为软件调度,由内核完成;中断域中对中断进行管理的机制称为硬件调度,由DSP硬件(中断控制器)完成。硬件调度和软件调度是并行的,但中断发生时硬件调度抢先发生,这时软件调度和线程的优先级是无意义的。

图2 并行调度

操作系统是将键盘、显示器、打印机和通信端口作为扩充文件来处理的,而这种处理是通过设备驱动程序实现的。作为一种操作系统内核,VDK也对外部设备进行抽象,可以调用API函数对他们进行打开和关闭、同步读和同步写以及控制。设备驱动是线程域和中断域之间沟通的桥梁,也是VDK应用程序与外部环境通信的接口。其代码既不在线程中也不在中断服务程序中,而是一个独立的函数,它也不直接被内核和中断控制器调度。设备标志是与设备驱动相关联的信号。一个设备标志为真时,就表示与该标志对应的设备准备好,所有等待该设备标志的线程进入就绪队列。

3.6 API

应用程序接口API(Application Programming Interface)是存放应用程序可以调用的函数和宏的库。API函数库为VDK提供基本服务:中断处理、调度管理、线程管理、信标管理、事件和事件位以及设备标志的传递等。VDK应用程序以线程域和中断域为主体,以信号为纽带,以设备驱动作为与外部环境进行通信的接口,以调度为线程和中断的管理和协调机制来完成复杂的控制功能。

4 结语

随着DSP的集成度、执行速度越来越高,高性能的DSP芯片需要有高效的系统控制程序来发掘它的潜力,使之功能得以充分的显示。VDK非常适合用于构造需要精巧控制代码的系统,这些系统中许多事件往往是随机发生的。针对实际的应用系统,我们首先要进行深入分析,建立系统模型,从中抽象出所要创建的线程类型、信号、设备驱动和中断服务程序等,然后就可以着手在VDK环境下编写应用程序了。

通过对本文中VDK程序的学习,可以使学生进一步理解和掌握嵌入式操作系统的工作原理,为将来嵌入式操作系统打下了良好的基础,同时可以提高他们的应用嵌入式操作系统的开发能力。

[1] Jean J.Labrosse著、邵贝贝 译.uC/OS-II—源码公开的实时嵌入式操作系统,2001

[2] Analog Device.V isual DSP++Kernel User's Guide,April 2009

[3] ANnalog Device.V isual DSP++4.5 Getting Started Guide for ADSP-21xx DSPs,April 2010

[4] Analog Device.Visual DSP++4.5C/C++Com plier and Library Manual for ADSP-21xx DSPs,April 2010

Visual DSP++Kernel Development Tools of ADSP Based on Embedded System

JINWei-zheng,JIN Tang

(Electronica l-In formation College,WuH an University,Wuhan 430079,China)

This paper analyzes the Visual DSP++Kernel development tools of ADSP based on the embedded system about the advantage,library,function,thread,state diagram and specific application through an examp le.To the VDK simulaition for teaching and learning can make students understand and grasp the base theory of embedded operate system and imp rove their application and develop ability.

visual DSP++;Kernel;DSP;embedded system

TM 933.1

A

1008-0686(2011)02-0095-03

2010-08-26;

2010-12-03

金伟正(1966-),男,硕士,副教授,主要从事数字信号处理教学和科研工作,E-m ail:jwz@eis.w hu.edu.cn

猜你喜欢
嵌入式操作系统信号量服务程序
SylixOS系统的中断嵌套机制研究与实现
基于C#的进程守护程序的设计
UDP穿透NAT技术实现数据唤醒车联网T-Box设备的方案
Nucleus PLUS操作系统信号量机制的研究与测试
计算机嵌入式操作系统分析
关于高校嵌入式操作系统课程教学的探索与思考
基于嵌入式操作系统的工业采集板设计
水利工程施工监理服务程序及质量控制
硬件信号量在多核处理器核间通信中的应用
应用服务型人才培养体系下的嵌入式操作系统教学改革探索