CAPL基础语法
1.变量的声明与定义
在程序运行过程中,其值可以被改变的量称为变量。变量可以用于保存用户输入的数据,也可以保存程序运行时产生的中间结果或最终结果。
1.1变量名
(1)只能使用字母字符、数字和下划线
(2)名称的第一个字符不能是数字
(3)区分大小写字符
(4)不能将CAPL关键字用作名称
(5)不能将CAPL的函数名和对象名用作变量名
(6)变量名的字符长度最好不要超过32个(编译系统只能识别前32个字符)
(7)变量名最好具有易读性,“见名知意”
CAPL关键字分类
数据类型关键字:int, byte, long etc.
控制语句关键字:if, else
存储类型关键字:static, extern
其他关键字:const, message
1.2全局变量与局部变量
全局变量
在variables部分声明全局变量
可通过直接赋值进行初始化,如果没有初始化,编译器自动初始化为0
全局变量的作用域:整个CAPL文件以及与此文件有链接的其他CAPL文件
局部变量
与C语言不同,局部变量在CAPL中总是被静态地创建。这意味着初始化只在程序体启动时执行,当再次进入程序时,局部变量被假定是上一次跳出程序时的值。局部变量的作用域,仅限于当前函数体范围内,即该函数的大括号范围内。
1.3简单变量
整型:整数就是没有小数部分的数字,如3、201、-3412和0。根据数值的大小不同,CAPL提供了以下几种整型
字符:区别于C语言,CAPL未将char类型(长度1B)归类至整型中,这是因为在CANoe中提供了byte类型。如果数据是具体数值则应使用
byte,而对于字符,则应用char(字符串使用char数组)。char类型和byte类型之间可以直接转换,例如:
byte data1 =100;
char ch1 = 'd';
ch1 = 0x62;
data1 = 's';
浮点型:CAPL提供两种浮点型变量:float和double
1.4复合类型
结构 struct
结构名在程序中必须唯一
简单类型、枚举类型或者其他的结构都可以作为结构的成员
枚举 enum
枚举的成员名必须唯一(否则将有可能代替隐藏数据库中同名的报文和信号)
如果没有在声明枚举的同时对成员进行赋值,编译器将按照成员声明的顺序对成员进行初始化(第一个为0,往后依次加1)
数组 Array
CAPL直接用字符串初始化字符数组的行为
CAPL也支持多维数组
CAPL通过内建函数elCount(数组名)来获得数组成员的个数
1.5特殊类型
报文
报文(CAN/LIN messages)是车载网络最基本的构成部分,CAPL提供了各种网络相对应的报文类。这里主要介绍CAN报文和LIN报文。
使用关键字message来声明一个报文变量,当使用message声明报文变量时,默认变量为CAN报文变量。当有数据库支撑的时候,一个 完 整 的 声 明 应 该 包 括 message ID 或 者 message name 。 结 合database的例子,使用ID 0xA或者报文名来声明一条数据库中的EngineData报文。例如
message 0xA m1;
message 100 m2;
message EngineData m3;
以标识符“x”结尾的ID表示这是一个扩展帧ID,例如,100x。
而“*”则表明这条报文在声明时还不含有CAN ID。
如果需要在CAN1网络上发送一条指定的报文,报文名:magicMessage;报文ID:0x252;包含8个字节0x03 3B 40 00 00 00 00 00;可以定义如下:
magicMessage.CAN =1;
magicMessage.ID = 0x252;
magicMessage.DLC = 8;
magicMessage.Byte(0) = 0x03;
magicMessage.Byte(1) = 0x3B;
magicMessage.Byte(2) = 0x40;
magicMessage.Byte(3) = 0x00;
magicMessage.Byte(4) = 0x00;
magicMessage.Byte(5) = 0x00;
magicMessage.Byte(6) = 0x00;
magicMessage.Byte(7) = 0x00;
output(magicMessage);
诊断报文
通过诊断请求 ( DiagRequest )和诊断响应(DiagResponse)这两个对象来实现和ECU之间的诊断服务交互
在声明诊断对象时进行初始化
DiagRequest ServiceQualifier request;
DiagResponse ServiceQualifier response;
定时器
CAPL提供了两种定时器变量:timer和msTimer
timer基于秒
msTimer基于毫秒
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!