CAPL学习笔记

CAPL是CANOE自带的一种编程语言,要和CANOE中的一个节点绑定在一起。它的文件后缀是.can。

两种添加方式:1. 在simulation setup中增加一个网络节点,配置与其关联的CAPL文件,点击小铅笔符号;2. 在measurement setup中的hot spot, 右击,添加编程节点,在之前的hot spot的介绍中提到过啦。CAPL文件是在CAPL browser中编写编译的。

在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…,一般用来判断是或非 两种情况,当然也可以通过else if添加更多情况

void func1(int a)
{
  if (a == 1)
  {
    ...

  }
}

void func1(int a)
{
  if (a == 1)
  {
    ...

  }
  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…

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

Original: https://www.cnblogs.com/Ye-Wei/p/16125854.html
Author: 西故黄鹤楼
Title: CAPL学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606474/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • shell判断文件是否存在

    shell判断文件,目录是否存在或者具有权限 !/bin/sh 3. myPath=”/var/log/httpd/” myFile=”/var…

    Linux 2023年5月28日
    0103
  • python入门基础知识六(函数)

    函数要先定义,再调用! 一、函数参数的类型: 1. 形式参数和实际参数: def funct_name(arguments): codes… codes… …

    Linux 2023年6月7日
    091
  • Twikoo私有化部署教程–迁移腾讯云

    备份数据 私有化部署 创建容器 导入数据 重新配置twikoo面板设置 引入前端CDN Nginx https反代http 作者:小牛呼噜噜 | https://xiaoniuhu…

    Linux 2023年6月6日
    0148
  • linux版powershell中,tab补全,linux外部命令参数名,的模块介绍

    关键字 linux powershell pwsh 补全 complete bash zsh 摘要:linux用户的福音!在linux版powershell中,补全linux外部命…

    Linux 2023年5月27日
    099
  • 最短的可通过编译的C语言程序

    要求:写一个最短的,能通过编译的C语言程序,但不要求能正确运行。 一般人首先想到的是除0。即 除0会引发SIGFPE信号(浮点异常)。 我们也可以删掉return,但是这样做的话编…

    Linux 2023年6月14日
    090
  • 三少玩Linux之ArchLinux 与win7 共存简单安装过程记录

    win7的安装过程就不说了, 还是先要安装win7或者别的windows操作系统; 再安装Archlinux系统, 这个是安装视频教程:https://www.bilibili.c…

    Linux 2023年6月14日
    0101
  • 【Leetcode】198. 打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动…

    Linux 2023年6月6日
    0105
  • [ Python ] 音视频剪辑

    https://www.cnblogs.com/yeungchie/ 视频 提取视频 from moviepy.editor import * 从 MP4 文件提取 video =…

    Linux 2023年6月7日
    095
  • shell相关知识2

    <li class="tool-item tool-active is-like tool-clicked"><a href="ja…

    Linux 2023年5月28日
    084
  • 【Leetcode】64. 最小路径和

    给定一个包含非负整数的 m&#xA0;x&#xA0;n网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动…

    Linux 2023年6月6日
    0105
  • cache和内存屏障

    1 cache简介 1.1 cache缓存映射规则 tag查看cache是否匹配,set index |tag |set index |block offset ||20-bit …

    Linux 2023年6月6日
    0115
  • SpringSecurity 新版2.7以上 快速入门

    SpringSecurity 快速入门 1、导入依赖 org.springframework.boot spring-boot-starter-security 2、测试三种权限 …

    Linux 2023年6月7日
    0113
  • linux命令之wget下载

    wget wget 是一个下载文件的工具。 格式 wget [&#x53C2;&#x6570;] [URL&#x5730;&#x5740;] 常用参…

    Linux 2023年5月27日
    089
  • nodejs调用jar

    目前nodejs调用jar主要有两种方式: 通过创建子进程运行java -jar命令调用包含main方法的jar 使用node-java通过c++桥接调用jar 方法一(子进程运行…

    Linux 2023年6月14日
    096
  • 罗德岛

    自从转行以后就建博了,一直没有动手写内容,今天开始写。 主要记录技术上的积累和项目上的工作感悟。 这里就是罗德岛,就在这里跳。 Original: https://www.cnbl…

    Linux 2023年6月6日
    092
  • Linux目录操作cp、mv与rmLinux查找文件(find、which)

    cp(复制) cp [选项]… 源文件 目标 相当改名复制 文件夹 文件相当于 改名字另存为 *cp [选项]… 源文件… 文件夹 多个源文件只…

    Linux 2023年6月6日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球