CANopen学习记录(三)
现在开始学习使用如何使用canfestival去移植CANopen。直接去CANopen的官网去下载https://canfestival.org/code.html.en或者GitHub - ljessendk/CanFestival · GitHub。有时候官方下载不了挂梯子也没有用真的是恶心(一)开始移植Canfestival源码下面我使用了STM32CubeMX创建了一个新的工程将从github上面下载的canfestival源码下的所有被圈到的源文件和头文件全部放到新建的工程里面。最终大概是这个样子至此和CANopen所有相关的代码都添加进工程里面了接下来我们需要开始修改源码去适配CANopen。(1)报错..\Canfestival\Inc\config.h(34): error: #5: cannot open source input file avr/io.h: No such file or directory在config.h文件中把下面图片我28~47行全屏蔽掉(2)报错..\Canfestival\Inc\applicfg.h(29): error: #5: cannot open source input file avr/interrupt.h: No such file or directory把所有涉及到avr/interrupt.h文件全部屏蔽掉(3)报错..\Canfestival\Inc\objdictdef.h(99): error: #3092: anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions是因为编码器版本太旧导致的在魔术棒-Target下替换更新版本的编译器即可。(4)报错CANopen\CANopen.axf: Error: L6218E: Undefined symbol start_and_seek_node (referred from dcf.o).和CANopen\CANopen.axf: Error: L6218E: Undefined symbol start_node (referred from dcf.o).是因为编译器不支持inline,在其前面添加static即可决绝(5)报错CANopen\CANopen.axf: Error: L6218E: Undefined symbol canSend (referred from emcy.o).是因为你没有支持CAN控制器需要在STM32CubeMx中添加CAN控制器有可能会出现STM32CubeMX生成代码后编译发现canfestival里面自带的CAN.h文件与STM32CubeMx生成的冲突了。修改修改一下文件名。有些工程生成的配置全部集成到main.c文件里面了这种情况没有出现冲突就不需要改了。目前我的工程是没有出现冲突的然后在工程里面添加canfestival.c文件在文件中添加如下内容#include stm32f1xx_hal.h #include canfestival.h #include testslave.h #include can.h #include timerscfg.h extern CAN_HandleTypeDef hcan; CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint8_t CanFestival_Can_Init(void) { CAN_FilterTypeDef sFilterConfig; /* Configure the CAN Filter */ sFilterConfig.FilterBank 0; sFilterConfig.FilterMode CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale CAN_FILTERSCALE_32BIT; sFilterConfig.FilterIdHigh 0x0000; sFilterConfig.FilterIdLow 0x0000; sFilterConfig.FilterMaskIdHigh 0x0000; sFilterConfig.FilterMaskIdLow 0x0000; sFilterConfig.FilterFIFOAssignment CAN_RX_FIFO0; sFilterConfig.FilterActivation ENABLE; sFilterConfig.SlaveStartFilterBank 14; if (HAL_CAN_ConfigFilter(hcan, sFilterConfig) ! HAL_OK) { /* Filter configuration Error */ Error_Handler(); } /* Start the CAN peripheral */ if (HAL_CAN_Start(hcan) ! HAL_OK) { /* Start Error */ Error_Handler(); } /* Activate CAN RX notification */ if (HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING) ! HAL_OK) { /* Notification Error */ Error_Handler(); } /* Configure Transmission process */ return 0; } /** * brief Rx Fifo 0 message pending callback in non blocking mode * param CanHandle: pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * retval None */ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *CanHandle) { Message RxMSG ; HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, RxHeader, RxMSG.data); RxMSG.cob_id (uint16_t)(RxHeader.StdId); if( RxHeader.RTR CAN_RTR_REMOTE ) { RxMSG.rtr 1; } else { RxMSG.rtr 0; } RxMSG.len RxHeader.DLC; canDispatch(TestSlave_Data, (RxMSG)); } uint8_t canSend(CAN_PORT notused, Message *message) { CanTxMsg TxMessage; uint32_t TxMailbox 0; TxHeader.DLC message-len; memcpy(TxMessage.Data, message-data, message-len); TxHeader.IDE CAN_ID_STD; TxHeader.StdId message-cob_id; TxHeader.RTR (message-rtr CAN_RTR_DATA) ? 0 : 2; while(( HAL_CAN_AddTxMessage(hcan,TxHeader,TxMessage.Data,TxMailbox)!HAL_OK)) { return 0; } return 1; } void setTimer(TIMEVAL value) { TIM2-ARR TIM2-CNT value; } TIMEVAL getElapsedTime(void) { return TIM2-CNT; }#ifndef __CAN_CANFESTIVAL__ #define __CAN_CANFESTIVAL__ #include applicfg.h #include stdint.h typedef struct { uint32_t StdId; /*! Specifies the standard identifier. This parameter can be a value between 0 to 0x7FF. */ uint32_t ExtId; /*! Specifies the extended identifier. This parameter can be a value between 0 to 0x1FFFFFFF. */ uint8_t IDE; /*! Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of ref CAN_identifier_type */ uint8_t RTR; /*! Specifies the type of frame for the message that will be transmitted. This parameter can be a value of ref CAN_remote_transmission_request */ uint8_t DLC; /*! Specifies the length of the frame that will be transmitted. This parameter can be a value between 0 to 8 */ uint8_t Data[8]; /*! Contains the data to be transmitted. It ranges from 0 to 0xFF. */ } CanTxMsg; // --------- to be called by user app --------- void initTimer(void); UNS8 canSend(CAN_PORT notused, Message *m); UNS8 canChangeBaudRate(CAN_PORT port, char* baud); uint8_t CanFestival_Can_Init(void); #endif如果最后只剩下一个报错../Canfestival/Src/canfestival.c(3): error: testslave.h file not found说明移植成功了这个testslave.h是在配置对象字典的时候生成的。(二)生成对象字典前面编译只剩下一个报错了这个报错可能是确实对象字典导致的https://www.python.org/ftp/python/2.7.15/python-2.7.15.amd64.msiwxPython2.8-win64-unicode-2.8.12.1-py27.exePython和wxpython(Python的图形界面)安装按照默认的方式安装即可。上面是这两个软件的下载链接。上面的两个软件都安装完成后就到CanFestival-master-objdictgen目录下解压Gnosis_Utils-current.tar.gz这个压缩包。Gnosis_Utils-current目录下有gnosis目录将这个文件夹拷贝到CanFestival-master-objdictgen目录下。完成后双击objdictedit.py文件打开软件。下面是安装过程踩到的坑(1)打开objdictedit.py 报错n objdictedit.py install Traceback (most recent call last): File objdictedit.py, line 24, in moduleimport wx File C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\__init__.py, line 45, in modulefrom wx._core import *File C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py, line 4, in moduleimport _core_ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。这种情况是因为安装的Python版本和wxpython版本不匹配导致的刚刚开始我安装的是Python2.7.10和wxPython2.8-win64-unicode-2.8.12.1-py27。打开软件会闪退有的人的电脑安装这两个版本就可以。可能是不同的Window版本对于的Python版本也有差异导致的。遇到这种情况大概率是Python版本的问题或者是Python版本是对于的你的电脑的环境变量里面没有填Python的路径添加进去导致的。(2)错误: class wx. core PyAssertionError: Ct assertion Assert failure faled at. Mlsrcmswfontcpp (647) in waNativeFontinfo:Setfamiy0:invalid font family遇到这种情况是因为wxpython版本导致的可能是版本太新了重新安装一下旧的版本尝试一下一般都可以解决。上面的问题都解决之后下面我们开始创建对象字典去简单测试把这里的变量名修改一下即可。目前已经编译通过了目前我手上还没有测试条件等待我的USB转CAN到了之后再补一篇文档吧

