RTL-SDR считывает информацию о буферной памяти неверно
Когда я запустил коды ниже
/* current buffer location */
mlock(hreadmtx);
buffloc=(sdrstat.fendbuffsize*sdrstat.buffcnt)-(sdr->acq.intg+1)*sdr->nsamp;
unmlock(hreadmtx);
printf("[sdracq] buffsize=%" PRIu64 " buffloc=%" PRIu64 " buffloc%%buffsize=%" PRIu64 "\n", (MEMBUFFLEN*2*RTLSDR_DATABUFF_SIZE), buffloc, buffloc%(MEMBUFFLEN*2*RTLSDR_DATABUFF_SIZE) );
/* acquisition integration */
for (i=0;i<sdr->acq.intg;i++) {
/* get current 1ms data */
rcvgetbuff(&sdrini,buffloc,2*sdr->nsamp,sdr->ftype,sdr->dtype,data);
buffloc+=sdr->nsamp;
}
}
Это показывает что-то вроде
[sdracq] buffsize=163840000 buffloc=25552896 buffloc%buffsize=25552896
где buffloc - это 8-значное значение uint64_t меньше размера buffsize
Как в своих кодах я точно скопировал код выше. Он генерирует что-то вроде 10-значных значений буфера
buffsize=163840000 buffloc=4310602574 bufflocnow=50771968
buffsize=163840000 buffloc=4310604622 bufflocnow=50771968
buffsize=163840000 buffloc=4310606670 bufflocnow=50771968
buffsize=163840000 buffloc=4310608718 bufflocnow=50771968
buffsize=163840000 buffloc=4310610766 bufflocnow=50771968
buffsize=163840000 buffloc=4310612814 bufflocnow=50771968
buffsize=163840000 buffloc=4310614862 bufflocnow=50788352
buffsize=163840000 buffloc=4310616910 bufflocnow=50788352
buffsize=163840000 buffloc=4310618958 bufflocnow=50788352
buffsize=163840000 buffloc=4310621006 bufflocnow=50788352
buffsize=163840000 buffloc=4310623054 bufflocnow=50788352
buffsize=163840000 buffloc=4310625102 bufflocnow=50788352
buffsize=163840000 buffloc=4310627150 bufflocnow=50788352
buffsize=163840000 buffloc=4310629198 bufflocnow=50788352
buffsize=163840000 buffloc=4310631246 bufflocnow=50804736
buffsize=163840000 buffloc=4310633294 bufflocnow=50804736
buffsize=163840000 buffloc=4310635342 bufflocnow=50804736
buffsize=163840000 buffloc=4310637390 bufflocnow=50804736
buffsize=163840000 buffloc=4310639438 bufflocnow=50804736
buffsize=163840000 buffloc=4310641486 bufflocnow=50804736
buffsize=163840000 buffloc=4310643534 bufflocnow=50804736
buffsize=163840000 buffloc=4310645582 bufflocnow=50804736
uint64_t bufflocnow;
mlock(hreadmtx);
bufflocnow = sdrstat.fendbuffsize*sdrstat.buffcnt - sdr->nsamp;
unmlock(hreadmtx);
while( bufflocnow < ( buffloc % (MEMBUFFLEN*2*RTLSDR_DATABUFF_SIZE) ) ){
nanosleep( &ts, NULL );
//printf("buffsize=%" PRIu64 " buffloc=%" PRIu64 " bufflocnow=%" PRIu64 " \n", (MEMBUFFLEN*2*RTLSDR_DATABUFF_SIZE), buffloc, bufflocnow );
mlock(hreadmtx);
bufflocnow = sdrstat.fendbuffsize*sdrstat.buffcnt - sdr->nsamp ;
unmlock(hreadmtx);
}