CANOpen系列教程11_深度分析CanFestival_3架构

  • 分享一个朋友的人工智能教程,零基础!通俗易懂!希望你也加入到人工智能的队伍中来! www.captainbed.net

一、写在前面

  教程上一篇文章《关于Canfestival及对象字典生成工具环境搭建》中我们简单认识了一下Canfestival这套免费开源CANOpen协议的框架。

  那么,本文将会以下载的PDF手册(源码里面也有)为导向,来深入解析Canfestival这套框架。

  本文大概分两部分来讲述:
  1.manual手册概要内容;
  2.解析Canfestival源码;

  本文章收录于【CANOpen系列教程】,在我的博客分类“CANOpen系列教程”也能查找到。

  为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该系列教程也同步更新于微信公众号【EmbeddedDevelop】,关注微信公众号回复【CANOpen系列教程】即可查看。

二、manual手册概要内容

请先下载我们教程上一篇文章《关于Canfestival及对象字典生成工具环境搭建》提到的PDF手册(解压源码,在目录objdictgen\doc下面也有manual_en.pdf手册文档)。

打开PDF手册,我们可以清楚的看到手册共有12章。对于使用STM32开发的初学者来说,相对重要一点的章节有:2, 3, 4, 9这些章节。

为了照顾初学者,这里先把每一章节内容概述一下,后面在重点讲述部分的内容。

2.1 内容概要

第1章Introduction介绍
主要介绍了CanFestival是一个开源(LGPL和GPL) CANopen框架,CanFestival项目的起源及支持。同时,也介绍了什么是CANOpen协议,以及协议相关的规范。

第2章CanFestival特征
1.工具:提供对象字典GUI图形化编辑器、代码生成,以及脚本等配套工具;
2.多平台:库源代码是ANSI标准C,支持多平台编译和开发;
3.CANopen标准:支持DS-301、302、305等标准的CANOpen协议。

第3章How to start如何开始
这一章节其实主要就是对一些环境的要求和配置,及如何获取CanFestival等。

其实,对我我们使用MCU开发的人来说,重要的就是对象字典编辑和生成工具的环境(具体请参看教程上一篇文章《对象字典生成工具环境搭建》)。其它基于Windows、Linux开发的环境,大家可以参考文档配置一下,这里不讲述。

第4章理解Canfestival
主要讲述:理解源代码文件目录划分情况、在应用程序中实现CanFestival以及源文件结构关系、CAN底层驱动接口的调用和实现、对事件调度的实现方法。

本章节内容直接牵涉源代码相关内容,所以说比较重要,下面章节将进一步详解。

第5、6章
这两章节主要是针对Linux、Windows平台的配置和开发相关内容,感兴趣朋友可以认真研究一下,这里不讲述。

第7章
主要讲述源码提供的HCS12例程相关的编译、下载、硬件连接以及演示。这里参考意义也不大,如果你有对应的板卡,可以参考进行演示一下。

第8章例程和测试程序
这一章节讲述了配套提供的一些例程的相关说明。比如TestMasterSlave主从站测试例程中心跳发生器时间为1000毫秒等。

这些说明在源代码中也有,通过查看提供的源代码一目了然。所以,参看价值也不是很大。

第9章开发一个新节点
这一章比较重要,我们开发一个新的节点,就需要编辑其对象字典,那么就需要通过编辑器编辑对象字典并生成代码。

简单的说,这章节的重要内容就是让你学会如何使用这个对象字典编辑器工具

第10章FAQ常见问题
这一章节,初学者能看懂的还建议看下有些问题可能对你有帮助,比如:CanFestival3是否符合DS301 V4.02版本?

第11章文档资源
主要就是一些参考网址。

第12章关于这个项目
不是重点,可以了解一下这些信息。

三、解析Canfestival源码

3.1 源文件目录

解压下载的源码压缩包,会看到如下图文件及文件夹:



我们主要需要的三个.c .h源文件目录:
drivers:底层驱动;
include:.h头文件;
src:.c源代码;

一个对象字典生成工具:
objdictgen:object dictionary generate.

examples:例程,初学者可以参考;

3.2 源代码结构关系及应用程序如何实现

这里有一张源文件的结构关系图,大致就是将源文件按照其作用进行了划分,初学者需要多看多理解。



从图中我们可以看出,将源代码划分成三块。中间的Library库文件我们不会去动它。主要修改左右两边的代码。

左边CAN底层驱动接口(前面我提供过STM32例程)。Target目标接口,如定时器。

右边底部对象字典,我们需要通过工具事先配置好,不需要人为编写。最后就是我们通过调用API函数,实现应用程序。

提示:最右边的英文希望大家理解一下,对初学者有帮助,如打开CAN接口(也可以叫初始化)、初始化定时器……等。

3.3 CAN底层接口实现和要求

我们底层发送要求非阻塞的方式实现,一般我建议跑一个操作系统,加一个队列的方式实现。

需要一个发送线程、一个接收线程,同时需要定时器实现事件的调度。



这一节的内容,对于初学者理解起来相对较难,可以先了解,有一个概念,后面我会结合代码让大家更容易理解其中含义。

四、说明

1.该文档仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号【EmbeddedDevelop】,关注微信公众号回复【CANOpen系列教程】即可查看全系列教程。

五、最后

我的博客:http://www.strongerhuang.com
我的GitHub:https://github.com/EmbeddedDevelop

  我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。

strongerHuang wechat
关注微信公众号,查看更多精彩内容!
本文对你有帮助吗?