介绍一种实时操作系统DSP/BIOS
3 STS
对一个软件进行分析优化时,通常会用到profile的功能。但是在实时运行的DSP的环境中使用profile等效于加入了多个程序断点。 由于现在的DSP通常具有很深的流水线结构来保证DSP的高运算能力,如的C6000系列的流水线长度为12级,程序断点需要排空所有已经进入流水线的指令。这样也就破坏了真正的运行环境。同时profile还必须调用输出模块向主机传递时间信息。因此在profile的情况下真正的实时运行环境是没有办法得到保护的。DSP/BIOS针对这种情况引入了一个统计模块STS。STS对象只有4个数据Previous、Count、Total和Max。调用的方法(API)也只有4个,即STS_add()、 STS_set()、 STS_delta()和STS_reset()。这些API对数据的操作功能如表1所示。本文引用地址:http://www.amcfsurvey.com/article/152540.htm
如果要对某一段程序进行分析时,只需在其前后调用STS_set和STS_delta就可以了。如例2使用STS测试程序段执行周期如下:
/* Header files needed for DSP BIOS */
#include <sts.h>
#include <clk.h>
/* functions */
void func_load();
/* Objects created by the Configuration Tool */
extern STS_Obj stsLoad;
/*
* ======== main ========
*/
void main()
{
/* fall into DSP/BIOS idle loop */
return;
}
void func_load()
{
STS_set(stsPrintf、 CLK_gethtime());
/* 测试程序段 */
...
STS_delta(stsPrintf、 CLK_gethtime());
}
func_load()为一个中断服务程序(ISR)。在C6211,150MHz的情况下,仅插入33个周期,约0.22μs。
4 任务调度(HWI/SWI/TSK)
一个操作系统的核心永远都是任务的调度。在DSP/BIOS中任务的调度是通过HWI、SWI和 TSK 三个模块来实现的。这三个模块分别对应于不同的调度方法。HWI即硬件中断。在 DSP/BIOS中硬件中断主要负责从外部设备中读写数据。由于硬件中断直接与硬件打交道,所以对应的中断服务程序ISR应该尽可能地短小精悍。需要注意的是HWI并不引起任务调度,因此在ISR的入口和出口成对地调用_HWI_enter()和_HWI_exit()这两个宏是必须的。HWI在处理完数据的输入输出后调用SWI_post()来调度相应的软件中断,SWI来完成数据处理工作。SWI是 DSP/BIOS任务调度的核心,共有14个优先级,每个优先级可以有多个任务。SWI任务是抢断式的,即高优先级的任务可以抢断低优先级的任务。但是SWI任务是不可阻塞的。它的运行状态如图1所示。
评论