We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
芯片:NXP-MCXN947 开发板:FRDM-MCXN947 BSP:nxp->mcx->mcxn 工具链:Keil 5, ArmClang V6.21 RT-Thread版本:5.1.0
调用 rt_device_write(can_dev, 0, &msg, sizeof(msg)); 导致阻塞
rt_device_write(can_dev, 0, &msg, sizeof(msg));
在编写CAN外设测评时,简单复制了RT-Thread官方文档提供的CAN示例代码,可以正常发送一帧ID为0x78的CAN数据帧
但是对设备写入函数rt_device_write进行简单的for循环发送的时候却出现了阻塞,第一条写入函数后的代码均无法执行,尝试取消掉for循环,直接在rt_device_write后加入rt_kprintf也同样无法打印任何内容。
5.1.0版本的mcxn提供的bsp文件中drv_can.c中,flexcan_callback函数有部分被注释,尝试取消注释。
drv_can.c
flexcan_callback
并且drv_can.c中的CAN发送函数使用的是NXP提供的FSL库中的阻塞发送函数,推测该函数不能触发发送完成中断。
于是作出如下更改:(红框为原有发送函数,绿框为修改后的函数)
修改后的发送函数确实可以运行至flexcan_callback的kStatus_FLEXCAN_TxIdle分支
kStatus_FLEXCAN_TxIdle
但是rt_device_write(can_dev, 0, &msg, sizeof(msg));仍然有阻塞问题。
发现更改rt-thread/components/drivers/can/can.c中第169行的等待时长可以解决该问题,但是此方法不严谨,不适合作为解决办法。 can.c已经在RT-Thread源代码中存在时间较长,不应有此类问题,推测是MCXN947的bsp中存在某些错误导致,特此提出issue希望RT-Thread官方能协助排查此问题。 同时我也将过程记录下来发在RT-Thread论坛,详见:
rt-thread/components/drivers/can/can.c
can.c
https://club.rt-thread.org/ask/article/ef0ab0d46a298ca5.html
(第一次发issue,如有错误还请见谅🙃)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
环境
芯片:NXP-MCXN947
开发板:FRDM-MCXN947
BSP:nxp->mcx->mcxn
工具链:Keil 5, ArmClang V6.21
RT-Thread版本:5.1.0
现象及复现步骤
调用
rt_device_write(can_dev, 0, &msg, sizeof(msg));
导致阻塞在编写CAN外设测评时,简单复制了RT-Thread官方文档提供的CAN示例代码,可以正常发送一帧ID为0x78的CAN数据帧
但是对设备写入函数rt_device_write进行简单的for循环发送的时候却出现了阻塞,第一条写入函数后的代码均无法执行,尝试取消掉for循环,直接在rt_device_write后加入rt_kprintf也同样无法打印任何内容。
目前已知
第一次排查
5.1.0版本的mcxn提供的bsp文件中
drv_can.c
中,flexcan_callback
函数有部分被注释,尝试取消注释。并且
drv_can.c
中的CAN发送函数使用的是NXP提供的FSL库中的阻塞发送函数,推测该函数不能触发发送完成中断。于是作出如下更改:(红框为原有发送函数,绿框为修改后的函数)
修改后的发送函数确实可以运行至
flexcan_callback
的kStatus_FLEXCAN_TxIdle
分支但是
rt_device_write(can_dev, 0, &msg, sizeof(msg));
仍然有阻塞问题。第二次排查
发现更改
rt-thread/components/drivers/can/can.c
中第169行的等待时长可以解决该问题,但是此方法不严谨,不适合作为解决办法。can.c
已经在RT-Thread源代码中存在时间较长,不应有此类问题,推测是MCXN947的bsp中存在某些错误导致,特此提出issue希望RT-Thread官方能协助排查此问题。同时我也将过程记录下来发在RT-Thread论坛,详见:
https://club.rt-thread.org/ask/article/ef0ab0d46a298ca5.html
(第一次发issue,如有错误还请见谅🙃)
The text was updated successfully, but these errors were encountered: