CAPL学习笔记
CAPL简介
CAPL是CANOE自带的一种编程语言,要和CANOE中的一个节点绑定在一起。它的文件后缀是.can。
两种添加方式:1. 在simulation setup中增加一个网络节点,配置与其关联的CAPL文件,点击小铅笔符号;2. 在measurement setup中的hot spot, 右击,添加编程节点,在之前的hot spot的介绍中提到过啦。CAPL文件是在CAPL browser中编写编译的。
CAPL关键字
在CAPI中,关键字关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称
变量:
byte:声明一个字节的变量
word:声明二个字节的变量
dword:声明四字节的变量
int:声明二个字节的整数
char:声明一个字符串
long:声明四字节的变量
qword:声明八字节的变量
float:声明一个八字节的浮点数
double:声明一个八字节的浮点数
struct:结构体
struct Data {
int type;
long buf;
char name[50];
};
enum:枚举
enum state
{
State_Off = -1,
State_On = 1
};
声明消息
message
1、用dbc里的消息名声明消息
message Ignition_on msg_wakeup;
2、用消息id声明消息
message 0x5f0 msg_wakeup;
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 * :声明一个dbc类型的信号
signal * dbcsignal;
dbcsignal = lookupSignal("EngineSignal");
定时器
timer t_sendmsg; :声明一个定时器,时间单位为秒
msTimer t_sendmsg; :声明毫秒级定时器
$
如果想直接给信号赋值,必须要在信号的前面加一个$符号
$EngineSpeed = 500.0;
表达式
CAPL语法基于C语言,允许使用以下指令、表达式和运算符
完整的一段函数体需要用中括号括起来
void func1()
{
if ()
{
...
}
}
if…else判断语句
判断语句if…else…,一般用来判断是或非两种情况,当然也可以通过else if添加更多情况
if
void func1(int a)
{
if (a == 1)
{
...
}
}
if…else…
void func1(int a)
{
if (a == 1)
{
...
}
else
{
...
}
}
if…else if…else…
void func1(int a)
{
if (a == 1)
{
...
}
else if (a == 2)
{
...
}
else
{
...
}
}
if…else…是从上到下依次判断,如果满足了其他的某一个条件,则下面的其他情况就不会去判断和执行了
switch, case, default
switch…case…default…也是用于判断情况,它其实比if…else…更适合于多种情况的判断
void func1(int a)
{
switch(a)
{
case(1):
...
break;
case(2):
...
break;
case(3):
...
break;
default:
...
break;
}
}
switch()里面要放入的是要判断的变量,case()里放入的是变量等于的值,满足的话就执行case里的函数体,如果所有case都不满足,则最终执行default里的函数体,每一个case和default的最后都要有break,来让程序跳出switch…case…
for…, while…, do…while
这三个是循环语句,满足里面的条件就会一直执行,所以必须要有不满足的时候,否则就会形成死循环,程序永远无法结束了