数组的使用:
Var.NEWLOCAL char[&VARIANTS_COUNT][0x20] \SPACE_VARIANTS
Var.set \SPACE_VARIANTS[0x00]=""
Var.set \SPACE_VARIANTS[0x01]="&SPACE_BOOTLOADER"
Var.set \SPACE_VARIANTS[0x02]="&SPACE_APPLICATION"
Var.set \SPACE_VARIANTS[0x03]="&SPACE_GM_NVM"
Var.set \SPACE_VARIANTS[0x04]="&SPACE_GM_CALLIBRATION"
Var.set \SPACE_VARIANTS[0x05]="&SPACE_STS"
Var.set \SPACE_VARIANTS[0x06]=""
Var.NEWLOCAL
:这是定义局部变量的指令。char[&VARIANTS_COUNT][0x20]
表示定义一个局部二维字符数组,&VARIANTS_COUNT
是行数,0x20
是每行的长度(32个字符)。\SPACE_VARIANTS
是这个变量的名字。Var.set
:这是设置变量值的指令。它将每个索引处的\SPACE_VARIANTS
数组元素设置为指定的字符串。
输入参数的获取
获得输入参数:通过 ENTRY
命令接受输入参数并赋值给相应的全局变量。
ENTRY &_operation &_variant &_operation_file ;input
ENTRY
:这是一个输入命令,它将输入的参数分配给_operation
、_variant
和_operation_file
这三个全局变量。输入的参数可以通过命令行或其他方式传递给脚本。&_operation
、&_variant
、&_operation_file
:这三个变量是全局变量,用于接收从外部传递进来的参数。;input
:分号后面的内容通常是注释。注释部分在脚本运行时不会被执行,它主要用于说明代码的作用或提供额外的信息。在CMM脚本中,分号;
表示注释的开始,后面的所有内容都是注释。例如,这里的;input
表示注释,说明这行是用于输入参数。
对输入参数检查字符串长度并设置变量
IF (STRing.LENgth("&_variant")>0)
(
&SELECTED_VARIANT=&_variant
PRINT "SELECTED_VARIANT: &SELECTED_VARIANT"
)
IF (STRing.LENgth("&_operation")>0)
(
&SELECTED_OPERATION=&_operation
PRINT "SELECTED_OPERATION: &SELECTED_OPERATION"
)
IF (STRing.LENgth("&_operation_file")>0)
(
&OPERATION_FILE="&_operation_file"
PRINT "OPERATION_FILE: &OPERATION_FILE"
)
IF
:这是条件判断语句。如果条件为真,则执行括号内的语句。STRing.LENgth
:这是一个字符串函数,返回字符串的长度。PRINT
:这是一个打印命令,用于在控制台输出信息。
经常使用指令介绍:
SYSTEM
指令用于控制和管理目标系统。FLASH
指令用于闪存操作,包括擦除、编程和配置。DATA
指令用于内存和数据操作,包括数据加载、保存和设置。AREA
指令用于定义和管理内存区域。
SYSTEM 指令
SYSTEM
相关指令主要用于控制和管理目标系统,常用于调试和开发过程中。
-
SYStem.RESetTarget
- 作用:重置目标系统。
- 示例:
SYStem.RESetTarget
-
SYStem.Mode
- 作用:设置系统模式,如
RUN
、HALT
等。 - 示例:
SYStem.Mode HALT
- 作用:设置系统模式,如
-
SYStem.Up
- 作用:启动目标系统。
- 示例:
SYStem.Up
-
SYStem.Down
- 作用:停止目标系统。
- 示例:
SYStem.Down
FLASH 指令
FLASH
相关指令用于闪存操作,包括擦除、编程和配置等。
常见指令及其作用
-
FLASH.AUTO
- 作用:启用或配置闪存自动操作模式。
-
通常情况下,当启用
FLASH.AUTO
模式后,你只需要提供目标地址和数据文件,系统会自动执行以下步骤:擦除闪存(Erase),编程闪存(Program),验证闪存(Verify) - 示例:
FLASH.AUTO ED:&SPACE_CURRENT_OPERATION
-
FLASH.Erase
- 作用:擦除指定的闪存区域。
- 示例:
FLASH.Erase ED:&SPACE_CURRENT_OPERATION
-
FLASH.Program
- 作用:编程(写入)指定的闪存区域。
- 示例:
FLASH.Program &MY_FILE ED:&SPACE_CURRENT_OPERATION
-
FLASH.Verify
- 作用:验证闪存区域是否正确编程。
- 示例:
FLASH.Verify &MY_FILE ED:&SPACE_CURRENT_OPERATION
DATA 指令
DATA
DATA
指令主要用于操作内存数据,包括加载、保存、设置和修改内存中的数据。它们是调试和编程过程中非常重要的工具。
常见指令及其作用
-
Data.LOAD.Elf
- 作用:加载 ELF 文件到目标系统。
- 示例:
Data.LOAD.Elf &OPERATION_FILE /NoCode
-
Data.LOAD.AUTO
- 作用:自动加载数据文件到指定内存区域。
- 示例:
Data.LOAD.AUTO &OPERATION_FILE ED:&SPACE_CURRENT_OPERATION
-
Data.Set
- 作用:设置指定内存区域的数据值。
- 示例:
Data.Set ED:&SPACE_CURRENT_OPERATION %Long 0x00 Data.Set 0x20000000 %Long 0x12345678 Data.Set 0x20000004 %Byte 0x1A
-
DATA.SAVE.S3record
- 作用:保存数据为 S3 记录文件。
- 示例:
DATA.SAVE.S3record "HWIO_PROF.ptp" &SPACE_BOOTLOADER||&SPACE_APPLICATION||&SPACE_GM_NVM||&SPACE_GM_CALLIBRATION||&SPACE_STS /SkipErrors
-
DATA.SAVE.Bin
- 作用:将内存数据保存为二进制文件。
- 示例:
Data.SAVE.Bin memory_dump.bin 0x20000000--0x2000FFFF
-
DATA.Compare
- 作用:比较内存中的数据和文件中的数据。
- 示例:
Data.Compare 0x08000000 firmware.bin
AREA 指令
AREA
指令用于定义和管理内存区域,通常用于批量操作或分段管理内存。它们并不直接改变内存数据,但可以帮助组织和管理这些数据。
常见的 AREA 指令及其作用
-
AREA
- 作用:定义一个内存区域。
- 示例:
AREA MyArea 0x20000000..0x20000FFF
-
AREA.Select
- 作用:选择一个已定义的内存区域以进行操作。
- 示例:
AREA.Select MyArea
-
AREA.Clear
- 作用:清除一个已定义的内存区域。
- 示例:
AREA.Clear MyArea
-
AREA.Fill
- 作用:用指定的值填充一个已定义的内存区域。
- 示例:
AREA.Fill MyArea %Long 0xFFFFFFFF
-
AREA.RESet
- 作用:重置所有定义的内存区域。
- 示例:
AREA.RESet