Когда я запускаю коды ниже
/* 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
где bufflo c на на 8-ди git uint64_t меньше размера буфера
Как в моих собственных кодах я точно скопировал код выше. Он генерирует что-то вроде 10-di git bufflo c значения
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);
}