当前位置: 首页 > news >正文

【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】


请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】


上篇文章【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】
下篇文章【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】

文章目录

  • 1. TRACE32 Practice 语法
    • 1.1 脚本变量申明
      • 1.1.1 本地变量申明:
      • 1.1.2 全局变量申明:
      • 1.1.3 常量
    • 1.2 Trace32 循环语句
      • 1.2.1 While
      • 1.2.2 Repeat
      • 1.2.3 Repeat While
    • 1.2 Trace32 条件判断
      • 1.3.1 IF ELSE 条件判断
    • 1.4 Trace32 跳转语句
      • 1.4.1 GOTO
      • 1.4.2 JUMPTO

1. TRACE32 Practice 语法

Practice脚本是Lauterbach公司提供的一种脚本语言,运用于其TRACE32软件当中,非常容易上手、并且功能强大。其运用的主要领域包含:

  • 自动化测试
  • 创建图形化界面的工具
  • 初始化和配置TRACE32软件
  • 控制Lauterbach硬件

1.1 脚本变量申明

Practice脚本中的变量(Variable)被称为(Marco),其本质就是存储于内存中的字符串,与C语言中的宏不同,Practice脚本中的宏随时可以被创建和修改。且根据作用域的不同,其又被进一步分为三类: 本地宏,私有宏,全局宏:

  • 本地宏(Local Marco)
    在代码块(block)中存在,离开代码块时被擦除。本地宏在它的代码块、子代码块、子函数、子脚本中可见。
  • 私有宏(Private Marco)
    仅在声明它的代码块和子代码块中可见。
  • 全局宏(Global Marco)
    全局可见,并且声明它的代码块终止后也不会被擦除。

1.1.1 本地变量申明:

 LOCAL &a &b &c //关健字为LOCAL, 变量以 “&” 开头ENTRY &a &b&c=&a*&bRETURN &c

1.1.2 全局变量申明:

 GLOBAL &State &Level //关健字为 GLOBAL,变量以“&”开头

1.1.3 常量

Practice脚本中支持多种常量类型:
十进制 128.
浮点型 128.0369.36
十六进制 0xA5A5
二进制 0b0010
比特掩码 0y10xx0
布尔型 TRUE()FALSE()
字符串 “hello world
字符 ‘z
地址 P:0x100
带段信息的地址 P:0x02:0x100
地址范围 P:0x100--0x1ffP:0x100++0x0f
高级语言的符号表 ‘main

声明、初始化宏都很简单,下面是个简单的例子,先声明,再初始化。注意在初始化宏的时候,宏名称和等号之间不能有空格,等号后面允许有空格。

GLOBAL  &ChipVersion
LOCAL  &msg1
PRIVATE &val1 &val2&ChipVersion= "ES1"
&msg1=  "Hello World!"
&val1=  0xAA55
&val2=  128.

1.2 Trace32 循环语句

在 practice 脚本中,常见的循环有while、repeat、以及这两种的组合。

1.2.1 While

在限定条件下,重复执行一个代码段

WHILE <condition>		Execute <block> while <condition> is true.
(<block>				<condition> has to be specified in TRACE32 syntax.
)
AREA.view
PRIVATE &i
&i=0.
WHILE &i<10. ;Loop while &i is smaller 10
(PRINT "Count: " &i&i=&i+1.
)
ENDDO

执行结果
在这里插入图片描述

1.2.2 Repeat

按照给定的次数,重复执行一个代码段。

语法1

RePeaT <count> <command> 		Repeat <command> <count>-times.

示例1

;Example 1
;Print the character X 5 times
AREA.view
RePeaT 5. PRINT "hello world"

执行结果
在这里插入图片描述

语法 2

RePeaT <count>					Repeat <block> <count>-times.
(<block>
)

示例1
每 200ms 打印一个“*

;Example 2
AREA.view
RePeaT 10.
(PRINT %CONTinue "*"WAIT 200.ms
)

结果如下
在这里插入图片描述

示例2

;Example 2
Var.Break.Set flags /Write 		//Set a Write breakpoint to array//flags
;Repeat the following 10 times
;Start the program and wait until the target halts at the breakpoint.
;Then export the contents of array flags to file flags_export.csv in CSV
;format.
RePeaT 10.
(GoWAIT !STATE.RUN()Var.EXPORT "flags_export.csv" flags /Append
)

1.2.3 Repeat While

类似 C 语言中的 do-while 循环

;Example 3
;Read a line from my_strings.txt
;Write not-empty lines to file my_strings_noempty.txtPRIVATE &CurrentLine &RightLine
OPEN #1 my_strings.txt /Read
OPEN #2 my_strings_noempty.txt /Create
AREA.view
RePeaT
(READ #1 %LINE &CurrentLineIF (!FILE.EOFLASTREAD()&&("&CurrentLine"!=””))WRITE #2 "&CurrentLine"
)
WHILE !FILE.EOFLASTREAD()
CLOSE #1
CLOSE #2

