基于ZYNQ的开源CANopen协议栈CANFestival移植

1 概述

        CanFestival是一个免费而且开源的CANopen协议栈,较为适合于对CANopen协议栈功能完备性和工作性能要求不高的应用场合。对于功能和性能要求较高的应用,也有很多第三方的商用CANopen协议栈可供购买使用。目前,CanFestival在嵌入式控制(PLC、单片机、ARM等)领域中使用较多。

        本文讲解了CanFestival库的基本架构和原理,针对ZYNQ平台详细介绍了裸机移植的原理和过程。最后通过测试实例,介绍了CanFestival中主要常用功能及相关API函数的使用方法。

CanFestival

2.1 CanFestival介绍

        CanFestival能够运行于多种类型的平台。其源代码基于ANSI-C编写,驱动和例程的编译情况仅取决于具体的编译工具。在目前最新的版本中,提供了适用于多种硬件平台的底层驱动。此外,CanFestival可以在任意类Unix系统下编译和运行,如Linux和FreeBSD。

        CanFestival协议功能完整,完全符合CANopen标准。CanFestival完全支持2002年2月发布的CIA DS-301 V4.02标准,并支持CiA DS302中的简明DFC协议和DS305规范。

        此外,CanFestival为开发者提供了许多工具,以提高开发的便利性。例如,用于生成节点对象字典源代码的对象字典编辑器,以及便于开发者自由配置编译选项的配置脚本。

        CanFestival库所支持的CANopen协议栈功能包括:

  • 主站和从站的NMT网络管理
  • 心跳报文的发送与接收
  • 节点守护报文接收与发送
  • 同步报文接收和发送
  • 支持多个SDO服务器或客户端,可使用快速和分段传输
  • PDO发送与接收、PDO映射
  • 紧急报文的接收和发送
  • 支持简明DFC文件访问
  • 支持LSS设备底层配置协议

2.2 源代码获取

        CanFestival开源库网址为:https://canfestival.org/index.html.en

        源码下载地址:https://canfestival.org/code.html.en

        其中官方主分支:https://hg.beremiz.org/

        另一个非官方分支则由后续的人在此基础之上不断更新完善:https://bitbucket.org/Mongo/canfestival-3-asc

2.3 源代码概述

        通过上述地址所下载的CanFestival的源码解压后的目录如下表所示:

路径

说明

./src

与处理器无关的CANopen协议栈C源码

./include

CANopen协议栈C源码对应的头文件,以及针对不同处理器或操作系统移植时所需要的头文件

./drivers

针对不同处理器或操作系统的移植时的底层驱动(timer和CAN接口)

./example

CanFestival移植到不同处理器或操作系统的实例程序

./objdictgen

使用python编写的图形化对象字典编辑工具,用于为基于CanFestival的具体应用设计相应的对象字典

./doc

说明文档

2.3.1 CANopen协议栈

        ./src中包含了CANopen协议栈实现的源代码,如下图所示。

        包括时间调度管理(timer.c),节点管理(对象字典访问objacces.c、状态机state.c),CANopen协议(服务数据对象sdo.c、过程数据对象pdo.c、同步对象sync.c、紧急事件emcy.c、心跳及节点守护lifegrd.c、自动波特率对象lss.c、网络管理nmtMaster.c和nmtSlave.c、设备配置文件dcf.c)等。

        ./include中包含了与./src 中相对应CANopen协议栈源文件的头文件,如下图所示。

        上述的./src和./include中的文件在移植时不需要作修改。

        上述的源文件和头文件的对应关系及功能描述如下表所示:

./src源文件

./include头文件

功能说明

备注

dcf.c

dcf.h

实现CANopen设备配置文件DCF访问机制

一般不需要使用

emcy.c

emcy.h

实现紧急报文协议

lifegrd.c

lifegrd.h

实现心跳报文、节点守护通信协议

lss.c

lss.h

实现LSS底层配置协议

用于设置节点号和波特率,一般不需要使用

nmtMaster.c

nmtMaster.h

实现主站NMT网络管理通信机制

nmtSlave.c

nmtSlave.h

实现从站NMT网络管理通信机制

objacces.c

objacces.h

实现对象字典访问

pdo.c

pdo.h

实现PDO通信协议

sdo.c

sdo.h

实现SDO通信协议

states.c

states.h

实现CANopen节点状态切换和调度

sync.c

sync.h

实现同步报文通信协议

timer.c

timer.h

实现CANopen协议所涉及的所有定时器的调度和管理

symbols.c

linux系统导出各函数

只用于linux

data.h

定义了协议栈工作时所使用的数据结构

def.h

