发表于
2008-5-9 7:38:51
摘 要:通常C5410程序空间被限制在64K地址空间内,当应用程序超出64K时,则需增加目标系统存储区和附加逻辑,实现对系统的扩展。本文介绍如何配置及使用DSP/BIOS实现扩展寻址功能,并分析了API调用和中断触发过程,最后以DSP并行自举引导方式实现程序的脱离仿真运行。
关键词:DSP/BIOS 扩展寻址 API 并行自举引导
字串6
一 DSP/BIOS 接口 字串3
DSP/BIOS提供了基本的运行服务,如应用程序实时分析功能,时钟周期函数,I/O模块,优先级的任务调度等。DSP/BIOS提供支持汇编和C语言的API接口函数,这些API函数绝大部分都是用汇编语言实现的,因此汇编语言可以直接调用API,而C语言调用API则通过DSP/BIOS的C封装器。应用程序通过调用API函数来使用DSP/BIOS,如软件中断、背景线程和中断服务程序等都可以调用DSP/BIOS的函数。当DSP/BIOS要调用用户的C语言函数时则要通过函数链接器,如图一所示。
字串3
字串2
二 扩展程序空间
字串7
C5410的16位地址空间逻辑上被划分为两块,低地址块定义为公共区(或未映射区),高地址块为映射区(或扩展区)。划分这两块的地址由目标系统的外部寄存器和存储区决定的。值得注意的是,C5410的数据区没有扩展存储区。
字串4
用户可以在映射区上定义多个物理存储区,它们覆盖整个映射区,但彼此空间不重叠。当使用存储区的扩展页时,内部16位地址空间被扩展为32位的地址来寻址,高16位代表扩展页的数目,低16位代表局部的16位地址。如使用扩展程序映射存储器(XPC)来存放扩展页码,XPC存放在数据空间地址为0x1E的位置,它的值要与.CMD链接文件中定义的扩展页码保持一致。如图二所示的一个扩展3页的程序区结构图。公共区的范围是0x0000-0x7FFF;映射区的范围0x8000-0xFFFF,映射区为第一页,XPC要为0才能访问该区;映射地址空间存放两个扩展页,扩展程序映射寄存器限定了映射地址,使得每个扩展页的每个单元具有唯一的地址。当访问扩展页时,映射区将被覆盖。
C5410的DSP/BIOS不仅支持64K程序页内的“近”访问模式,而且支持扩展程序的“远”访问模式,只需设置DSP/BIOS的属性即可实现扩展程序的“远”访问。要注意的是汇编语言写的API只能在PAGE0页调用,而C语言写的API可以在任何页面调用。
字串2
三 中断 字串5
当中断产生时,DSP的内部结构机制只能够保存低16位页内的局部地址,而扩展寻址时程序地址需要23位,这就意味着调用和返回时将超出64K(16位地址)的范围,因此必须考虑怎样保存和恢复扩展地址。解决的方法是用中断服务程序(ISR)保存XPC的值,确保能正确的计算中断向量,为此中断向量表必须方在公共区或映射区的64K程序页面上。当DSP/BIOS在公共区上时,ISR可以放在任何位置;如果不在公共区上,则ISR必须放在PAGE0上。
当OVLY=0时,为了能保证中断正确的执行,必须在每一个页面上都要有中断向量表的拷贝。当OVLY=1时,只须在公共页面上(如0x7F80)作一份中断向量表的拷贝就可以了。
字串7
四 程序实例 字串5
通过一个简单的例子介绍DSP/BIOS如何实现程序地址的扩展。本例中有三个软中断:时钟中断PRD_POST_SWI,每100毫秒触发SWI_PAGE1(或SWI_PAGE2)一次;SWI_PAGE1,完成值XF高;SWI_PAGE2,完成值XF低。三个软中断执行的函数分别放在程序空间的不同页面上,即PRD_Post_SWI放在公共页面上(XPC=0),Page1Func 和Page2Func分别放在扩展程序页面 1和2上,XPC为1和2。 字串1
#include "testfarcfg.h"
#pragma CODE_SECTION(Page1Func, ".FarPage1")
#pragma CODE_SECTION(Page2Func, ".FarPage2")
int pagenumber;
void main(void) {pagenumber=0;}
void Page2Func (void) { asm(" rsbx xf"); pagenumber="0";}
void Page1Func (void) { asm(" ssbx xf"); pagenumber="1";}
void PRD_Post_SWI(void)
{ if(pagenumber) SWI_post(&SWI_PAGE2);
else SWI_post(&SWI_PAGE1);
}
字串3
五 DSP/BIOS的配置
字串6
如要把DSP/BIOS的程序映射到扩展程序空间,需要对其配置,步骤如下。 字串9
1. 建立一个新配置文件。启动仿真软件(Code Composer Studio),建立testfar.pjt工程,通过File中的New -- DSP/BIOS Config创建配置文件,选用sd54.cdb(54X EVM)配置。
字串5
2. 添加软件中断。右键打开软件中断管理器(Software Interrupt Manager),选择Insert SWI,创建SWI_PAGE1,属性配置为:function:_Page1Func;priority:2。同样的方法创建function为_Page2Func的SWI_PAGE2。右键打开定时器功能管理器(Periodic Function Manager),选择Insert PRD,创建PRD_POST_SWI,属性为:period(ticks):50,function :_ PRD_Post_SWI,mode: continuous。
字串5
3. 设置OVLY位为1。打开System中的Global Settings的属性页,在PMST(6–0)项中填入使第5位为1的值,如MP=1,填入0x60。 字串6
4. 指定“远”调用模式。在Global Settings属性页面的Function Call Model选项中选择far,使全局变量CALLMODEL设置为far。
字串2
5. 在公共区中重新分配中断向量表。双击System中的MEM,右键打开VECT 的属性页,在base项中填入新的基地址,如0x7F80。 字串1
6. 配置扩展程序地址段。对于54X EVM评估板,已经有了2个扩展程序段EPROG0和EPROG1(如果没有的话,则需添加这两个段,选择Insert MEM ,添加两个扩展程序段,重命名为EPROG0和EPROG1)。EPROG0属性为base:0x8000,len:0x4000 ,勾去create a heap in this memory选项,space: code,EPROG1与EPROG0的属性不同之处base:0x18000。加入一个新的扩展程序段EPROG2,属性为base:0x28000,len:0x4000 , space: code。
字串1
7. 将目标代码链接到扩展程序段。pragma伪指令告诉编译器的预处理器如何处理函数,语法为 #pragma CODE_SECTION(Page1Func, ".FarPage1"),在名为".FarPage1"段中分配Page1Func的程序空间。这样目标代码Page1Func就被链接到.FarPage1段的区域。
字串4
8. 创建一个新的链接命令文件(testfar.cmd)。其主要的功能是把testfarcfg.cmd链接进去,并且告诉链接器把不同目标函数放在不同的扩展页面上。如:
字串6
-ltestfarcfg.cmd 字串9
SECTIONS
字串6
{ .FarPage1: {} > EPROG1 PAGE 0
字串4
.FarPage2: {} > EPROG2 PAGE 0
字串1
} 字串1
9. 保存配置文件为testfar.cdb,然后将testfar.cdb,testfar.cmd ,testfar.c文件加入工程中。 字串8
10. 配置编译器和汇编器的支持远模式代码。打开菜单Project中的Build Options窗体,选择Compiler属性页,点击Category中的Advanced选项。勾选Use Far Calls (-mf)(C548 and higher)。此选项指定产生远调用代码模式。
字串4
11. 调试器内描述并激活扩展寻址功能。仿真器的调试软件需要激活扩展寻址功能,才能支持长指令的执行和扩展存储区的读/写,也可方便地对使用扩展寻址的程序进行调试。所以使用通用扩展函数GEL_XMDef()来定义映射寄存器(如XPC)和映射扩展空间的首地址。如当OVLY=1,扩展程序区从0x8000开始,7位XPC放置在数据空间的0x1E单元中。把下面这两条语句加入C5410.gel文件的C5410_Init()函数中。
字串1
GEL_XMDef(0,0x1e,1,0x8000,0x7f); 字串6
file://0/:映射程序空间;0x1e:XPC的地址;1:XPC 在数据空间中; 字串9
file://0x8000/:映射首地址;0x7f:XPC的大小,128页; 字串2
GEL_XMOn(); //使能扩展地址映射
字串9
六 DSP/BIOS函数调用和中断触发过程分析
字串8
1、DSP/BIOS API 调用过程,如图三中的实线所示。 字串9
字串2