1.2 Trace32 条件判断

1.3.1 IF ELSE 条件判断

Practice 脚本中的条件判断是依赖 IF ELSE 语句来完成的。

  • IF ELSE 和其后的条件语句之间要有至少一个空格;
  • 条件语句本身可以用圆括号包裹,也可不用;
  • IF ELSE 所条件执行的代码段必须使用圆括号包裹,注意这时圆括号必须位于独立的一行。

语法如下

IF <condition>
(<if_block>
)
ELSE
(<else_block>
)

示例1
Trace32 关健字不区分大小写,也可以是 if else

AREA.view
PRINT "IF ELSE Ttest"IF "a"=="a"
(PRINT "true"
)
ELSE IF "a"=="b"
(PRINT "false"
)
ELSE
(PRINT "这里不会运行(test)"
)

运行结果
在这里插入图片描述

Trace32 里面没有 then 关健字,多行语句请使用括号"()"括起来。

示例 2

// Script double_if.cmm
PRIVATE &testfunc &correct_result
OPEN #1 "func_test.txt" /READWHILE TRUE()
(READ #1 &testfunc &correct_resultIF "&testfunc"!=""(IF Var.VALUE(&testfunc)==&correct_result(APPEND "test_protocol.txt"\FORMAT.STRing("&testfunc=&correct_result",50.,' ')\FORMAT.UnixTime("c",DATE.UnixTime(),DATE.utcOffSet()))ELSE(PRIVATE &result&result=CONVert.HEXTOINT(Var.VALUE(&testfunc))APPEND "test_protocol.txt"\FORMAT.STRing("&testfunc failed with &result (&correct_result)",50.,' ')\FORMAT.UnixTime("c",DATE.UnixTime(),DATE.utcOffSet())))ELSE(CLOSE #1ENDDO)
)
ENDDO

如果一行字符太长可以使用换行符 “\”。

1.4 Trace32 跳转语句

利用GOSUB、GOTO和JUMPTO指令可以完成脚本内的跳转。

1.4.1 GOTO

语法:

GOTO <label> 					Continue PRACTICE script at <label>.<label> must be part of the currently executing script.

示例

GOTO 88. 				 ;跳转至当前脚本文件第88
AREA.view
GOTO print_helloprint_hello:PRINT "hello world !"
ENDDO

运行结果
在这里插入图片描述

1.4.2 JUMPTO

JUMPTO <label> 			Continue PRACTICE script at <label>.<label> must be part of a script that is currently located on thePRACTICE stack. <label> must not be located in a block.

示例

AREA.viewPRINT "test start..."
GOTO jumpto_testPRINT "jumpto test failed!"jumpto_test:PRINT "jumpto test success!"
ENDDO

运行结果
在这里插入图片描述


上篇文章【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】
下篇文章【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】

推荐阅读
https://blog.csdn.net/thanklife/article/details/119608383
https://blog.csdn.net/goodlinux/article/details/6736418
https://zhuanlan.zhihu.com/p/37827150

相关文章:

【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】 下篇文章【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】 文章目录 1. TRACE32 Practice 语法1.…...

学习指南:如何快速上手媒体生态一致体验开发

过去开发者们在使用多媒体能力时&#xff0c;往往会遇到这样的问题&#xff0c;比如&#xff1a;为什么我开发的相机不如系统相机的效果好&#xff1f;为什么我的应用和其他的音乐一起发声了&#xff0c;我要怎么处理&#xff1f;以及我应该怎么做才能在系统的播控中心里可以看…...

037、目标检测-算法速览

之——常用算法速览 目录 之——常用算法速览 杂谈 正文 1.区域卷积神经网络 - R-CNN 2.单发多框检测SSD&#xff0c;single shot detection 3.yolo 杂谈 快速过一下目标检测的各类算法。 正文 1.区域卷积神经网络 - R-CNN region_based CNN&#xff0c;奠基性的工作。…...

【开发流程】持续集成、持续交付、持续部署

一、开发工作流程 假设把开发流程分为以下几个阶段&#xff1a; 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 如上图所示&#xff0c;持续集成、持续交付、持续部署有着不同的软件自动交付周期。 二、持续集成、持续交付、持续部署 1、持续集成 持续集成…...

Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefilemake详解

编译器—gcc/g、调试器—gdb以及自动化构建工具—makefile&&make 文章目录 编译器—gcc/g、调试器—gdb以及自动化构建工具—makefile&&make1. 编译器——gcc/g1.1 生成可执行文件与修改默认可执行文件1.2 程序的翻译过程以及对应的gcc选项1.2.1 预处理 gcc -E…...

