教学大纲

DSS是调试服务器(调试器)中的一组Java API,它允许通过第三方工具编写脚本。这篇教学通过JavaScript(DSS的默认脚本语言)提供了对DSS的基本实用介绍。详细资料可以参考用户手册

API文档

Debug Server API文档包含在Code Composer Studio桌面版的安装中。要查看此文档,请打开以下文件,然后单击 DS API Documentation 链接(CCS_INSTALL_DIR 是您计算机上CCS的位置,例如,对于Windows上的CCS,它可能是C:/ti/ccsv8 /)。

<CCS_INSTALL_DIR>/ccs_base/scripting/docs/GettingStarted.html

在屏幕的左上角是软件包。下面是类列表。右侧是主窗口,显示类的描述以及方法列表。您可以在做教学实验时查阅相关文档。

准备阶段

记下CCS安装位置和您存储DSS-Workshop 的位置。默认分别存储在C:/ti/C:/CCS-Workshops/

设置

以下步骤是所有实验共同的基本设置。相同的命令提示符窗口可用于多个实验,无需重复进行此设置。

  1. 为了便于实验,请确保使用的LaunchPad是唯一连接到计算机的板子。

  2. 打开命令提示符或终端窗口,将目录更改为DSS-Workshop文件夹。默认位置是C:/CCS-Workshops/

  3. 运行setpath.bat文件并提供CCS安装的路径作为参数(例如C:/ti/ccsv8)。在路径周围使用引号避免空格问题。

    范例:

    > setpath "C:/ti/ccsv9/"
    

    不使用setpath.bat,输入以下命令:

    PATH="$PATH:<CCS_INSTALL_PATH>/ccsv<RELEASE_#>/ccs_base/scripting/bin"
    

    这样会保证dss.sh在您的路径当中。

您可以开始实验了!

JavaScript基础入门

为确保读者熟悉基本的JavaScript语法,我们提供了此概述。以下语法对于本片教学来说足够了。

// Comments are like C and Java
/* This is also a JavaScript comment */

// Semi-colons are used to end statements (like C and Java)
x = 1;

// Variables are dynamically typed and are declared with a `var` statement
var x;
var y = "y";

// Strings are concatenated using the `+` operator
print("He" + "llo"); // prints Hello in the console

// Control statements are similar to C and Java
// if, else, switch, for, while, etc.
if (condition) {
    doSomething();
}

// Functions can be defined with the `function` keyword
function foo(x) {
    y = x;
}

// Call methods via <object>.<method>
myObject.objectMethod(myArgument);

Lab 1 — 创建和运行基本DSS脚本

在本实验中,您将创建一个基本的DSS JavaScript脚本,该脚本将在SimpleLink CC1352R1 LaunchPad上加载并运行示例程序(blinky20.out)。然后,您将从命令行运行脚本并观察结果。实验室将简要介绍所使用的对象和方法,完整描述可在文档documentation中找到。

