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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM