CANBeded——诊断自动生成代码

目录

一、如何自动生成代码

二、借鉴之处


 

一、如何自动生成代码

准备:
.gny——geny工程
.dbc——CAN 信号矩阵
.cdd——诊断文件
.cfg文件——工程文件宏定义

1.1 打开gny文件

ce4de1a14ecb4f079be4116892aa0aa9.png

1.2 导入dbc文件

f585643cf7b0414da0354904a0268a98.png

根据dbc文件更新can消息
channel0,configurable options,Acceptance Filter Configuration,optimize
Rx Signals编辑,Add需要接收的信号

1.3 导入cdd文件

3dc3c7b9a9b84deb84d2d808879076bf.png

1.4 导入cfg文件
在configurable options中选择user Config File,   设置生成代码路径

d4efa80b36da4ce3a579036ce5742051.png

1.5 生成代码

b92bf2d255254738ab95ebf604496ef5.png

 

二、借鉴之处

appdesc.c
desc.h 应用层定义
drv_par.h 物理驱动层
nmb_cfg.h 网络管理配置信息
tp_cfg.h   传输层参数配置信息
v_inc.h    定义文件版本
v_par.h    定义软件版本信息
ccl_cfg.h 定义外部接口

基本流程如下:

bc419fe5cd114d3d971ee6c15d3b5d0f.png

 


