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

esp_wxyao
Posts: 3
Joined: Sun Apr 03, 2022 9:05 am

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

Postby esp_wxyao » Wed Feb 15, 2023 3:31 am

目前,我使用激光测距传感器和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);

ESP_Dazz
Posts: 308
Joined: Fri Jun 02, 2017 6:50 am

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

Postby ESP_Dazz » Wed Feb 15, 2023 3:54 am

TWAI 所有收到的包都会写进去一个 RX Queue 里, 而且所有发出的包都会先写进一个 TX Queue。RX Queue 和 TX Queue 的大小都可以通过 twai_general_config_t 的 tx_queue_len 和 rx_queue_len 配的。

Who is online

Users browsing this forum: No registered users and 30 guests