RTL-SDR read bufflo c информация неверна - PullRequest
0 голосов
/ 05 февраля 2020

Когда я запускаю коды ниже

/* 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);
}
...