/*session id*/
typedef struct DescStateInfoTag
{DescStateGroup stateSession : 2;DescStateGroup stateGap_0 : 6;
} DescStateInfo;/*service id*/
typedef vuint8  DescMsgItem;
DescMsgItem g_descSidMap[];typedef struct
{DescBitType                reqHeadByteSpec   :8; /* Each bit represents sub-function/identifier - 0: identifier; 1: any subfunction */
#if defined(DESC_ENABLE_SUB_SVC_USAGE)DescBitType                reqHeadExLen      :4; /* Request HeadEx length up to 7 Byte  */DescBitType                resHeadExLen      :4; /* Response HeadEx length up to 7 Byte */
#endif
#if defined (DESC_ENABLE_ADDR_METHOD_CHECK)DescBitType             reqType           :2; /* 0x01: Phys 0x02: Func */DescBitType             resOnReq          :2; /* 0x01: Phys 0x02: Func */
#endifDescBitType             suppPosRes        :1; /* 0x00: No   0x01: Yes  */DescBitType             isReqHeadExtEchoed:1; /* 0x00: No   0x01: Yes  */DescBitType             hasSubFunction    :1; /* 0x00: No   0x01: Yes  */
#if (kDescNumSvcHeadConstGapBits > 0)DescBitType             svcHeadPlaceHolder:kDescNumSvcHeadConstGapBits; /* Gap holder  */
#endif
#if defined (DESC_ENABLE_AUTO_STATES)
# if defined (DESC_ENABLE_ALL_STATEGROUPS_SID_CHECK)DescStateInfo           checkState;
# else
#  if (kDescNumStateSession > 0)DescStateGroup          checkSessionState :kDescNumStateSession;/* State group Session on SId level */
#   if (kDescNumSvcHeadSessionGapBits > 0)DescBitType             sessionPlaceHolder:kDescNumSvcHeadSessionGapBits; /* Gap holder  */
#   endif
#  endif
# endif
#endif
#if defined (DESC_ENABLE_MIN_REQ_LEN_CHECK) && \defined (DESC_ENABLE_SUB_SVC_USAGE)vuint8                  minReqLength;
#endif
#if defined (DESC_ENABLE_MULTI_VARIANT)DescVariantMask         variantMask;
#endif
/* First item in Service Instance table */DescMemSvcInstIndex        svcInstFirstItem;DescMemSvcInstHeadExtIndex svcInstHeadExtFirstItem;
} DescSvcHead;
/* Table of service ID relevant information. */
V_MEMROM0 static V_MEMROM1 DescSvcHead V_MEMROM2 g_descSvcHead[kDescSvcHeadNumItems] = 
{{ 0x01, 1, 1, 1, 1, 1, 0x00, { 0x03, 0x00 },  2,  0,  0 } /* $10 */, { 0x01, 0, 0, 0, 1, 0, 0x00, { 0x03, 0x00 },  4,  2,  2 } /* $14 */, { 0x01, 1, 1, 1, 1, 1, 0x00, { 0x03, 0x00 },  2,  3,  2 } /* $19 */, { 0x01, 0, 0, 0, 1, 0, 0x00, { 0x03, 0x00 },  1,  9,  8 } /* $22 */, { 0x01, 1, 1, 1, 1, 1, 0x00, { 0x02, 0x00 },  2, 10,  8 } /* $28 */, { 0x07, 2, 2, 0, 1, 0, 0x00, { 0x03, 0x00 },  4, 12, 10 } /* $2E */, { 0x01, 0, 0, 1, 1, 1, 0x00, { 0x03, 0x00 },  1, 22, 30 } /* $31 */, { 0x01, 1, 1, 1, 1, 1, 0x00, { 0x03, 0x00 },  2, 23, 30 } /* $3E */, { 0x00, 0, 0, 0, 1, 0, 0x00, { 0x03, 0x00 },  1, 24, 31 } /* $FF */
};typedef struct
{DescMsgLen             reqLen;
#if defined (DESC_ENABLE_ADDR_METHOD_CHECK)DescMsgAddInfo         msgAddInfo;
#endif
#if defined (DESC_ENABLE_AUTO_STATES)DescStateInfo          checkState;
# if (kDescStateGroupNumTransition > 0)DescSetStateIndex      setStateIndex;
# endif
#endif /* DESC_ENABLE_AUTO_STATES */
#if defined (DESC_ENABLE_MULTI_VARIANT)DescVariantMask        variantMask;
#endif
#if defined (DESC_ENABLE_PREHANDLER_USAGE)DescPreHandlerIndex    preHandlerRef;
#endif
#if defined (DESC_ENABLE_POSTHANDLER_USAGE)DescPostHandlerIndex   postHandlerRef;
#endifDescMainHandler        mainHandler;
} DescSvcInst;/* Table of sub-service protocol information. */
V_MEMROM0 static V_MEMROM1 DescMsgItem V_MEMROM2 g_descSvcInstHeadExt[kDescSvcInstHeadExtNumItems] = 
{0x01, 0x03 /* $10 */, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0A /* $19 */, 0x00, 0x03 /* $28 */, 0x10, 0x41, 0x10, 0x42, 0x10, 0x43, 0x10, 0x44, 0x10, 0x66, 0x10, 0x67, 0x10, 0x68, 0x10, 0x69 /* $2E */, 0x10, 0x6A, 0x10, 0x6B /* $2E */, 0x00 /* $3E */
};/* Table of all RIDs' */
V_MEMROM0 static V_MEMROM1 vuint16 V_MEMROM2 g_descRidLookUpTable[kDescNumRids] = 
{0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0221, 0x0225, 0x0226, 0x0227
};
/* Table of RIDs' sub-function to control type mapping. */
V_MEMROM0 static V_MEMROM1 vuint8 V_MEMROM2 g_descRidSubFuncToCtrlTypeMap[4] = 
{27, 0, 1, 2
};
/* Table of all RIDs' properties. */
V_MEMROM0 static V_MEMROM1 DescRidTinyInfo V_MEMROM2 g_descRIDInfo[kDescNumRids] = 
{{ { 0x03, 0x00 }, { 0x01, 0x01, 0 } } /* $0202 */, 
};typedef struct
{DescMsgLen           reqDataLen; /* contains the RID and the request parameters' length only*/DescRidTinyInfo      tinyInfo;
#if defined (DESC_ENABLE_RID_POSTHANDLER_USAGE)DescPostHandlerIndex postHandlerRef;
#endifDescMainHandler      mainHandler;
} DescRidInst;

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/255100.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java一对一聊天

