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

这三个是循环语句,满足里面的条件就会一直执行,所以必须要有不满足的时候,否则就会形成死循环,程序永远无法结束了

posted @ 2022-04-10 14:41  西故黄鹤楼  阅读(2134)  评论(0编辑  收藏  举报