exponenta event banner

rtIOStreamSend

Передача данных по каналу связи

Описание

пример

errFlag = rtIOStreamSend(streamID, src, size, sizeSent) передает данные через коммуникационный поток.

API для rtIOStream функции не зависят от физического уровня, через который передаются данные, например, RS232, Ethernet или сеть контроллеров (CAN). Выбор физического уровня влияет на достижимые скорости передачи данных между компьютером разработки и целевым процессором.

Для приложения «процессор в цикле» (PIL) не требуется минимальная скорость передачи данных. Чем выше скорость передачи данных, тем быстрее выполняется моделирование.

Для драйвера устройства связи могут потребоваться дополнительные аппаратные или канальные параметры конфигурации. Например:

  • Для канала CAN может потребоваться спецификация используемого узла CAN.

  • Канал TCP/IP может потребовать конфигурирования порта или статического IP-адреса.

  • Канал CAN может требовать указания идентификатора сообщения CAN и приоритета.

При внедрении rtIOStream функции драйвера, предоставить эти данные конфигурации, например, путем жесткого кодирования данных или путем предоставления аргументов rtIOStreamOpen.

Примеры

Отправка и получение данных от процессора

Этот код от rtiostreamtest.c показывает, как отправлять и получать данные от целевого процессора.

static void blockingIO(int send, unsigned long numMemUnits)
{
    size_t sizeToTransfer = (size_t) numMemUnits; 
    size_t sizeTransferred;
    IOUnit_T * ioPtr = (IOUnit_T *) &buff[0];
    int status;

    if (numMemUnits > BUFFER_SIZE)
    {
        AckCode = stat_notEnoughSpace;
        AckArg0 = BUFFER_SIZE;
        return;
    }

#ifdef HOST_WORD_ADDRESSABLE_TESTING       
   /* map to bytes */
   sizeToTransfer *= MEM_UNIT_BYTES;
#endif

   while (sizeToTransfer > 0) {
      sizeTransferred = 0;
      /* Do the low level call */
      status = send ?
         rtIOStreamSend(streamID, ioPtr, sizeToTransfer, &sizeTransferred) :
         rtIOStreamRecv(streamID, ioPtr, sizeToTransfer, &sizeTransferred);

      if (status != RTIOSTREAM_NO_ERROR) {
         if (AckCode == stat_OK) {
            AckCode = stat_RTIOSTREAM_ERROR;
            AckArg0 = data_counter;
         }
         return;
      }
      else {
         sizeToTransfer -= sizeTransferred;
         ioPtr += sizeTransferred;
      }
   }
}

Входные аргументы

свернуть все

Дескриптор потока, возвращенного предыдущим вызовом rtIOStreamOpen.

Указатель на начало буфера, содержащего массив данных для передачи.

Размер данных для передачи из исходного буфера. Для архитектур, адресуемых байтами, размер измеряется в байтах. Некоторые архитектуры DSP не адресуются по байтам. В этих случаях размер измеряется в количестве WORDs, где sizeof(WORD) == 1.

Выходные аргументы

свернуть все

Если функция выполняется без ошибок, она возвращает ноль. В противном случае возвращается -1.

rtiostream.h файл определяет следующие макросы:

#define RTIOSTREAM_ERROR (-1)
#define RTIOSTREAM_NO_ERROR (0)

Размер передаваемых данных, меньший или равный size. Если данные не передаются, значение равно нулю.

Представлен в R2009a