当前位置: 首页 > 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;输入格…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...