打印

GD32H757,CANFD数据接收,如何用多个邮箱缓冲数据,防止中断来不及处理,数据被覆盖。

[复制链接]
2475|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
swpub|  楼主 | 2024-12-17 08:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD32H757,CANFD数据接收,如何用多个邮箱缓冲数据,防止中断来不及处理,数据被覆盖。目前看只能用1个邮箱来接收,来不及处理数据会被覆盖。

使用特权

评论回复
沙发
stormwind123| | 2024-12-19 14:33 | 只看该作者
考虑使用循环缓冲区(Circular Buffer)来存储接收到的消息。

使用特权

评论回复
板凳
probedog| | 2024-12-19 16:26 | 只看该作者
在中断处理函数中或主程序中,定期监控缓冲区的状态。
如果缓冲区即将满,则及时处理或丢弃旧数据,以防止新数据被覆盖。

使用特权

评论回复
地板
classroom| | 2024-12-19 20:26 | 只看该作者
尽量减少中断处理函数中的复杂操作,提高中断处理的效率。
可以考虑将复杂的数据处理操作放在主程序中异步处理。

使用特权

评论回复
5
swpub|  楼主 | 2024-12-20 08:33 | 只看该作者
stormwind123 发表于 2024-12-19 14:33
考虑使用循环缓冲区(Circular Buffer)来存储接收到的消息。

看文档不支持FIFO,如何缓冲?

使用特权

评论回复
6
Amazingxixixi| | 2024-12-27 15:31 | 只看该作者
通常是缓存。

使用特权

评论回复
7
l1uyn9b| | 2025-1-10 13:23 | 只看该作者
在 GD32H757 中使用 CANFD 接收数据时,如果只使用一个邮箱(FIFO)来接收数据,可能会导致数据被覆盖的问题,尤其是在高数据速率或高负载情况下。

使用特权

评论回复
8
cen9ce| | 2025-1-10 14:28 | 只看该作者
GD32H757 的 CANFD 控制器支持多个 FIFO 邮箱(例如 FIFO0 和 FIFO1),可以通过配置多个 FIFO 来接收数据,从而分散数据负载。

使用特权

评论回复
9
y1n9an| | 2025-1-10 15:31 | 只看该作者
启用多个 FIFO:在 CANFD 初始化时,配置多个 FIFO 邮箱。例如,使用 FIFO0 和 FIFO1 分别接收不同 ID 范围的数据。

使用特权

评论回复
10
p0gon9y| | 2025-1-10 17:09 | 只看该作者
使用 CANFD 的过滤器功能,将不同 ID 范围的数据分配到不同的 FIFO 中。例如,将 ID 0x1000x1FF 的数据分配到 FIFO0,将 ID 0x2000x2FF 的数据分配到 FIFO1。每个 FIFO 可以设置不同的深度(例如 16 个消息),以增加缓冲能力。

使用特权

评论回复
11
lamanius| | 2025-1-10 18:15 | 只看该作者
为了进一步减少中断处理的开销,可以使用 DMA 来接收 CANFD 数据。GD32H757 的 CANFD 控制器支持 DMA 传输,可以将 FIFO 中的数据直接传输到内存中。

使用特权

评论回复
12
tax2r6c| | 2025-1-11 08:30 | 只看该作者
如果硬件FIFO和DMA仍然无法满足需求,可以在软件层面增加缓冲区。例如,使用环形缓冲区来存储接收到的数据。

使用特权

评论回复
13
lix1yr| | 2025-1-11 10:05 | 只看该作者
使用多个 FIFO 邮箱,通过配置多个 FIFO 和过滤器,分散数据负载。

使用特权

评论回复
14
su1yirg| | 2025-1-11 11:48 | 只看该作者
使用 DMA 接收数据,减少中断处理的开销,提高数据接收效率。

使用特权

评论回复
15
g0d5xs| | 2025-1-11 14:20 | 只看该作者
增加软件缓冲区,通过环形缓冲区进一步扩展数据缓冲能力。

使用特权

评论回复
16
w2nme1ai7| | 2025-1-11 19:11 | 只看该作者
配置 DMA 通道,将 CANFD FIFO 的数据寄存器(CANFD_RXFIFO0 或 CANFD_RXFIFO1)映射到内存缓冲区

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