我们首先要完成服务端,不然出错,运行也要先运行服务端,如果不先连接服务端,就不监听,那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

Failed to resolve org.junit.platform:junit-platform-launcher:1.9.3

springboot 跑 unit test 的时候,如果报错如题的话,可以更改idea 里的 Settings ——> HTTP Proxy 配置为:Auto-detect proxy settings

富时中国a50指数准确吗

富时中国A50指数简介 富时中国A50指数(FTSE China A50 Index)是富时罗素指数有限公司(FTSE Russell)编制的,旨在反映中国A股市场50家市值较大、流动性较好的公司的股价表现。它是国际上对中国A股市场投资者影响较大的…

leetcode刷题:611.有效三角形的个数(双指针实现)

题目地址:有效三角形的个数 解决此题时,首先需要知道的是如何判断三个数字是否能够构成三角形。 我们知道,三角形任意两边之和都大于第三边。所以判断三个数字是否能构成三角形需要进行三次比较(最基础的思路) 方法一…

算法-贪心思想

贪心的思想非常不好解释,而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来,但是非要解释一下怎么使用的贪心的话,就懵圈了。一般来说,贪心的题目没有固定的套路,一题一样,不过…

Windows系统的笔记本电脑要怎样做,才能控制iPad?

Windows 10.1803或以上版本并且支持5.0低功耗蓝牙(BLE)的台式电脑或笔记本电脑都可以通过蓝牙连接控制iPhone或iPad。 控制成功后,你可以在电脑上直接用鼠标操作iPhone或iPad,避免工作学习中频繁抬头低头切换界面,也可…

IMR TBR TBDR

IMR Immediate Mode Rendering(即时渲染),是 PC 和主机 GPU 使用的渲染方式 IMR下的渲染示意图 每次渲染,都要读写Frame Buffer和Depth Buffer IMR优化 IMR需要大量的带宽和功耗,优化方式是L1、L2 Cache大缓存,不适用于移动G…

HASH 哈希算法之MD5 算法

1. 哈希算法&#xff0c;用C 写的 #include <iostream> #include <iomanip> #include <cstring> #include <openssl/md5.h> #include <stdio.h>using namespace std;int main() {string str "hello world";unsigned char digest[MD5…

谷歌ARCore认证,什么是ARCore认证

一、谷歌ARCore认证介绍 谷歌ARCore 是 Google 推出的用于打造增强现实体验的平台,利用移动设备的传感器以及相机通过不同的 API 让您的手机能够感知其所处环境、了解世界并进行信息交互。设备要使用谷歌的ARCore功能&#xff0c;需要进行测试并通过认证后方可预载或使用Googl…

sqlserver已经启动了允许远程连接,但局域网内无法访问

sqlserver已经启动了允许远程连接&#xff0c;但局域网内无法访问。 可以确认一下sqlserver browser是不是没有启动。 修改启动模式为自动试一试。

基于ssm学校运动会信息管理系统论文

摘 要 在当今社会上&#xff0c;体育运动越来越普及&#xff0c;参与运动会的人越来越多&#xff0c;但是目前对运动会信息管理还是处于手工记录的时代&#xff0c;这远远满足不了现在用户需求&#xff0c;因此建立一个运动会信息管理系统已经变的非常重要。 本文重点阐述了学…

深圳锐杰金融:用金融力量守护社区健康

深圳市锐杰金融投资有限公司&#xff0c;作为中国经济特区的中流砥柱&#xff0c;近年来以其杰出的金融成绩和坚定的社会责任立场引人注目。然而&#xff0c;这并非一个寻常的金融机构。锐杰金融正在用自己的方式诠释企业责任和慈善精神&#xff0c;通过一系列独特的慈善项目&a…