打印

DSP/BIOS CONFIGURATION TOOLS

[复制链接]
1374|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangmangui|  楼主 | 2013-11-8 09:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数字信号处理技术已成为目前最广泛的应用技术之一,TI公司在不断推出各种新型高速低功耗DSP的基础上,提出了基于DSP的微型实时操作系统BIOS的概念.

DSP所面临的系统越来越复杂,诸如多任务处理,烦琐的硬件设备管理,实时数据处理及传送等等,传统的DSP编程越来越难以胜任.

TI公司推出的BIOS可以支持以上功能,它提供了众多的模块及面向用户的API接口,包括多优先级多任务系统调度,内存管理,硬件DRIVER抽象,以及数字信号处理所独特的实时数据调试及交换的支持.

先介绍一下BIOS中的图形化管理界面:DSP/BIOS CONFIGURATION TOOLS。在 CCS 集成 开发环境中打开FILE -> NEW -> DSP/BIOS CONFIGURATION,就可以看到DSP/CONFIGURATION TOOLS, 在这里用图形化的界面集中管理所有的BIOS模块,包括硬中断,软中断,任务,时钟,管道等,在每个模块下都可以添加新的对象以及编辑它的属性,添加完对象会在工程中自动生成相应的代码,用户程序中只需声明此对象,然后调用它的API函数就可以了。

下面主要介绍数字信号处理所独特的实时数据调试及交换

在通常的软件调试中如何去观察变量?很简单,我们会单步运行或者设置断点,然后在WATCH窗口中观察变量的值.这种经典的调试方法在数字信号处理中捉荆见拙,因为我们面对的是实时任务,程序的停顿会使我们面对的系统面目全非.DSP/BIOS的解决方案是提供LOG模块, 在目标DSP内,LOG对象将要监控的信息实时的捕捉存放在DSP的特定缓冲LOG BUFFER中,在DSP进入空闲的时刻通过JTAG接口传回主机,主机端的CCS集成环境将接受数据并显示在打开的LOG观察窗口中,从而不打断正常的程序运行情况下,获取必要的调试信息。

下面介绍如何使用LOG模块。在现有的工程中打开DSP/BIOS CONFIGURATION TOOL ,在LOG模块上单击右键选择INSERT LOG,然后修改新添加的对象名为 LogTarget. 在程序里添加以下代码 :

#include
#include
extern far LOG_Obj logTarget; //声明为外部对象
func()
{
       LOG_printf( &logTarget, … );
}

这样就完成了调试数据向主机的传送。在运行代码前,我们打开TOOLS....DSP/BIOS.....MESSAGE LOG,在打开的LOG窗口中,单击右键打开PROPERTY PAGE,选择Name为LogTarget. 然后运行 代码,LOG.printf会将所需的信息打印到打开的LOG窗口中,这样能够在不影响系统运行的时候,观察变量,打印信息了.

另一个重要的用于实时调试的模块是STS,用于提供在程序运行中的各种统计数据,如运行时间,特定的变量等。在DSP中,STS将所要统计的数据放在一组32位的变量,同样在DSP进入IDLE时刻,将数据通过JTAG接口传送给主机中的64位变量进行统计,并清除DSP中的32位变量。

下面介绍一下STS的使用

在工程中打开DSP/CONFIGURATION TOOLS,并在STS模块下添加一个对象stsObj.

在程序里添加以下代码

#include
#include
extern far STS_Obj stsObj;
//通常有三种使用方法
//1。统计消耗的时钟数
func()
{
    STS_set( &stsObj, CLK_gethtime()); //设置一个起始时刻
    do algorithm//运行算法
    STS_delta(&stsObj, CLK_gethtime()); //得到自上一个STS_set到目前的时钟数
}
//2。统计变化的变量
func()
{
STS_add( &stsObj, pitch);//将变量pitch在一段循环中的最大值,平均值及总和打印出来
}
//3。统计变量改变的差值
STS_set( &stsObj,targetValue);
processing
STS_delta(&stsObj,newValue);//将变量改变的差值统计出来

