Привет, я пытаюсь прочитать значение * 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