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
這三個是循環語句,滿足里面的條件就會一直執行,所以必須要有不滿足的時候,否則就會形成死循環,程序永遠無法結束了