Code Composer и обмен данными в реальном времени: проблемы в коммуникации Target to Host - PullRequest
0 голосов
/ 19 июля 2011

дорогие коллеги-программисты!

Я бы очень признателен за несколько ответов или советов, касающихся следующей проблемы:

Тема - Цифровая обработка сигналов (DSP), Code Composer Studio 3.1 и Обмен данными в реальном времени (RTDX), как описано в этой статье. Мне было трудно разобраться в теме, так как я DSP и C - Noob. После того, как я прочитал несколько статей и проработал справочные руководства Code Composer, у меня наконец-то был некоторый успех (да, ЧТО-ТО случается!), Хотя я все еще сталкиваюсь с некоторыми ошибками, которых не понимаю при реализации простого 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, поскольку я сказал, что не имею опыта в C.

Так что любые намеки приветствуются. Возможно, у кого-то есть опыт работы с RTDX и у него были проблемы раньше, или, может быть, кто-то может сказать мне, как я могу узнать больше об этой ошибке. Также я вижу, что эта тема довольно специфична, поэтому, если потребуется дополнительная информация, я могу дать ...

Заранее большое спасибо!

Andy

1 Ответ

1 голос
/ 20 июля 2011

Я думаю, вы перегружаете канал данными быстрее, чем он может обработать.Обратите внимание, что в примере они обернули запись в цикл while:

while ( /* limit TOY EXAMPLE data rate */
    !RTDX_Data_Write( &ochan, data, sizeof(data) ) /* send data */
);

Комментарий гласит:

Этот игрушечный пример генерирует данные с очень высокой скоростью, ограниченной толькоСкорость процессора.В этом примере мы используем возвращаемое значение RTDX_Data_Write, чтобы определить, были ли данные успешно зарегистрированы.Окружающий цикл while делает занятое ожидание до тех пор, пока данные не будут принятыпринимать данные.

В реальном встроенном приложении ваш основной цикл, вероятно, будет работать не с неограниченной скоростью, а с некоторой фиксированной частотой кадров.Таким образом, вы можете создать свой пакет данных с размером, который может обрабатывать канал. В этом сообщении на форуме TI предполагается, что максимальная скорость передачи данных составляет около 20 Кбайт / с.

...