在运行代码前,在CCS中打开TOOLS..DSP/BIOS..STATISTICS VIEW,在打开的STATISTICS窗口 中,单击右键打开PROPERTY PAGE,选择要显示的STS对象及要观察的统计数据,如平均值, 总数, 循环次数等.运行代码,所要观察的统计数据会出现在STATISTICS窗口中,这样我们能够在不影响系统运行的时候,获取有关的统计信息了.

上面我们介绍的STS模块提供了灵活的获取统计数据的方法。

下一个我们要提到的重要模块是RTDX(REALTIME DATA EXCHANGE),RTDX提供了实时连续探察 DSP内部处理的方法,我们可以在DSP全速运行的时候在主机和DSP间进行数据的传输,用户可以在主机用OLE automation client分析显示得到的数据.

RTDX包括主机部分和目标部分,目标DSP中程序调用RTDX目标库的API函数通过JTAG接口与主机交换数据,主机端客户程序通过OLE接口调用RTDX HOST LIBRARY API与DSP交换数据。

目标DSP内输出管道的编程可以参照一下流程:

1)#include
2)RTDX_CreateOutputChannel(ochan);
声明一个全局的输出管道
3) RTDX_enableOutput(&ochan);
使能一个输出的管道
4) status = RTDX_write(&ochan, &data, sizeof(data));
将所要传出的数据data传递到管道
5)RTDX_disableOutput(&ochan);
关断管道

目标DSP内输入管道的编程与此类似
在主机端可以用VB,VC或者EXCEL编程
这里介绍一下VC环境下RTDX输入管道编程

1) 输入RTDX支持库
#import
using namespace RTDXINTLib;

2) 定义一个RTDX对象
IRtdxExpPtr rtdx;

3) 初始化COM
::CoInitialize(NULL);

4) 初始化COM对象
HRESULT hr = rtdx.CreateInstance( LRTDX );

5) 打开一个管道
status = rtdx.Open(ochan, R)

6) 从管道中读数据
status = rtdx.ReadI4(data)

7) 关闭管道
status = rtdx.Close()

8) 释放COM对象
rtdx.Release();

9) 释放COM
::CoUninitialize();

主机端输出管道的编程与此类似.

如果安装有CCS,那么在C:        ic6000examples tdxdisplays下的RTDX.EXE提供了一个通用的主机端接口程序,运行后,通过菜单配置,可以与DSP端RTDX管道建立连接,将接受的数据显示在表格中.

相关帖子

沙发
zhangmangui|  楼主 | 2013-11-8 09:52 | 只看该作者
DSP BIOS FAQ.pdf (255.25 KB)

使用特权

评论回复
板凳
hczsea| | 2013-11-12 16:36 | 只看该作者
顶版主,STS例程很不错,而且很实用。
感觉现在用DSP的人少了,这些技术用的人也少了。

使用特权

评论回复
地板
zhangmangui|  楼主 | 2013-11-12 16:55 | 只看该作者
hczsea 发表于 2013-11-12 16:36
顶版主,STS例程很不错,而且很实用。
感觉现在用DSP的人少了,这些技术用的人也少了。 ...

是啊  整体来说用的人少  多多支持哈

使用特权

评论回复
5
hczsea| | 2013-11-12 17:22 | 只看该作者
zhangmangui 发表于 2013-11-12 16:55
是啊  整体来说用的人少  多多支持哈

:handshake多多指教哈

使用特权

评论回复
6
msblast| | 2013-11-12 17:26 | 只看该作者
我只会把DSP当作超级单片机来用,没有涉及到算法这一块。本身对算法也不是很感兴趣。

使用特权

评论回复
7
zhangmangui|  楼主 | 2013-11-12 23:35 | 只看该作者
msblast 发表于 2013-11-12 17:26
我只会把DSP当作超级单片机来用,没有涉及到算法这一块。本身对算法也不是很感兴趣。 ...

使用2000系列的感觉就是单片机

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入【TI DSP 论坛】 & 【DSP 技术】           TI忠诚粉丝!

935

主题

26376

帖子

589

粉丝