【车载开发系列】CAPL语言入门基础
CAPL语言入门基础
- 【车载开发系列】CAPL语言入门基础
-
- [一. CAPL语言简介](#一. CAPL语言简介)
- [二. CAPL语言的特性](#二. CAPL语言的特性)
- [三. 与C语言的区别](#三. 与C语言的区别)
- [四. CAPL关键字分类](#四. CAPL关键字分类)
- [五. 变量种类](#五. 变量种类)
-
- 1)全局变量全局变量)
- 2)局部变量局部变量)
- 3)变量声明定义规则变量声明定义规则)
- [六. 变量类型](#六. 变量类型)
-
- 1)简单变量简单变量)
- 2)struct变量struct变量)
- 3)enum变量enum变量)
- 4)message变量message变量)
- 5)Timer变量Timer变量)
- [七. 函数](#七. 函数)
一. CAPL语言简介
CAPL的全称是Communication Access Programming Language,中文叫做通信访问编程语言。
它是一种类C语言的,应用于Vector CAN工具节点的编程,是基于事件建模的语言。
也是CAPL作为CAN总线测试的主要测试脚本语言。
二. CAPL语言的特性
- CAPL是以事件驱动的程序执行形式运行的,它是CANoe/CANalyzer专用的编程语言。
- 可以使用write()函数进行调试,用于将调试信息输出到CANoe的write窗口上;
- 通过output()函数进行指定报文的发送;
- 通常是通过环境变量事件与CANoe面板进行关联,实现交互;
- 提供调用dll文件的方法;这样保证了对由其他语言封装好的程序模块的调用;
三. 与C语言的区别
- 未定义返回类型,默认为void类型
- 像C++一样允许空的参数列表
- 像C++一样允许函数重载
- 参数检测与C++中一样
- CAPL提供一些自带的库函数
- CAPL编译时不对自带的关键字和自带的函数名做区分
四. CAPL关键字分类
- 数据类型关键字:int, byte, long etc.
- 控制语句关键字:if, else
- 存储类型关键字:static, extern
- 其他关键字:const, message
五. 变量种类
变量种类 | 定义的地方 | 可以使用的地方 |
---|---|---|
全局变量 | Variables{}内 | 整个CAPL程序 |
局部变量 | 每个事件处理器内 | 只在定义的事件处理程序内 |
1)全局变量
- 在variables部分声明全局变量
- 可通过直接赋值进行初始化,如果没有初始化,编译器自动初始化为0
- 全局变量的作用域是整个CAPL文件以及与此文件有链接的其他CAPL文件
c
Variables
{
}
- 在CAPL中可以通过将变量定义在Variables里面来实现全局变量的功能。
2)局部变量
- 局部变量的作用域仅限于当前函数体范围内,对应的是栈变量。
- 局部变量被静态地创建,初始化只在程序体启动时执行,再次进入程序,局部变量被假定是上一次跳出程序时的值。
3)变量声明定义规则
- 只能使用字母字符、数字和下划线
- 名称的第一个字符不能是数字
- 区分大小写字符
- 不能将CAPL关键字用作名称
- 不能将CAPL的函数名和对象名用作变量名
- 变量名的字符长度最好不要超过32个(编译系统只能识别前32个字符)
- 变量名最好具有易读性,"见名知意"
六. 变量类型
1)简单变量
- 整型:byte(0-255),word, dword, gword, int, long, int64
- 字符:char, 可以和byte类型直接转换
- 浮点型
2)struct变量
- 结构名在程序中必须唯一
- 简单类型、枚举类型或者其他的结构都可以作为结构的成员
3)enum变量
- 枚举的成员名必须唯一(否则将有可能代替隐藏数据库中同名的报文和信号)
- 如果没有在声明枚举的同时对成员进行赋值,编译器将按照成员声明的顺序对成员进行初始化(第一个为0,往后依次加1)
4)message变量
- 使用关键字message来声明一个报文变量,默认是CAN报文也就是CAN消息类型。
- 声明报文变量,有数据库支撑时,完整的声明应包含message ID or message name
- MessageID以x结尾的ID表示扩展帧
- *表示这条报文在声明时还不含有CAN ID
5)Timer变量
- CAPL提供了两种定时器变量:timer和msTimer
- timer基于秒;msTimer基于毫秒
七. 函数
函数(function)是指接收数据并按照规定执行处理的各种指令。
该程序通过组合函数来描述。CAPL有一个专门的函数。
函数 | 特征 |
---|---|
write | 文本输出到输出Window(等同于C语言函数printf()) |
setTimer | 设置计时器 |
cancelTimer | 取消计时器 |
output | 输出消息变量 |
stop | 测量结束了 |