Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Вроде заработало, спасибо!
StopLDevice вызывается в stop, который вызывается исходя из проверки условия с adc_buffer_offset в check_ready.
Да, я по сути хочу чтобы по фронту на DI16 запустился сбор и оцифровал мне некоторую длительность на некотором канале. Каждый мой импульс - это должна быть новая инициализация тк длительность и канал разные, и новый фронт. Новый фронт приходит только после обработки данных response(adc_buffer_pointer) и нового вызова init.
Таймер в случае лога шел с периодом 1мс. Да, я понимаю что у меня не ОСРВ и мой таймер не синхронизирован с процессом сбора. По таймеру я не обрабатываю ничего, только смотрю завершился сбор или нет.
Если я задал однократный сбор (adcPar.t2.AutoInit = 0;) и задал какое то количество страниц Pages, то я ожидаю что заполнив весь буфер процесс оцифровки остановится. Или я ошибаюсь?
Установил пакеты lcomp-dkms и liblcomp1-dev. Версия 1.58.2. К проекту линкую libcomp из каталога /usr/lib/
Столкнулся со следующей странностью. Использую e2010 для оцифровки одиночных импульсов известной длительности со стартом по сигналу на DI16. При этом задаю размер буфера исходя из длительности, а также задаю номер канала. Размер буфера делаю кратным IrqStep.
Вот код инициализации
class e2010 : public QObject {
....
private:
....
unsigned short *adc_buffer_pointer = nullptr; /* ADC buffer pointer */
unsigned int *adc_buffer_offset = nullptr; /* ADC buffer offset in words */
unsigned int _channel_number = 1;
unsigned int _ freq = 10000000;
unsigned int _size = 0;
unsigned int _IrqStep = 4096;
};
void e2010::init() {
ADC_PAR adcPar;
PLATA_DESCR_U2 pd;
SLOT_PAR sl;
ULONG size;
m_pI->GetSlotParam( &sl );
m_pI->ReadPlataDescr( &pd ); // fill up properties
size = _freq * this->get_duration();
if ((size % _IrqStep) == 0) {
;
} else {
size = ((int)(size / _IrqStep)) * _IrqStep + _IrqStep;
}
if (size < _IrqStep) {
size = _IrqStep;
}
_size = size;
ULONG res = m_pI->RequestBufferStream( &size );
if (res == L_SUCCESS) {
qCDebug(logDebug()) << "e2010: success alloc size" << size;
} else if (res == L_ERROR) {
qCDebug(logDebug()) << "error";
}
switch( sl.BoardType )
{
case E2010B:
case E2010:
{
adcPar.t2.s_Type = L_ADC_PARAM;
adcPar.t2.AutoInit = 0; //1
adcPar.t2.dRate = _freq / 1000.0; /* частота в кадре (KHz)*/ // Fsampling
adcPar.t2.dKadr = 0; /* задержка между кадрами */ // 1000.0 / Fsampling //1000.0 / _freq;
adcPar.t2.SynchroType = EXT_START_UP; //INT_START
adcPar.t2.SynchroSrc = INT_CLK;
switch (this->get_channel_number()) {
case 1:
adcPar.t2.AdcIMask = SIG_0 | V30_0 | GND_1 | GND_2 | GND_3;
break;
case 2:
adcPar.t2.AdcIMask = SIG_1 | V30_1 | GND_0 | GND_2 | GND_3;
break;
case 3:
adcPar.t2.AdcIMask = SIG_2 | V30_2 | GND_0 | GND_1 | GND_3;
break;
case 4:
adcPar.t2.AdcIMask = SIG_3 | V30_3 | GND_0 | GND_1 | GND_2;
break;
default:
break;
}
adcPar.t2.NCh = 1; //NCh
adcPar.t2.Chn[0] = this->get_channel_number() - 1;
adcPar.t2.FIFO = 0; //32768 //not used
adcPar.t2.IrqStep = _IrqStep;
adcPar.t2.Pages = size / _IrqStep; //64; in words
adcPar.t2.IrqEna = 1;
adcPar.t2.AdcEna = 1;
// extra sync mode
adcPar.t2.StartCnt = 0;
adcPar.t2.StopCnt = 0;
adcPar.t2.DM_Ena = 0;
adcPar.t2.SynchroMode = 0;
adcPar.t2.AdPorog = 0;
m_pI->FillDAQparameters( &adcPar.t2 );
m_pI->SetParametersStream( &adcPar.t2, &size, ( void ** ) &adc_buffer_pointer, ( void ** ) &adc_buffer_offset, L_STREAM_ADC );
m_adcPar = adcPar;
} break;
}
m_pI->EnableCorrection();
m_pI->InitStartLDevice();
qCDebug(logDebug) << "e2010: StartLDevice";
m_pI->StartLDevice();
_buffer_size = m_adcPar.t2.IrqStep*m_adcPar.t2.Pages;
}
Затем по таймеру смотрю наполненность буфера
void e2010::check_ready() {
qCDebug(logDebug()) << "adc_buffer_offset" << *adc_buffer_offset;
if (*adc_buffer_offset >= _buffer_size) {
this->stop();
}
}
void e2010::stop() {
m_pI->StopLDevice();
emit response(adc_buffer_pointer);
qCDebug(logDebug) << "e2010: StopLDevice";
}
При этом в некоторые моменты, раз в несколько импульсов, буфер наполняется по несколько раз. Вот лог, демонстрирующий этот момент.
2023-01-27 14:18:39.545 [Debug] : e2010: success alloc size 106496
2023-01-27 14:18:39.546 [Debug] : Buffer size(word): 106496
2023-01-27 14:18:39.546 [Debug] : Pages: 26
2023-01-27 14:18:39.547 [Debug] : IrqStep: 4096
2023-01-27 14:18:39.548 [Debug] : FIFO: 0
2023-01-27 14:18:39.548 [Debug] : Rate: 10000
2023-01-27 14:18:39.548 [Debug] : Kadr: 0.0001
2023-01-27 14:18:39.561 [Debug] : e2010: StartLDevice
2023-01-27 14:18:39.603 [Debug] : adc_buffer_offset 0
2023-01-27 14:18:39.617 [Debug] : adc_buffer_offset 0
2023-01-27 14:18:39.619 [Debug] : adc_buffer_offset 0
2023-01-27 14:18:39.621 [Debug] : adc_buffer_offset 0
2023-01-27 14:18:39.623 [Debug] : adc_buffer_offset 0
2023-01-27 14:18:39.624 [Debug] : adc_buffer_offset 4096
2023-01-27 14:18:39.625 [Debug] : adc_buffer_offset 8192
2023-01-27 14:18:39.625 [Debug] : adc_buffer_offset 12288
2023-01-27 14:18:39.626 [Debug] : adc_buffer_offset 16384
2023-01-27 14:18:39.628 [Debug] : adc_buffer_offset 20480
2023-01-27 14:18:39.628 [Debug] : adc_buffer_offset 24576
2023-01-27 14:18:39.629 [Debug] : adc_buffer_offset 24576
2023-01-27 14:18:39.630 [Debug] : adc_buffer_offset 32768
2023-01-27 14:18:39.631 [Debug] : adc_buffer_offset 32768
2023-01-27 14:18:39.632 [Debug] : adc_buffer_offset 40960
2023-01-27 14:18:39.633 [Debug] : adc_buffer_offset 45056
2023-01-27 14:18:39.635 [Debug] : adc_buffer_offset 49152
2023-01-27 14:18:39.635 [Debug] : adc_buffer_offset 53248
2023-01-27 14:18:39.637 [Debug] : adc_buffer_offset 57344
2023-01-27 14:18:39.638 [Debug] : adc_buffer_offset 61440
2023-01-27 14:18:39.638 [Debug] : adc_buffer_offset 61440
2023-01-27 14:18:39.639 [Debug] : adc_buffer_offset 65536
2023-01-27 14:18:39.641 [Debug] : adc_buffer_offset 73728
2023-01-27 14:18:39.643 [Debug] : adc_buffer_offset 81920
2023-01-27 14:18:39.644 [Debug] : adc_buffer_offset 86016
2023-01-27 14:18:39.645 [Debug] : adc_buffer_offset 94208
2023-01-27 14:18:39.647 [Debug] : adc_buffer_offset 102400
2023-01-27 14:18:39.649 [Debug] : adc_buffer_offset 106496
2023-01-27 14:18:39.650 [Debug] : adc_buffer_offset 4096
2023-01-27 14:18:39.651 [Debug] : adc_buffer_offset 8192
2023-01-27 14:18:39.652 [Debug] : adc_buffer_offset 12288
2023-01-27 14:18:39.653 [Debug] : adc_buffer_offset 16384
2023-01-27 14:18:39.654 [Debug] : adc_buffer_offset 20480
2023-01-27 14:18:39.654 [Debug] : adc_buffer_offset 24576
2023-01-27 14:18:39.656 [Debug] : adc_buffer_offset 32768
2023-01-27 14:18:39.658 [Debug] : adc_buffer_offset 36864
2023-01-27 14:18:39.659 [Debug] : adc_buffer_offset 40960
2023-01-27 14:18:39.659 [Debug] : adc_buffer_offset 45056
2023-01-27 14:18:39.661 [Debug] : adc_buffer_offset 49152
2023-01-27 14:18:39.663 [Debug] : adc_buffer_offset 57344
2023-01-27 14:18:39.664 [Debug] : adc_buffer_offset 61440
2023-01-27 14:18:39.665 [Debug] : adc_buffer_offset 65536
2023-01-27 14:18:39.665 [Debug] : adc_buffer_offset 69632
2023-01-27 14:18:39.667 [Debug] : adc_buffer_offset 73728
2023-01-27 14:18:39.668 [Debug] : adc_buffer_offset 77824
2023-01-27 14:18:39.669 [Debug] : adc_buffer_offset 81920
2023-01-27 14:18:39.669 [Debug] : adc_buffer_offset 81920
2023-01-27 14:18:39.671 [Debug] : adc_buffer_offset 90112
2023-01-27 14:18:39.672 [Debug] : adc_buffer_offset 94208
2023-01-27 14:18:39.673 [Debug] : adc_buffer_offset 98304
2023-01-27 14:18:39.673 [Debug] : adc_buffer_offset 98304
2023-01-27 14:18:39.675 [Debug] : adc_buffer_offset 102400
2023-01-27 14:18:39.684 [Debug] : e2010: StopLDevice
В Readme указана версия 1.57.1
Скачано с сайта https://www.lcard.ru/download/lcomp_linux.tgz
Добрый день
Успешно собрал lcomp под linux (debian x64), пытаюсь собрать для orangepi с ОС Orangepi4-lts_3.0.6_debian_bullseye_desktop_xfce_linux5.10.43
Файл Readme прочел, libatomic_ops собрал, атомарные операции в stubs.h раскомментировал.
Получаю следующую ошибку
make -C /lib/modules/5.10.0-18-arm64/build/ M=/home/orangepi/qt/e2010 modules
make[1]: Entering directory '/usr/src/linux-headers-5.10.0-18-arm64'
CC [M] /home/orangepi/qt/e2010/ldevice.o
CC [M] /home/orangepi/qt/e2010/l760.o
CC [M] /home/orangepi/qt/e2010/ldevpciu.o
LD [M] /home/orangepi/qt/e2010/ldevpci.o
CC [M] /home/orangepi/qt/e2010/e2010.o
CC [M] /home/orangepi/qt/e2010/e140.o
CC [M] /home/orangepi/qt/e2010/e440.o
CC [M] /home/orangepi/qt/e2010/e154.o
CC [M] /home/orangepi/qt/e2010/ldevusbu.o
LD [M] /home/orangepi/qt/e2010/ldevusb.o
CC [M] /home/orangepi/qt/e2010/l791.o
CC [M] /home/orangepi/qt/e2010/ldevpcib.o
LD [M] /home/orangepi/qt/e2010/ldevpcibm.o
MODPOST /home/orangepi/qt/e2010/Module.symvers
ERROR: modpost: "__aarch64_swp4_acq" [/home/orangepi/qt/e2010/ldevusb.ko] undefined!
make[3]: *** [/usr/src/linux-headers-5.10.0-18-common/scripts/Makefile.modpost:123: /home/orangepi/qt/e2010/Module.symvers] Error 1
make[3]: *** Deleting file '/home/orangepi/qt/e2010/Module.symvers'
make[2]: *** [/usr/src/linux-headers-5.10.0-18-common/Makefile:1760: modules] Error 2
make[1]: *** [/usr/src/linux-headers-5.10.0-18-common/Makefile:185: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.10.0-18-arm64'
make: *** [Makefile:29: modules] Error 2
Подскажите пожалуйста куда копать?
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск