CN112069015B - 指令模拟器指令执行方法、装置、终端设备以及存储介质 - Google Patents
指令模拟器指令执行方法、装置、终端设备以及存储介质 Download PDFInfo
- Publication number
- CN112069015B CN112069015B CN202011243036.4A CN202011243036A CN112069015B CN 112069015 B CN112069015 B CN 112069015B CN 202011243036 A CN202011243036 A CN 202011243036A CN 112069015 B CN112069015 B CN 112069015B
- Authority
- CN
- China
- Prior art keywords
- instruction
- editing
- control instruction
- script
- preset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/261—Functional testing by simulating additional hardware, e.g. fault simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/263—Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
Abstract
本发明公开一种指令集模拟器指令执行方法,所述方法包括以下步骤:在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令;根据所述第一控制指令,输出对应的调试动作。本发明还公开了一种指令集模拟器指令执行装置、终端设备以及存储介质。不需要用户按序、逐个字符地输入第一控制指令,指令集模拟器调试效率较高。
Description
技术领域
本发明涉及硬件调试技术领域,特别涉及一种指令模拟器指令执行方法、装置、终端设备以及存储介质。
背景技术
在处理器的开发流程中,一款准确、高效的指令集模拟器十分重要。指令集模拟器可以作为验证工作中的黄金参考模型,帮助开发人员发现硬件开发中的错误。
目前,指令集模拟器提供了交互调试模式,在交互调试模式中,开发人员可以控制程序的执行流程,查看寄存器、内存等相关信息。
但是,现有的指令集模拟器,在交互调试模式中,需要按序、逐个字符地编辑指令,导致指令集模拟器调试效率较低。
发明内容
本发明的主要目的是提供一种指令模拟器指令执行方法、装置、终端设备以及存储介质,旨在解决现有技术中指令集模拟器调试效率较低的技术问题。
为实现上述目的,本发明提出一种指令集模拟器指令执行方法,所述方法包括以下步骤:
在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;
在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;
根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令;
根据所述第一控制指令,输出对应的调试动作。
可选的,所述根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令的步骤包括:
在预设编辑脚本集中确定出与所述选定快捷编辑指令对应的选定编辑脚本,其中,所述预设编辑脚本集中包括不同快捷编辑指令对应的编辑脚本;
根据所述选定编辑脚本和所述当前控制指令,获得第一控制指令。
可选的,所述在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件的步骤之后,所述方法还包括:
在所述编辑指令不满足所述预设条件时时,根据所述编辑指令和所述当前控制指令,获得第二控制指令;
根据所述第二控制指令,输出对应的调试动作。
可选的,所述根据所述第一控制指令,输出对应的调试动作的步骤之前,所述方法还包括:
对所述第一控制指令执行显示操作;
所述根据所述第一控制指令,输出对应的调试动作的步骤包括:
在接收到针对显示状态的所述第一控制指令的确定操作时,根据所述确定操作和所述第一控制指令,获得输出控制指令;
根据所述输出控制指令,输出对应的调试动作。
可选的,所述根据所述输出控制指令,输出对应的调试动作的步骤之前,所述方法还包括:
获取预设控制指令;
根据所述预设控制指令,获得预设控制指令集,其中,所述预设控制指令集中包括的预设控制指令具有指令名称和函数;
所述根据所述输出控制指令,输出对应的调试动作的步骤包括:
获取所述输出控制指令的目标指令名称;
在所述预设控制指令集中确定出与所述目标指令名称对应的选定控制指令;
获取所述选定控制指令的选定函数;
根据所述选定函数和所述输出控制指令,输出对应的调试动作。
可选的,所述根据所述选定函数和所述输出控制指令,输出对应的调试动作的步骤包括:
获取所述选定控制指令的选定参数;
根据所述选定函数和所述选定参数,输出对应的调试动作。
可选的,所述预设编辑脚本集包括编辑位置左移的编辑脚本、编辑位置右移的编辑脚本、编辑位置切换到上一条控制指令的编辑脚本、编辑位置切换到下一条控制指令的编辑脚本、删除编辑位置字符的编辑脚本、删除编辑位置前一格字符的编辑脚本、编辑位置切换到行首的编辑脚本、编辑位置切换到行尾的编辑脚本、补全当前控制指令的编辑脚本以及匹配当前控制指令对应的历史控制指令的编辑脚本。
此外,为实现上述目的,本发明还提供了一种指令集模拟器指令执行装置,所述装置包括:
判断模块,用于在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;
确定模块,用于在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;
获得模块,用于根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令;
动作输出模块,用于根据所述第一控制指令,输出对应的调试动作。
此外,为实现上述目的,本发明还提供了一种终端设备,所述终端设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的指令模拟器指令执行程序,所述指令模拟器指令执行程序被所述处理器执行时实现如上述任一项所述的指令模拟器指令执行方法的步骤。
此外,为实现上述目的,本发明还提供了一种存储介质,所述存储介质上存储有指令模拟器指令执行程序,所述指令模拟器指令执行程序被处理器执行时实现如上述任一项所述的指令模拟器指令执行方法的步骤
本发明技术方案通过采用一种指令集模拟器指令执行方法,通过在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令;根据所述第一控制指令,输出对应的调试动作。终端设备接收到的编辑指令为快捷编辑指令时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,根据选定快捷编辑指令获得对应的第一控制指令,以根据所述第一控制指令,输出对应的调试动作;不需要用户按序、逐个字符地输入第一控制指令,指令集模拟器调试效率较高。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的终端设备结构示意图;
图2为本发明指令集模拟器指令执行方法第一实施例的流程示意图;
图3为本发明指令集模拟器指令执行方法第二实施例步骤S14之前的流程示意图;
图4为本发明指令集模拟器指令执行装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的终端设备结构示意图。
终端设备可以是移动电话、智能电话、笔记本电脑、数字广播接收器、个人数字助理(PDA)、平板电脑(PAD)等用户设备(User Equipment,UE)、手持设备、车载设备、可穿戴设备、计算设备或连接到无线调制解调器的其它处理设备、移动台(Mobile station,MS)等。设备可能被称为用户终端、便携式终端、台式终端等。
通常,终端设备包括:至少一个处理器301、存储器302以及存储在所述存储器上并可在所述处理器上运行的指令集模拟器指令执行程序,所述指令集模拟器指令执行程序配置为实现如前所述的指令集模拟器指令执行方法的步骤。
处理器301可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器301可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器301也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(CentralProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器301可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。处理器301还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关指令集模拟器指令执行方法操作,使得指令集模拟器指令执行方法模型可以自主训练学习,提高效率和准确度。
存储器302可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器302还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器302中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器801所执行以实现本发明中方法实施例提供的指令集模拟器指令执行方法。
在一些实施例中,终端还可选包括有:通信接口303和至少一个外围设备。处理器301、存储器302和通信接口303之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与通信接口303相连。具体地,外围设备包括:射频电路304、显示屏305和电源306中的至少一种。
通信接口303可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器301和存储器302。在一些实施例中,处理器301、存储器302和通信接口303被集成在同一芯片或电路板上;在一些其他实施例中,处理器301、存储器302和通信接口303中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路304用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路304通过电磁信号与通信网络以及其他通信设备进行通信。射频电路304将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路304包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路304可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路304还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本发明对此不加以限定。
显示屏305用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏305是触摸显示屏时,显示屏305还具有采集在显示屏305的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器301进行处理。此时,显示屏305还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏305可以为一个,电子设备的前面板;在另一些实施例中,显示屏305可以为至少两个,分别设置在电子设备的不同表面或呈折叠设计;在再一些实施例中,显示屏305可以是柔性显示屏,设置在电子设备的弯曲表面上或折叠面上。甚至,显示屏305还可以设置成非矩形的不规则图形,也即异形屏。显示屏305可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
电源306用于为电子设备中的各个组件进行供电。电源306可以是交流电、直流电、一次性电池或可充电电池。当电源306包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
本领域技术人员可以理解,图1中示出的结构并不构成对指令集模拟器指令执行设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有指令集模拟器指令执行程序,所述指令集模拟器指令执行程序被处理器执行时实现如上文所述的指令集模拟器指令执行方法的步骤。因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本发明所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本发明方法实施例的描述。确定为示例,程序指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
基于上述硬件结构,提出本发明指令集模拟器指令执行方法的实施例。
参照图2,图2为本发明指令集模拟器指令执行方法第一实施例的流程示意图;所述指令集模拟器指令执行方法包括以下步骤:
步骤S11:在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件。
需要说明的是,本发明的编辑指令可以是用户通过终端设备发送的编辑指令,编辑指令可以是用户通过终端设备的键盘输入模块、语音输入模块或者触控输入模块输入的控制指令。本发明以键盘输入模块的输入为例进行讲解,但并不构成本发明的限定。
当前控制指令可以是指已经输入的完整控制指令,也可以是指已经输入的非完整控制指令(即,还需要输入一定的字符,才能获得完整的控制指令),还可以是指新的控制指令输入行(即,此时新的控制指令还未输入任何字符),本发明不做限制。
本发明的预设条件可以是编辑指令为快捷编辑指令,编辑指令可以是终端设备键盘输入模块对应的快捷按键触发的编辑指令,也可以是终端设备语音输入模块对应的快捷语音信息触发的编辑指令,本发明不做限制;在本发明中,以键盘输入模块对应的按键触发的编辑指令为例。
具体应用中,快捷编辑指令可以是编辑位置左移的指令、编辑位置右移的指令、切换当前控制指令输入行为上一条控制指令的指令、切换当前控制指令输入行为下一条控制指令的指令、删除编辑位置字符的指令、删除编辑位置前一格字符的指令、编辑位置切换到行首的指令、编辑位置切换到行尾的指令、补全当前控制指令的指令或匹配当前控制指令对应的历史控制指令的指令等;其中,当输入模块为键盘输入模块时,方向键左对应的编辑位置左移的指令、方向键右对应的编辑位置右移的指令、方向键上对应的编辑位置切换到上一条控制指令的指令、方向键下对应的编辑位置切换到下一条控制指令的指令、Delete键对应的删除编辑位置字符的指令、退格键对应的删除编辑位置前一格字符的指令、Home键对应的编辑位置切换到行首的指令、End键对应的编辑位置切换到行尾的指令、Tab键对应的补全当前控制指令的指令以及“!”键对应的匹配当前控制指令对应的历史控制指令的指令等。
步骤S12:在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令。
可以理解的是,所述编辑指令满足所述预设条件,即为,所述编辑指令为快捷编辑指令,在上述编辑指令集中确定对应的编辑指令——选定快捷编辑指令。
其中,快捷编辑指令集中包括编辑位置左移的指令、编辑位置右移的指令、切换当前控制指令输入行为上一条控制指令的指令、切换当前控制指令输入行为下一条控制指令的指令、删除编辑位置字符的指令、删除编辑位置前一格字符的指令、编辑位置切换到行首的指令、编辑位置切换到行尾的指令、补全当前控制指令的指令以及匹配当前控制指令对应的历史控制指令的指令等。
例如,用户在安装有指令集模拟器指令执行程序的终端设备的键盘输入模块按下Delete键时(其中,Delete键对应的快捷编辑指令为删除编辑位置字符的指令),终端设备判断所述编辑指令满足预设条件,即编辑指令为快捷编辑指令,在快捷编辑指令集中确定Delete对应的选定快捷编辑指令——删除编辑位置字符的指令。
进一步的,步骤S11之后,所述方法还包括:在所述编辑指令不满足所述预设条件时时,根据所述编辑指令和所述当前控制指令,获得第二控制指令;根据所述第二控制指令,输出对应的调试动作。
需要说明的是,在本实施例中,不满足所述预设条件时的编辑指令可以是指非快捷编辑指令,即,编辑指令为对当前控制指令进行字符输入的编辑指令;不满足所述预设条件时的编辑指令可以是用户通过键盘输入模块输入的字符输入指令,例如,按下键盘的字母键或数字键;当用户发送的编辑指令不满足所述预设条件时时,终端设备根据编辑指令对当前控制指令进行字符输入,并在字符输入结束时,获得第二控制指令,根据所述第二控制指令,输出对应的调试动作。
可以理解的是,获得第二编辑指令时,对第二编辑指令执行显示操作,并在接收到针对显示状态的第二编辑指令的确定操作时,根据第二编辑指令和针对显示状态的第二编辑指令的确定操作,输出对应的调试动作。
例如,用户已通过终端设备编辑指令,其中,当前控制指令是ABC,用户继续按下键盘的N键,即,编辑指令为字符输入指令,终端设备判断N键对应的字符输入指令不满足所述预设条件时,根据N键对应的字符输入指令,获得第二控制指令ABCN,并对控制指令ABCN执行显示操作,在接收到针对显示状态的ABCN的确定操作时,根据控制指令ABCN和该确定操作,输出对应的调试动作。
步骤S13:根据所述选定快捷编辑指令和当前控制指令,获得第一控制指令。
需要说明的是,用户的编辑指令是快捷编辑指令时,终端设备根据编辑指令对当前控制指令进行快捷编辑操作,获得第一控制指令,其中,快捷编辑操作即为上述快捷编辑指令对应的操作。
例如,用户发送编辑指令,终端设备接收编辑指令,其中,当前控制指令是ABC(编辑位置),用户继续按下键盘的方向键左(其中,方向键左对应的快捷编辑指令为编辑位置左移),终端设备判断方向键左对应的编辑指令是快捷编辑指令,根据方向键左对应的编辑指令和当前控制指令,获得第二控制指令AB(编辑位置)C。
进一步的,步骤S13包括:在预设编辑脚本集中确定出与所述选定快捷编辑指令对应的选定编辑脚本,其中,所述预设编辑脚本集中包括不同快捷编辑指令对应的编辑脚本;根据所述选定编辑脚本和当前控制指令,获得第一控制指令。
需要说明的是,预设编辑脚本集中涉及到的快捷编辑指令即为上文所述的快捷编辑指令,即,预设编辑脚本集与预设快捷指令集对应。
可以理解的是,预设编辑脚本集包括编辑位置左移的编辑脚本、编辑位置右移的编辑脚本、切换当前控制指令输入行为上一条控制指令的编辑脚本、切换当前控制指令输入行为下一条控制指令的编辑脚本、删除编辑位置字符的编辑脚本、删除编辑位置前一格字符的编辑脚本、编辑位置切换到行首的编辑脚本、编辑位置切换到行尾的编辑指令、补全当前控制指令的编辑脚本以及匹配当前控制指令对应的历史控制指令的编辑脚本。
另外,不同快捷编辑指令对应的实现方式不同,本发明以基于riscv指令模拟器spike中的快捷编辑指令进行讲解,其中,以键盘输入模块的快捷按键触发快捷指令为例,快捷指令对应的编辑脚本如下:
初始化一个空的字符串s用来存储当前输入行对应的字符串,初始化一个整型变量curpos为0用来标识当前光标在s中的位置,然后将终端模式设置为非规范模式和非回显模式。由于spike的运行环境是在linux终端中,而终端默认会对输入进行回显与行缓冲,所以需要更改终端模式使用户输入字符时屏幕上不会回显,且终端不对输入进行行缓冲以便响应每个快捷编辑指令对应的操作。
在本实施例中,当接收到用户发送的编辑指令时,编辑指令对应的是键盘输入模块的按键对应的字符,调用read系统调用从标准错误读取一个字符(编辑指令对应的按键字符),判断字符的值(ascii码对应的字符值),如果字符是快捷按键对应的字符,则执行其对应操作,如果是普通字符,则将其插入到字符串s中。这里有三点需要说明:
1. 从标准错误读取字符而不是从标准输入读取字符,这是因为spike作为指令集模拟器,其作用是运行riscv架构的目标程序,而目标程序大多数情况都是通过标准输入进行输入,所以这样使spike读取输入时不会与目标程序的输入发生冲突。当然,如果目标程序是通过标准错误进行输入的话就有可能发生冲突了,不过这种情况较为少见。
2. 对于某些快捷按键,其对应的输入字符是一组连续的3位或4位的ascii码,如方向键上(ascii码\x1B\x5B\x41),内层循环在读取完第一个字符并判断后会再次调用read系统调用读取余下2个或3个字符再进行第二次判断
3. 由于终端运行在非回显模式,所以用户输入时屏幕上不会显示输入的内容,为使屏幕上显示的内容与字符串s(当前控制命令)保存的值完全一致,保证输入的正确性,对本发明涉及的快捷编辑指令分别解释:
1)方向键左(ascii码\x1B\x5B\x44)对应的编辑位置左移的编辑脚本;
如果当前编辑位置curpos小于s长度,说明编辑位置未到s的最左边,curpos加1,调用write系统调用在屏幕(即,终端设备的显示模块,下文均称为屏幕)上输出一个退格符“\b”,编辑位置左移一格,此时,屏幕显示光标左移了一格。
如果curpos等于s长度,说明编辑位置已到s最左边,此时方向键左无作用。
2)方向键右(ascii码\x1B\x5B\x43)对应的编辑位置右移的编辑脚本;
如果curpos不等于0,说明编辑位置未到s的最右边,curpos减1,调用write系统调用在屏幕上输出一个回车符“\r”、字符串s和curpos个退格符。这会使光标回到行首,输出s的内容来覆盖掉之前的内容(也是s),编辑位置右移一格,此时,屏幕显示光标右移了一格。
如果curpos等于0,说明编辑位置已到s最右边,此时方向键右无作用。
3)方向键上(ascii码\x1B\x5B\x41)对应的编辑位置切换到上一条控制指令的编辑脚本;
预设一个用来保存指令执行记录的字符串容器historylist,并初始化一个整型变量curhinum,值为historylist的长度,还会初始化一个字符串容器historylisttmp作为historylist的副本,记录每次指令输入时对historylist的改动。每次完成一个完整的编辑指令时,初始化后curhinum都指向了historylist的最后一个元素,即最近执行过的一条控制指令。
所以处理方向键上的逻辑为:如果curhinum大于0,说明curhinum还未指向historylist中的第一条控制指令,将当前s的值存入historylisttmp中,再让s等于前一条控制指令的值,curhinum减1,curpos置0,然后跟前面类似调用write系统调用刷新屏幕。注意这里刷新屏幕前要先用调用write系统调用输出几个空格,长度为s的当前值。这是因为s切换到前一条控制指令后,前一条控制指令可能比s当前值短,这时如果不输出这些空格会导致长度多出的那几个字符不被刷新而留在屏幕上。即,屏幕显示编辑位置变成了上一条执行过的控制指令。
如果curhinum等于0,说明curhinum已指向historylist中的第一条控制指令,此时方向键上无作用。
4)方向键下(ascii码\x1B\x5B\x42)对应的编辑位置切换到下一条控制指令的编辑脚本;
如果curhinum小于historylist长度,说明curhinum还未指向historylist中的最后一条控制指令,将当前s的值存入historylisttmp中,再让s等于后一条控制指令的值,curhinum加1,curpos置0,然后跟前面类似调用write系统调用刷新屏幕。即,屏幕显示编辑位置变成了后一条执行过的指令。
如果curhinum等于0,说明curhinum已指向historylist中的最后一条控制指令,此时方向键下无作用。
5)Delete键(ascii码\x1B\x5B\x33\x7E)对应的删除编辑位置字符的编辑脚本;
如果s为空或curpos为0,说明当前输入行没有内容或编辑位置已在s最右边,此时delete键无作用。
否则,s中删除掉curpos位置处的字符,curpos减1,然后跟前面类似调用write系统调用刷新屏幕,用空格和退格结合curpos控制编辑位置的位置。即,屏幕显示删除编辑位置字符,编辑位置保持不变。
6)退格键(ascii码\x7F)对应的删除编辑位置前一格字符的编辑脚本;
如果s为空或curpos等于s长度,说明当前输入行没有内容或编辑位置已在s最左边,此时退格键无作用。
否则,s中删除掉curpos前一位置处的字符,然后跟前面类似调用write系统调用刷新屏幕,用空格和退格结合curpos控制编辑位置的位置。屏幕显示删除编辑位置前一格字符,编辑位置前移一格。
7)Home键(ascii码\x1B\x5B\x48)对应的编辑位置切换到行首的编辑脚本;
如果curpos小于s长度,说明光标未到s的最左边,让curpos等于s长度,调用write系统调用输出一个回车符“\r”刷新屏幕。屏幕显示编辑位置切换到行首。
如果curpos等于s长度,说明编辑位置已到s的最左边,此时home键无作用。
8)End键(ascii码\x1B\x5B\x46)对应的编辑位置切换到行尾的编辑指令;
如果curpos不等于0,说明光标未到s的最右边,让curpos等于0,调用write系统调用在输出一个回车符“\r”和字符串s刷新屏幕。屏幕显示编辑位置切换到行尾。
如果curpos等于0,说明编辑位置已到s的最右边,此时end键无作用。
9)Tab键(ascii码\x9)对应的补全当前控制指令的编辑脚本;
所有控制指令的指令名称和映射值存储在cmd_list(预设控制指令集),在进行tab补全时,会将当前控制指令映射值与cmd_list中的映射值进行对比与匹配,从而获得补全后的指令。
每次接收到编辑指令时,会初始化一个bool变量tabpressed,值为用户输入的上一个字符是否为tab。tabpressed用于标识之前是否已经按下tab键,如果是,则再按下tab键后会触发tab补全的双击候选逻辑;如果不是,则按下tab键后会触发tab补全的单击补全逻辑。
单击补全逻辑中,将s与cmd_list的所有映射值匹配,如果s与某个映射值中的某个控制指令的映射值相等,则将这个映射值对应的控制指令的指令名称存入到一个字符串容器cmd_list_tmp中。当s遍历匹配了cmd_list的全部映射值后,cmd_list_tmp中存放的就是全部匹配到的可执行的控制指令名称了。此时根据cmd_list_tmp的长度分为3种情况:
长度为0,没有匹配到任何可执行的控制指令,此时tab键无作用。
长度为1,匹配到唯一一条可执行的控制指令,让s等于这条可执行的控制指令的字符串,然后调用write系统调用刷新屏幕。屏幕显示当前控制指令被补全。
长度大于1,匹配到多条可执行的控制指令,让s等于这些可执行的控制指令中相同的部分,tabpressed置1,然后调用write系统调用刷新屏幕。对于用户,他们会看到当前已输入一部分的可执行的控制指令被多补充了一部分,但还未完全补全。同时,由于tabpressed被置1,如果用户下次输入时再按下tab键则会触发tab补全的双击候选逻辑,候选内容便是此时cmd_list_tmp中的内容,即匹配到的多条可执行的控制指令。
在单击补全逻辑中有一点需要注意,每次进入单击补全逻辑时,会先清空cmd_list_tmp,保证cmd_list_tmp中存放的是本次补全对应的可执行的控制指令。
双击候选逻辑中,调用write系统调用将cmd_list_tmp中的内容全部输出到屏幕上。屏幕显示当前未完全输入的可执行的全部控制指令。
当终端设备接收到的编辑指令不是快捷编辑指令时,即接收到一个普通字符,会将其插入到s中curpos对应的位置,然后调用write系统调用刷新屏幕,屏幕显示当前控制指令s插入字符后对应的控制指令。
10)“!”键对应的匹配当前控制指令对应的历史控制指令的编辑脚本;
接收到一个换行符“\n”,则调用write系统调用输出一个换行符“\n”后,首先去掉s首尾两端的空格,然后如果s为空则让s等于“run 1”字符串,表示在交互调试模式下直接按回车相当于执行“run 1”这条控制指令即单步执行一条控制指令。然后判断s的首字符是不是“!”符号,如果是,则进行匹配当前控制指令对应的历史控制指令。
匹配当前控制指令对应的历史控制指令逻辑与tab补全实现类似,只是这里匹配的是historylist的字符串子串集合,且按序从后向前匹配,这样保证匹配到的指令是所有符合的匹配中最近一条执行过的指令。另外该逻辑还支持数字匹配,如果“!”后的字符串是historylist的合法索引值,则按该数字进行匹配。如果“!”匹配成功,则s被替换成匹配到的指令历史记录;如果失败,则s被替换成“invalid command”(无效字符串)字符串。
此时如果s不为“invalid command”且s与historylist中的最后一条控制指令不相等,则将s插入到historylist中。继续执行步骤S14。
可以理解的是,编辑位置的显示形式可以是光标,也可以是其他显示形式,本发明不做限制。例如,编辑位置左移一格即为光标左移一格,以便于用户观察。
步骤S14:根据所述第一控制指令,输出对应的调试动作。
当编辑指令为快捷编辑指令时,根据快捷编辑指令和当前控制指令获得对应的第一控制指令,此时,第一控制指令是通过快捷编辑指令获得的,根据第一控制指令,输出对应的调试动作。
本实施例技术方案通过采用一种指令集模拟器指令执行方法,通过在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令;根据所述第一控制指令,输出对应的调试动作。终端设备接收到的编辑指令为快捷编辑指令时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,根据选定快捷编辑指令获得对应的第一控制指令,以根据所述第一控制指令,输出对应的调试动作;不需要用户按序、逐个字符地输入第一控制指令,指令集模拟器调试效率较高。
参照图3,图3为本发明指令集模拟器指令执行方法第二实施例步骤S14之前的流程示意图;步骤S14之前,所述方法还包括:
步骤S21:对所述第一控制指令执行显示操作。
需要说明的是,在根据选定快捷编辑指令和当前控制指令获得第一控制指令时,不需要执行第一控制指令,需要对第一控制指令执行显示操作,以使用户通过显示状态的第一控制指令确定是否继续执行第一控制指令。
具体应用中,通过终端设备的显示模块显示所述当前控制指令,同时,在获得第一控制指令时,显示所述第一控制指令,即,同步显示当前控制指令以及第一控制指令。
步骤S14包括:步骤S22和步骤S23;
步骤S22:在接收到针对显示状态的所述第一控制指令的确定操作时,根据所述确定操作和所述第一控制指令,获得输出控制指令;
步骤S23:根据所述输出控制指令,输出对应的调试动作。
接收到针对显示状态的所述第一控制指令的确定操作时,即,对第一控制指令进行确定操作,需要执行第一控制指令。输出控制指令即为确定状态的第一控制指令;并根据所述选定控制指令,输出对应的调试动作。
可以理解的是,确定操作可以是用户发送的,也可以是终端设备根据预设脚本,自动发送的,本发明不做限制。用户或终端设备根据显示状态的第一控制指令,发送确定操作,以使终端设备根据所述确定操作和所述第一控制指令,获得输出控制指令,并根据所述输出控制指令,输出对应的调试动作。
进一步的,步骤S23之前,还包括:获取预设控制指令;根据所述预设控制指令,获得预设控制指令集,其中,所述预设控制指令集中包括的预设控制指令具有指令名称和函数。
相应的,步骤S23包括:获取所述输出控制指令的目标指令名称;获取所述输出控制指令的目标指令名称;在所述预设控制指令集中确定出与所述目标指令名称对应的选定控制指令;获取所述选定控制指令的选定函数;根据所述选定函数和所述输出控制指令,输出对应的调试动作。
需要说明的是,预设控制指令可以是从网站获取的控制指令,也可以是用户自己编辑的控制指令,本发明不做限制。同时,预设控制指令集为获取到的全部预设控制指令的集合,所述预设控制指令集中包括所述预设控制指令的指令名称和所述预设控制指令的函数。终端设备获取所述输出控制指令的目标指令名称在所述预设控制指令集中确定出与所述目标指令名称对应的选定控制指令;获取所述选定控制指令的选定函数;根据所述选定函数和所述输出控制指令,输出对应的调试动作。通过名称匹配,确定出与目标指令名称对应的选定指令,通过预设控制指令与函数的关系,确定对应的选定函数。
进一步的,所述根据所述选定函数和所述输出控制指令,输出对应的调试动作的步骤包括:获取所述选定控制指令的选定参数;根据所述选定函数和所述选定参数,输出对应的调试动作。
具体应用中,以基于riscv指令模拟器spike为例,进行解释:
将所有可执行的控制指令(预设控制指令)注册到一个映射结构funcs(预设指令集)里,映射键为每一条可执行的控制指令的名称,映射值为该名称对应的函数指针。然后根据funcs的映射键来初始化上文提到的cmd_list,用于指令补全时进行匹配。终端设备接收到s后(即上文所述的s字符串,也即本发明的当前控制指令对应的输出控制指令),将其按空格拆分成几个字符串,第一个字符串放到一个字符串cmd里作为可执行的控制指令的指令名称,后面的字符串按序放到一个字符串容器args里作为指令执行参数(即选定参数)。然后判断cmd是否是匹配到了funcs中的某个映射键(即,是否匹配到选定控制指令),如果匹配到了,则调用其映射值对应的函数指针,获取选定控制指令对应的选定函数,并根据选定函数和参数args输出对应的额调试动作,若未匹配到funcs中的某个映射键,即,未获得选定控制指令,控制显示模块输出“Unknown command”(未知控制指令)。
另外,本发明的预设控制指令集还包括查看所有执行的控制指令记录的history指令和修改寄存器或内存值的set指令等;此处不做过多限制。
参照图4,图4为本发明指令集模拟器指令执行装置第一实施例的结构框图,所述装置包括:
判断模块10,用于在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;
确定模块20,用于在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;
获得模块30,用于根据所述选定快捷编辑指令和所述当前控制指令,获得第一控制指令;
动作输出模块40,用于根据所述第一控制指令,输出对应的调试动作。
以上所述仅为本发明的可选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。
Claims (9)
1.一种指令集模拟器指令执行方法,其特征在于,所述方法包括以下步骤:
在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;
在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;
在预设编辑脚本集中确定出与所述选定快捷编辑指令对应的选定编辑脚本,并根据所述选定编辑脚本和所述当前控制指令,获得第一控制指令,其中,所述预设编辑脚本集中包括不同快捷编辑指令对应的编辑脚本;
根据所述第一控制指令,输出对应的调试动作。
2.如权利要求1所述的指令集模拟器指令执行方法,其特征在于,所述在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件的步骤之后,所述方法还包括:
在所述编辑指令不满足所述预设条件时,根据所述编辑指令和所述当前控制指令,获得第二控制指令;
根据所述第二控制指令,输出对应的调试动作。
3.如权利要求2所述的指令集模拟器指令执行方法,其特征在于,所述根据所述第一控制指令,输出对应的调试动作的步骤之前,所述方法还包括:
对所述第一控制指令执行显示操作;
所述根据所述第一控制指令,输出对应的调试动作的步骤包括:
在接收到针对显示状态的所述第一控制指令的确定操作时,根据所述确定操作和所述第一控制指令,获得输出控制指令;
根据所述输出控制指令,输出对应的调试动作。
4.如权利要求3所述的指令集模拟器指令执行方法,其特征在于,所述根据所述输出控制指令,输出对应的调试动作的步骤之前,所述方法还包括:
获取预设控制指令;
根据所述预设控制指令,获得预设控制指令集,其中,所述预设控制指令集中包括的预设控制指令具有指令名称和函数;
所述根据所述输出控制指令,输出对应的调试动作的步骤包括:
获取所述输出控制指令的目标指令名称;
在所述预设控制指令集中确定出与所述目标指令名称对应的选定控制指令;
获取所述选定控制指令的选定函数;
根据所述选定函数和所述输出控制指令,输出对应的调试动作。
5.如权利要求4所述的指令集模拟器指令执行方法,其特征在于,所述根据所述选定函数和所述输出控制指令,输出对应的调试动作的步骤包括:
获取所述选定控制指令的选定参数;
根据所述选定函数和所述选定参数,输出对应的调试动作。
6.如权利要求1-5任一项所述的指令集模拟器指令执行方法,其特征在于,所述预设编辑脚本集包括编辑位置左移的编辑脚本、编辑位置右移的编辑脚本、编辑位置切换到上一条控制指令的编辑脚本、编辑位置切换到下一条控制指令的编辑脚本、删除编辑位置字符的编辑脚本、删除编辑位置前一格字符的编辑脚本、编辑位置切换到行首的编辑脚本、编辑位置切换到行尾的编辑脚本、补全当前控制指令的编辑脚本以及匹配当前控制指令对应的历史控制指令的编辑脚本。
7.一种指令集模拟器指令执行装置,其特征在于,所述装置包括:
判断模块,用于在接收到针对当前控制指令的编辑指令时,判断所述编辑指令是否满足预设条件;
确定模块,用于在所述编辑指令满足所述预设条件时,在快捷编辑指令集中确定出与所述编辑指令对应的选定快捷编辑指令,其中,所述快捷编辑指令集中包括满足所述预设条件的不同编辑指令对应的快捷编辑指令;
获得模块,用于在预设编辑脚本集中确定出与所述选定快捷编辑指令对应的选定编辑脚本,并根据所述选定编辑脚本和所述当前控制指令,获得第一控制指令,其中,所述预设编辑脚本集中包括不同快捷编辑指令对应的编辑脚本;
动作输出模块,用于根据所述第一控制指令,输出对应的调试动作。
8.一种终端设备,其特征在于,所述终端设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的指令模拟器指令执行程序,所述指令模拟器指令执行程序被所述处理器执行时实现如权利要求1至6中任一项所述的指令模拟器指令执行方法的步骤。
9.一种存储介质,其特征在于,所述存储介质上存储有指令模拟器指令执行程序,所述指令模拟器指令执行程序被处理器执行时实现如权利要求1至6中任一项所述的指令模拟器指令执行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011243036.4A CN112069015B (zh) | 2020-11-10 | 2020-11-10 | 指令模拟器指令执行方法、装置、终端设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011243036.4A CN112069015B (zh) | 2020-11-10 | 2020-11-10 | 指令模拟器指令执行方法、装置、终端设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112069015A CN112069015A (zh) | 2020-12-11 |
CN112069015B true CN112069015B (zh) | 2021-02-23 |
Family
ID=73655055
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011243036.4A Active CN112069015B (zh) | 2020-11-10 | 2020-11-10 | 指令模拟器指令执行方法、装置、终端设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112069015B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7051299B2 (en) * | 2003-07-31 | 2006-05-23 | International Business Machines Corporation | Method for generating reusable behavioral code |
CN101027566A (zh) * | 2004-09-24 | 2007-08-29 | 爱德万测试株式会社 | 测试模拟器、测试模拟程序以及记录媒体 |
US9208451B2 (en) * | 2011-03-01 | 2015-12-08 | Globalfoundries Inc. | Automatic identification of information useful for generation-based functional verification |
US9317636B1 (en) * | 2006-12-11 | 2016-04-19 | Synopsys, Inc. | System and method for stopping integrated circuit simulation |
CN111209154A (zh) * | 2020-01-02 | 2020-05-29 | 上海航天计算机技术研究所 | 虚拟1553b总线设备的实现方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100405323C (zh) * | 2005-09-20 | 2008-07-23 | 中国科学院计算技术研究所 | 一种在指令级随机测试中支持ejtag测试的实现方法 |
US8543367B1 (en) * | 2006-02-16 | 2013-09-24 | Synopsys, Inc. | Simulation with dynamic run-time accuracy adjustment |
CN102999373A (zh) * | 2012-12-06 | 2013-03-27 | Tcl通讯(宁波)有限公司 | 一种模拟按键设备的模拟器及其实现方法 |
CN104679644B (zh) * | 2013-11-28 | 2017-10-31 | 比亚迪股份有限公司 | 移动终端中应用程序的测试方法和系统 |
CN104239175B (zh) * | 2014-09-05 | 2016-08-24 | 硅谷数模半导体(北京)有限公司 | 芯片的调试系统、调试方法和调试装置 |
CN106126314B (zh) * | 2016-06-15 | 2019-11-05 | 龙芯中科技术有限公司 | 扩充指令的模拟方法和装置 |
CN107589960B (zh) * | 2017-08-30 | 2020-07-24 | 北京轩宇信息技术有限公司 | 一种基于寄存器访问冲突检测的dsp指令模拟方法 |
CN110377476B (zh) * | 2019-07-05 | 2023-07-28 | 无锡睿勤科技有限公司 | 终端测试方法、终端及可读存储介质 |
CN111045952B (zh) * | 2019-12-16 | 2023-03-28 | 广州品唯软件有限公司 | 软件测试方法、流量回放装置、终端设备及可读存储介质 |
CN111708702A (zh) * | 2020-06-18 | 2020-09-25 | 深圳前海微众银行股份有限公司 | 模拟测试方法、客户端、服务端、系统与可读存储介质 |
-
2020
- 2020-11-10 CN CN202011243036.4A patent/CN112069015B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7051299B2 (en) * | 2003-07-31 | 2006-05-23 | International Business Machines Corporation | Method for generating reusable behavioral code |
CN101027566A (zh) * | 2004-09-24 | 2007-08-29 | 爱德万测试株式会社 | 测试模拟器、测试模拟程序以及记录媒体 |
US9317636B1 (en) * | 2006-12-11 | 2016-04-19 | Synopsys, Inc. | System and method for stopping integrated circuit simulation |
US9208451B2 (en) * | 2011-03-01 | 2015-12-08 | Globalfoundries Inc. | Automatic identification of information useful for generation-based functional verification |
CN111209154A (zh) * | 2020-01-02 | 2020-05-29 | 上海航天计算机技术研究所 | 虚拟1553b总线设备的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112069015A (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2419833C2 (ru) | Программируемая клавиатура с развитой логикой | |
CN113325988B (zh) | 多任务管理方法和终端设备 | |
US8712756B2 (en) | Character input device and program for displaying next word candidates based on the candidates' usage history | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN105404458B (zh) | 网页内容更新方法及装置 | |
WO2021110133A1 (zh) | 一种控件的操作方法及电子设备 | |
KR20100113147A (ko) | 핸드라이팅 입력 처리 장치 및 방법 | |
CN112883036A (zh) | 索引创建方法、装置、存储服务器以及存储介质 | |
CN112162812A (zh) | 对象添加方法、装置 | |
CN114265653A (zh) | 界面显示方法、装置、设备、存储介质及程序产品 | |
CN112069015B (zh) | 指令模拟器指令执行方法、装置、终端设备以及存储介质 | |
CN110231922B (zh) | 一种移动终端显示控制方法及移动终端 | |
CN104750401A (zh) | 一种触控方法、相关装置以及终端设备 | |
CN111857497A (zh) | 操作提示方法和电子设备 | |
CN109144881B (zh) | Monkey测试方法、装置、终端设备及存储介质 | |
CN113391803B (zh) | 创建对象管理引擎的方法、装置、终端设备以及存储介质 | |
CN113225234B (zh) | 资产探测方法、装置、终端设备以及计算机可读存储介质 | |
CN115687146A (zh) | Bios测试方法、装置、计算机设备和存储介质 | |
JPH11353071A (ja) | データ入力装置および記憶媒体 | |
US20180004380A1 (en) | Screen display method and electronic device supporting the same | |
CN115116434A (zh) | 应用实现方法、装置、存储介质及电子设备 | |
CN109388316B (zh) | 绘图方法、装置、存储介质及电子设备 | |
CN112230809B (zh) | 计算机程序代码的选取方法、装置及存储介质 | |
CN113050936A (zh) | 基于集成开发环境的前端数据处理方法及装置 | |
CN105808067A (zh) | 一种图标移动方法及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |