Загрузка данных


static void *i2s_thread_in(void *arg)
{
    struct i2s_strm *i2s_stream = (struct i2s_strm *) arg;
    uint32_t block_size;
    uint8_t *buf = NULL;
    uint8_t half_transfer = 1;
    int ret;

    buf = i2s_stream->i2s_buf;
    while (1)
    {
        if(start_stream)
        {
            ret = i2s_buf_read(i2s_dev_rx, buf, &block_size);
            //printf("I2S_READ: %p size %u ret=%d\n",buf,block_size,ret);
            if (ret < 0)
            {
                printf("I2S_IN: Failed to read data: %d\n", ret);
                //break;
            }
            else
            {
                //printf("I2S_IN: Read data size=%u\n",block_size);
                if(half_transfer)
                {
                    BSP_AUDIO_IN_HalfTransfer_CallBack();
                    buf += ZEPHYR_AUDIO_BLOCK_SIZE;
                    half_transfer = 0;
                }
                else
                {
                    BSP_AUDIO_IN_TransferComplete_CallBack();
                    buf = i2s_stream->i2s_buf;
                    half_transfer = 1;
                }
            }
        }
        if (i2s_stream->state != I2S_STREAM_RUNNING)
        {
            printf("Exit i2s_in_thread\n");
            break;
        }
    }
    return NULL;
}

При такой конфигурации система по кругу выполняет этот поток после выполнения звонка. Вот gdb:
Breakpoint 1, i2s_thread_in (arg=0x8001a330 <i2s_strm_pool>, arg@entry=<error reading variable: value has been optimized out>) at /home/vovan/ZEPHYR_RTOS/zephyrproject/zephyr/samples/pjsip/pjproject/pjmedia/src/pjmedia-audiodev/zephyr_portaudio/zephyr_i2s_dev.c:95
95          buf = i2s_stream->i2s_buf;
(gdb) s
100                 ret = i2s_buf_read(i2s_dev_rx, buf, &block_size);
(gdb) s
0x700830c4 in i2s_buf_read (dev=<optimized out>, size=<optimized out>, buf=<optimized out>)
    at /home/vovan/ZEPHYR_RTOS/zephyrproject/zephyr/build_pjsip/zephyr/include/generated/zephyr/syscalls/i2s.h:62
62              return z_impl_i2s_buf_read(dev, buf, size);
(gdb) s
i2s_thread_in (arg=0x8001a330 <i2s_strm_pool>, arg@entry=<error reading variable: value has been optimized out>) at /home/vovan/ZEPHYR_RTOS/zephyrproject/zephyr/samples/pjsip/pjproject/pjmedia/src/pjmedia-audiodev/zephyr_portaudio/zephyr_i2s_dev.c:98
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)
(gdb) s
124             if (i2s_stream->state != I2S_STREAM_RUNNING)
(gdb) s
98              if(start_stream)