点击放大
字串7
⑴ 产生PRD_F_swi,短调用C语言封装器的PRD_F_swi (),XPC=0。 字串6
⑵ C语言封装器触发PRD_POST_SWI时钟软中断,然后检测到SWI_PAGE1,产生执行DSP/BIOS调度表的分支。
字串6
⑶ DSP/BIOS调度表保存当前PRD_POST_SWI上下文信息,调用函数链接器以便触发SWI_PAGE1。 字串3
⑷ 函数链接器远调用SWI_PAGE1,执行相应的函数(Page1Func),XPC=1。 字串6
⑸ SWI_PAGE1执行结束,远返回函数链接器。
字串8
⑹ 函数链接器又返回到DSP/BIOS调度表。 字串7
⑺ DSP/BIO调度表恢复PRD_POST_SWI信息,返回到C语言封装器。 字串7
⑻ 执行上述⑴和⑵,第⑶步触发SWI_PAGE2,函数链接器远调用SWI_PAGE2,执行函数(Page2Func),XPC=2。 字串8
⑼ SWI_PAGE2执行结束,远返回函数链接器,然后顺序执行上述的第⑹和⑺。
字串6
2、中断触发过程,如图三中的虚线所示。 字串7
① PRD_F_swi发生,CPU把当前的16位PC指针压入堆栈,在中断向量表中取指令。 字串2
② 中断向量程序把当前的XPC压入堆栈,产生一个配置中断服务程序的分支指令,执行中断服务程序,XPC=0。
字串6
③ 中断服务程序调用HWI_enter,触发PRD_POST_SWI软中断,接着调用HWI_exit,HWI_exit检测到SWI_PAGE1准备好,开始调用DSP/BIOS调度表。
字串7
④ DSP/BIOS调度表保存当前的上下文信息,调用函数链接器以便触发SWI_PAGE1。
字串3
⑤ 函数链接器远调用SWI_PAGE1,执行相应的函数,此时XPC=1。SWI_PAGE1执行完,远返回调用函数链接器,再到DSP/BIOS调度表,调度表恢复上下文信息,把程序指针交给PRD_POST_SWI软中断。PRD_POST_SWI结束。
字串3
⑥ 执行上述的①、②后,第③步检测到SWI_PAGE2准备好,第④步触发SWI_PAGE2,第⑤步函数链接器远调用SWI_PAGE2,XPC=2,顺序执行下去直到PRD_POST_SWI结束。
字串2
七 并行自举引导的实现
C5410上电复位后,检查到DSP处于MC(微计算机)工作方式,从片内ROM的0FF80h起执行程序。0FF80h地址存放的是中断向量表,它实为一条分支转移指令(BD 0F800h),使程序跳转至0F800h执行自举引导程序(Bootlooader)。并行自举引导是DSP举引导常用的一种方式,Bootlooader首先从地址为0FFFFh的I/O口读取自举表首地址的内容,如果此内容不符合8位或16位的引导方式,就从地址为0FFFFh的数据存储器读取,进行8位或16位并行自举引导。若要完成自举引导功能,必须建立正确的自举表。 字串2
自举表的内容不仅包括了欲加载的各段代码,而且包括各段代码长度、各代码段存放的目标地址、程序入口地址等信息。自举表可由hex500格式转换器自动生成。hex500是一个通用程序,它将公共目标文件格式—COFF文件转换成各种FLASH(或EPROM)的编程格式。因此,在使用hex500工具之前,首先把testfar.pjt进行编译、链接,生成COFF格式的testfar.out文件,然后再通过设置适当的选项生成用户所要求的自举表,如转换文件的格式,外部数据存储器的字宽等选项。把testfar.out转换为testfar.hex文件后,再使用C语言编写一个转换程序,将hex文件转换为DSP烧写FLASH程序能识别的文件格式。根据文件信息就可以完成自举表的内容,如表一。最后使用FLASH的擦除、读和写等操作指令把表一的内容烧入FLASH中。DSP上电复位,便可完成并行自举引导。
字串4
整个引导过程为:上电复位后,判断MP/MC=0 处于微计算机工作方式,从片内ROM的0FF80h处执行中断向量表的分支转移指令(BD 0F800h),使程序跳转至0F800h处执行自举引导程序,自举引导程序完成初始化后读取数据空间的0FFFFh地址的内容,找到自举表首地址8000h,从8000h处开始读取内容,首先是16位自举标记(10AA),然后分别是寄存器SWWSR及BSCR的内容,程序入口地址,代码段长度,存放代码段的目标地址等信息,最后根据这些信息把FLASH的8008H到A594H的程序搬运到片内RAM中,然在把Page1Func和Page2Func的代码搬运到0x180000和0x28000处,最后跳转至片内RAM的26FDH,即PC为26FDH,XPC为0,开始执程序。完成程序的并行自举过程。 字串4
字串5
| |
|
0
发表于
2008-5-9 7:34:24
|
现代电子技术 Modern Electronics Technique 2004年 第27卷 第8期 |
|
|
(西安电子科技大学 电子工程学院 陕西 西安 710071)
摘 要:介绍了一个在探地雷达信号处理机中应用实时操作系统的例子,对硬件结构和软件设计都做了说明,并归纳了TI(德州仪器)为其公司的DSP量身订做的嵌入式操作系统DSP/BIOSⅡ的一些特点以及在应用中值得注意的问题。 关键词:探地雷达;TMS320C55x;实时操作系统;DSP/BIOSⅡ
Application of Real-time Signal Processing of Subsurface Radar
DENG Huaidong,YANG W anhai
(The Electronic Engineering School,Xidian University,710071,China)
Abstract: This paper deals with an example of applying real-time operating system or subsurface radar, illustrates the hardware structure and the software design,sums up some features of embedded operating system DSP/BIOSⅡdedicated by TIDSP,andsummarizes some noticeable problems in practice. Keywords:subsurface radar;TMS320C55x;embedded operating system;DSP/BIOSⅡ
随着DSP(数字信号处理器)性能的改进,应用范围的扩大,特别是在消费类电子产品的应用日益增加,DSP除了继续承担传统的算法处理核心的角色之外,还需要完成一些控制性的或事务性的工作,而这些工作以前往往是由控制能力、线程管理能力更强的MCU或CPU来完成。嵌入式实时操作系统的应用解决了DSP系统开发中的2个重要的问题:一是可以保证系统响应的实时性,二是使复杂的多线程多任务的软件系统的开发变得相对简单易行。 DSP平台的信号处理机一般只是整个系统的一个专用于信号处理算法的子部分,不需要控制太多的外设,而且为了满足实时信号处理,尽量采用前后台式的线性程序结构。 本设计的信号处理机是希望以他为主体构成一个完整的便携式雷达系统,除了信号处理的任务之外,采样、显示、通信等多种任务也必须由他来完成,需要满足实时多任务的要求,所以必须使用嵌入式实时操作系统。本文主要介绍了为什么使用实时操作系统以及基于DSP/BIOSⅡ实时操作系统的总体软件设计思想和方案。
1 总体硬件方案设计 本信号处理机以TMS320C5509作为整个系统的核心,由于考虑到图像的缓存需要较大的存储空间,所以扩展了三星公司的16 Mb的SDRAM——KM416S1020C作 为扩展存储器。整个系统的工作流程是由控制器和D/A提供给前端采样头所需的信号,并启动A/D对采样头传来的模拟信号进行采样,DSP接收之后做相应的信号处理,根据键盘的设定将图像按照一定的要求显示到彩色图形液晶上,并通过USB接口将数据传送到PC机存储以便做进一步的处理和显示。总体硬件框图如图1所示。

