Canoe 录制trace功能
-
- 创建logging Block
- 配置 logging file
- 配置logging trigger model
-
- 方式一:Entire measurement
- 方式二:user defined
- 方式三:CAPL
-
- setLogFileName()
- startLogging()
- stopLogging()
- triggerEx()
创建logging Block
- 点击工具栏的analyze -> Measurement Setup
- 在任意block上点击右键,然后选择 insert logging block,创建logging block ,名字默认是:blogging
3.或者通过下图的方式创建logging block ,名字默认是logging2
配置 logging file
- logging file的名字可以编程定义,如下图可以是系统时间也可以是电脑名
2.文件的后缀可以是下图所示 常用后缀 .asc ;.blf
配置logging trigger model
- 在logging block上单击右键 ,然后点击configuration。
方式一:Entire measurement
-
这种触发方式,无差别的把trace全部录制下来,下面的图很形象的表示从start 一直录制到stop
-
还以选择手动操作,稀土的左边圆的图标是暂停,|| 是开始,当把工程run起来的时候,是可以通过鼠标点击的
-
下图二,最后红色圈起来的,表示可以通过按键触发,开始和暂停之间来回切换。
-
通过空格键active logging block ,然后 开始你的工程。
- 停止工程,将switch开关打到 offline
- 双击下图红色框内,调出logging文件选择对话框,选择刚才配置的路径下的logging文件
- 点击工具栏的Analysis ,选中Trace ,分析trace
- 刚才我在工程运行了10ms左右,按下了按键‘t’,20ms左右再次按下‘t’,这样10ms到20ms之间的数据我就没有录到,如下图所示
方式二:user defined
用户自己定义,可以选择的方式有很多,通过信号,报文,变量都可以触发,下面我通过变量值得改变触发logging,当选择的系统变量等于5开始录制,等于6停止录制
创将一个simulation node .can文件,定义一个定时器,当工程开始5000ms之后设置变量为5,也就是开始录制,时间到后再设置变量为6,停止录制。
/*@!Encoding:1252*/
variables
{
msTimer start_logging;
}
on start
{
@sysvar::vin::EDR_type = 0;setTimer(start_logging, 5000);
}
on timer start_logging
{
if(@sysvar::vin::EDR_type == 0){
// start trgier@sysvar::vin::EDR_type = 5;setTimer(start_logging, 5000);}else if(@sysvar::vin::EDR_type == 5){
// stop trgier@sysvar::vin::EDR_type = 6;}
}
下图 trace中 5s的时间点,开始录制
下图 trace中 10s的时间点,停止录制
4.8s开始录制,10.2s停止录制,是因为设置了下图的 Pre-triger time 和 Post-triger time 等于200ms,也就是前后多录制200ms时间的数据
方式三:CAPL
在CAPL脚本中通过API控制logging的开始与停止,下面是一些常用的API.
setLogFileName()
设置logging文件的存放路径,不设置,会默认存放在logging block 设置的路径.
startLogging()
开始录制trace,可以指定logging block 和 preTriggerTime 时间
stopLogging()
停止录制可以指定logging block 和 postTriggerTime 时间
logging block 中设置如下
定义一个定时器,工程开始5s后开始录制,10后停止录制
/*@!Encoding:1252*/
variables
{
int i =0;msTimer start_logging;
}
on start
{
//设置 logging文件的路径和文件名setLogFileName("logging", "C:\\Temp\\log1\\{UserName}_{LocalTime}.blf");setTimer(start_logging, 5000);
}
on timer start_logging
{
if(i==0){
startLogging("logging", 1000);setTimer(start_logging, 5000);}else{
stopLogging("logging", 1000);}i++;
}
解锁如下图所示,5s开始录制,10s结束录制
triggerEx()
发送一个trigger信号到指定的logging block,第一次执行这个API是开始录制,第二次执行时暂停,第三次是录制是开始。。。
variables
{
int i =0;msTimer start_logging;
}
on start
{
setLogFileName("logging", "C:\\Temp\\log1\\{UserName}_{LocalTime}.blf");setTimer(start_logging, 5000);
}
on timer start_logging
{
if(i==0){
// startLogging("logging", 1000);triggerEx("logging");setTimer(start_logging, 5000);}else{
triggerEx("logging");
// stopLogging("logging", 1000);}i++;
}
回放logging文件的结果和上面相同。