创建脚本

  1. 在您喜欢的文本编辑器中创建一个新文件,并将其保存在DSS-Workshop/lab1目录中,名为lab1.js。这是我们将为本实验创建脚本的文件。

    CCS编辑器支持JavaScript文件的语法显示。

  2. 使用importPackage()API导入脚本的相关包。

    importPackage(Packages.com.ti.debug.engine.scripting);
    importPackage(Packages.com.ti.ccstudio.scripting.environment);
    importPackage(Packages.java.lang);
    
  3. 为我们将要使用的各种文件创建一些变量。您需要修改前几个变量以匹配您的环境。要避免出现问题,请使用带有正斜杠的完整路径。

    // Modify the following two variables to match your environment. Use forward slashes and full paths.
    //  (non-windows users: instead of ~/ use the full path to your home folder)
    // The first variable should match the argument passed to setpath.bat
    // The second should be the path for the DSS-Workshop folder
    var ccsInstallDir = "C:/ti/ccsv8/";
    var dssWorkshopDir = "C:/CCS-Workshops/DSS-Workshop/";
    
    // The necessary files
    var logFile = dssWorkshopDir + "/lab1/log.xml";
    var logFileStylesheet = ccsInstallDir + "/ccs_base/scripting/examples/DebugServerExamples/DefaultStylesheet.xsl";
    var deviceCCXMLFile = dssWorkshopDir + "/target-config/CC1352R1F3.ccxml";
    var programToLoad = dssWorkshopDir + "/lab1/blinky20.out";
    
  4. 获取ScriptingEnvironment对象的句柄

    var scriptEnv = ScriptingEnvironment.instance();
    

    ScriptingEnvironment对象是进入DSS会话的主要入口点,也是创建其他可编写脚本服务器和会话的工厂。

  5. 启用和配置日志记录

    使用traceBegin()API启用DSS日志记录到logFile变量指定的文件。

    scriptEnv.traceBegin(logFile, logFileStylesheet);
    

    DSS日志文件采用XML格式,使用XSLT(XML样式表转换)进行样式设置。我们使用CCS安装中脚本示例文件夹中提供的示例DefaultStylesheet.xsl文件。要查看样式化的日志文件,建议使用Internet Explorer获得最佳兼容性。有关DSS日志记录的更多详细信息,请参见此处.

  6. 使用traceSetConsoleLevel()traceSetFileLevel()API设置控制台和日志文件的详细级别。

    scriptEnv.traceSetConsoleLevel(TraceLevel.INFO);
    scriptEnv.traceSetFileLevel(TraceLevel.ALL);
    

    以下形成可用追踪级别的子集。顺序为最低到最高(每个级别包含来自它上面的级别的所有消息):

    • TraceLevel.OFF (关闭记录)
    • TraceLevel.SEVERE (只有来自调试器的非常严重的消息)
    • TraceLevel.WARNING (从调试器添加警告消息)
    • TraceLevel.INFO (添加基本​​消息和C I/O)
    • TraceLevel.ALL (记录所有内容)

    关于更多追踪细节,请参考文档TraceLevel

  7. 使用getServer()API建立与调试器的链接(DebugServer.1)

    var debugServer = scriptEnv.getServer("DebugServer.1");
    

    返回的DebugServer对象是调试器的主句柄。此对象用于配置调试器并启动目标的调试会话。

  8. 通过使用setConfig()API将目标配置*.ccxml文件传递给调试服务器,为所需的目标板配置调试器。

    debugServer.setConfig(deviceCCXMLFile);
    
  9. 使用openSession()API在LaunchPad上打开Cortex M4处理器的调试会话。

    var debugSession = debugServer.openSession("*", "Cortex_M4_0");
    

    DebugSession对象将返回已启动的调试会话的主句柄。可以使用此对象访问针对目标的所有调试操作。

    多个配置的目标

    某些板卡(如CC1352R1 LaunchPad)具有多个可调试对象(CPU)。通过提供参数“*”,“Cortex_M4_0”,将在第一个配置的连接(板)上向Cortex M4 CPU打开调试会话。为避免潜在问题,我们要求您在完成这些实验时确保只有一块电路板连接到您的机器。

    要了解有关为调试会话指定目标的更多信息,浏览文档DebugServer.openSession()

  10. 使用调试会话的目标字段的connect()API连接到目标。

    debugSession.target.connect();
    

    Target类支持目标执行的方法(例如runhaltrestart),步进和连接/断开目标。

  11. 将程序(blinky20.out)加载至内存中。

    debugSession.memory.loadProgram(programToLoad);
    

    Memory类支持内存访问的方法,如saveloadreadwriteregister accessprogram loading

  12. 向目标发出命令以运行加载的程序。

    debugSession.target.run();
    

    run()在目标停止之前不会返回控制。直到目标到达程序结束,将返回控制。

  13. 使用调试服务器的stop()API关闭调试器。

    debugServer.stop();
    

    此调用既关闭调试会话又关闭调试服务器(基本上终止调试器)

14.结束日志文件追踪并使用脚本环境的traceEnd()API禁用日志记录。

    scriptEnv.traceEnd();

建议您正确关闭日志文件。

  1. 确保在lab1子文件夹中将文件存为lab1.js

注意:

添加了一些可选的traceWrite调用以在控制台中提供一些反馈。

// Import the DSS Packages into our namespace to save ourselves some typing
importPackage(Packages.com.ti.debug.engine.scripting);
importPackage(Packages.com.ti.ccstudio.scripting.environment);
importPackage(Packages.java.lang);

// Modify the following two variables to match your environment. Use forward slashes and full paths.
//  (non-windows users: instead of ~/ use the full path to your home folder)
// The first variable should match the argument passed to setpath.bat
// The second should be the path for the DSS-Workshop folder
var ccsInstallDir = "C:/ti/ccsv8/";
var dssWorkshopDir = "C:/CCS-Workshops/DSS-Workshop/";