相关新闻

驯服归因方法系列-第一篇-用“建构主义“驯服夏普利值(shapley values)——从认知科学到工业归因

驯服归因方法系列-第一篇-用“建构主义“驯服夏普利值(shapley values)——从认知科学到工业归因

驯服归因方法系列-第一篇-用“建构主义“驯服夏普利值(shapley values)——从认知科学到工业归因[TOC](驯服归因方法系列-第一篇-用“建构主义“驯服夏普利值(shapley values)——从认知科学到工业归因)驯服归因方法系列-第二篇-因…

2026/7/13 15:52:37阅读更多 →
如何免费解锁Wand专业版:简单三步实现无限游戏体验终极指南

如何免费解锁Wand专业版:简单三步实现无限游戏体验终极指南

如何免费解锁Wand专业版:简单三步实现无限游戏体验终极指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你是否厌倦了Wand&#xff…

2026/7/13 15:47:35阅读更多 →
终极Wand增强工具:3种简单方案永久解锁游戏修改体验

终极Wand增强工具:3种简单方案永久解锁游戏修改体验

终极Wand增强工具:3种简单方案永久解锁游戏修改体验 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer WandEnhancer是一款专注于本地客户…

2026/7/13 15:47:35阅读更多 →
发顶刊缺数据?看云克隆 ELISA 如何支撑 ACS Nano 级研究

