如果要对某一段程序进行分析时,只需在其前后调用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所示。