feat[can][gd32]: Implement non-blocking send mechanism#10796
feat[can][gd32]: Implement non-blocking send mechanism#10796Rbb666 merged 1 commit intoRT-Thread:masterfrom
Conversation
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
| } | ||
| return freebox; | ||
| } | ||
| rt_ssize_t _can_sendmsg_nonblocking(struct rt_can_device *can, const void *buf) |
| return RT_EOK; | ||
| } | ||
|
|
||
|
|
There was a problem hiding this comment.
Pull Request Overview
This PR implements a non-blocking send mechanism for CAN devices on GD32F5 platforms. The implementation allows CAN message transmission without blocking when transmit mailboxes are full.
- Adds a helper function to check available transmit mailboxes
- Implements non-blocking message transmission with immediate failure when no mailboxes are available
- Integrates the new functionality into the CAN operations structure
| if (CAN_STAT(can_x) & CAN_TSTAT_TME0 != 0U) | ||
| { | ||
| freebox++; | ||
| } | ||
| if (CAN_STAT(can_x) & CAN_TSTAT_TME1 != 0U) | ||
| { | ||
| freebox++; | ||
| } | ||
| if (CAN_STAT(can_x) & CAN_TSTAT_TME2 != 0U) |
There was a problem hiding this comment.
Operator precedence issue / 运算符优先级问题: The bitwise AND operation has lower precedence than the inequality comparison. This will evaluate as CAN_STAT(can_x) & (CAN_TSTAT_TME0 != 0U) which is incorrect. Add parentheses around the bitwise operation. / 按位与运算符的优先级低于不等比较运算符。这会被计算为 CAN_STAT(can_x) & (CAN_TSTAT_TME0 != 0U),这是错误的。需要在按位运算周围添加括号。
| if (CAN_STAT(can_x) & CAN_TSTAT_TME0 != 0U) | |
| { | |
| freebox++; | |
| } | |
| if (CAN_STAT(can_x) & CAN_TSTAT_TME1 != 0U) | |
| { | |
| freebox++; | |
| } | |
| if (CAN_STAT(can_x) & CAN_TSTAT_TME2 != 0U) | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME0) != 0U) | |
| { | |
| freebox++; | |
| } | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME1) != 0U) | |
| { | |
| freebox++; | |
| } | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME2) != 0U) |
| if (CAN_STAT(can_x) & CAN_TSTAT_TME0 != 0U) | ||
| { | ||
| freebox++; | ||
| } | ||
| if (CAN_STAT(can_x) & CAN_TSTAT_TME1 != 0U) | ||
| { | ||
| freebox++; | ||
| } | ||
| if (CAN_STAT(can_x) & CAN_TSTAT_TME2 != 0U) |
There was a problem hiding this comment.
Operator precedence issue / 运算符优先级问题: Same operator precedence issue as above. Add parentheses around the bitwise operation: (CAN_STAT(can_x) & CAN_TSTAT_TME1) != 0U. / 与上面相同的运算符优先级问题。需要在按位运算周围添加括号:(CAN_STAT(can_x) & CAN_TSTAT_TME1) != 0U。
| if (CAN_STAT(can_x) & CAN_TSTAT_TME0 != 0U) | |
| { | |
| freebox++; | |
| } | |
| if (CAN_STAT(can_x) & CAN_TSTAT_TME1 != 0U) | |
| { | |
| freebox++; | |
| } | |
| if (CAN_STAT(can_x) & CAN_TSTAT_TME2 != 0U) | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME0) != 0U) | |
| { | |
| freebox++; | |
| } | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME1) != 0U) | |
| { | |
| freebox++; | |
| } | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME2) != 0U) |
| { | ||
| freebox++; | ||
| } | ||
| if (CAN_STAT(can_x) & CAN_TSTAT_TME2 != 0U) |
There was a problem hiding this comment.
Operator precedence issue / 运算符优先级问题: Same operator precedence issue as above. Add parentheses around the bitwise operation: (CAN_STAT(can_x) & CAN_TSTAT_TME2) != 0U. / 与上面相同的运算符优先级问题。需要在按位运算周围添加括号:(CAN_STAT(can_x) & CAN_TSTAT_TME2) != 0U。
| if (CAN_STAT(can_x) & CAN_TSTAT_TME2 != 0U) | |
| if ((CAN_STAT(can_x) & CAN_TSTAT_TME2) != 0U) |
| { | ||
| RT_ASSERT(can); | ||
|
|
||
| can_trasnmit_message_struct transmit_message; |
There was a problem hiding this comment.
Typo in variable type / 变量类型拼写错误: The type name contains a typo. It should be can_transmit_message_struct instead of can_trasnmit_message_struct. / 类型名称包含拼写错误,应该是 can_transmit_message_struct 而不是 can_trasnmit_message_struct。
| can_trasnmit_message_struct transmit_message; | |
| can_transmit_message_struct transmit_message; |
There was a problem hiding this comment.
官方的编码规范问题,出现过很多次了,需要注意下其他系列是不是也有这个问题,然后从rtt的软件包中统一一下命名

拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
为GD32F5适配can 不阻塞发送
你的解决方案是什么 (what is your solution)
请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up