定义与CANopen协议相关的宏定义

  • 26
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
本节属于《跟朱老师学智能网联汽车开发系列课程》的第2季《智能网联汽车开发核心课程》第4部分的第5个课程,本课程主要讲解CAN总线的2个应用层协议,CANopen和SAE J1939。包括对应的协议族和文档,协议的核心概念和设计理念,思路,用法,以及各自的经典开源项目源码架构分析。 智能网联汽车未来十年最值得期待的风口。综合叠加了电动汽车替代传统燃油汽车、自动驾驶辅助甚至替代人工驾驶、传统汽车座舱升级智能座舱、整车和零部件乃至产业链的国产自主可控化等发展趋势。AI、IoT、云计算、大数据、芯片和半导体、操作系统、5G等国家重点发展的“硬科技”,都和智能网联汽车有很紧密的关系。所以除了传统车企外,涌现了“蔚小理”这样的造车新势力,引入了Tesla这样的鲶鱼,又吸引了华为、百度、大疆、小米这样的中国高科技以及互联网巨头。智能网联汽车相较于传统汽车来说,最大的变化是:整车的核心技术和竞争点从机械技术转向了计算机技术。所以从车企到tire1等汽车产业链上下游,都将注意力转向了“车载计算机及其相关技术”的研究和实践。域控制器、hypervisor、车载以太网、SOME/IP、DoIP、SOA、AGL和QNX、OTA、C-V2X、AutoSAR CP和AP、ROS、SLAM、激光雷达、超声波雷达、毫米波雷达、深度相机、传感器前融合后融合、ADAS、AR-HUD、智能驾驶算法、算力平台、英伟达Xavier和Orin、高通骁龙8155和Ride、华为MDC、地平线征程3和征程5、MobileEye EyeQ5、TI TDA4、 NXP S32G等等,以上列出了一些关心汽车行业的人经常会看到听到的“关键词”。这些都是实现智能网联汽车所需要的关键技术,也是汽车行业工作者形成行业竞争力,试图去理解和分析行业发展趋势的关键技术底蕴。但是客观上智能网联汽车涉及到的技术杂、学科多、内容深,而且本身这些技术都在快速发展演变,这就造成了学习困难、不成体系。这对于传统汽车行业的“老人”,以及有兴趣进入智能汽车行业的“新人”来说,都是很大的障碍和挑战,急需解决方案。本训练营及课程体系就是为解决这个问题。我们将通过系统化的课程,全面覆盖智能网联汽车的“车端”新技术(就是前段中列出的那些关键词),控制深度深入浅出的讲解相关原理和概念、分析相关技术发展趋势。最终目标是希望大家有一定深度的理解智能网联汽车的原理和相关技术,能从整体上认知智能网联汽车这个产品,具备行业趋势的分析研判能力,具备行业上下游之间或者模块与模块之间的沟通能力,帮助大家在智能网联汽车获取核心竞争力,助力个人发展。
### 回答1: 要将LVGL移植ARM Linux,需要进行以下步骤: 1. 获取LVGL库的源代码,并将其编译为ARM架构的目标文件。 2. 在ARM Linux上创建一个应用程序,并将LVGL库链接到该应用程序中。 3. 配置ARM Linux的显示驱动程序,以便与LVGL库兼容。 4. 编写应用程序代码,使用LVGL库创建用户界面。 5. 在ARM Linux上运行应用程序,测试LVGL库的功能和性能。 需要注意的是,LVGL库的移植可能会涉及到一些硬件和软件的细节,因此需要仔细阅读LVGL的文档和ARM Linux的相关文档,以确保移植的成功。 ### 回答2: 当我们想把LVGL移植ARM Linux平台时,应该根据硬件平台的不同选择相应的编译器和交叉编译工具链,并确保系统的配置和环境设置正确无误。 在开始移植LVGL之前,需要了解其中的依赖项和构建流程。LVGL需要构建成一个动态库或静态库之后,才能嵌入到应用程序中并被调用。我们可以通过make命令构建LVGL,也可以使用CMake生成工具构建。 接着,需根据我们硬件平台的情况选择合适的LVGL驱动程序,以保证能够正常运行。LVGL支持众多硬件设备,如触摸屏、LCD等,应该针对要使用的设备编写相应的驱动程序。 在确定了硬件平台以及相应的驱动程序之后,接下来需要在应用程序中调用LVGL库和相关的驱动程序。这通常需要修改应用程序的Makefile或CMakeLists文件,在其中添加相关的库和头文件路径。 最后,一些特殊的应用程序可能需要额外的设置和调整,以保证LVGL在移植过程中的稳定性和良好的运行效果。例如,可能需要进行时间轮询或系统等待,以让LVGL能够正确地响应用户输入事件和组件绘制事件。 总之,将LVGL移植ARM Linux平台需要进行一些大量的工作,包括了解系统架构、硬件平台编译工具链等方面的知识,以及对LVGL的组织架构、构建工具和C API等方面的深入了解。经过适当的学习和实践,我们可以成功地将LVGL移植ARM Linux平台,并让其发挥出良好的效果。 ### 回答3: LVGL是一款功能强大的开源GUI库,它能够帮助我们在不同的嵌入式系统平台上实现漂亮的图形界面。而在ARM Linux系统上进行LVGL移植是一项比较常见的工作,下面将介绍一下移植的步骤和注意事项。 步骤如下: 1.准备工作:安装ARM Linux交叉编译工具链和开发环境等; 2.下载LVGL代码:从官方网站上下载最新版LVGL代码,并选择适合ARM Linux系统的代码版本; 3.编译代码:使用交叉编译工具链对LVGL代码进行编译,生成静态库文件或可执行文件; 4.测试移植效果:将编译好的代码上传到ARM Linux系统中,并在控制台、LCD屏幕等设备上运行程序,测试移植效果; 5.优化及完善:根据实际情况对LVGL代码进行优化和完善,保证其在ARM Linux系统中能够正常运行,并达到预期的效果。 移植LVGL到ARM Linux系统时需要注意以下几点: 1.正确选择LVGL代码版本:根据不同的ARM Linux系统选择合适的LVGL代码版本,以免出现不兼容等问题; 2.准确配置编译环境:正确配置交叉编译工具链和开发环境,避免编译过程中出现问题; 3.掌握GUI开发技术:熟悉GUI开发技术和ARM Linux系统的相关知识,避免在移植过程中出现一些基础性的问题; 4.加强代码优化:尽可能地减小LVGL代码的体积和运行时的内存开销,提高程序运行效率与稳定性。 总之,将LVGL移植ARM Linux系统中需要我们具备一定的技术和知识,但只要掌握好以上几点,就能顺利完成移植工作,并实现漂亮的图形界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MmikerR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值