Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CAN总线
关于CAN驱动框架的一些问题
发布于 2017-08-24 18:17:54 浏览:4921
订阅该版
最近在研究CAN驱动,但是最终还是没有将stm32f10x中的can驱动部分过滤器编号相关代码捋清楚,后改将过滤器编号交由用户层去指定分配,这样绕过了不太明白的过滤器分配相关代码,功能也算跑起来了。 但是还有一些疑问: 1. 在CAN驱动框架文件的readme中写道”如果使用硬件过滤,则开启RT_CAN_USING_HDR, maxhdr 为Can控制器过滤表的数量“,但是不定义RT_CAN_USING_HDR照样可以使用硬件过滤器,反而代码量小了逻辑简单了些。是哪里用的不对吗? 2. 水平有限,所以感觉过滤器计算分配相关逻辑有些难,能否简化。 3. 如下代码为什么会有actived变量,要用过滤器不都是要激活吗,要用但是又不激活是什么场景? ```struct rt_can_filter_config { rt_uint32_t count; rt_uint32_t actived; struct rt_can_filter_item *items; };```
查看更多
6
个回答
默认排序
按发布时间排序
Aubr.Cool
2017-08-25
这家伙很懒,什么也没写!
RT_CAN_USING_HDR 使用这个宏,可以在驱动层上开启多线程接收,每个线程可以挂在一个hdrno上,这样一旦收到一个hdrno号的消息,就能立即唤醒等待的线程。 如上所说,actived的作用是,过滤器可以开启,也可以关闭,适用于动态开启关闭过滤器的情况。 这个硬件过滤器的程序,逻辑,是有点复杂,也有点乱,主要是为了能在用户层给硬件过滤器实现统一的接口,屏闭底层硬件的细节,这样就能在多种CAN控制器上实现代码统一。 怎么能简化一下逻辑,规范一下接口,大家可以一块讨论一下。 对bxcan的过滤器接口,大概是这样定义的 ``` struct stm_bxcanfiltermap { rt_uint32_t id32mask_cnt;//32位标识符屏闭过滤器数量 rt_uint32_t id32bit_cnt; //32位标识符列表过滤器数量 rt_uint32_t id16mask_cnt; //16位标识符屏闭过滤器数量 rt_uint32_t id16bit_cnt; //16位标识符列表过滤器数量 }; struct stm_bxcanfilter_masks { rt_uint32_t id32maskm[BX_CAN_FILTER_MAX_ARRAY_SIZE]; // 可用的32位标识符屏闭过滤器掩码 rt_uint32_t id32bitm[BX_CAN_FILTER_MAX_ARRAY_SIZE];//可用的32位标识符列表过滤器掩码 rt_uint32_t id16maskm[BX_CAN_FILTER_MAX_ARRAY_SIZE]; //可用的16位标识符屏闭过滤器掩码 rt_uint32_t id16bitm[BX_CAN_FILTER_MAX_ARRAY_SIZE];// //可用的16位标识符列表过滤器掩码 rt_uint32_t id32maskshift[2];// 32位标识符屏闭过滤器起始偏移 每个对应一个FIFO FIFO0 FIFO1 rt_uint32_t id32bitshift[2];//32位标识符列表过滤器起始偏移 rt_uint32_t id16maskshift[2];// 16位标识符屏闭过滤器起始偏移 rt_uint32_t id16bitshift[2];// 16位标识符列表过滤器起始偏移 }; struct stm_bxcan { CAN_TypeDef *reg; void *mfrbase; IRQn_Type sndirq; IRQn_Type rcvirq0; IRQn_Type rcvirq1; IRQn_Type errirq; struct stm_bxcanfilter_masks filtermask; rt_uint32_t alocmask[BX_CAN_FILTER_MAX_ARRAY_SIZE]; //已分配的过滤器索引的掩码,每一位对应一个过滤器 const rt_uint32_t filtercnt; const rt_uint32_t fifo1filteroff; const struct stm_bxcanfiltermap filtermap[2];//每个元素对应一个FIFO0 FIFO1 struct rt_can_hdr *hdrhead; }; ``` bxcan.c实现了对过滤器的管理简单说明,bxcan共有两个过滤器FIFO, FIFO0 和FIFO1 为了方便管理把两个FIFO在软件上合并成一个,每个过滤器对应一个索引值,FIFO1索引值在原有的基础上统一加上一个偏移,这个偏移值为FIFO0的索引值的最大值。 最终过滤器的排列方式如下: id32mask0个32位屏闭过滤器 FIFO0 id32bit0个32位列表过滤器 id16mask0个16位屏闭过滤器 id16bit0个16位列表过滤器 id32mask1个32位屏闭过滤器 FIFO1 id32bit1个32位列表过滤器 id16mask1个16位屏闭过滤器 id16bit1个16位列表过滤器
emlsyx
2017-08-28
这家伙很懒,什么也没写!
[s:154] 围观
emlslxl
2017-08-28
这家伙很懒,什么也没写!
感谢Aubr.Cool的回复,我会按照你的提示重新理解一下示例代码,有好的想法再一起讨论。
Cold
2019-07-15
这家伙很懒,什么也没写!
>RT_CAN_USING_HDR 使用这个宏,可以在驱动层上开启多线程接收,每个线程可以挂在一个hdrno上,这样一旦收到 ... --- 不错
xangelwu
2019-08-26
这家伙很懒,什么也没写!
跟了半天代码没太弄明白这里,看了说明终于清楚些了
撰写答案
登录
注册新账号
关注者
0
被浏览
4.9k
关于作者
emlslxl
这家伙很懒,什么也没写!
提问
1
回答
7
被采纳
0
关注TA
发私信
相关问题
1
我也来传一个CANOpen移植,RTT+STM32F107+CanOpenNode
2
谁有STM32裸跑的CANopen程序啊???
3
CAN驱动程序框架
4
CAN驱动接口如何规范一下
5
RTT无法进入线程.Cannot access Memory
6
编译提示arm-none-eabi/bin/ld: cannot find crt0.o: No such file o
7
rtt 2.1.0 正式版 mdk4 bsp/stm32 编译canapp.c错误
8
STM32F10XCAN驱动使用的问题
9
2.1版本stm32f10x分支bxcan驱动波特率设置的bug
10
rtthread2.1.0下,找不到can1设备
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部