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都是關鍵字

 

 

 

 

  


免責聲明!

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



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