Отправьте данные через канал связи
errFlag = rtIOStreamSend(streamID, src, size, sizeSent)
отправляет данные через коммуникационный поток.errFlag
= rtIOStreamSend(streamID
, src
, size
, sizeSent
)
API для функций rtIOStream
независим от физического уровня, через который вы отправляете данные, например, RS232, Ethernet или Сеть области контроллера (CAN). Выбор физического уровня влияет на достижимые скорости передачи данных для связи между вашим компьютером разработчика и целевым процессором.
Для процессора в цикле (PIL) приложение нет никакого минимального требования скорости передачи данных. Чем выше скорость передачи данных, тем быстрее симуляция запускается.
Коммуникационный драйвер устройства может потребовать дополнительных специфичных для оборудования или специфичных для канала параметров конфигурации. Например:
Канал CAN может потребовать спецификации узла CAN, который используется.
Канал TCP/IP может потребовать настройки порта или статического IP-адреса.
Канал CAN может потребовать спецификации ID сообщения 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; } } }
rtIOStreamClose
| rtIOStreamOpen
| rtIOStreamRecv
| rtiostream_wrapper