Android registerForActivityResults使用详解以及实现原理

registerForActivityResult 使用用途是监听Activity结果。 以下是使用样例 //需要传递Request用于解析Intent和解析上个Activity返回的结果 val launchdata = registerForActivityResult<PickVisualMediaRequest, Uri?>(ActivityResultContracts.PickVisualMedia()) {…...

模拟实现一个Linux中的简单版shell

exec系列接口中的环境变量 在之前我们学习了exec系类函数的功能就是将一个程序替换成另外一个程序。 然后就会出现下面的问题&#xff1a; 首先父进程对应的环境变量的信息是从bash中来的&#xff0c;因为我们自己写的父进程在运行的时候首先就要成为bash的子进程。这里我们将…...

扩散模型实战(十):Stable Diffusion文本条件生成图像大模型

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xff…...

LaTex编写伪代码,并实现根据所在章编号(连字符),例如算法1-1

1 首先导入包&#xff1a; 按需要添加或者删除option&#xff0c;但是algochapter是必须的。 \usepackage[linesnumbered,ruled,algochapter]{algorithm2e}各个option的作用如下&#xff1a; 您好&#xff0c;这是Bing。我可以帮您解释algorithm2e包中这几个option的意思。&a…...

vue.js javascript js判断是值否为空

检查一个对象&#xff08;Object&#xff09;是否为空&#xff0c;即不包含任何元素。Javascript 中的对象就是一个字典&#xff0c;其中包含了一系列的键值对&#xff08;Key Value Pair&#xff09;。检查一个对象是否为空&#xff0c;等价于检查对象中有没有键值对。 1、如…...

网页开发如何实现简易页面跳动/跳转,html课堂练习/作业,页面ABC的相互跳转

先建一个文件夹&#xff0c;文件夹包含三个文件夹&#xff0c;三个文件夹分别包含各自的代码。(可以只建一个文件夹&#xff0c;文件夹包含各页面代码) 页面1的代码&#xff1a; <head> <meta http-equiv"Content-Type" content"text/html; charsetu…...

某大型房地产公司绩效面谈项目成功案例纪实

——开展有效的绩效面谈&#xff0c;促进和完善管理工作 【客户行业】房地产行业&#xff1b;国有企业 【问题类型】绩效面谈改进 【客户背景】 某大型房地产公司是某国企集团的省级分公司&#xff0c;集团公司现拥有北京、上海、广州、山东等8大区域公司&#xff0c;现有员…...

BGP联盟和团体属性实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 1、IP地址配置 2、ospf配置 3、BGP建邻 4、宣告网段 5、配置团体属性 一、实验拓扑 二、实验要求 1、按照图示配 IP 地址&#xff0c;R2&#xff0c;R3&#xff0c;R4&#xff0c;R5分别配 Loopbacke 口地址作为OSPF的Ro…...

代码随想录-刷题第二天

977. 有序数组的平方 题目链接&#xff1a;977. 有序数组的平方 思路&#xff1a;双指针思想&#xff0c;数组是有序的且含有负数&#xff0c;其中元素的平方一定是两边最大。定义两个指针&#xff0c;从两端开始向中间靠近&#xff0c;每次比较两个指针的元素平方大小&#…...

DAY59 503.下一个更大元素II + 42. 接雨水

503.下一个更大元素II 题目要求&#xff1a; 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&am…...

【如何将任何直流电机变成伺服电机】

【如何将任何直流电机变成伺服电机】 1 前沿2 伺服电机工作原理3 如何制作定制伺服电机4 AS5600 编码器 – 磁性旋转位置传感器5 定制伺服电机电路图6 PCB设计7 自定义伺服3D模型8 定制伺服齿轮箱的 3D 打印零件9 对控制器进行编程9.1 引导加载程序刻录9.2 代码上传9.3 源代码9…...

单片机语音芯片在工业控制中的应用优势

单片机语音芯片&#xff0c;这一智能化的代表产品&#xff0c;不仅在家庭和消费电子领域发挥着重要的作用&#xff0c;更为工业控制领域注入了新的活力。将单片机语音芯片与语音交互技术相结合&#xff0c;为工业设备的控制和监测提供了前所未有的解决方案。 首先&#xff0c;…...

【开源】基于Vue.js的高校实验室管理系统的设计和实现

项目编号&#xff1a; S 015 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S015&#xff0c;文末获取源码。} 项目编号&#xff1a;S015&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…...

Xrdp+内网穿透实现远程访问Linux Kali桌面

XrdpCpolar实现远程访问Linux Kali桌面 文章目录 XrdpCpolar实现远程访问Linux Kali桌面前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于…...

【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...