TMS320C5509数字信号处理器是德州仪器公司(TI)TMS320C5000系列中新推出的一种,极大降低了功耗,达到了每个MIPS只需0.05 mW的水平,与市场上的主流产品TMS320C54x相比,功耗降低了6倍。TMS320C5509的内核是从TMS320C54x上发展而来的,所以可以完全兼容现在市场主流的TMS320C54x系列处理器的指令,既保护了用户在软件方面的投资,又使得熟悉TMS320C54x编程的软件人员几乎不用再学习就可以编写他的软件。同时,TMS320C5509中还集成了大量诸如AD,USB控制器之类的片内外设,使其成为了一款具有SOC(片上系统)性质处理器,用户只需外加很少的辅助器件就可以构成一个较完整的DSP系统。从以上特点可以看出,TMS320C5509非常适合于应用在便携式系统中。
2 实时操作系统DSP/BIOSⅡ的简介 TI公司的DSP/BIOSⅡ是一种专门为TI公司的TMS320系列DSP芯片设计的嵌入式实时多任务操作系统。主要由5个部分组成: (1)线程和调度(Procedure and Scheduling) DSP/BIOSⅡ提供了4种不同的执行线程,包括HWI(硬中断任务)、SWI(软中断任务)和TSK(任务)等,每一类线程又具有不同的执行、挂起、休眠等特性。DSP/BIOSⅡ支持基于静态优先级的调度方法,又可以通过修改内核提供抢先式多任务服务。 (2)硬件抽象(Hardware Abstraction) 他提供了PIP和SIO两种数据传输模式,可以方便DSP与外设之间的数据交换。Pipe(数据管道)使用了较少的内存,并且传输的速度快、效率高。SIO(流)对内存有了更高的抽象,便于创建设备驱动程序更加结构化的方法。 (3)资源管理(Resoure Management) 利用DSP/BIOSⅡ的逻辑接口可以对特定的硬件部分进行访问和配置。DSP/BIOSⅡ不仅可以通过其设置工具来定义内存映射、中断向量表而且还可以设置定时器、串行口等硬件设备。 (4)通信和同步(Communication and Synchronization) DSP/BIOSⅡ支持旗语(Semaphores)、邮箱(Mailbox)和数据队列(Queue)等多种内部线程通信和同步的方式。旗语是最主要的同步方式,可以使任务通过旗语来运行和挂起,还可以用互斥旗语来管理缓冲区和设备。 (5)实时分析(Real-Time Analysis) 实时分析工具能够让开发者在程序执行期间对DSP进行交互和诊断。DSP/BIOSⅡ不仅提供了常用的日志(LOG),STS,TRC模块,还提供了CPU负载图(CPULoad Graph)、执行图(Execution Graph)等多种更方便的调试和观察工具。
3 基于DSP/BIOSⅡ实时操作系统的软件结构设计 使用DSP/BIOSⅡ来做项目的第一步就是模块划分,即把项目所要完成的功能拆分成几个相对独立的线程来完成(可以认为线程在运行时是独占DSP的),根据线程中使用硬件资源的情况考虑用什么类型的线程来完成。一般来说,用到硬中断的任务放到HWI来完成,用到定时器的任务可以放到PRD(周期任务)中完成。然后是确定线程之间的关系,根据他来设定各个线程的优先级,以及用 什么方式通讯和交换数据。旗语是最便于使用的通讯方式。 探地雷达信号处理机的信号处理过程:A/D每采来一列数据之后给DSP发一个硬中断信号,每接收到一列数据之后,DSP对这列数据分别进行平均滤波和自适应滤波,同时进行列计数;当列计数到达一帧时,对这一帧图像信号进行小波去噪处理和脉冲压缩,最后根据键盘的设定把图像显示到图形液晶上,并通过USB接口送到PC主机,以便下一步的处理。 根据以上的执行过程,整个软件分解为12个独立的任务,其中列中断、USB数据传送这2个模块是HWI(硬中断)类型的任务,键盘模块属于PRD(周期性)任务(完成对键盘定期扫描),其余模块是SWI(软中断)类型的任务。初始化任务完成对DSP的初始设定后就删除;列中断任务负责给DSP发送列数据来临信息,触发列平均、列自适应任务,完成对一列数据的去噪处理;列计数模块完成对列中断的计数,当到达一帧时,发送帧中断,触发一系列针对帧的数据处理任务;整个软件系统的执行流程如图2所示。

