Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32F103
drv_can.c_CAN设备驱动
SDK版本5.1.0,使能CAN组件,硬件过滤器,在can.c中hdr提示未初始化告警
发布于 2024-09-24 16:55:41 浏览:177
订阅该版
提示告警信息: ``` ../rt-thread/components/drivers/can/can.c:863:17: warning: 'hdr' may be used uninitialized in this function [-Wmaybe-uninitialized] ``` can.c头文件信息: ```c include
include
include
``` can.h头文件信息: ```c include
include
``` 源文件函数代码如下: ```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); 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)); level = rt_hw_interrupt_disable(); rt_list_insert_before(&rx_fifo->uselist, &listmsg->list); #ifdef RT_CAN_USING_HDR hdr = tmpmsg.hdr_index; 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); if (rx_length) { 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); if (rx_length) { can->parent.rx_indicate(&can->parent, rx_length); } } } break; } case RT_CAN_EVENT_TX_DONE: case RT_CAN_EVENT_TX_FAIL: { struct rt_can_tx_fifo *tx_fifo; rt_uint32_t no; no = event >> 8; tx_fifo = (struct rt_can_tx_fifo *) can->can_tx; RT_ASSERT(tx_fifo != RT_NULL); if ((event & 0xff) == RT_CAN_EVENT_TX_DONE) { tx_fifo->buffer[no].result = RT_CAN_SND_RESULT_OK; } else { tx_fifo->buffer[no].result = RT_CAN_SND_RESULT_ERR; } rt_completion_done(&(tx_fifo->buffer[no].completion)); break; } } } ``` 看到论坛里面这种问题一般是没有添加对应的头文件引起的,试了几个都不行,不知道是哪的原因
查看更多
1
个回答
默认排序
按发布时间排序
用户名由3_15位
2024-09-25
这家伙很懒,什么也没写!
- 驱动程序需要更新,拉取驱动源码看看
撰写答案
登录
注册新账号
关注者
0
被浏览
177
关于作者
随风入夜
这家伙很懒,什么也没写!
提问
4
回答
2
被采纳
0
关注TA
发私信
相关问题
1
STM32F103RCT6 串口接收数据不正确
2
microPython的工程同步总是不行
3
RT-THREAD 串口接收数据问题
4
晶联讯19264液晶屏字库,可以读取字母、字符和数字,但是汉字读取显示错误
5
fal软件包如何在f103rct6上使用
6
新手“RT-Thread Settings”创建看门狗的时候后编译不通过的问题
7
大神们,rt-thread启用WDT了,但是还是没启动,怎么办?
8
为什么IWDG设置分频为4并且reload设置为0xFFF的时候串口没有打印了?
9
CMSIS-DAP烧录STM32F103C8T6出错
10
RTT的启动时长大概是多少毫秒?
推荐文章
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部