Page 1 of 1

如何更改twai通信接收缓冲区大小

Posted: Wed Feb 15, 2023 3:31 am
by esp_wxyao
目前,我使用激光测距传感器和esp32进行can通信,esp32发送一条读指令给传感器,传感器返回16组距离数值,128个字节。can卡能接收到所有的16组数据,但是esp32只能接收到6组数据,这6组数据有时还不连续。我想这是不是接收缓冲区是不是太小了,所以导致只能接收6组数据,希望大神给分析分析。

void receTask(void *arge)
{
uint8_t id = 0;
twai_message_t receMess;
while (true)
{
ESP_LOGI(TAG, "Rece task");
xSemaphoreTake(rx_sem, portMAX_DELAY); // wait rx_sem
ESP_LOGI(TAG, "IN RECE");

for (int i = 0; i < 16; i++)
{
if (twai_receive(&receMess, pdMS_TO_TICKS(50)) == ESP_OK)
{
if (model_number)
{
id = (uint8_t)(receMess.identifier & 0xFF); // 获取此帧数据ID,ID 为0x200+id,大于16位,所以与0xFF则得到是第几个设备,设备号连续。
ESP_LOGI(TAG, "Index : %d", receMess.data[6]);
Tof_m[id].ID = id;
Tofm_can_Unpack_Data(id, &receMess, totalDist);
}
}
}
xSemaphoreGive(tx_sem);

Re: 如何更改twai通信接收缓冲区大小

Posted: Wed Feb 15, 2023 3:54 am
by ESP_Dazz
TWAI 所有收到的包都会写进去一个 RX Queue 里, 而且所有发出的包都会先写进一个 TX Queue。RX Queue 和 TX Queue 的大小都可以通过 twai_general_config_t 的 tx_queue_len 和 rx_queue_len 配的。