CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称

1.声明数据类型的关键字:可以用不同的关键字,声明或引用不同类型的数据

  1. byte  声明一个字节得变量
  2. word 声明两个字节得变量
  3. dword 声明四个字节得变量
  4. int 声明两个字节的整数
  5. long  声明4个字节的变量
  6. qword 声明8个字节的变量
  7. char 声明一个字符串
  8. float  声明一个浮点数,8个字节
  9. double 声明一个浮点数,8个字节

2.定义一个结构体或枚举类型

struct Data {
int type;
long l;
char name[50];
}; 
enum State { State_Off = -1, State_On = 1 };

3.声明消息/信号 

 1.capl程序要在总线上传输的CAN报文是用关键字message声明的

两种声明方式:

  1. 用dbc里的消息名声明消息
  2. message Ignition_on msg_wakeup; 用dbc里的消息名声明消息
    message 0x5f0 msg_wakeup; 用消息id声明消息

linFrame    :capl程序要在lin线上传输的lin帧是用关键字linFrame声明的

dbMsg *    声明一个dbc类型的消息

这里有三种使用方式:

  1.如果你想传入一个dbc里的message名作为形参,可以使用这种方式,调用时直接把dbc里的消息传进去即可

void function1(dbMsg * dbcmsg) 

 2.也可以先声明一个dbc消息,然后用=把dbc里的消息EngineData赋值给它

dbMsg * dbcmsg;
dbcmsg = EngineData;

  3.还可以用函数lookupMessage函数赋值dbc消息,传入的字符串是dbc里消息名

dbMsg * dbcmsg;
dbcmsg = lookupMessage("EngineData")

还有dbNode等关键字,用来声明dbc里的其他参数

signal *

这里也提供了一个lookupSignal的方法

signal * dbcsignal;
dbcsignal = lookupSignal("EngineSignal");  

serviceSignal *

用来声明数据库里SOME/IP服务信号,也有一个lookup的方法

类似的还有很多,比如:serviceSignalData */serviceSignalNumber * /serviceSignalString *

4.声明诊断服务

diagRequest

diagRequest Door.defaultSessionStart req; 

diagResponse

diagResponse Door.defaultSessionStart resp

5.声明系统变量或计时器

sysvar *  :声明系统变量     类似的还有:sysvarInt */sysvarFloat */sysvarString *等

timer  :声明一个定时器,时间单位为秒   类似的还有:msTimer,声明毫秒级定时器

timer t_sendmsg;  

6.定义一个test case/test function

定义一个test case

testcase mytestcase()
{
}  

testfunction    :定义一个test function,它能被用在test case或test sequence中

7.其他

this  :

在接收CAN对象或系统变量或环境变量的回调事件中,可以用this来指定这个接收的对象

on message 100
{
byte byte_0;
byte_0 = this.byte(0);

$

如果想直接给信号赋值,必须要在信号的前面加一个$符号  

$EngineSpeed = 500.0; 

.raw   :读取信号的原始值   类似的还有.phys,读取信号的物理值

EngineMsg.EngineSpeed.raw

if, else, switch, case, default, for, while, continue, break, return都是关键字

 

 

 

 

  

posted @ 2021-07-10 22:45  albert11  阅读(1758)  评论(0编辑  收藏  举报