完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前,我使用激光测距传感器和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); |
|
相关推荐
2个回答
|
|
TWAI 所有收到的包都会写进去一个 RX Queue 里, 而且所有发出的包都会先写进一个 TX Queue。RX Queue 和 TX Queue 的大小都可以通过 twai_general_config_t 的 tx_queue_len 和 rx_queue_len 配的。
|
|
|
|
根据您提供的信息,我将分析可能导致ESP32只能接收到6组数据的原因,并提供一些建议。
1. 接收缓冲区大小:您提到的接收缓冲区可能太小,这确实是一个可能的原因。请检查您的ESP32接收缓冲区大小是否足够容纳128个字节的数据。如果不够,请增加缓冲区大小。 2. 数据接收中断处理:请确保您的ESP32在接收到CAN数据时,正确地处理了中断。如果中断处理不当,可能会导致数据丢失或接收不完整。 3. 数据接收超时:请检查您的ESP32在接收数据时是否有超时设置。如果有,请确保超时时间足够长,以便接收完整的16组数据。 4. 数据包丢失:在CAN通信中,数据包可能会因为网络拥塞或其他原因丢失。请检查您的CAN网络是否稳定,以及是否有数据包丢失的情况。 5. 传感器发送数据问题:请确保激光测距传感器发送的数据是正确的,并且没有发送错误或不完整的数据。 为了解决这个问题,您可以尝试以下步骤: 1. 检查并增加接收缓冲区大小,确保可以容纳128个字节的数据。 2. 检查ESP32的CAN中断处理代码,确保在接收到数据时正确处理。 3. 如果有超时设置,请调整超时时间,确保足够长以接收完整的数据。 4. 检查CAN网络的稳定性,确保没有数据包丢失。 5. 检查激光测距传感器的数据发送逻辑,确保发送的数据是正确的。 6. 在接收数据的过程中,添加一些调试信息,以便更好地了解数据接收过程中可能出现的问题。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多的代码和信息,以便进一步分析。 |
|
|
|
只有小组成员才能发言,加入小组>>
528浏览 6评论
438浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
425浏览 5评论
422浏览 4评论
398浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-7 15:27 , Processed in 0.908666 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号