// The necessary files
var logFile = dssWorkshopDir + "/lab1/log.xml";
var logFileStylesheet = ccsInstallDir + "/ccs_base/scripting/examples/DebugServerExamples/DefaultStylesheet.xsl";
var deviceCCXMLFile = dssWorkshopDir + "/target-config/CC1352R1F3.ccxml";
var programToLoad = dssWorkshopDir + "/lab1/blinky20.out";

// Get a handle to the scripting environment object
var scriptEnv = ScriptingEnvironment.instance();

// Create a log file to log script execution
scriptEnv.traceBegin(logFile, logFileStylesheet);

// Set the trace verbosity levels for the console and the logs
scriptEnv.traceSetConsoleLevel(TraceLevel.INFO);
scriptEnv.traceSetFileLevel(TraceLevel.ALL);

// Optional
scriptEnv.traceWrite("Begin scripting session");

// Get a handle to a ScriptServer object to interact with the debugger
var debugServer = scriptEnv.getServer("DebugServer.1");

// Set the target configuration
debugServer.setConfig(deviceCCXMLFile);

// Open a debug session with the first configured target
var debugSession = debugServer.openSession("*", "Cortex_M4_0");

// Connect to the target
debugSession.target.connect();

// Load our program
debugSession.memory.loadProgram(programToLoad);

// Run the target
debugSession.target.run();

// Target has finished running, terminate the debugger
debugServer.stop();

// Optional
scriptEnv.traceWrite("End scripting session");

// Stop logging and exit
scriptEnv.traceEnd();

运行脚本

  1. 如果尚未设置,请打开命令提示符或终端窗口,然后按照设置中的说明设置环境。

  2. 将工作文件夹更改至DSS-Workshop/lab1/

  3. 运行脚本

    > dss lab1.js
    

    dss脚本可能没有执行权限。请尝试以下方法:

    > dss.sh lab1.js
    

    如果问题还没解决,打开CCS installation中的ccs_base/scripting/bin/子文件夹(打开#设置).

    脚本将运行,LaunchPad上的LED将闪烁20次,然后终止。如果您在上面的最终脚本中添加了可选的traceWrite调用,那么您的控制台将出现:

    C:\CCS-Workshops\DSS-Workshop\lab1>dss lab1.js
    Begin scripting session
    Cortex_M4_0: GEL Output: Board Reset Complete.
    
    End scripting session
    

    注意

    使用scriptEnv.traceWrite()添加了“Begin scripting session”“End scripting session”两行,以便在脚本运行时更加清晰。请参阅上面给出的最终脚本以获取详细信息。

  1. 在Web浏览器中打开生成的日志文件lab1/log.xml(建议使用Internet Explorer以实现兼容性)。如果正确使用了默认的XML样式表,它应该如下图所示:

请注意,日志文件包含的信息远多于输出到控制台的信息,包括序列号,计时信息和状态消息(因为选择了更详细的跟踪级别)。

Lab 2 — 使用Rhino调试器

在本实验中,您将使用Rhino Debugger调试和修复损坏的DSS脚本。

运行范例脚本

  1. 在编辑器中打开lab2子文件夹中的范例脚本lab2a.js,修改前两个变量以匹配您的安装。保存文件。

  2. 如果尚未设置,请打开命令提示符或终端窗口,然后按照设置部分中的说明设置环境。

  3. 将目录更改为lab2子文件夹并运行提供的示例脚本。

    > dss lab2a.js
    

    该脚本将启动LaunchPad的调试会话,并尝试加载并运行提供的“Hello World”示例程序,但会失败并出现错误。

    C:\CCS-Workshops\DSS-Workshop\lab2>dss lab2a.js
    Begin scripting session
    SEVERE: Cannot perform operation, target is not connected.
    SEVERE: Error loading "C:/CCS-Workshops/DSS-Workshop//lab2/hello.out": Cannot perform operation, target is not connected.
    org.mozilla.javascript.WrappedException: Wrapped com.ti.ccstudio.scripting.environment.ScriptingException: Error loading "C:/CCS-Workshops/DSS-Workshop//lab2/hello.out": Cannot perform operation, target is not connected. (lab2a.js#50)
            at org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1693)
            at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:160)
            at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:204)
            at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66)
            at org.mozilla.javascript.gen.c1._c0(lab2a.js:50)
            at org.mozilla.javascript.gen.c1.call(lab2a.js)
            at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:340)
            at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2758)
            at org.mozilla.javascript.gen.c1.call(lab2a.js)
            at org.mozilla.javascript.gen.c1.exec(lab2a.js)
            at org.mozilla.javascript.tools.shell.Main.evaluateScript(Main.java:503)
            at org.mozilla.javascript.tools.shell.Main.processFileSecure(Main.java:425)
            at org.mozilla.javascript.tools.shell.Main.processFile(Main.java:391)
            at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:382)
            at org.mozilla.javascript.tools.shell.Main.processFiles(Main.java:179)
            at org.mozilla.javascript.tools.shell.Main$IProxy.run(Main.java:100)
            at org.mozilla.javascript.Context.call(Context.java:528)
            at org.mozilla.javascript.ContextFactory.call(ContextFactory.java:450)
            at org.mozilla.javascript.tools.shell.Main.exec(Main.java:162)
            at com.ti.ccstudio.apps.internal.scripting.RunScript$1.run(RunScript.java:89)
    Caused by: com.ti.ccstudio.scripting.environment.ScriptingException: Error loading "C:/CCS-Workshops/DSS-Workshop//lab2/hello.out": Cannot perform operation, target is not connected.
            at com.ti.debug.engine.scripting.Memory.loadProgram(Memory.java:932)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:145)
            ... 18 more
    

    错误消息表明程序加载失败,因为我们没有连接到目标。可以在日志文件lab2/log.xml的末尾找到相同的错误消息。

    这很奇怪,因为在lab2a.js的第46行我们调用了target.connect()

    您可能已经在脚本中发现了该错误,但尚未修复它。我们的目的是展示使用Rhino调试器来调试脚本。