DSP/BIOSⅡ作为一种商用的操作系统,提供给便于使用的图形配置界面。使用图形界面可以帮助开发者快速开发程序,不必写繁琐的初始化程序,而可以用图形界面配置后让编译器自动生成。比如对于串行口(MCBSP)的设置就需要配置中断源、数据格式、收发频率等十几个寄存器,麻烦而且容易出错,但是如果使用图形界面来设置,一切就容易多了。图形配置界面不仅可以完成对硬件资源的设置,还可以对任务、信号量进行初始化,完成了他,也就完成了使用DSP/BIOSⅡ的第二步工作。完成各个线程程序的编写之后,编译并载入DSP中运行。DSP首先初始化,然后从MAIN()函数跳入任务循环队列,按照优先级执行队列中的任务,而任务一般都是无限循环的,只被特定的信号量挂起。 DSP/BIOSⅡ提供了强大的分析调试工具。除了常用 的方法之外,CPU负载图和执行图是两种非常有效的方法。CPU负载图提供的是目标CPU的负载曲线。CPU负载的定义是除去执行最低优先级任务以外的时间量。最低优先级任务是只在其他线程都不运行时才执行的任务。因此,CPU负载图包括从目标向主机传送数据和执行附加后台任务所需的时间。在执行图中,可以看到各个线程的活动方式。图形中还包括了信号量的活动,周期性函数标记(tick)和时钟模块标记。执行图能从整体上看到项目所有线程的活动状态。根据调试得到的信息可以评估线程的执行情况和CPU的负荷情况,配合其他调试工具,修改设计直到完成项目的功能需要。 CPU负载图反映的是软件系统所需要的性能和CPU实际最大性能的比值,像PC机上性能统计图,如果所需的性能大于DSP的实际性能,就必须修改设计、优化算法、加快时钟频率,甚至更换性能更高的DSP芯片。 执行图显示了各个任务执行过程中的细节信息,对于嵌入式应用而言,实时性是非常重要甚至是必须满足的条件,操作系统按很小的间隔进行调度就是力图保证系统响应的实时性。但是在实际中,如果任务分配不好,使得任务不能在调度间隔内完成,就会影响整个系统的实时性,这时,必须对任务划分作合理的修改。比如本系统中对一列数据的去噪处理,原先是等到一帧数据来到后再做的,仿真中发现这样使得一帧间隔内所要执行的任务过多,DSP无法完成,所以将数据的预处理改到每一列去做,保证系统的实时性。
4 DSP/BIOSⅡ操作系统使用中要注意的问题 (1)很好地使用DSP/BIOSⅡ的关键在于很好地理解操作系统,这有点像算法理论和应用算法的关系。操作系统凝聚了软件领域几十年发展中的精华,有很多概念和结构是需要很深入的理解和思考的,所以,初学者一定得反复看看一些专门讲操作系统的书籍。 (2)任务必须写成下面2种形式之一。  在DSP/BIOSⅡ开发环境里没有要求显示调用OSTaskDel(),这是因为开发环境自动做了处理,实际原理都是一样的。
5 结语 本文对探地雷达信号处理机的硬件结构和软件设计都做了介绍,重点介绍了如何在项目应用中使用DSP/BIOSⅡ实时嵌入式操作系统。实时嵌入式操作系统在国外得到广泛的应用,已成为嵌入式系统设计中必不可少的一部分,但是在国内高校,以DSP为核心的嵌入式平台中,嵌入式操作系统的应用很有限。所以快速利用这方面的最新技术,提高嵌入式系统开发的层次和深度是刻不容缓的。
参考文献
[1]TI.TMS320 DSP/BIOSuser′s guide.SPRU423,February,2001. [2]TI.TMS320C5000 DSP/BIOSapplication programming interface(API)reference guide.SPRU404C,April,2001. [3]邵贝贝.UC/OS-Ⅱ---源码公开的实时嵌入式操作系统[M].北京:中国电力出版社,2001. [4]刘树军.TMS320C55x嵌入式实时多任务系统DSP/BIOSⅡ[J].嵌入式系统,2002,(5).
|
0
0
发表于
2008-5-9 7:19:31
关于DSP实时多任务操作系统在国外已经广为大家应用,但在国内大家迟迟接受不了这种基于DSP操作系统的概念,往往被基本输入输出BIOS所困扰,大家可以想想:为什么计算机上有了主板的BIOS,还需要一个DOS和windows?
有专家认为:在未来的几年内,DSP系统的发展为几乎所有的电子设备注入了新的活力,由于迅速发展的Internet和非常廉价的微处理器的出现,DSP系统将在我们的日常生活里形成一个更大的应用领域。消费电子、交通运输/汽车、电信服务/网络工业都表现出对这个市场的关注,DSP RTOS将继续保持迅速的增长。
电子工业出版社出版了一本书《DSP实时多任务操作系统》,这本书以目前流行的TMS320C2000系列数字处理器件和易于学习开发的DSP RTOS嵌入式操作系统为核心,结合编者多年开发研制工作实践,介绍基于DSP芯片的DSP RTOS操作系统的移植和应用实例,大家可以看看,我个人认为这是一本非常不错的书。另外在DSP上使用的其他操作系统也有很多,比如Vxworks、uCos-ii、uCLinux等等大家不妨在设计自己的应用系统时这情考虑,拥有了操作系统将大大加快您的开发节奏和设计水平。
目前,DSP实时操作系统的品种较多,据统计,仅用于信息电器的DSP操作系统就有10种左右,其中较为流行的主要有:CY- DRTOS、 VxWorks、pSOS。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。通过对比和使用,我个人比较欣赏CY-DRTOS,因为它有很多优点。
1、编程方便:为编制程序提供了一个简单的、快捷的操作平台。
2、许多底层的工作都由操作系统完成:任务的切换,任务之间的消息传递,任务之间的协同工作都由操作系统完成。
3、提高系统的实时性:因为是一个多任务(64个优先级不同的任务)实时操作系统,所以CPU的工作效率最高。在同等时间内,多任务系统可以完成更多的功能,而传统的编程方法是不可能的。
4、方便调试:因为每一个任务就相当于一个独立的计算机,调试一个任务是非常方便的,每一个任务都是互相独立的。
5、便于软件的维护:多年后拿出自己的程序,思路仍然很清晰,任务很明确。
便于软件的扩展:当需要扩展某些应用时可以非常容易。
6、公开全部的源代码,不必担心知识产权和会有隐藏的秘密在里面,适用于军方的各种应用产品。
7、确定性:全部的函数调用与服务的执行时间是可知的,系统服务的执行时间不依赖于应用程序任务的多少。
8、系统服务功能强大,如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断嵌套层数可达255层。
|