Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
RT-thread can 接收数据 无法拷贝 读取rt_device_read(candev, ...
发布于 2019-06-06 16:44:02 浏览:2133
订阅该版
RT-thread CAN 提供的驱动文包含 can.c drv_can.c drv_can.c 中 /* save to user fifo */ rt_hw_can_isr(&dev_can1, RT_CAN_EVENT_RX_IND | 0 << 8); can 进行debug 调试发现 调用在文件 can.c 中 void rt_hw_can_isr(struct rt_can_device *can, int event) { switch (event & 0xff) { case RT_CAN_EVENT_RXOF_IND: { rt_base_t level; level = rt_hw_interrupt_disable(); can->status.dropedrcvpkg++; rt_hw_interrupt_enable(level); } case RT_CAN_EVENT_RX_IND: { struct rt_can_msg tmpmsg; struct rt_can_rx_fifo *rx_fifo; struct rt_can_msg_list *listmsg = RT_NULL; #ifdef RT_CAN_USING_HDR rt_int8_t hdr; #endif int ch = -1; rt_base_t level; rt_uint32_t no; rx_fifo = (struct rt_can_rx_fifo *)can->can_rx; RT_ASSERT(rx_fifo != RT_NULL); /* interrupt mode receive */ RT_ASSERT(can->parent.open_flag & RT_DEVICE_FLAG_INT_RX); no = event >> 8; ch = can->ops->recvmsg(can, &tmpmsg, no);这里可以成功的 将can寄存器中的数据 拷贝到tmpmsg 中 if (ch == -1) break; /* disable interrupt */ level = rt_hw_interrupt_disable(); can->status.rcvpkg++; can->status.rcvchange = 1;// 下面的代码 就看不懂了 有链表的操作指导教材吗? if (!rt_list_isempty(&rx_fifo->freelist)) { listmsg = rt_list_entry(rx_fifo->freelist.next, struct rt_can_msg_list, list); rt_list_remove(&listmsg->list); #ifdef RT_CAN_USING_HDR rt_list_remove(&listmsg->hdrlist); if (listmsg->owner != RT_NULL && listmsg->owner->msgs) { listmsg->owner->msgs--; } listmsg->owner = RT_NULL; #endif /*RT_CAN_USING_HDR*/ RT_ASSERT(rx_fifo->freenumbers > 0); rx_fifo->freenumbers--; } else if (!rt_list_isempty(&rx_fifo->uselist)) { listmsg = rt_list_entry(rx_fifo->uselist.next, struct rt_can_msg_list, list); can->status.dropedrcvpkg++; rt_list_remove(&listmsg->list); #ifdef RT_CAN_USING_HDR rt_list_remove(&listmsg->hdrlist); if (listmsg->owner != RT_NULL && listmsg->owner->msgs) { listmsg->owner->msgs--; } listmsg->owner = RT_NULL; #endif } /* enable interrupt */ rt_hw_interrupt_enable(level); if (listmsg != RT_NULL) { rt_memcpy(&listmsg->data, &tmpmsg, sizeof(struct rt_can_msg));// 这里拷贝can 接受到数据 到listmsg 没有执行 level = rt_hw_interrupt_disable(); rt_list_insert_before(&rx_fifo->uselist, &listmsg->list); #ifdef RT_CAN_USING_HDR hdr = tmpmsg.hdr; if (can->hdr != RT_NULL) { RT_ASSERT(hdr < can->config.maxhdr && hdr >= 0); if (can->hdr[hdr].connected) { rt_list_insert_before(&can->hdr[hdr].list, &listmsg->hdrlist); listmsg->owner = &can->hdr[hdr]; can->hdr[hdr].msgs++; } } #endif rt_hw_interrupt_enable(level); } /* invoke callback */ #ifdef RT_CAN_USING_HDR if (can->hdr != RT_NULL && can->hdr[hdr].connected && can->hdr[hdr].filter.ind) { rt_size_t rx_length; RT_ASSERT(hdr < can->config.maxhdr && hdr >= 0); level = rt_hw_interrupt_disable(); rx_length = can->hdr[hdr].msgs * sizeof(struct rt_can_msg); rt_hw_interrupt_enable(level); can->hdr[hdr].filter.ind(&can->parent, can->hdr[hdr].filter.args, hdr, rx_length); } else #endif { if (can->parent.rx_indicate != RT_NULL) { rt_size_t rx_length; level = rt_hw_interrupt_disable(); /* get rx length */ rx_length = rt_list_len(&rx_fifo->uselist)* sizeof(struct rt_can_msg); rt_hw_interrupt_enable(level); can->parent.rx_indicate(&can->parent, rx_length); } } break; } 代码中 提及了HDR 我需要这块的操作说明 如何初始化?
查看更多
12
个回答
默认排序
按发布时间排序
flyboy
2019-06-06
Do my self();
最近我们要重新整理can驱动,以及完善相关文档了,到时候再用can应该就简单很多了
RT-WH
2019-06-08
这家伙很懒,什么也没写!
>最近我们要重新整理can驱动,以及完善相关文档了,到时候再用can应该就简单很多了 ... --- 你好 啥时候能完善呢?我能看到进度吗? 这块卡了好久了 期待
Any
2019-06-14
这家伙很懒,什么也没写!
>最近我们要重新整理can驱动,以及完善相关文档了,到时候再用can应该就简单很多了 ... --- 看到github上,stm32f10x系列的hal库更新了,can相对应的hal库文件更新了。 但是,drv_can.c文件还是对应以前版本的,这个大概什么时候会更新呢?
yqiu
2019-06-14
这家伙很懒,什么也没写!
是的,stm32f1 系列 HAL 更新了,主要目的是为了让 HAL 库下的 CAN API 跟其他的 F4/F7 系列保持一致,这样基于最新 HAL 库开发的 CAN 驱动可以支持所有 stm32 系列芯片,这个 CAN 驱动还有待开发,你也来参与开发吧。
zhangjun
2019-06-14
这家伙很懒,什么也没写!
>你好 啥时候能完善呢?我能看到进度吗? 这块卡了好久了 期待 --- 楼主不要打开 ``` RT-Thread Components → Device Drivers → Enable CAN hardware filter ``` 这个配置,该配置会使能RT_CAN_USING_HDR这个宏,进而在驱动框架中会判断接收的数据是否符合硬件滤波器,如果符合则放到消息队列中,不符合则返回。 但是,不管有没有匹配过滤器,都会触发接收中断,让程序以为接收到了符合过滤器的数据。
Any
2019-06-14
这家伙很懒,什么也没写!
>是的,stm32f1 系列 HAL 更新了,主要目的是为了让 HAL 库下的 CAN API 跟其他的 F4/F7 系列保持一致,这样 ... --- 谢了,能力不足,还是有自知之明的。 祝早日成功。
zhangjun
2019-06-14
这家伙很懒,什么也没写!
>是的,stm32f1 系列 HAL 更新了,主要目的是为了让 HAL 库下的 CAN API 跟其他的 F4/F7 系列保持一致,这样 ... --- 我在修了,f1通信没问题了,f4发出的数据有错误。
zhangjun
2019-06-14
这家伙很懒,什么也没写!
>是的,stm32f1 系列 HAL 更新了,主要目的是为了让 HAL 库下的 CAN API 跟其他的 F4/F7 系列保持一致,这样 ... --- 我在修了,f1通信没问题了,f4发出的数据有错误。
zhangjun
2019-06-14
这家伙很懒,什么也没写!
>是的,stm32f1 系列 HAL 更新了,主要目的是为了让 HAL 库下的 CAN API 跟其他的 F4/F7 系列保持一致,这样 ... --- 我在修了,f1通信没问题了,f4发出的数据有错误。
zhangjun
2019-06-15
这家伙很懒,什么也没写!
[i=s] 本帖最后由 zhangjun 于 2019-6-15 15:10 编辑 [/i] >谢了,能力不足,还是有自知之明的。 >祝早日成功。 --- 1,f4上的can驱动修复了,你可以帮忙测试下。 2,hdr是硬件滤波器相关的,可以把这个屏蔽了。 ``` https://www.rt-thread.org/qa/thread-11790-1-1.html ```
撰写答案
登录
注册新账号
关注者
0
被浏览
2.1k
关于作者
RT-WH
这家伙很懒,什么也没写!
提问
19
回答
53
被采纳
1
关注TA
发私信
相关问题
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
简单两步配置RTT源码阅读环境 vsc+clangd
2
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
3
LVGL使用字库IC芯片显示中文
4
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
5
freemodbus主机在freertos的适配,参考rtthread例程
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部