我真的很感激有关以下问题的一些答案或提示:
主题是数字信号处理(DSP),Code Composer Studio 3.1和实时数据交换(RTDX),如this论文中所述。我很难理解这个话题,因为我是DSP和C - Noob。在我阅读了一些论文并通过Code Composer帮助教程后,我终于取得了一些成功(Yay,SOMETHING发生了!),虽然我仍在运行一些我在实现简单的Target-to-Host时不理解的错误数据交换。
在目标上运行的代码(TMS320C6713 DSK),必须一个接一个地发送100个整数:
RTDX_CreateOutputChannel( ochan );
void main()
{
int data = 0;
int status;
TARGET_INITIALIZE();
RTDX_enableOutput( &ochan );
puts( "Start writing!\n" );
while(data < 100){
data++;
/* send an integer to the host */
status = RTDX_write( &ochan, &data, sizeof(data) );
if ( status == 0 ) {
puts( "ERROR: RTDX_write failed!\n" );
exit( -1 );
}
}
while ( RTDX_writing != NULL ) {
#if RTDX_POLLING_IMPLEMENTATION
RTDX_Poll();
#endif
}
/* disable the output channel */
RTDX_disableOutput( &ochan );
puts( "Program Complete!\n" );
}
在主机上,我运行一个简单的Java / Jacob实现作为OLE自动化客户端,将接收到的整数写入控制台。
到目前为止,这么好,该程序有效,但是 - &gt;只有大约86的整数,然后RTDX_write失败。
如我在上面提到的论文中所述,“目标应用程序调用用户库接口中的例程来缓冲数据并将其传递给通信接口。”那么这可能是缓冲区问题?尽管如此,我没有找到处理缓冲区的任何可能性......
或者这可能只是一个非常糟糕的编程错误,正如我所说,我对C没有经验。
所以任何提示都表示赞赏。也许有人有RTDX的经验并且之前遇到过这个问题或者有人可以告诉我如何能够找到更多有关该错误的信息。我也看到这个话题非常具体,所以如果需要更多信息我可以给...
非常感谢你!
安迪
答案 0 :(得分:1)
我认为你的数据压力超过它可以处理的速度。请注意,在示例中,他们将写入包装在while循环中:
while ( /* limit TOY EXAMPLE data rate */
!RTDX_Data_Write( &ochan, data, sizeof(data) ) /* send data */
);
评论说:
此玩具示例仅以极高的速率生成数据 按CPU速度。在示例中,我们使用的是返回值 RTDX_Data_Write以确定数据是否已成功记录。该 周围的while循环繁忙等待,直到可以接受数据
这个想法是当RTDX_Data_Write
返回0时表示客户端正忙,所以你只需再试一次,直到它准备好接受数据。
在真正的嵌入式应用程序中,主循环可能不会以无限速度运行,而是以某种固定的帧速率运行。因此,您可以设计具有通道可以处理的大小的数据包。 This TI forum post表明最大数据速率约为20千字节/秒。