DSP_BIOS实时操作系统介绍
- 格式:doc
- 大小:19.50 KB
- 文档页数:3
DSP /BIOS实时多任务操作系统内核的研究摘要本文介绍了TI公司TMS320C6713的DSP/BIOS实时多任务操作系统内核,通过研究分析DSP/BIOS的启动顺序,线程指令流在DSP中存在的方式以及调度的优先级,线程间的让出与抢中,总结出多任务的执行状态和调度的规律。
最后将该多任务操作系统应于某伺服控制系统,取得了良好的效果。
关键词BIOS;DSP;线程抢占;任务0 引言DSP/BIOS是TI公司特别为其TMS320C6000TM、TMS320 C28XTM系统DSP平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核,是TI公司的Code Composer StudioTM开发工具的组成部分之一。
1 DSP/BIOS启动序列当一个应用程序启动时,boot.s54(C54x 平台)或autoinit.c和boot.snn(C600g 平台)文件中的代码决定了其启动序列,这些文件的编译版本由biosi.ann 库提供。
一般BIOS启动顺序如下:1)初始化DSP:DSP/BIOS程序从C或C++环境入口点c_int00开始运行,而复位中断向量被设置为复位后跳转到c_int00,对C600来说,系统堆栈指针(B15)和全局页指针(B14)被初始化分别指向.stack段的末尾和.bss段的开始。
2)当堆栈建立好后,初始化程序用.cinit段中的记录初始化全局变量。
3)调用BIOS_init初始化程序中用到的DSP/BIOS 模块,BIOS_init由配置生成并位于programcfg.snn文件中。
主要完成三个子模块的初始化。
HWI_init:硬件中断,设置ISTP和中断选择寄存器。
HST_init:初始化主机I/O通道接口,该程序决定主机与目标DSP的连接方式;IDL_init:空闲循环的指令计数。
该程序用于校准CPU负荷里实时显示的CPU负载值。
4)处理.pinit表:.pinit表包含了指向初始化函数的指针,这里主要初始化各种全局变量。
嵌入式实时多任务系统DSP/BIOS II现在,由于复杂的硬件功能已经集成到标准集成电路中,系统开发人员首先应该知道如何选择合适的芯片,然后基于此硬件结构设计软件。
系统设计者有两种选择:使用专用集成电路或可编程DSP实现信号处理。
相比之下,可编程DSP有两个优点:可扩充性:设计者可以根据要求的处理效率,和需要的资源来量体选用DSP及所需的片数。
可升级性:将硬件的升级转化成比较容易升级的软件改动。
使用可编程DSP时,必须对芯片的各种资源(例如CPU,存储区,外设等)加以管理规划,通过DSP/BIOS可以轻松的完成这些工作。
TI公司TMS320C5000系列都带有嵌入式DSP/BIOS,它有很强的实时分析和任务实时管理能力,可以有效的提高项目的开发效率,尤其表现在需要实时多任务的大型系统中。
图1为DSP/BIOS的部件结构。
DSP/BIOS II简述TI公司的DSP/BIOS II 是在DSP/BIOS I 基础上的扩展。
它支持更多的软件模块,通过修改内核提供抢先式多任务服务;它把传统并行处理系统的内核服务集成为可测试内核;它增加了设备独立的I/O数据流模型,继续保留已有的数据管道;它增加了动态内存分配与内存管理。
TI的开发平台CCS IDE 2.0中集成了DSP/BIOS II,可以对程序进行实时跟踪与分析,提高应用程序开发的可靠性。
可以在CCS插件中实时观察DSP/BIOS内核中各线程的执行状态与对象的当前属性。
通过设置工具,开发者可以对各个模块实行配置。
DSP/BIOS II 核心API技术目标应用程序通过调用DSP/BIOS II的API来获得运行时的服务。
一个单个DSP/BIOS II 模块可以管理多种类的内核对象,并且依据全局参量的设定来控制整个行为。
DSP/BIOS II 可以归纳为六大种类:内核执行线程图1 DSP/BIOS 部件结构图图2 线程优先级示意图图3 数据流示意图图4 数据管道示意图DSP/BIOS II提供四类不同的执行线程。
DSP/BIOS中的IO设备驱动编程技术近年来,随着信息技术的飞速发展,DSP在航空、航天、雷达、通信、消费类电子设备等方面都得到了广泛应用;同时,DSP的运算能力也越大越强大,TI公司新推出的TMS320C6400系列的运算能力可以达到8800MIPS。
这些都要求开发DSP的应用程序要缩短开发时间,增加软件的可编护性和可重用性。
语音压缩、语音识别、图像处理等方面的应用要求DSP的开发尽可能简单,还要求代码的执行效率高。
DSP/BIOS是TI公司推出的一个实时操作系统。
DSP/BIOS与TI的CCS(Code Composer Studio)集成在一起。
目前最新的版本是CCS 1.2中的DSP/BIOS II。
应用DSP/BIOS可以大大简化DSP应用程序的开发和调试。
与外部设备的I/O接口是DSP应用开发中不可缺少的重要部分。
基于DSP/BIOS的I/O设备驱动将软件与硬件分离,提高了软件的可重用性,在软件或硬件改动时可使相互的影响降为最小。
1 DSP/BISO操作系统简介DSP/BIOS实际上是一组可重复调用的系统模块API的集合。
只占用DSP很少的资源,可以满足DSP实时运行时的调试性能分析,编写高效的程序。
例如,在TMS320C6211上运行printf()函数需花费4000个周期,而运行LOG_printf()只花费36个周期,可printf()要比LOG_pfrintf()多花费100倍以上的时间。
下面只对与I/O设备驱动有关的模块作简要介绍。
1.1 任务调度模块(HWI/SWI/TSK)在DSP/BIOS中,任务的调度是通过HWI、SWI和TSK三个模块实现的。
HWI (硬件中断管理模块)管理硬件中断,主要负责DSP与外设的交互,从外设中读写数据。
由于硬件中断直接与硬件打交道,对应的中断服务程序ISR应尽可能短小精焊。
HWI不引起任务调度,它在处理完数据的输入输出后调用SWI_post()来调度相应的软件中断SWI完成数据处理工作。
CCS中的DSP BIOSDSP/BIOS是TI公司开发的可扩充的实时操作系统,主要用于相对复杂的应用程序,特别是一些需要多线程安排及同步、主机与目标机的通信和实时监测的应用程序。
它本质上是一组系统模块API函数的集合(这句话最重要),供用户编写应用程序时直接调用。
因此,我们可以利用配置工具删除在程序中没有用到的DSP/BIOS模块API函数简化系统规模,加快执行效率。
DSP/BIOS由3个部分组成:1)配置工具:用于在应用程序中创建和配置DSP/BIOS的对象,也可以通过配置工具修改内存分配、线程的优先级以及中断句柄等。
2)实时分析工具:可以实时地从可视化窗体中观察程序的运行情况、各个线程的分配以及内存地址。
3)API函数:我们可以调用系统的API函数来完成各种功能,如swi_post()等。
DSP/BIOS功能介绍:1)多线程运行的调度。
2)提供片内芯片支持库(CSL)帮助管理外设资源,如复杂的外设寄存器的初始化可以直接利用CSL 的图形配置工具完成,3)高效的定义和配置系统资源,比如系统内存等。
4)使用标准的I/O和中断。
5)使用多线程技术高效的管理DSP MIPS。
6)…与传统的DSP应用程序开发的区别:1)对硬件的操作可以借助(注意是可以)借助DSP/BIOS提供的函数完成,用户可以避免直接控制硬件资源,如定时器、DMA 控制器、串口和中断等。
2)在程序运行时,传统程序中,用户的程序完全控制DSP,软件按顺序依次执行;使用DSP/BIOS,用户的应用程序建立在DSP/BIOS 的基础之上,在应用程序的调度下按任务、中断的优先级排队等待执行。
DSP/BIOS主要功能模块:(也就是操作系统的部分功能,不知道陈明记曾经的操作系统包含啥)。
1)系统基础模块(system)定义目标系统的全局类属性、系统内存映射、中断向量表以及片上定时器进行编程,也可以对内存进行动态的分配和释放,包含以下4部分:Ø;全局设置(GBL):可以设置许多有关整个目标DSP系统的参数,并且直接影响应用程序的代码效率和大小。
ENEA公司与OSE实时操作系统简介一.公司简介OSE RTOS主要是由瑞典ENEA公司负责开发和技术服务的,一直以来都充当着实时操作系统以及分布式和容错性应用的先锋。
公司建立于1968年,由大约700名雇员专门从事实时应用的技术研发和支持工作。
ENEA是现今市场上一个飞速发展的RTOS供应商,在过去三年中,该公司的税收以每年70﹪的速度递增。
该公司开发的OSE RTOS支持容错,适用于可从硬件和软件错误中恢复的应用,它的独特的消息传输方式使它能方便地支持多处理机之间的通信。
它的客户深入到电信,数据,工控,航空等领域,尤其在电信、军方等方面,该公司已经有了二十多年的开发经验,ENEA 现在已经成为日趋成熟,功能强大,经营灵活的RTOS供应商,也同诸如爱立信,诺西,华为,中兴,诺基亚,波音,NASA,空客等知名公司确定了良好的关系。
二.OSE操作系统的特点1. 高处理能力内核中实时性严格的部分都由优化的汇编来实现,特别是使用消息传递机制,使数据处理非常快。
2. 真正适合开发复杂(包括多CPU和多DSP,已经多核DSP)的分布式系统随着科技发展,嵌入式实时操作系统已经变得越来越复杂,经常会面临两大困难:➢不间断的运行(NonStop)➢多CPU的分布式系统 (Distribution over many CPUS)传统的RTOS如果要做到这些,必然会增大消耗,增长开发周期。
OSE就是应运而生的新生代的RTOS,解决了这些需求,它支持多种CPU和DSP,为开发商开发不同种处理器组成的分布式系统提供了最快捷的方式。
传统的RTOS是基于单CPU,它虽然可以改进成分布式系统,但用户需要在应用程序中做很多工作。
而OSE不同于传统的RTOS,首先是因为它的结构体系有了很大改变,它以消息传递作为主要手段完成CPU/DSP间的通信,还把传统的RTOS必须在应用程序中完成的工作,做到了核心系统中。
对于复杂的并行系统来说,OSE提供了一种简单的通信方式,简化了多CPU/DSP的处理。
应用天地Ap p lic a t i o n Wo r l d实时系统DSP/B I O S在现代控制系统中的应用岳士丰,周晓敏,刘 伟(北京科技大学机械工程学院,北京 10083)摘 要:本系统以TM S320F2812数字信号处理器为控制器,引入DS P/B I O S实时操作系统到现代控制算法编程中,实现了对无刷直流电机的控制,不仅降低了开发难度,提高了控制系统的可靠性和实时性,而且有利于系统的改进与升级,具有较高的实用价值和参考意义。
关键词:D SP/B I O S;实时操作系统;TM S320F2812;无刷直流电机0 引言近年来,神经网络理论已被引入电机控制领域并引起广泛兴趣,基于神经网络模型的控制方法显示出较好的性能。
随着微处理器性能的大幅提高和实际应用的复杂化,特别是现代控制理论的引入,大量的运算,复杂的逻辑使传统主循环和顺序调用的软件开发模式日益难以满足实际要求,编程时要考虑的因素越来越多,各种资源如调度不当就会发生异常,软件可靠性降低,开发难度增加,延长了开发周期。
在本文作者的科研实践中,成功的将D SP/ B I O S实时系统应用到无刷直流电机神经网络控制这种新型的现代控制系统中,简化了程序设计,减少了开发时间,而且控制系统的实时性、稳定性和可靠性都较大的提高,便于维护和扩展,提高了控制器的使用效率,取得了较好的控制效果。
1 DSP/B I O S简介TM S320F2812是美国T I公司最新研制的2000系列数字信号处理器,是面向电机控制、工业自动化的第一款带片内F l a s h,工作频率达到150MHz的32位DS P。
D SP/ B I O S是CC S提供的一套用于实时多任务软件开发的专用工具,也是T I公司为DS P开发的一套精简的嵌入式操作系统。
它本身占用极少的C PU资源,提供丰富的面向用户的应用函数(AP I)和强大的程序开发工具,支持任务调度、实时分析、内存管理、时钟管理、中断管理及外设驱动管理等。
DSP/BIOS实时操作系统介绍
DSP/BIOS是一个简易的嵌入式操作系统,主要是为需要实时调度、同步以及主机-目标系统通讯和实时监测的应用而设计的。
DSP/BIOS集成在CCS中,不需要额外的费用,但不提供源码,它是 TI公司倡导的 eXpressDSP 技术的重要组成部分。
DSP/BIOS本身只占用很少的资源,而且是可裁减的,它只把直接或间接调用的模块和API连接到目标文件中,最多为6500字,因此在多数应用中是可以接受的。
它提供底层的应用程序接口,支持系统实时分析、线程管理、调用软件中断、周期函数与后台运行函数(idel函数)以及外部硬件中断与多种外设的管理。
利用DSP/BIOS编写代码,借助CCS提供的多种分析与评估工具,如代码执行时间统计、显示输出、各线程占用CPU的时间统计等,可以直观地了解各部分代码的运行开销,高效地调试实时应用程序,缩短软件开发时间,而且DSP/BIOS是构建于已被证实为有效的技术之上的,创建的应用程序稳定性好,软件标准化程度高,可重复使用,这也减少了软件的维护费用。
DSP/BIOS组件由以下3部分组成:
1. DSP/BIOS实时多任务内核与API函数
使用DSP/BIOS开发程序主要就是通过调用DSP/BIOS实时库中的API(应用程序接口)函数来实现的。
所有API都提供C语言程序调用接口,只要遵从C语言的调用约定,汇编代码也可以调用DSP/BIOS API。
DSP/BIOS API被分为多个模块,根据应用程序模块的配置和使用情况的不同,DSP/BIOS API函数代码长度从500字到6500字不等。
CCS FOR C6000 V2。
2提供的DSP/BIOS主要的API模块包括以下几种:CLK模块、HST模块、HWI模块、IDL模块、LOG模块、MEM模块、PIP模块、PRD模块、RTDX模块、STS模块、SWI模块、DEC模块、SIO模块、MBX模块、QUE模块与SEM模块。
2. DSP/BIOS配置工具
基于DSP/BIOS的程序都需要一个DSP/BIOS的配置文件,其扩展名为.CDB。
DSP/BIOS配置工具有一个类似Windows资源管理器的界面,它主要有两个功能:
* 在运行时设置DSP/BIOS库使用的一系列参数;
* 静态创建被DSP应用程序调用的DSP/BIOS API函数所使用的运行对象,这些对象包括软件中断、任务、周期函数及事件日志等。
3. DSP/BIOS实时分析工具
DSP/BIOS分析工具可以辅助CCS环境实现程序的实时调试,以可视化的方式观察程序的性能,并且不影响应用程序的运行。
通过CCS下的DSP/BIOS工具控制面板可以选择多个实时分析工具,包括CPU负荷图、程序模块执行状态图、主机通道控制、信息显示窗口、状态统计窗口等。
与传统的调试方法不同的是,程序的实时分析要求在目标处理器上运行监测代码,使DSP/BIOS的API和对象可以自动监测目标处理器,实时采集信息并通过CCS分析工具上传到主机。
实时分析包括:程序跟踪、性能监测和文件服务等。
三基于DSP/BIOS的程序开发
基于DSP/BIOS的程序开发是交互式的可反复的开发模式[参考文献6、7、8],开发者可以方便地修改线程的优先级和类型,首先生成基本框架,添加算法之前给程序加上一个仿真的运算负荷进行测试,看是否满足时序要求,然后再添加具体的算法实现代码。
使用DSP/BIOS开发软件需要注意两点:
* 所有与硬件相关的操作都需要借助DSP/BIOS本身提供的函数完成,开发者要避免直接控制硬件资源,如定时器、DMA控制器、串口、中断等;
* 基于DSP/BIOS的程序运行与传统的程序有所不同,传统编写的DSP程序完全控制DSP,程序依次执行,而基于DSP/BIOS的程序,由DSP/BIOS程序控制DSP,用户程序不是顺序执行,而是在DSP/BIOS的调度下按任务、中断的优先级等待执行。
1. 基于DSP/BIOS的程序开发流程
下面以数字图像边缘检测(采用sobel算法)为例,具体分析一下DSP/BIOS程序的编写流程,程序的流程图见图2。
基于DSP/BIOS的程序开发流程一般包括以下几个步骤:
* 利用配置工具设置环境参数并静态建立应用程序要用到的对象。
要注意的是,在配置工具下创建对象为静态创建,对象是不可以删除的,利用xxx_create可以动态创建对象,并可以用xxx_delete删除动态创建的对象(xxx表示模块名字,如TSK)。
本程序中,在MEM模块设置片内ISRAM、片外SDRAM的起始地址与长度以及heap的大小,在LOG模块创建事件记录对象用来记录程序的运行情况,在TASK模块创建三个任务进程(Input Task、Process Task、Output Task),并在SEM模块创建旗语对象来进行线程之间的通信,在DEV模块配置所需的外设,这里包括视频采集端口VP0和视频输出端口VP2。
* 保存配置文件,保存配置文件时,配置工具自动生成匹配当前配置的汇编源文件和头文件以及一个连接命令文件。
* 为应用程序编写一个框架,可以使用C、汇编语言或C与汇编的混合语言来编程,由于目前C++的编译效率还比较低,在数字图像处理应用中一般不采用C++编程。
在CCS环境下编译并连接程序,添加program.cdb和programcfg.cmd到项目工程文件中,其他的文件自动连接进应用程序。
如果用户想使用自己的连接命令文件,则需要在自己的命令文件的第一行包含语句“-l programcfg.cmd”。
* 使用仿真器和DSP/BIOS分析工具来测试应用程序,本程序中使用XDS510PP并口仿真器通过JTAG口连接DM642 EVM与PC机进行调试;
* 重复上述步骤直至程序运行正确。
在实际产品开发过程中,当正式产品硬件开发好后,修改配置文件来支持产品硬件并测试。
2. DSP/BIOS程序的启动过程
DSP/BIOS的启动过程包括以下几步:
* 初始化DSP:复位中断向量指向c_int00地址,DSP/BIOS程序从入口点c_int00开始运行。
对C6000,初试化堆栈指针(B15)和全局页指针(B14)分别指向堆栈底部与.bss段的开始,控制寄存器AMR、IER和CSR也被初始化;
* 用.cinit段中的记录来初始化.bss段;
* 调用BIOS_init初始化DSP/BIOS模块:BIOS_init执行基本的模块初始化,然后调用MOD_init宏分别初始化每个用到的模块;
* 处理.pinit表:.pinit表包含了初始化函数的指针;
* 调用应用程序main函数:在所有DSP/BIOS模块初始化之后,调用main函数。
由图2可以看到,本程序在main函数中添加了必要的初始化代码。
Main函数初始化之后CPU的控制权交给DSP/BIOS。
需注意,main函数中一定不能存在无限循环,否则整个DSP/BIOS程序将瘫痪;
* 调用BIOS_start启动DSP/BIOS:BIOS_start函数是由配置工具产生的,包含在programcfg.s62文件中,它负责使能DSP/BIOS模块并为每个用到的模块调用MOD_startup宏使其开始工作。
在这些工作完成之后,DSP/BIOS调用IDL_loop引导程序进入DSP/BIOS空闲循环,此时硬件和软件中断可以抢先空闲循环的执行,主机也可以和目标系统之间开始数据传输。
由图2可以看到,main 函数之后Input Task、Process Task、Output Task三个进程开始执行,此三个进程为同一优先级,进程之间利用旗语(SEM)进行通信,协调线程之间的工作,Input Task完成视频采集功能,Output Task 实现视频输出功能,在Process Task线程中调用Image Lib中的IMG_sobel()函数实现边缘检测功能。
四实验结果与分析
为了统计sobel边缘检测所用的时间,在STS模块创建对象sts,然后在IMG_sobel()函数前后分别添加STS_set(&sts,CLK_gethtime()),STS_delta(&sts,CLK_gethtime())。
实验中从统计窗得到IMG_sobel()的运行时间为554100.48个指令周期,约为0.93ms(DSP芯片时钟为600MHz)。
由于视频采集为PAL制,两帧间隔为40ms,所以可以实时地检测到物体边缘。