前言
CAPL(COMMUNICATION Access Programming Laguage)语言是类C语言,语法其实与C语言很相似,但同时包含了一些C++特性,例如指针、事件等。
一、CAPL
1.程序结构
参考下图,一个完整的CAPL程序的结构包含了头文件、全局变量、事件函数、自定义函数等。
2.数据类型
-
无符号整数
-
byte (1字节)
-
word(2字节)
-
dword(4字节)
-
有符号整数
-
int(2字节)
-
long(4字节)
-
浮点数
-
float(8字节)
-
double(8字节)
-
CAN消息类型
-
message
-
定时器类型
-
timer(秒为单位)
-
msTimer(毫秒为单位)
-
单个字符
-
char(1字节)
3.常用关键字
- 数据类型关键字:int,byte,long,etc
- 控制语句关键字:if,else
- 存储类型关键字:static。extern
- 其他关键字:const,message
4.全局变量与局部变量
全局变量
- 在variables部分声明全局变量
- 可通过直接赋值进行初始化,如果没有初始化,编译器自动初始化为0
- 全局变量的作用域:整个CAPL文件以及与此文件有链接的其他CAPL文件
局部变量
- 局部变量被静态地创建,初始化只在程序题启动时执行,再次进入程序,局部变量被假定是上一次跳出程序时的值。
- 局部变量的作用域:当前函数体范围内。
5.复合类型
结构struct
- 结构体名在程序中必须唯一
- 简单类型、枚举类型或者其他的结构都可以作为结构体的成员
枚举enum
- 枚举的成员名必须唯一(有替代隐藏数据库中同名的报文和信号的风险)
- 如果没有在声明枚举的同时对成员进行赋值,则编译器将按照成员成名的顺序对成员进行初始化(第一个为0,往后依次加1)
数组array
- CAPL直接用字符串初始化字符数组的行为
- CAPL支持多为数组
- CAPL通过内建函数elCount(数组名)来或得数组成员的个数
6.其他类型
报文
- 使用关键字message来声明一个报文变量,默认CAN报文
- 声明报文变量,有数据库支撑时,完整的声明应包含message ID or message name
- Message ID以x结尾的ID表示扩展帧
- *表示这条报文在声明时还不含有CAN ID
诊断报文
- 通过诊断请求和诊断相应两个对象来实现和ECU之间的诊断服务交互
- 在声明诊断对象时进行初始化
系统变量
-
系统变量用来描述某种特殊状态(例如某种事件的触发)或者记录测量数据
-
可通过系统定义和用户自定义系统变量
-
系统变量的作用域在其命名空间内
定时器 -
CAPL提供了两种定时器变量timer基于秒,msTimer基于毫秒
总结
在本篇中简单介绍了一下CAPL的信息,对其中的结构和变量有了初步了解。