0

亲爱的程序员!

我非常感谢有关以下问题的一些答案或提示:

主题是数字信号处理 (DSP)、Code Composer Studio 3.1 和实时数据交换 (RTDX),如本文所述。我很难理解这个话题,因为我是 DSP 和 C - Noob。在阅读了一些论文并完成了 Code Composer Help-Tutorials 之后,我终于取得了一些成功(是的,发生了一些事情!),尽管在实现一个简单的 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 自动化客户端,它将接收到的整数写入控制台。

到目前为止,一切都很好,程序可以工作,但是 -> 直到整数大约 86,然后 RTDX_write 失败。

正如我提到的论文中所述,“目标应用程序调用用户库接口中的例程来缓冲数据并将其传递给通信接口。” 所以也许这是一个缓冲区问题?尽管如此,我没有找到任何处理缓冲区的可能性......

或者,也许这只是一个nooby-programming-error,正如我所说的,我对C没有经验。

因此,任何提示都值得赞赏。也许有人有使用 RTDX 的经验并且之前遇到过问题,或者有人可以告诉我如何找到有关该错误的更多信息。我还看到这个主题是一个非常具体的主题,所以如果需要更多信息,我可以提供......

非常感谢您!

安迪

4

1 回答 1

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 时表示客户端很忙,所以您只需再试一次,直到它准备好接受数据。

在真正的嵌入式应用程序中,您的主循环可能不会以无限的速度运行,而是以某个固定的帧速率运行。因此,您可以设计具有通道可以处理的大小的数据包。此 TI 论坛帖子建议最大数据速率约为 20Kbytes/sec。

于 2011-07-19T20:06:21.997 回答