rtIOStreamSend

Отправка данных через канал связи

Описание

пример

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

API для rtIOStream функции не зависят от физического слоя, через который вы отправляете данные, например, RS232, Ethernet или Controller Area Network (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 не являются адресуемыми по байтам. В этих случаях размер измеряется в количестве WORD, где sizeof(WORD) == 1.

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

свернуть все

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

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

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

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

Введенный в R2009a