Rhino调试器

  1. 添加-dss.debug选项给dss脚本,在Rhino调试器中运行示例脚本。

    > dss -dss.debug lab2.js
    

    该脚本将由调试器执行,并在脚本开始时暂停。

  2. 使用Step Over按钮逐步执行脚本,看看是否曾调用target.connect()

请注意,由于在它之前的if语句中存在错误,因此永远不会达到target.connect()

    // Check to see if the target is already connected
    // target.isConnected() API will return 'true' if it is connected
    if (debugSession.target.isConnected())
    {
        // Connect to the target
        debugSession.target.connect();
    }

如果目标已连接,target.isConnected()API将返回true,否则返回false。目的是检查目标是否已连接,如果不是这样,进行连接。因此,if语句中的条件应该被否定。

    if (!debugSession.target.isConnected())
  1. 关闭Rhino Debugger窗口。使用文本编辑器修改有问题的if语句,以便在目标尚未连接时调用target.connect()。将生成的文件保存在lab2子文件夹中的lab2b.js

  2. 从命令提示符或终端运行修改后的脚本。该脚本应该成功运行,您应该看到以下输出:

    C:\CCS-Workshops\DSS-Workshop\lab2>dss lab2b.js
    Begin scripting session
    Cortex_M4_0: GEL Output: Board Reset Complete.
    
    Hello World!
    End scripting session
    

    这里可以找到有关Rhino调试器的更多详细信息。

Lab 3 — 捕捉异常

