您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术基于TS101的嵌入式实时操作系统设计 正文
基于TS101的嵌入式实时操作系统设计

基于TS101的嵌入式实时操作系统设计

点击数:7446 次   录入时间:03-04 11:44:39   整理:http://www.55dianzi.com   DSP/FPGA技术

   随着半导体制造工艺的发展和计算机体系结构的改进,DSP处理芯片的处理能力越来越强大,控制的外围设备越来越多,软件算法也越来越复杂。

  对于DSP系统的软件开发,不仅要面对复杂的软件算法,同时还要把大部分精力放在各种外围设备和相关的硬件控制上,整个过程复杂而艰辛。因此,为这一类系统开发小巧精致、便于移植的嵌入式实时操作系统,具有实际的意义。本文参考开放源代码实时操作系统uC/OS-II,完成了基于ADI公司的ADSP-TigerSHARC101S(以下简称TS101)系列DSP芯片的嵌入式实时操作系统的设计和开发工作。

  1 TS101芯片简介

    TS101是美国ADI公司生产的一款高性能静态超标量处理器。ADSP-TS101S的内核指令周期为3.3ns,每周期能够执行4条指令、24个16-bit定点运算和6个浮点运算。内部有三条相互独立的128bit宽度的内部数据总线,每条总线各连接一个2MB内部存储器阵列,可提供4个字的数据、指令及I/O访问,以及14.4Gbytes/s的内部存储器带宽。

    在ADSP-TS101内部的双运算模块中,每个均包含一个ALU、乘法器、64-bit移位器和32个字的寄存器组及相关的数据对齐缓冲器(DAB)。芯片中的双整数ALU(IALU)均有自己的31个字的寄存器组以用于数据寻址。此外,TS101中还带有一个带指令对齐缓冲器(IAB),以及分支目标缓冲器(BTB)和中断控制器的程序控制器,同时有三条相互独立的128bit宽度的内部数据总线以及片内6MB SRAM;TS101提供有与主机处理器、多处理器空间(DSP)、外部SRAM和SDRAM相连的外部端口和一个14通道DMA控制器、四个链路口、两个64bit问隔定时器和定时器计满引脚。芯片上一个与IEEE 1149.1兼容的JTAG接口可用于片上仿真。

    2 基于TS101的嵌入式实时操作系统功能

    本文介绍的基于TS101的嵌入式操作系统是参考源码公开的实时操作系统uC/OS-II来设计的,实际上,它和uC/OS-II一样,仅仅是一个实时内核,而不具有像GUI、TCP/IP协议栈等功能部件。它支持占先式多任务调度,并可提供有效的服务(如信号量、邮箱、队列、延时、超时等)。同时,在uC/OS-II基础上可引入高级操作系统中的进程和线程等概念。因此,本没计采用了进程与线程结合的方式,即将实现不同功能的任务视为进程,然后在任务内部进行细分,以划分为不同的线程。进程间的调度与切换在TS101内部存储区和外部扩展存储区(例如SDRAM)中进行,而线程间的调度与切换则在TS101内部存储区中实现。从本设计的整个TS101嵌入式实时系统来看,它的基本功能主要包括任务管理、中断管理、内存管理三方面内容。

    在TS101嵌入式实时系统的三大块功能中,任务管理功能模块基本上是uC/OS-II的简单移植,本文主要针对中断处理和存储器管理两大部分进行设计说明。

    3 TS101的中断处理

    TS101的中断处理包括硬件中断和软件中断两大类,其中软件中断又包括软件异常中断和Debug中断。

    3.1 硬件中断

    TS101处理器不需要专门的堆栈指针来保存现场,器件中IALU的J、K寄存器都可以用作堆栈指针。在允许嵌套中断的中断服务程序中,可将中断返回地址(即RETIB)值保存到堆栈中,这样,在从RETIB读出返回地址后,系统将自动开启全局中断使能。但在保存相关的寄存器和RETI时本应禁止全局中断使能,所以这是在程序控制器将PC写入RETI时自动完成。如果系统不支持嵌套的硬件中断,则无需把处理器状态保存在堆栈中。中断一般根据寄存器RETI执行并在中断后返回,而不需要再对硬件中断的全局禁止位进行处理。

    3.2 软件中断 (异常)

    异常软件中断是在程序执行的过程中触发的。使能异常中断时,可将PMASK[62]置位,并将PC存储于RETS;而对于仿真异常,则将PMASK[63]置位,PC存储于DBUG中。当异常中断出现时,程序控制器将从寄存器IVSW指向的地址取址,仿真异常则从EMUIR寄存器取址,同时将指令流水的指令清空。

    3.3 中断返回

    中断返回是通过在中断服务程序中执行RTI指令来实现的。当然,这要求在响应中断服务程序时就将返回的地址保存在该寄存器中。通常要求至少在执行该指令前的8个指令周期就将返回地址放入在寄存器RETIB中,这样,分支缓冲BTB才能使用。

    4 操作系统中断处理的实现

    在本操作系统中,对于用户中断服务程序的处理过程,其示意代码和功能如表1所列。

    事实上,用户应首先将处理器的寄存器压人当前堆栈[程序列表1中的(1)]。在进行中断处理时,操作系统需要知道用户在做中断服务,因此,用户应该调用OS_Int_Enter_C()将全局变量OSIntNesting[程序列表1中的(2)]直接加1。完成上述两步以后,用户就可以开始服务于引发中断的设备了[程序列表1中的(3)]。

    由于该操作系统允许中断嵌套,而且系统能跟踪嵌套层数OS-IntNesting。然而,为允许中断嵌套,在多数情况下,用户应在开中断之前先清中断源。调用脱离中断函数OS_Int_Exit_C()[程序列表1中的(4)]标志着中断服务子程序的终结,同时OSIntExit ()会将中断嵌套层数计数器减l。当嵌套计数器减到零时,所有中断,包括嵌套的中断便都完成了。此时操作系统要判定有没有优先级较高的任务被中断服务子程序(或任一嵌套的中断)唤醒。如果有高优先级的任务进入了就绪态,系统则返回到那个高优先级的任务,OS_Int_Exit_C()返回到调用点[程序列表1中的(5)]。保存的寄存器的值将在这时被恢复,然后在去执行中断返回指令[程序列表1中的(6)]。应当注意的是,如果调度被禁止(OSIntNesting>0),系统将返回到被中断的任务。

    以上描述的详细解释如图1所示。图中,有时中断来到了[图1(1)],但还不能被处理器识别,这也许是因为中断被操作系统或用户应用程序关了,或者是因为处理器还没执行完当前的指令。一旦处理器响应了这个中断[图1(2)],处理器的中断向量将跳转到中断服务子程序[图1(3)]。中断服务子程序在处理器寄存器(也叫做CPU context)[图1(4)]中一旦保存完毕,用户中断服务子程序将通知操作系统进入中断服务子程序,办法是通过调用OS_Int_Enter_C()给OS-IntNesting加1[图1(5)]。然后用户中断服务代码开始执行[图1(6)]。

    应当注意的是,用户中断服务中做的事要尽可能地少,而把大部分工作留给任务去做。用户中断服务完成以后,要调用OS_Int_Exit_C()[图1(7)]。从时序图上可以看出,对被中断的任务来说,如果没有高优先级的任务被中断服务子程序激活而进入就绪态,OS_Int_Exit_C()只占用很短的运行时间。在这种情况下,CPU寄存器只是简单地恢复[图1(8)]并执行中断返回指令[图1(9)]。而如果中断服务子程序使一个高优先级的任务进入了就绪态,则OS_Int_Exit_C()将占用较长的运行时间,因为这时要进行任务切换[图1(10)]。新任务的寄存器内容要恢复并执行中断返回指令[图1(12)]。

    5 存储器管理

    在TS101的C环境下,可将内存划分为代码区(code)、数据区(data)、堆(heap)区和栈(stack)区。代码区用来存放用户代码,数据区用来存放全局变量和静态变量等数据,栈区用来存放临时变量等数据,堆区用来为用户提供动态内存分配。在编译器的链接描述文件(Linker DescriptonFile.LDF)中,可以手动划分各个内存分区的大小。在TS101所提供的库函数中已经包含了比较完备的内存管理函数(如常用的calLOC,free,malloc和realloc等函数),可用于对内存进行基本管理。

    在对操作系统进行设计的过程中,应将重心放在内存的扩展上,以便有效地使用外部存储器(例如SDRAM等)。为了实现内存扩展,本设计将一个大型任务看作一个进程,再将一个进程划分为不同的小线程。在系统的外部存储器中可以存放多个进程,而每次只将一个读人到内存中来运行。操作系统的主要管理对象是这个进程所划分的多个线程。这样,在一个系统中就可以运行多个进程,它们之间可以由程序进行由内存到外存或由外存到内存的切换控制,但在切换过程中需要花费一些时间代价。

    5.1 外部存储器堆区的使用

    TS101为用户提供了堆区,并提供有calloc、malloc、realloc和free等函数来对其进行管理和使用,同时用户可以通过手动修改链接描述文件以获得相对较大的堆区。然而,在默认情况下,用户所能使用的只是链接描述文件中所提供的那一块堆区,这对用户来说是远远不够的。如果用户在外部存储器上也能够像在内存中一样动态的开辟存储空间来进行使用,那将会带来极大的方便。幸运的是,TS101的编译系统提供了这一功能,用户只需要对系统提供的名为“ts_hdr.asm”的汇编文件和链接描述文件进行修改并编译“ts_hdr.asm”文件,再用生成的“ts_hdr.doj”文件代替链接描述文件中的“ts_hdr_TS101”即可。

    以下将对文件的修改过程做简要的介绍。下面是TS101链接描述文件中对于默认堆区的描述,它定义了默认堆区的基址和堆区的大小:

[1] [2]  下一页


本文关键字:嵌入式  操作系统  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术