博主:hotpower
+加为好友
+发送站内短信
+我的博客精华
ARM (16)
Keil C51 (19)
GCCAVR之C++ (20)
PICC (12)
DSP (11)
Delphi语言设计 (5)
尿童学堂 (27)
非典应用怪潭 (10)
HotPower水潭导航 (3)
菜地公告 (31)
非典型LPCARM之攻防体系 (3)
CUPL语言设计 (11)
ABEL语言设计 (3)
非典应用怪潭 (6)
尿童答疑 (2)
尿童图解 (3)
串行数据通讯 (8)
自言自语 (30)
看门狗专栏 (10)
非典型LPCARM专栏 (2)
实用电子书籍 (1)
LPCARM之ISP (12)
菜农键盘专栏 (14)
51反汇编 (24)
51演示程序 (4)
串口通讯专栏 (6)
函数指针 (1)
LPCARM爬鸟 (4)
程序安全 (4)
菜农文件 (5)
ARM入门 (1)
开源文件包 (3)
SPI接口 (3)
I2C接口 (12)
程序优化 (3)
上位机 (7)
菜农搞笑 (25)
CRC专栏 (4)
菜农文集 (3)
数据库 (9)
LabWindows/CVI (19)
CRC/PEC (20)
菜农的HotComm串口控件 (26)
无线通讯 (6)
IAR C++ (4)
USB (9)
电源技术 (1)
PIC C30 (4)
STM32菜鸟实习 (17)
三十年追梦 (9)
LM菜鸟实习 (9)
单总线通讯 (6)
电信交换 (14)
CPLD (2)
DSP/BIOS (36)
DSP GEL语言 (5)
MSP430 (7)
DSP2812 (13)
DSP5402 (24)
DSP206 (3)
DSP/RTDX (9)
COM编程技术 (14)
C++裸奔大法系列 (9)
HotBIOS (12)
C5402CFG头文件 (2)
红色黑客 (13)
菜农公式 (9)
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
31 | 1 | 2 | 3 | 4 | 5 | 6 | |||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 | 1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
2008年份 (258)
2007年份 (296)
2006年份 (130)
· 祝贺“电子工程师的收藏夹”本月电子行业网站联盟爬行榜首
· 毛泽东,为什么今天仍然有人为你疯狂?(转帖)
· 通用串口单总线IO中断聋哑贴
· 菜农1976年的今天
· 揭露“心算星期”骗人的把戏
更多>>
· 不错
· 32年前,俺还无忧无虑的在大雁塔旁的田里玩耍。
· 哈哈~~~菜农从外星球带来的怪物21ic腐败的"斑竹"们…
· http://blog.ednchina.com/hotpower/158877/message.aspx
· WHY?
·电子工程师的收藏夹
·菜农的农家博客
日志总数:684 篇
评论数量:349
访问次数:461822
hotpower 发表于 2008-6-13 02:49 德州仪器(TI) ←返回版面 | |
3楼: 从注册表里取rtdxint.dll文件路径的方法 |
|
|
hotpower 发表于 2008-6-13 02:55 德州仪器(TI) ←返回版面 | |
4楼: 重新注册RTDX的COM接口 |
|
|
系统分类: | 软件开发 |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 原创 |
http://blog.eccn.com/u/107250/archives/2007/474.htm C6000实时在线仿真系统设计实例 本章通过实例向读者介绍TI公司的实时在线仿真系统在C6000系列DSP中的应用。首先介绍RTDX配置和RTDX的开发步骤;然后分别介绍RTDX主机与目标机相关的函数;最后介绍了RTDX的两个案例。 1 实时在线仿真系统概述 实时在线仿真系统的英文全称为Real-Time Data Exchange,简称RTDX(TI公司已经将它注册为商标)。TI公司提出这个概念主要是为了实现计算机和DSP芯片之间的实时数据交换。读者可以将RTDX理解为一个时分复用的全双工数据通道管道,在这个过程中,计算机被称为主机,DSP芯片被称为目标机。读者可以通过RTDX在程序运行过程中,而不必终止程序来将所需要的信息在主机和目标机之问来回传送。 图7-1是RDTX的逻辑模型图。从图中可以看出,目标机和主机之间的通信实际上是通过JTAG口完成的。目标机中的RTDX目标库和位于CCS(code Composer studio)中的RTDX主机库之间实时交换数据。RTDX目标库向目标应用程序提供用户接口,目标应用程序可以通过此接口发送和接受数据。RTDX主机库提供COM接口,主机客户程序通过COM接口发送和接受数据。RTDX主机库还可以将数据保存在日志文件中,供非实时数据分析使用。 从逻辑上看,可以把此数据管道分成若干个虚拟管道,每个虚拟管道称为一个通道(Channel)。每种类型的数据通过各自的通道传送,这样能够将具有不同意义的数据从逻辑上分开。每个通道只能够单向传送数据,当然不同的通道可能具有不同的方向。可以异步地向通道写入数据,也就是说,可以在任意时刻写入数据。
同样,当主机应用程序向客户应用程序发送数据时,数据被放在RTDX主机库的缓冲区中。当RTDX主机库接收到目标应用程序要求数据的请求时,如果缓冲区中有足够的数据满足要求,数据就会发送到目标应用程序。数据被写入指定的存储器,不干扰目标应用程序的运行,同时主机会通知RTDX目标库操作已经完成。 2 RTDX配置 在进行RTDX配置之前,必须首先启动和设置好CCS,读者将CCS安装完成后,单击Setup CCS 2(C6000),进入图7-2所示的界面。
图7-4中Current Settings下显示的就是当前RTDX的设置情况。 ·使能,禁止RTDX 在窗口的左下角有一个Enable rtdx选钮。选中则使能RTDX,否则为禁止RTDX。 ·进入RTDX发置菜单 单击右小角的Configure菜单。则会进入如图7-5所示的RTDX Configuration Control对
·Non-Continuous Mode,非连续模式。在此模式下,从RTDX目录库传送过来的数据被记录存日志文件中,日志文件的扩展名为rd。 ·Continuous Mode,连续模式。在此模式下,从RTDX目标库传送过来的数据被记录 在内部的循环缓冲区中。 当需要捕获有限的数据并保存数据时,可以使用非连续模式。当需要从目标应用程序连续地获取和显示数据而小需要保存数据时,可以使用连续模式。 Data Source栏用于设置RTDX主机库通过COM接口向主机客户程序提供数据时,可以有以下两种数据来源: ·Live:Data(from target):从目标系统传送过来的实时数据; ·Playback(from log file):回放,从日志文件中得到以前记录的数据。 读者可以在“Log Filename”文本框中选择日志文件的位置。当使用Live Data,且工作在非连续模式下,此日志文件是用于记录数据的日志文件。当使用Playback时,此日志文件是用于读取以前记录的数据的文件。 在一些非实时分析的情况下,绎常先用非连续模式,记录大量目标应用程序发送的数据(此时主机客户程序可能没有运行)到日志文件,然后利用Playback方法,由主机客户程序从COM接口获取记录的数据分析显示(此时目标应用程序可能没有运行),此时就需要现在的Playback作为数据来源。 当选择Tools菜单下的RTDX子菜单下的Channel Viewer Control选项时,系统会弹出如图7-6所示的窗口。
·增加和删减通道; ·使能/禁止通道; Channel Viewer Control窗口上有两个选项:Output Channel,Input Channel分别显示输出和输入通道号。当显示OutputChannel窗口时,系统将会显示以下信息: Adress 通道十六进制地址 XFRCout。 传送信息的数目 ByteCout 等待读取的字节数目 MsgCount 等待读取的信息数目 MsgLen 当前信息长度 MsgNum 当前信息的序列号 当显示Input Channel窗口时,系统将会显示以下信息: Adress XFRCout RReqCout ABvteCount 通道十六进制地址 传送信息的数目 目标机等待读取的数目 能够被发送给目标机的字节数目 RByteCount目标机应用程序已经申请的字节数目 不干扰目标机上程序正常运行的情况下,实现主机与目标图7-7所示的菜单。单击DeleteChannel将删除该通道,单击Add Channel将出现如图7-8所示的对话框。
当选择TOOLS菜单下的RTDX子菜单下的Diagnostics Control选项时,系统会弹出如图7-9所示的窗口。
●Internal Test 这个测试仿真从目标应用程序接受数据,用来测试ccs是否工作正常,它和实际的目标程序没有关系。 ● Target-To-Host Test 这个测试使目标能够发送数据给HOST,HOST能够接受目标板的数据。 ●Host-To-Target Test 这个测试使目标能够接受HOST发送的数据,HOST能够发送数据给目标板。 3程序设计流程 RTDX可以在不干扰目标机上程序正常运行的情况下,实现主机与目标机之间的数据交 无论是目标机向主机传送数据,还是主机发送数据到目标机,都可以分为以下几步来完 ·第1步:编制目标机程序用来发送或接受数据。这一步是在CCS下完成的。这一步 必须先行,因为在这一步中需要定义用于主机访问的RTDX数据通道并向这些通道写入或读取数据,RTDX编程有无必要,关键在于看这一步有无必要。 ·第2步:编写主机程序用于接受或发送数据。这一步是在PC机各种软件下完成的。 这一步需要使用第一步中定义的RTDX数据通道,并通过这些通道读取或写入数据。以上两步的程序设计格式对于同一系列的DSP芯片来讲是固定的,对于不同系列的DSP,其格式稍有不同。 ·第3步:将目标程序写入到目标机上。特别注意,因为RTDX是通过JTAG完成数据 交换的,在编译连接和写入程序时,一定不要肩动RTDX,否则程序运行是没有结果的。 ·第4步:启动RTDX。 ·第5步:运行目标机程序。 ·第6步:运行主机程序。 ·第7步:在主机上对目标机传送来的数据进行分析。 通过以上几步,读者就可以利用RTDX在程序运行时将自己所需要的数据在主机和目标机之间来回传送。 4 RTDX函数 在7.3节中介绍了要设计RTDX程序流程,要分别编制目标机程序和主机程序,对应这两种程序T1分别提供了两种函数给用户调用。 4.1 主机函数 TI公司提供的RTDX主机接口函数可以完成通道的操作、配置、诊断、查询等功能。这些函数大致可以分为以下几类: 1.配置函数 ·long ConfigureRtdx(short Mode,long MainBufferSize,long NumOfMainBuffers); 参数: Mode 连续或非连续模式,1.连续模式,0。非连续模式 MainBufferSize 缓冲区大小,默认为1024 NumOfMainBuffers 缓冲区数目 默认为4 返回值:0-成功,非0-失败 函数描述:ConfigureRtdx函数用来设置RTDX模式和缓冲区的大小和数目。 ●long ConfigureLogFilefBSTR FileName,long FileSize,shott FileFullMode,short FileOpenMode); 参数:FileName LOG文件名 FileSize 文件人小 FileFullMode 覆盖旧文件模式:0-覆盖旧数据;1-抛弃新数据 FileOpenMode 打开文件模式:O-只读;1-在现成文件上附加:2-覆盖现成文件。 返回值:0-成功,非0-失败 函数描述:ConfigureLogFile函数用来设置RTDX log文件。 ·long EnableRtdx(); 参数: 无 返回值:0-成功,非0-失败 函数描述:使能RTDX ·long DisableRtdx(); 参数: 无 返回值:0-成功,非0-失败 函数描述:禁止RTDX ·long EnableChannel(BSTR ChannelName); 参数: ChannelName 通道号 返回值:0-成功,非0-失败 函数描述:使能该通道 ·long DisableChannel(BSTR ChannelName); 参数: ChannelName 通道号 返回值:0-成功,非0-失败 函数描述:禁止该通道 2.通道操作函数 ·long Open(BSTR Channel_String,BSTR Read_Write); 参数: Channel_String 通道标识符 Read_Write “r”.读;“W”-写 返回值:0-成功,非0-失败 函数描述:为读写操作打开相应通道 ·long Close(); 参数: 无 返回值:0-成功,非0-失败 函数描述:关闭数据通道 ·long ReadSAll(VARIANT*pArr); 参数:pArr VARIANT变最指针 返回值:0-成功,非O-失败 函数描述:从数据通道读取8位整数 ·long ReadSAl2(VARIANT*pArr); 参数:pArr VARIANT变量指针 返回值:0-成功,非0-失败 函数描述:从数据通道读取·16位整数 ·long ReadSAl4(VARIANT*pArr); 参数:pArr VARIANT变量指针 返回值:0-成功,非0-失败 函数描述:从数据通道读取32位整数 ·long ReadSAF4(VARIANT*parr); 参数:pArr VARIANT变量指针 返回值:0-成功,非0-失败 函数描述:从数据通道读取32位浮点数。 ·long ReadSAF8(VARIANT*pArr); 参数:pArr VARIANT变量指针 返回值:0-成功,非0-失败 函数描述:从数据通道读取64位浮点数。 ·VARIANT ReadSAl2V(long*pStatus); 参数:pStatus返回状态指针 返回值:SAFERRAY指针变量。 函数描述:从数据通道中读取信息放置到SAFERRAY变量中,返叫SAFERRAY指针。 ·VARIANT ReadSAl4V(long*pStatus); 参数:pStatus 返回状态指针 返回值:SAFERRAY指针变量 函数描述:从数据通道中渎取信息放置到SAFERRAY变量中,返回SAFERRAY指针。 ·long Read(VARIANT*pArr,long dataType,long numBytes); 参数:pArr VARIANT变量指针 dataType 数据类型 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:从数据通道中读取特定类型和特定数日的数据。 ·long Readll(BYTE*pData); 参数:pData VARIANT变量指针 dataType 数据类犁 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:返回读取的8位整数数据指针。 ·long Readl2(short*pData); 参数:pData VARIANT变量指针 dataType数据类型 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:返回渎取的16位整数数据指针。 ·long Readl3(10ng*pData); 参数:pDam VARIANT变量指针 dataType数据类型 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:返回读取的32位整数数据指针。 ·long ReadF4(float*pData); 参数:pDma VARIANT变量指针 dataType数据类型 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:返回读取的32位浮点数数据指针。 ·long ReadF8(double*pData); 参数:pData VARIANT变量指针 dataType数据类型 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:返回读取的64位浮点数数据指针。 ·long Write(VARIANT Art,long*numBytes); 参数: Arr 指向SAFERRAY数据的VARIANT变量指针 numBytes字节数 返回值:0-成功,非0-失败 函数描述:写信息到数据通道。 ·long Writell(unsigned char Data,long*numBytes); 参数:Data 向目标板的数据 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:写8位整数数据到目标板。 ·long Writel2(short Data,long*numBytes); 参数:Data 发送给目标板的数据 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:写16位整数数据到目标板。 ·long Writel4(long Data.long*numBytes); 参数:Data 发送给目标板的数据 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:写32位整数数据到目标板。 ·long WriteF4(float Data.long*numBytes); 参数:Data 发送给目标板的数据 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:写32位浮点数数据到目标板。 ·long WriteF8(double Data,long*numBytes); 参数:Data 发送给目标板的数据 numBytes 字节数 返回值:0-成功,非0-失败 函数描述:写64位浮点数数据到目标板。 ·long StatusWrite(long*numBytes); 参数: numBytes 字节数 返回值:0-成功,非0-失败 函数捕述:获取以前写操作的信息。 ·long Seek(long MsgNum); 参数: MsgNum 信息数 返回值:0-成功,非0-失败 函数描述:与GetMsgNumber、GetNumMsgs函数一起获取log文件中的信息。 ·long SeekData(long numBytes); 参数: numBytes 字节 返回值:0-成功,非0-失败 函数描述:将内部读指针向前或向后移动numBytes个字节数。 ·long Flush(); 参数: 无 返回值:0-成功,非0-失败 函数描述:将通道内所有的数据发送给目标板。 ·long Rewind(); 参数: 无 返同值:0-成功,非0-失败 函数描述:将读指针移到log文件的开头。 3.查询函数 ·long GetChannelID(BSTR Channel_String,long*chanId); 参数: Channel_String 通道名 chanld 通道内部ID号 返回值:0-成功,非0-失败 函数描述:得到通道的内部ID号。 ·long GetMsgID(long*pMsgId); 参数:pMsgld信息ID号 返回值:0-成功,非0-失败 函数描述:得到当前信息的内部ID号。 ·long GetMsgLength(long*pLength); 参数:pLength当前信息长度指针 返回值:0-成功,非0-失败 函数描述:得到当前信息字节长度。 ·long GetMsgNumber(long*pMsgNum); 参数:pMsgNum 当前信息序列号指针 返回值:0-成功,非0-失败 函数描述:得到当前信息序列号。 ·long GetNumMsgs(long*pNum); 参数:pNum log文件中的信息数指针 返回值:0-成功,非0-失败 函数描述:得到log文件中的信息数目。 ·long GotoNextMsg(); 参数: 无 返回值:0-成功,非0-失败 函数描述:转到log文件中下一个指针。 4.诊断函数 ·long GetChannelStatus(BSTR ChannelName,long*pChannelStatus); 参数: ChannelName通道名 DChannelStatus 通道状态 返回值:0-成功,非0-失败 函数描述:返回指定通道的状态。 ·long GetRTDXRev(long*RevNum); 参数: RevNum版本号 返回值:0-成功,非0-失败 函数描述:返回RTDX的版本号。 ·long GetStatusString(BSTr*StatusString); 参数: StamsString 状态字符串 . 返回值:0-成功,非0-失败 函数描述:返同RTDX中最后一组错误状态信息字符串。 ·long GetCapability(long*Capability); 参数: Capability 能力 返回值:0-成功,非0-失败 函数描述:返回RTDX的能力 ·long RunDiagnostics(short TestType,long TestMode,long TestInfo); 参数: TestType 测试类型:0-Intemal 1-目标板到主机;2-主机到目标板 TestMode 测试模式:0-开始;1-停止;2-得到结果 Testlnfo 测试信息:0-成功;l-失败;2-超时 返回值:0-成功,非0-失败 函数描述:执行测试操作 ·BSTR GetDiagFilePath(short TestType); 参数:TestType 测试类型:0-Internal;1-目标板到主机;2.主机到日标扳 返回值:路径和文件名 函数描述:返回指定测试的路径和文件名 7.4.2目标机函数 TMS320C6000 DSP/BIOS API里向包含的RTDX函数模块包含了以下几个函数: int RTDX_channelBusy(RTDX_inputChannel*pichan): 参数:pichan通道号 返回值:0表示该通道不忙,l表示该通道忙 函数描述:RTDX_channelBusy该函数与RTDX_readNB函数结合使用,用来表示指定通道当前是否正在被使用,如果该通道被使用,则状态寄存器0(ST0)的TC标志位被设置成 1,否则被设置成0。该函数不能被中断函数调用。 RTDX_CreateInputChannel(ichan): 参数:ichan输入通道标号 返回值:无 函数描述:RTDX_CreateInputChannel用来声明一个用于输入的通道。它不能被中断函数调用。 RTDX_CreateOutputChannel(ochan): 参数:ochan输入通道标号 返旧值:无 函数描述:RTDX_CreateOutputChannel用来声叫一个用于输出的通道。它不能被中断函数凋用。 void RTDX_disablelnput(RTDX_inputChannel*ichan): 参数:ichan输入通道标号 返旧值:无 函数描述:RTDX_disablelnput用来禁止指定的输入通道。它不能被中断函数调用。 void RTDX_disableOutput(RTDX_outputChanneI*ochan); 参数:ochan输出通道标号 返回值:无 函数描述:RTDX_disableOutput用来禁止指定的输出通道。它不能被中断函数调用。 void RTDX_enablelnput(RTDX_inputChannel*ichan): 参数:ichan输入通道标号 返回值:无 函数描述:RTDX_disablelnput用来使能指定的输入通道。它不能被中断函数调用。 void RTDX_enableOutput(RTDX_outputChannel*ochan); 参数:ochan输出通道标号 返回值:无 函数描述:RTDX_disableOutput用来使能指定的输出通道。它不能被中断函数调用。 RTDX_isInputEnabIed(ichan): 参数:ichan输入通道标号 返回值:无 函数描述:RTDX_isInputEnabled用来测试指定的输入通道是否被使能,如果被使能,则状态寄存器0的TC标志位被置为1,否则被置为0。 RTDX_isOutputEnabled(ohan); 参数:ochan输出通道标号 返回值:无 函数描述:RTDX_isOutputEnabled用来测试指定的输出通道是否被使能,如果被使能,则状态寄存器0的TC标志位被置为1,否则被置为0。 int RTDX_read(RTDX_inputChannel*ichan,void*buffer,int bsize): 参数:ichan输入通道标号 buffer 接受缓冲区指针 bsize 接受缓冲区大小 返回值:>0缓冲区接受的数据量的长度 0 失败 RTDX_READ_ERROR该通道没有被使能 函数描述:RTDX_read用来向指定的输入通道发送读数据请求,如果该通道是被使能的,则该函数在收到数据后将返回收到的数据长度,如果该通道没有被使能,则该函数将返回RTDX_READ_ERROR错误。RTDX_read不能被中断子程序调用。 int RTDX_readNB(RTDX_inputChannel*ichan,void*buffer,int bsize): 参数:ichan输入通道标号 buffer接受缓冲区指针 bsize 接受缓冲区大小 返回值:RTDX_OK 成功 0 失败,缓冲区已满 RTDX_READ_ERROR该通道没有被使能 函数描述:RTDX_readNB与RTDX_read函数一样,用来向指定的输入通道发送读数据请求,但它不会向RTDX_read一样一直等待下去,而是立即返回。它一般与TDX_channelBusy和RTDX_sizeofInput函数结合使用。RTDX_readNB不能被中断子程序调用。 int RTDX_sizeoflnput(RTDX_inputChannel*pichan); 参数:pichan输入通道标号 返回值:缓冲区内数据的数量 函数描述:RTDX_sizeoflnput用来与RTDX_readNB结合使用,它返回从数据通道传送给A的数据体的数量。该函数不能被中断子程序调用。 int RTDX_write(RTDX_outputChannel*ochan,void*bLAfter,int bsize); 参数:ochan输出通道标号 buffer 接受缓冲区指针 bsize 接受缓冲区大小 返回值:非0成功 0 失败 函数描述:RTDX_write用来将数据传送给指定的输出通道,当数据被传送给RTDX缓冲区后,该函数返回。该函数不能被中断子程序调用。 5系统设计实例 本节将通过从目标机接受整数数据和向目标机发送整数数据两个实例向读者展示如何使用RTDX,其中每个实例都必须包含主机和目标机上两个程序。其中PC机上的程序可以住C环境下编制,也可以在VB的环境下编制,甚至还可以用MATLAB实现,本节第一个案例是用C编制,第二个案例是用VB编制的。 5.1 从目标机接受整数数据实例 该程序完成的是目标机向PC机发送一个整数5,编制这个实例程序的流程如下: (1)打开C语言编辑环境。 (2)输入源代码,如下:
·加入RTDX头文件——#i nclude 。 ·定义一个全局的PC主机数据输出通道,RTDX通道是一种必须在DSP目标存储器中 定义成全局数据对象的数据结构,通道的名字可以任取: RTDX_CreateOutputChannel(ochan); ·初始化DSP目标系统。使用宏TARGET_INITIALIZEO或者自己编写的代码初始化 DSP目标系统,在初始化目标系统时,需要注意的是,初始化的顺序是与DSP处理器相关的。 TARGET_INITIALIZE(); ·使能输出通道写数据。RTDX通道在初始化时默认是禁止的,在数据传输的时候必须 事先使能RTDX通道。 RTDX_enableoutput(&ochan);/*使能输出通道*/ ·传送数据到PC主机。 Status=RTDX_write(&ochan,&data,sizeof(data)); ·禁止输出通道传输数据。需要禁止CCS从DSP目标系统处理或传输数据,则需要调 用RTDX_disableOutput函数。 RTDX_disableOutput( &ochan ); (6)保存源代码文件,编译链接并生成OUT输出文件。 (7)在CCS File菜单里载入生成的OUT文件。 (9)在Debug菜单下运行Run命令,执行DSP应用程序。 (10)在PC机上运行对应的C语言程序。 (11)在PC机屏幕上将会显示数字“5”,表示PC主机已经从DSP目标系统读取了整数5。 5.2 向目标机发送整数数据实例 该程序完成的是目标机从PC机接受一个整数5,编制这个实例程序的流程如下:
·定义一个全局的PC主机数据输入通道,RTDX通道是一种必须在DSP目标存储器中定义成全局数据对象的数据结构,通道的名字可以任取: RTDX_CreateInputChannel( ichan ); ·初始化DSP目标系统。使用宏TARGET_INITIALIZEO或者自己编写的代码初始化 DSP目标系统,在初始化目标系统时,需要注意的是,初始化的顺序是与DSP处理器相关的。 TARGET_INITIALIZE(); ·使能输出通道写数据。RTDX通道在初始化时默认是禁止的,在数据传输的时候必须 事先使能RTDX通道。 RTDX_enableInput(&ichan)j ·从PC主机接受数据。 status=RTDX_read(&ichan,&data,siZeof(data)); ·禁止输出通道传输数据。需要禁止CCS从DSP日标系统处理或传输数据,则需要调 用RTDX_disableInput函数。 (6)保存源代码文件,编译链接并生成OUT输出文件。 (7)在CCS File菜单里载入生成的OUT文件。 (8)选择CCS菜单命令Tools→RTDX→Configuration Control,相对应的图7-4的EnableRTDX栏前面画上‘个“√”。 (9)在Debug菜单.下运行Run命令,执行DSP应用程序。 (10)在PC机上运行对应的Visual Basic程序。 (11)在CCS的标准窗口上就会显示 5 was received from the host,表示DSP目标系统已经从PC机读取了整数5。 6本章小结 RTDX虽然只是方便调试的一种工具,但它在现在DSP特别是C6000系列的开发中占据着很重要的位置。了解和熟悉RTDX对于读者熟练掌握DSP的开发有重要的作用。本章则向读者详细介绍了RTDX的使用,并提供了RTDX的2个实例供读者实践学习。 |
系统分类: | DSP |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 转贴 |
摘要:本文介绍了基于TI公司DSP/BIOS实现实时数据调试和交换的方法
----数字信号处理技术已成为目前最广泛的应用技术之一,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( L"RTDX" );
5) 打开一个管道
status = rtdx.Open("ochan", "R")
6) 从管道中读数据
status = rtdx.ReadI4(data)
7) 关闭管道
status = rtdx.Close()
8) 释放COM对象
rtdx.Release();
9) 释放COM
::CoUninitialize();
主机端输出管道的编程与此类似.
----如果安装有CCS,那么在C:/ti/c6000/examples/rtdx/displays下的RTDX.EXE提供了一个通用的主机端接口程序,运行后,通过菜单配置,可以与DSP端RTDX管道建立连接,将接受的数据显示在表格中.
系统分类: | DSP |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 转贴 |
TI 主页 > Digital Signal Processing > DSP 设计支持 > 开发开具 > 仿真模拟
TI 提供 XDS510? 和 XDS560? 类仿真器,支持实时基于 JTAG 扫描的仿真并为完整系列的 TI DSP 提供产品支持。这些仿真器与 Code Composer Studio 调试器界面紧密集成,使开发者能够利用 TI 的所有实时仿真控制和可视化功能。TI 第三方提供逻辑分析器、硬件测试设备以及各种仿真器,这些仿真器支持不同的主机输入/输出接口,包括 USB、以太网、PCI、并行端口、PCMCIA 以及 ISA 总线。
JTAG 仿真概览
德州仪器 (TI) 在十多年前发明了基于 JTAG 扫描的仿真,自此以后,该方法一直为嵌入式系统开发广为采纳。与较早且更昂贵的“电路内置仿真”或“ICE”技术相比而言,JTAG 更受开发者的偏爱。电路内置仿真将目标处理器替换为不同的器件,该器件扮演或“仿真”原始器件,但具有附加的引脚使器件上的内部结构(如总线)可见。电路内置仿真具有限制,因为支持 200MHz 以上的高速处理器所需要的成本是让人望而却步的。TI 的 XDS 系列仿真器所使用的 JTAG 仿真技术省去了这些调试成本和困难,方法是直接与处理器进行通信,从而彻底避免专用的仿真器件。标准 JTAG 连接器可让数据以非插入方式在片上和片外移动,而不会中断正在执行的器件。然后,TI 在 DSP 上使用附加的仿真逻辑对此功能进行了补充,旨在提供更高的可视性并提供对寄存器和其它内部功能(如片上高速缓冲存储器)进行访问。
RTDX 和高速 RTDX
直到最近,开发者一直被迫使用断点来停止他们的应用程序以便与主机计算机交换数据“快照”,这种技术称为“停止模式调试”。这种插入式方法会误导开发者,因为中止的高速应用程序的隔离快照不能显示系统的实际操作。
为解决这个问题,TI 开发了 RTDX(实时数据交换),这使设计人员能持续实时看到应用程序的直观视图。RTDX 由 TI 在 1998 年发明,是 DSP 行业第一款具有这种功能的产品。RTDX 使能在目标和主机之间进行实时异步数据交换,而不会停止目标应用程序。本质上,RTDX 数据链路是在 DSP 应用和主机之间提供一个“数据管道”。这种双向能力允许开发者访问应用程序的数据以获取实时直观视图,或者模拟给 DSP 输入数据(可能在实时传感器硬件可用之前)。该功能通过为开发者提供系统操作方式的实际视图来缩短了开发时间。
标准和高速 RTDX
有两种类型的 RTDX。XDS510 类仿真器支持现有形式的 RTDX,它称为“标准”RTDX,能够处理 10KB/s 和更高的数据速率,从而使 CD 音频、超低端电视会议和音频电话成为可能。XDS560 还支持标准 RTDX,将那些速度升高到 130 KB/s,即使高速 RTDX 在处理器上不可用。此外,XDS560 还向启用的处理器的高速 RTDX 提供 2MB/s 以上的带宽。高速 RTDX 带宽为流视频、ADSL 和硬磁盘驱动器等应用提供支持。这为正在运行的应用程序提供了史无前例的实时直观视图。
系统分类: | DSP |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 转贴 |
|
||||
系统分类: | DSP |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 转贴 |
摘 要:讲述实时数据传输(RTDX)的使用,描述一个用RTDX双向传递大量多媒体数据的实现方法。该方法可以方便的应用于其他TI DSP的系统设计中。
关键词:TI DSP;RTDX
引言
TI DSP在数字电路中作为信号处理、电路控制的核心设备,广泛应用于各个行业。在TI DSP系统设计阶段,实时数据交换(RTDX)提供了一种目标板和主机之间的双向实时数据传输的方法。它可以应用于大量数据的双向传输,例如应用在多媒体数据进行仿真处理中。但是由于它的实现难度较大以及不处于系统设计的核心位置,所以没有得到广泛使用。本文的目的是向读者描述一种RTDX的具体实现。
RTDX的使用方法
RTDX提供了目标板与主机之间的实时数据通信。当系统使用该功能时,DSP上驻留一个小的RTDX片上软件库,片上程序通过调用这个软件库的API实现JTAG与主机之间的数据传输。与DSP目标板相连的主机上也存在一个相应的RTDX主机端软件库,客户编写的主机端程序通过对象嵌入,实现DSP目标板的实时数据分析,以及向目标板提供新的数据。
在编写DSP的软件上,RTDX的使用方式和C语言文件的IO操作非常相似,如图1、2所示,在实现数据由DSP到主机的过程中,首先声明一个RTDX输出通道,然后对该通道进行操作,最后查询状态,看数据是否被发送出去;而从主机端到DSP端的数据传输过程中,则声明一个RTDX输入通道,然后读取该通道上的数据。
在主机端,TI 提供的RTDX库使用了微软公司的COM技术,数据的传输过程分别如图3、图4所示。
用RTDX实现多媒体数据的
双向传输
多媒体数据原始信息往往拥有极大的数据量,DSP在多媒体数据处理中的应用主要是压缩和解压缩,但由于DSP自身的限制,它没有大量的空间存储多媒体数据,即便这些数据是已经被压缩过的。在系统的调试阶段,如何单独测试DSP的编码效率呢?一种可行的解决办法就是借用DSP目标板相连的主机空间,用RTDX把原始数据传递给DSP,DSP对数据处理后再通过RTDX传回主机。
系统的整体构架
由于DSP片上存储空间有限, TI对RTDX一次在主机和目标DSP之间传输的数据长度做了限制,此值不应该超过253个字长为16bit的数据,如果一次传输的数据量超过253,则要对数据分片传递。本应用中每次传递的数据远远大于253,所以主机端和目标板都定义了分片长度RTDXBLOCK,RTDXBLOCK=200。传输时两边同时进行相反的工作,目标板写数据的时候主机等着读数据,主机写数据的时候目标板进行相反的操作。每传输RTDXBLOCK大小的数据,两者的工作进行交换。分段传递数据还带来了很多好处,它可以方便主机与目标板之间的同步,每次数据的发出也是对上一次收到数据的应答;RTDX的特性是读一个字节,写一个字节,读写采用相同大小段节省了将近一半的时间;inbuffer与outbuffer可以指向相同的地址,又节省了一些内存。
采用相同大小的段传输数据还有一些细节问题要考虑,目标板的第一次操作是否应该先是写出?以便空出地方来接收下一次被处理的数据。由于每次传输数据总量的不对称性,大部分情况下是输入的数据比输出的数据多,目标板先写出数据会多占用一次传输的时间。另一个问题就是数据总量的不对称性,总是主机或目标板先写完数据,只剩下某一种操作,这部分时间没有办法节省。
对于数据传递过程中可能传送的一些命令字如,跳过当前帧、程序终止等。做了这样的考虑,由主机和目标板主程序来填写和解释这些命令字,命令字不单独传输,本应用中放在inbuffer/outbuffer的第0个位置,与下一块数据同时传送。另外,本应用中inbuffer与outbuffer的第1个位置存放的是数据段的实际长度,常用于向主机端指示压缩后数据的实际长度,以便用于不定长压缩方式的数据输出。inbuffer/outbuffer的实际数据的起始位置是可以根据应用自定义的。传输程序不负责这些问题,只管从buffer的第一个字节开始传输数据。
软件的整体构架如图6所示。
软件设计
DSP片上实现了一次数据输入输出的函数dataIO,它采用C语言编写,返回值1表示运行过程均正常。有4个参数,分别是输出Buffer起始位置,输出Buffer的大小,输入Buffer的起始位置,输入Buffer的大小。使用时,在主函数中使用两个RTDX宏声明:RTDX_CreateOutput Channel(ochan),RTDX_CreateInput Channel(ichan),然后可以直接调用dataIO进行数据传输,dataIO会在第一次运行中自动初始化环境。如图7所示。dataIO函数经过简单的修改甚至不修改即可以适用于不同的环境。
主机端的RTDX过程使用C++实现,因为程序的主要目的就是向目标板传递数据和取得数据,所以直接在主程序中作了一个大的循环,同目标板一样用了4个参数:inbuffer,outbuffer,inbufferlength,outbufferleng。执行时,主程序首先被阻塞,不停的试图从目标板读取经过压缩的数据,直到目标板DSP把压缩好的数据放到输出通道上。得到数据后,主程序把这些数据存放在本地文件中,然后把要压缩的数据写到输入通道上传递给DSP。这样反复执行直到传输双方中的一方表示传输终止。
执行过程
首先把程序写入目标板DSP中,然后在DSP集成开发环境CCS的tools菜单中选择RTDX,启用输入通道和输出通道。先后运行DSP程序和主机端程序即可实现数据的双向传输。因为两边都使用了阻塞机制,所以程序运行的先后顺序无所谓。
结语
本应用实现了如下功能:主机端把44.1KHz,16bit采样的音频数据传递到DSP内存中,每次传递1152个数据。DSP对这些数据进行Mp3格式的压缩,压缩后的数据长度不确定,最后DSP把这些数据传回主机端,然后等待下一次传输开始。实现基于DSK5416,用CCS2.0作为DSP综合开发环境。主机端程序用MS VC6.0编译。
这种RTDX的实现方法用于2003年德州仪器公司数字信号处理大学挑战赛决赛项目“使用TMS320C547X实现多媒体数据在TCP/IP网络传输”的设计中,该项目最终获得大赛三等奖。
参考文献:
1. 彭启琮,‘TMS320C54x 实用教程’ ,电子科技大学出版社,1999
2. 张雄伟、陈亮、徐光辉,‘DSP集成开发与应用实例’,电子工业出版社,2002
RTDX_CreateOutputChannel( ochan ); //创建一个输出通道,该操作为宏操作
...
TARGET_INITIALIZE();
RTDX_enableOutput( &ochan ); //初始化目标板以及通道使能
...
status = RTDX_write( &ochan, outp , RTDXBLOCK );
//发送outp指针所指数据到输出通道,数据长度由RTDXBLOCK指定,返回实际发送的数据长度*
*:数据长度指类型为发送数据类型转换为16位无符号所占长度,outp的数据类型也应为16位无符号数。
图1 目标板向主机输出数据
RTDX_CreateInputChannel( ochan ); //创建一个输入通道,该操作为宏操作
...
TARGET_INITIALIZE();
RTDX_enableInput( &ochan ); //初始化目标板以及通道使能
...
status = RTDX_read( &ichan, inp, RTDXBLOCK )
//发送inp指针所指数据到输出通道,数据长度由RTDXBLOCK指定,返回实际接收的数据长度*
*:数据长度指类型为发送数据类型转换为16位无符号所占长度,inp的数据类型也应为16位无符号数。
图2 目标板从主机端获取数据
hr = rtdx_in.CreateInstance( __uuidof(RTDXINTLib::RtdxExp) ); //创建rtdx实例
status = rtdx_in->Open( "ichan", "W" ); //创建ichan ,以便向目标板输入数据*
status = rtdx_in->Write( sa, &bufferstate); //把安全数组sa**中的数据写入目标板
status = rtdx_in->Close(); //关闭输入通道
*:读写状态标志"W"应该大写,否则会带来不可预知的错误。
**:在写入数据时,应该把要写入的数据放在一个安全数组中。然后调用Write。
图3 主机端向目标板传输数据
hr = rtdx_out.CreateInstance( __uuidof(RTDXINTLib::RtdxExp) ); //创建rtdx实例
status = rtdx_out->Open( "ochan", "R" ); //创建ochan ,以便从目标板获取数据
status = rtdx_out->ReadSAI2( &sb ); //把目标板上的数据写入安全数组sb*,**
status = rtdx_out->Close(); //关闭输出通道
*:从目标板读取的数据首先被放在安全数组中,然后由使用者读出。
**:可以根据目标板的数据格式,通过调用ReadSAI1,ReadSAI2,ReadSAI4,读取所占字节数不同的数据。例如读取占用4个8位字节的word类型数据,应该使用ReadSAI4。
图4 主机端从目标板获取数据
> 图5 输入输出Buffer的数据格式
> 图6 主机端与目标板的数据传输过程图
int dataIO(unsigned int * inbuffer,
unsigned int * outbuffer,
int inbuffer_length,
int outbuffer_length);
int main()
{ unsigned int inbuffer[FLUSH+2];
unsigned int outbuffer[FRAME+2];
while(1)
{
if (dataIO(inbuffer,outbuffer,FLUSH+2,FRAME+2)!=1)
return;
encode();/*进行数据处理*/
}
}
系统分类: | DSP |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 转贴 |
http://topic.csdn.net/u/20070127/16/a5fd24b2-76e6-49d3-a39d-a853084d3ce3.html
1、在目标应用程序中使用RTDX发送数据
RTDX提供了实时、连续了解目标系统程序运行情况的手段,它允许用户在不干扰目标系统程序运行的情况下,在主机和目标系统之间传输数据。可以这么认为,RTDX提供了一个目标应用程序与主机客户程序之间的双向数据管道。
目标系统与主机之间的RTDX实际上仍然是通过JTAG接口完成的。目标系统中的RTDX目标库和位于CCS中的RTDX主机库之间实时交换数据。RTDX目标库向目标应用程序提供用户接口,目标应用程序可以通过此接口发送和接受程序。RTDX主机库提供COM接口,主机客户成熟通过COM接口发送和接收数据。RTDX主机库孩可以将数据保存在日志文件中,供非实时数据分析使用。
目标应用程序通过调用RTDX目标库中的函数发送数据。这些数据实际撒航只是放在RTDX目标库的缓冲去中,然后函数立即返回。RTDX目标库在处理器空闲时将本地缓冲区中的数据发送出去,这样不干扰应用程序的正常运行。根据设定的主机记录模式,主机将数据放到缓冲区或者记录到日志文件中。RTDX主机库对外提供COM接口,可以认为是COM服务器,主机客户程序通过COM接口获取数据,并根据需要分析和显示数据。
在CCS中打开工程文件ti/tutorial/sim64xx/sect_1/less_1/s1l1.pjt,然后在一个源程序对话框中打开S1L1.c源文件。为了使用RTDX,需要对此源文件进行一定的修改。
可以看到,目标应用程序发送数据的步骤主要包括:声明发送通道、初始化RTDX目标库、使能发送通道、发送数据、关闭通道。修改完成后,编译连接程序,得到s1l1.out文件,加载程序到目标系统。选择“Tool” |“RTDX” |“Configuration Control”命令,打开“RtdxConfig”对话框。然后按快捷键F5运行程序,可以在ccs标准输出对话框见到程序最后调用puts()函数的输出信息“Program Complete!”。此时数据应该发送到Rtdx主机库中。现在需要一个COM客户程序通过COM接口读出这个数据,CCS提供了一个工具,位于ti/tutorial/sim64xx/sect_1/less_1目录下。打开一个命令提示符对话框,改变目录到ti/tutorial/sim64xx/sect_1/less_1,运行程序s1l1.exe,程序输出。
2、在目标应用程序中使用RTDX接收数据
在CCS中打开工程文件ti/tutorial/sim64xx/sect_1/less_3/s1l3.pjt,同时在一个源程序对话框打开s1l3.c文件。此源文件需要一定的修改,才能完成接受一个整数的工作。
可以看到,接收数据的过程与发送数据的过程基本类似,只不过使用输入通道,用目标库提供的RTDX_read()函数读取数据。编译连接运行程序,然后打开一个命令行对话框,并在其中运行程序ti/tutorial/sim64xx/sect_1/less_3/s1l3.exe。在CCS的标准输出对话框中可以看到目标应用程序的输出“Value 5 was received from the host”,表示已经从主机客户接收到数据。
3、建立DSP/BIOS的配置文件
当DSP/BIOS的基本设置完成后,可以将修改后的配置以volume.cdb名字保存。配置文件编辑工具还将自动生成volumecfg.h,volumecfg.cmd,volumecfg等DSP/BIOS应用程序所需要的系统文件。
4、用DSP/BIOS工具创建应用程序
使用DSP/BIOS工具开发DSP应用程序与不使用DSP/BIOS工具基本一致。首先在“Project”菜单中选择“New”或“Open”,新建或打开一个工作文件。然后将需要的.h、.asm、.c、.obj、.lib(这时不需要添加C语言标准库如rts.lib)添加到该工程文件中。还需要将DSP/BIOS的配置文件.cdb添加到工程到工程文件中。注意:LNK使用的.cmd文件有DSP/BIOS配置文件自动产生,所以应该添加DSP/BIOS配置工具自动生成的.cmd文件。
系统分类: | DSP |
用户分类: | DSP/RTDX |
标签: | 无标签 |
来源: | 转贴 |