在本节实验中,您将修改示例脚本以捕获和处理DSS API异常。

  1. lab3文件夹中打开提供的示例脚本lab3a.js文件,然后修改前两个变量以匹配您的安装。保存文件。

  2. 如果尚未设置,请打开命令提示符或终端窗口,然后按照设置中的说明设置环境。

  3. 将目录更改为lab3子文件夹并运行提供的示例脚本。

    > dss lab3a.js
    

    该脚本将启动LaunchPad的调试会话,并尝试加载并运行示例程序(modem.out),但会失败并出现错误。

    C:\CCS-Workshops\DSS-Workshop\lab3>dss lab3a.js
    Begin scripting session
    Cortex_M4_0: GEL Output: Board Reset Complete.
    
    SEVERE: Cortex_M4_0: GEL: File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out Does not match the target type, not loaded.
    
    SEVERE: File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out
    Does not match the target type, not loaded.
    SEVERE: Error loading "C:/CCS-Workshops/DSS-Workshop//lab3/modem.out": File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out
    Does not match the target type, not loaded.
    org.mozilla.javascript.WrappedException: Wrapped com.ti.ccstudio.scripting.environment.ScriptingException: Error loading "C:/CCS-Workshops/DSS-Workshop//lab3/modem.out": File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out
    Does not match the target type, not loaded. (lab3a.js#45)
            at org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1693)
            at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:160)
            at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:204)
            at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66)
            at org.mozilla.javascript.gen.c1._c0(lab3a.js:45)
            at org.mozilla.javascript.gen.c1.call(lab3a.js)
            at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:340)
            at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2758)
            at org.mozilla.javascript.gen.c1.call(lab3a.js)
            at org.mozilla.javascript.gen.c1.exec(lab3a.js)
            at org.mozilla.javascript.tools.shell.Main.evaluateScript(Main.java:503)
            at org.mozilla.javascript.tools.shell.Main.processFileSecure(Main.java:425)
            at org.mozilla.javascript.tools.shell.Main.processFile(Main.java:391)
            at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:382)
            at org.mozilla.javascript.tools.shell.Main.processFiles(Main.java:179)
            at org.mozilla.javascript.tools.shell.Main$IProxy.run(Main.java:100)
            at org.mozilla.javascript.Context.call(Context.java:528)
            at org.mozilla.javascript.ContextFactory.call(ContextFactory.java:450)
            at org.mozilla.javascript.tools.shell.Main.exec(Main.java:162)
            at com.ti.ccstudio.apps.internal.scripting.RunScript$1.run(RunScript.java:89)
    Caused by: com.ti.ccstudio.scripting.environment.ScriptingException: Error loading "C:/CCS-Workshops/DSS-Workshop//lab3/modem.out": File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out
    Does not match the target type, not loaded.
            at com.ti.debug.engine.scripting.Memory.loadProgram(Memory.java:932)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:145)
            ... 18 more
    

    错误消息表明modem.out程序不是为我们的LaunchPad上的Cortex M4处理器构建的。

    Debug Server API抛出Java异常。您可以处理脚本中的异常以正常失败或继续(相关资料:JavaScript's Try-Catch-Throw-Finally).

  4. 修改脚本以捕获memory.loadProgram()抛出的异常并正常终止脚本。

    try {
        debugSession.memory.loadProgram(programToLoad);
    } catch (ex) {
        scriptEnv.traceWrite("Program load of " + programToLoad + " failed!\nTerminating script.");
        quit();
    }
    

    JavaScriptquit()调用将正常终止JavaScript会话。

  5. 将修改后的脚本保存为lab3子文件夹中的lab3b.js

  6. 运行命令提示符或终端运行修改后的脚本。该脚本应该成功运行,您的控制台应如下所示:

    C:\CCS-Workshops\DSS-Workshop\lab3>dss lab3b.js
    Begin scripting session
    Cortex_M4_0: GEL Output: Board Reset Complete.
    
    SEVERE: Cortex_M4_0: GEL: File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out Does not match the target type, not loaded.
    
    SEVERE: File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out
    Does not match the target type, not loaded.
    SEVERE: Error loading "C:/CCS-Workshops/DSS-Workshop//lab3/modem.out": File: C:/CCS-Workshops/DSS-Workshop//lab3/modem.out
    Does not match the target type, not loaded.
    Program load of C:/CCS-Workshops/DSS-Workshop//lab3/modem.out failed!
    Terminating script.
    

Lab 4 — 脚本控制台和断点

在本实验中,您将了解CCS中的Scripting Console,并了解如何从Scripting Console运行DSS脚本。您还将学习如何在DSS脚本中设置断点

Code Composer Studio的脚本控制台提供交互式脚本支持。可以从控制台调用Debug Server API,并且可以运行完整的DSS脚本。更多详情可在这里找到

脚本控制台

  1. 打开Code Composer Studio并选择以下位置作为工作区文件夹:

    <DSS_WORKSHOP_INSTALL_DIR>/DSS-Workshop/lab4/workspace/
    

    你可以关闭Getting Started页面。

  2. 从菜单栏中选择View -> Scripting Console,打开Scripting Console。默认情况下,脚本控制台将在页面底部的某处打开。

  3. 按TAB键以获取支持的命令列表。(同意display all possibilities)

  4. 使用help获取命令的帮助条目。例如,键入“help loadJSFile”会显示以下内容:

    js:> help loadJSFile
    
    Description: Load a JavaScript file or all the JavaScript files in the directory. Example: loadJSFile c:\myDirectory\myJavaScript.js
    Syntax: loadJSFile(file,store)
    Arguments:
    file - the JavaScript file or a directory.
    store - [optional] true, store the file(s) to the preference, the script will auto reload the next time the view is open.
    

从脚本控制台运行脚本

Scripting Console运行在实验1中创建的DSS脚本(完整脚本可以在建立脚本的末尾找到)。将C:/CCSWorkshops/替换为计算机上DSS-Workshop文件夹的路径。

js:> loadJSFile(C:/CCS-Workshops/DSS-Workshop/lab1/lab1.js)

检查你的路径

如果遇到错误,请确保脚本控制台和lab1.js脚本中使用的所有路径都是正确的,使用正斜杠的完整路径。

脚本将被执行并且可以观察到以下内容:

  1. 启动调试会话时,CCS将切换到CCS Debug模式。 脚本操作将在GUI中可见,但操作可能执行得太快而无法看到。

  2. 程序运行时,LaunchPad上的LED将闪烁20次。

  3. 当脚本终止调试会话时,CCS将切换到CCS Edit模式。

设置断点

  1. Scripting Console运行实验2(lab2b.js)中的(固定)脚本,如上从脚本控制台运行脚本

    js:> loadJSFile(C:/CCS-Workshops/DSS-Workshop/lab2/lab2b.js)
    

    一切都应该像在实验1中运行脚本时那样进行,LED不会闪烁,文本“Hello World!”将被打印到C I/O控制台(这可能发生得太快,无法看到)。

  2. 切换回CCS Debug模式( Window -> Open Perspective -> CCS Debug )并确认“Hello World!”被正确输出到C I/O控制台。

  3. 在文本编辑器中打开位于lab2子文件夹中的hello.c源文件。记下该行的行号。

    printf("Hello World!\n");
    

    (The line number should be 7.)

  4. 从实验2中打开脚本lab2b.js并使用breakpoint.add()API在程序加载后设置断点。

    ...
    
    // Load a program
    debugSession.memory.loadProgram(programToLoad);
    
    // Add a breakpoint at the printf() statement
    debugSession.breakpoint.add("hello.c", 7);
    
    // Run the target
    debugSession.target.run();
    
    // All done
    debugServer.stop();
    
    ...
    

    要了解有关在DSS中使用断点的详细信息,请参阅此链接API文档

  5. 删除DebugServer.stop()调用以停止/终止调试器。在到达断点后,调试会话应保持打开状态。

    ...
    
    // Run the target
    debugSession.target.run();
    
    // All done
    // debugServer.stop(); Removed
    
    ...
    

    target.run()在目标停止时返回控制。这将首先在到达断点时发生(在前面的示例中,这仅在到达程序结束时发生)。因此,这个新脚本不应该在重新获得控制时结束调试会话。

  6. 将生成的脚本保存为lab4子文件夹中的lab4.js

  7. 从脚本控制台运行lab4.js脚本。

    js:> loadJSFile(C:/CCS-Workshops/DSS-Workshop/lab4/lab4.js)
    

    CCS将切换到CCS Debug模式,目标将在我们设置的断点位置停止,脚本将退出而不终止调试会话。

    CCS无法找到来源?

    CCS可能无法找到源文件hello.c,因为可执行文件是使用不同目录中的源文件构建的。使用Locate File... 按钮将CCS定向到包含hello.c的文件夹(可以在lab2子目录中找到)。

  8. CCS显示源文件,并在我们在printf()语句中设置的断点处停止执行。

  9. 单步执行(F6)printf()语句继续调试应用程序。请注意文本“Hello World!”出现在C I/O控制台窗口中。

  10. 您现在可以在CCS中终止调试器(Ctrl+F2)。

总结

您现在应该熟悉Debug Server Scripting的基础知识。第一个实验涵盖了如何创建和运行简单的DSS脚本。第二个实验演示了如何使用Rhino Debugger调试脚本。以下实验显示了如何捕获和处理异常。最后的实验包括CCSScripting Console的使用以及如何在DSS脚本中设置断点。 DSS入门教程到此结束。有关详细信息,请参阅DSS用户指南API文档