Считать значение из указателя на указатель в структуре (транзакция SPI) - PullRequest
0 голосов
/ 10 октября 2018

Привет, я пытаюсь прочитать значение * rx_buffer, которое является членом структуры spi_transaction_t в следующем примере.

struct spi_transaction_t {
    [...]
    union {
       void *rx_buffer; //< Pointer to receive buffer, or NULL for no MISO phase. Written by 4 bytes-unit if DMA is used.
    uint8_t rx_data[4]; //< If SPI_USE_RXDATA is set, data is received directly to this variable
    };
};  


//Queue transaction
static void send_lines(spi_device_handle_t spi)
{
    esp_err_t ret;
    int x;
    [...]
    for (x=0; x<6; x++) {
        ret=spi_device_queue_trans(spi, &trans[x], portMAX_DELAY);
        assert(ret==ESP_OK);
    }

}

//Dequeue transaction
static void send_line_finish(spi_device_handle_t spi)
{
    spi_transaction_t *rtrans;
    esp_err_t ret;
    for (int x=0; x<6; x++) {
        ret=spi_device_get_trans_result(spi, &rtrans, portMAX_DELAY);
        assert(ret==ESP_OK);
    }
}

Код из этого примера: https://github.com/espressif/esp-idf/blob/221eced06daff783afde6e378f6f84a82867f758/examples/peripherals/spi_master/main/spi_master_example_main.c#L342

Я сейчас пытаюсь удалить данные из * rx_buffer и записать их в другой буфер.Что-то вроде следующего, но я борюсь с указателем на структуру указателя.

//Dequeue transaction
static void send_line_finish(spi_device_handle_t spi)
{
    spi_transaction_t *rtrans;
    esp_err_t ret;
    int16_t data_buffer[6];

    for (int x=0; x<6; x++) {
        ret=spi_device_get_trans_result(spi, &rtrans, portMAX_DELAY);
        assert(ret==ESP_OK);
        data_buffer[x] = (int16_t**)rtrans->rx_buffer;
    }
}

Редактировать: Документы говорят:

Как правило, данные для передачи в или изустройство будет считываться или записываться в часть памяти, указанную членами rx_buffer и tx_buffer структуры транзакции.Когда DMA включен для передач, эти буферы настоятельно рекомендуются [...]

https://github.com/espressif/esp-idf/blob/master/docs/en/api-reference/peripherals/spi_master.rst

...