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

描述

1写在前面

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

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

本文大概分两部分来讲述:

1.manual手册概要内容;

2.解析Canfestival源码;

2

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章关于这个项目

不是重点,可以了解一下这些信息。

3

解析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底层接口实现和要求

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

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

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分