|
- Участник
- Здесь с 19.01.2017
- Сообщений: 82
|
L791 SetParametersStream
Добрый день. при использовании функции SetParametersStream Описание : Вызов этой функции настраивает плату АЦП/ЦАП на заданные параметры ввода или вывода данных. Определение : IFC(ULONG) SetParametersStream(PDAQ_PAR sp, ULONG *UsedSize, void** Data, void** Sync, ULONG StreamId = L_STREAM_ADC) = 0; Параметры : sp - структура, которая описывает параметры ввода или вывода данных ( ADC_PAR,DAC_PAR или другая в зависимости от типа поля s_Type); UsedSize - переменная, в которой будет возвращено количество реально используемой памяти (в отсчетах АЦП); Data - переменная, в которой будет возвращен адрес начала большого буфера; Sync - переменная, в которой будет возвращен адрес переменной синхронизации; StreamId - дескриптор потока (L_STREAM_ADC, L_STREAM_DAC или другой);
UsedSize - переменная, в которой будет возвращено количество реально используемой памяти (в отсчетах АЦП) То есть если запуск сбора не запущен, то вернет 0? И задавать этот параметр отличным от 0 бессмысленно?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L791 SetParametersStream
это имеется ввиду что если выделили 512к буфер, а для сбора использовали 64 страницы с irqstep 1024 то реально задействовано будет 64к и это будет возвернуто в этой переменной.
|
|
- Участник
- Здесь с 19.01.2017
- Сообщений: 82
|
Re: L791 SetParametersStream
512к буфер согласно документации на L791 это предел Вопрос в другом при вызове SetParametersStream размер буфера устанавливается? То есть я могу указать карте - буфер какого размера использовать БЕЗ НАЧАЛА сбора или размер буфера определяет контроллер карты по своим собственным усмотрениям?
|
|
- Участник
- Здесь с 19.01.2017
- Сообщений: 82
|
Re: L791 SetParametersStream
Ситуация такая: перед запуском сбора в синхронном режиме, SetParametersStream возвращает в переменной UsedSize значение 0. Почему так может быть? Настройки: TLogChannel_parameters* chPar = NULL; IDaqLDevice* pInterface = (IDaqLDevice*)pI_void; ADC_PAR parAdc; parAdc.t2.s_Type = L_ADC_PARAM; parAdc.t2.FIFO = 1024; parAdc.t2.IrqStep = 1024; parAdc.t2.Pages = 64; parAdc.t2.AutoInit = 1; parAdc.t2.dRate = measures_frequency_kHz; parAdc.t2.dKadr = kadrs_delay_ms; parAdc.t2.Reserved1 = 0; parAdc.t2.SynchroType = 0; parAdc.t2.SynchroSrc = 0; for (int i = 0; i < countLogCh; i++) { parAdc.t2.Chn[ i ] = CalcPortBits(lcLogChannelsParam[ i ]->numLogicalChannel, lcLogChannelsParam[ i ]->rangeADC, lcLogChannelsParam[ i ]->collectedMode != 0); } parAdc.t2.NCh = lcLogChannelsParam.size(); parAdc.t2.IrqEna = 0; parAdc.t2.AdcEna = 1; FillDaqParameters и RequestBufferStream отрабатываются нормально.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L791 SetParametersStream
вообще должен вернуть Pages*IrqStep. посмотрю -проверю.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L791 SetParametersStream
в последней версии библиотеки для 791 не только 512 можно. Она стала похожа на 780 и 783 платы. можно задавать любой буфер. Но обязательно использовать прерывания, тк по ним она оперирует с маленьким буфером заполняемым по BusMaster.
|
|
- Участник
- Здесь с 19.01.2017
- Сообщений: 82
|
Re: L791 SetParametersStream
adcParams.t2.IrqStep = 1024; //adcParams.t2.Pages = 4*countLogCh; //countLogCh =5 // по идее буфер равен adcParams.t2.Pages * adcParams.t2.IrqStep =1024*4*5= 20480 pInterface->FillDAQparameters(&adcParams.t2); ULONG tm = 1024*4*countLogCh; // tm =20480 //Выделяет память в ОЗУ компьютера под большой кольцевой буфер. Память выделяется с выравниванием размера на 4096 байт. pInterface->RequestBufferStream(&tm, L_STREAM_ADC); Size = 0; pInterface->SetParametersStream(NULL, &Size, (void**)&data,void**)&sync, L_STREAM_ADC); //получаем Size=10240
Почему? И буфер выделяется в байтах или в ULONG?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: L791 SetParametersStream
буфер согласно описанию выделяется в USHORT. Для большинства модулей это в отсчетах, но у 791 отсчет 32 бита... именно поэтому половинка и тоже согласно описанию в отсчетах АЦП (для 791 это 10240 отсчета)
|