CAPL编程学习笔记--关于on 事件的详细解释

2024-03-01 13:28

本文主要是介绍CAPL编程学习笔记--关于on 事件的详细解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CAPL编程是比较有特色的一种面向通讯的编程语言。

1:on XXX类型(即事件类型)

维克多的官方文档对CAPL的描述是一门类C语言,说白了它也是用C写出来的。我们看on(注意都是小写)事件的代码结构

on *

{

}; //和C中的函数一样,最后这个括号的;可有可无

大括号内,能实现如下功能

**1):参数定义 可以定义任何CAPL中定义的合法参数(此处定义的参数,有一点比较特殊,类似于C老式的编译器只支持C89,只能在代码块首部定义参数)。目前本人使用的CANoe15自带的编译器

**2):大括号内,可以调用CAPL自带的库函数,和用户自定义的函数

扩展:on 事件的本质是,是通过回调函数实现的

下表总结了各种ON事件,以及他们的作用和应用场景

1.1 on 系统事件

1.2 on 控制器事件

1.3 on 报文事件

CAN报文事件
on message +目标
报文(该目标报文有多种格式)
目标报文使用ID
id常用十进制或十六进制表示
on message 123
on message 0x123
on message CAN1.0x123
使用BDC中定义的
报文名称
on message VehiState
使用 *代表on message *
(代表所有报文)
规定ID范围on message can1.0x123-0x150

 注意,这里ID的排序,必须是升序,且不推荐使用这种形式。之前尝试过这种形式,代码执行时出现各种错误,根本实现不了

1.4 on 系统变量事件

系统变量时间
on sysvar
on sysvar 命名空间
:: 系统变量名
on sysVar 命名空间之间需使用
一个空格隔开。
测试中发现使用以下格式
“on sysvar sysar::”这种格式也是可以的

1.5  on 键盘事件

on 键盘事件,是通过电脑键盘上的按键实现触发。实际调试过程中会经常使用到

从上表也能看出来两个知识点

**1)on key 本质上是把按键值转换为ASCIL码,参考上图的空格按键响应。

**2)从书写形式上,也可以看出来,所有能一次打印出来的,键盘字符(无论是直接打出来的,还是通过shitf+其他按键打出来的字符),均要用''包含。而如F1-F12这一类的字符,则不需要用''包含。

以下示例均可说明

on key '+'
{
}
on key '*'
{
}
on key'?'
{
}

1.5 比较特殊的一类 on时间(定时器事件)

定时器事件,需要用户先自定义一个定时器
定时器事件on mstimer 定时器名注意,这个定时器名是用户自
定义的
on timer 定时器名

 1.6 on signal 事件

on signal 事件,比较特殊。我们知道signal是不能在CAPL中直接被定义的。

基本格式

on signal 信号名       //格式1
{a1 = this;
}
on signal_update 信号名   //格式2
{
a2 = this;
}
两种格式的区别在于,a1只在最近一次信号被改变时被赋值,而a2每次信号出现都会被赋值,
也就是说,格式2,在每一次信号出现是都会被调用

使用 on signal事件,有两个问题必须关注

**1)必须配合DBC,LDF ,ODD等数据库文件使用,即在工程中必须导入这些数据库文件。

**2)DBC,LDF文件中信号名称,不强制独一无二。就导致了一个BUG,如果两个信号同名,就会导致混乱,于是在引用信号时,最好在前面假如报文名

on signal 报文名::信号名 
{}

这篇关于CAPL编程学习笔记--关于on 事件的详细解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762590

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程