发顶刊缺数据?看云克隆 ELISA 如何支撑 ACS Nano 级研究

顶刊数据背后的“隐形功臣”:从 ACS Nano 研究看 ELISA 的精准支撑在生命科学研究的深水区,一篇能够登上《ACS Nano》这类顶级期刊的论文,往往不仅依赖于精妙的实验设计或新颖的材料合成,更离不开底层检测数据的坚实支撑。近期&am…

2026/7/13 16:47:41阅读更多 →
光源色温偏差500K,AI质检的色差检测会偏多少?

光源色温偏差500K,AI质检的色差检测会偏多少?

在工业质检、印刷、纺织、电子产品外观检测等领域,基于机器视觉的AI色差检测系统正被广泛应用。这类系统的核心原理是通过工业相机捕捉物体在标准光源下的颜色信息,再与标准色板或CAD数据进行比对,从而判断产品颜色是否合格。然而&#xff0c…

2026/7/13 16:47:41阅读更多 →
Vulkan进阶系列14 - Vulkan 1.3 核心化扩展一览

Vulkan进阶系列14 - Vulkan 1.3 核心化扩展一览

扩展名称 详细含义 应用场景 VK_KHR_copy_commands2 提供可扩展结构的拷贝命令接口,使copy/blit/copy buffer/image等命令更加统一和可扩展 资源拷贝、纹理上传、GPU资源迁移 VK_KHR_dynamic_rendering 允许不依赖Re

2026/7/13 16:47:41阅读更多 →
如何用自适应二值化解决反光导致的OCR识别失败?

如何用自适应二值化解决反光导致的OCR识别失败?

在服装生产、仓储管理和零售盘点中,通过OCR(光学字符识别)技术自动读取服装标签上的信息(如款号、尺码、成分、价格等)已成为提升效率的关键。然而,实际场景中一个普遍且棘手的问题是:标签表面的…

2026/7/13 16:47:41阅读更多 →
ino性能优化:加速Arduino项目构建的7个实用技巧

ino性能优化:加速Arduino项目构建的7个实用技巧

ino性能优化:加速Arduino项目构建的7个实用技巧 【免费下载链接】ino Command line toolkit for working with Arduino hardware 项目地址: https://gitcode.com/gh_mirrors/in/ino 在Arduino开发过程中,项目构建速度直接影响开发效率。本文将分享…

2026/7/13 16:47:41阅读更多 →
终极性能优化:DeepSeek-R1-Distill-Llama-8B的AWQ量化策略详解

终极性能优化:DeepSeek-R1-Distill-Llama-8B的AWQ量化策略详解

终极性能优化:DeepSeek-R1-Distill-Llama-8B的AWQ量化策略详解 【免费下载链接】DeepSeek-R1-Distill-Llama-8B_rai_1.7.1_npu_16K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/DeepSeek-R1-Distill-Llama-8B_rai_1.7.1_npu_16K 想要在AMD NPU硬件上获…

2026/7/13 16:42:41阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/13 4:47:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/13 4:52:09阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →