Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CANopen_canfestival
canfestival从站测试NMT节点切换状态功能时遇到问题
发布于 2025-01-15 16:27:29 浏览:21
订阅该版
在用canfestival做从节点NMT状态切换时遇到了问题,请教各位大佬。 大致背景说明: 1、参考canfestival包里的例程master402源码,修改成从站TestSlave。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/9a2f867604383a9c052598ff16f25b00.png) 2、测试板卡芯片STM32F407作为从站,NodeID = 2。为了最大程度简化功能目前从站只配置了心跳报文,5秒一次心跳(0x1388 = 5000 ms)。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/37651d6107553e86ecfeea1a733dc136.png) 3、PC作为主站,使用CANPro软件收发报文,并且板卡上电运行后可以正常收到每隔5秒的心跳报文。 **(顺便请教,下图中打印信息中间夹杂了一些不完整的字符是什么原因?)** ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/7f07ce4a4370bd019deda2cd402ebd79.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/aab9078ecf9e1be434b2f9a6792bc2ed.png.webp) 4、部分切换功能可以成功: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/879eae0838da619303c62558561d9119.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/fad72424b3573e4043ba7e43d99a8e22.png) 5、rt-thread版本:4.1.0 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/597b2279b32c8d8718726c5d15923ffe.png) 6、之前开启了硬件滤波器HDR测试遇到了其他问题,目前暂时关闭了HDR。 **问题:** **其他大部分的状态切换都会报不一样的错误,最常见的错误为以下两种。** 1、从Stop状态切到preOperational状态时,报错:(obj != object) assertion failed at function:rt_object_init, line number:358 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/f730b1a3267164dcc3039cee1e4ca908.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/59b6fd62e9944628b46343f9325d8139.png) 2、从preOperational状态切到Operational状态时,报错:thread: stack overflow ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/793ba4d587243d6557a6cf3ad48649e7.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250115/a2a1bd7aa8fdbc87bfa6b18b5af7da95.png)
查看更多
1
个回答
默认排序
按发布时间排序
NoneKnowsMe
5小时前
这家伙很懒,什么也没写!
补充一下: 打印信息都是在canopen_callback.c里实现的,根据打印信息可以看到从节点已经收到报文并调用了canDispatch,跳转到了指定的callback函数成功执行了打印代码。callback函数已经执行成功了为什么还会出现其他报错? ```c /* This file is part of CanFestival, a library implementing CanOpen Stack. Copyright (C): Edouard TISSERANT and Francis DUPIN See COPYING file for copyrights details. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include
#include "canfestival.h" #include "TestSlave_od.h" #include "canopen_callback.h" #include "TestSlave_canopen.h" /*****************************************************************************/ void TestSlave_heartbeatError(CO_Data* d, UNS8 heartbeatID) { rt_kprintf("heartbeatError %d\n", heartbeatID); } void TestSlave_initialisation(CO_Data* d) { rt_kprintf("canfestival enter initialisation state\n"); } void TestSlave_preOperational(CO_Data* d) { rt_thread_t tid; rt_kprintf("canfestival enter preOperational state\n"); tid = rt_thread_create("co_cfg", canopen_start_thread_entry, RT_NULL, 1024, 12, 2); if(tid == RT_NULL) { rt_kprintf("canfestival config thread start failed!\n"); } else { rt_thread_startup(tid); } } void TestSlave_operational(CO_Data* d) { rt_kprintf("canfestival enter operational state\n"); } void TestSlave_stopped(CO_Data* d) { rt_kprintf("canfestival enter stop state\n"); } void TestSlave_post_sync(CO_Data* d) { } void TestSlave_post_TPDO(CO_Data* d) { } void TestSlave_storeODSubIndex(CO_Data* d, UNS16 wIndex, UNS8 bSubindex) { /*TODO : * - call getODEntry for index and subindex, * - save content to file, database, flash, nvram, ... * * To ease flash organisation, index of variable to store * can be established by scanning d->objdict[d->ObjdictSize] * for variables to store. * * */ rt_kprintf("storeODSubIndex : %4.4x %2.2x\n", wIndex, bSubindex); } void TestSlave_post_emcy(CO_Data* d, UNS8 nodeID, UNS16 errCode, UNS8 errReg, const UNS8 errSpec[5]) { rt_kprintf("received EMCY message. Node: %2.2x ErrorCode: %4.4x ErrorRegister: %2.2x\n", nodeID, errCode, errReg); } ```
撰写答案
登录
注册新账号
关注者
0
被浏览
21
关于作者
NoneKnowsMe
这家伙很懒,什么也没写!
提问
4
回答
2
被采纳
0
关注TA
发私信
相关问题
1
canfestival怎么实现单独对每个从机进行配置
2
bootloader 里面不能运行 canfestiavl
3
CanFestvial(CanOpen)调试时遇到问题
4
移植CAN festival相关问题?
5
菜鸟也出把力 RT-Thread+CanOpen(开源的CanFestival)
6
最好的开源PLC/HMI开发平台(Beremiz软件平台)
7
CANfestival_Canopen 协议问题
8
drv_can.c 和can_rtthread.c啥关系
9
canfestival跑起来后提示驱动器心跳包超时!
10
CANFestival使用困扰
推荐文章
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
RttreadV5.10上,GD32F450Z RTC时间显示问题
2
rt-smart启动流程分析
3
EtherKit快速上手PROFINET
4
RTThread USB转串口无法接收数据
5
HC32F4A0 SD卡挂载及热插拔的实现
热门标签
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
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部