Отправка данных через канал связи
отправляет данные через коммуникационный поток.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; } } }
rtiostream_wrapper
| rtIOStreamClose
| rtIOStreamOpen
| rtIOStreamRecv