This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280049C:通过 python3脚本运行 DSS 文件的部分内容、同时不丢失 debugSession 详细信息

Guru**** 2573695 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1374235/tms320f280049c-running-parts-of-a-dss-file-through-a-python3-script-while-not-losing-the-debugsession-details

器件型号:TMS320F280049C
Thread 中讨论的其他器件:CCStudio

工具与软件:

下面所述的代码是一个 JS 文件、在将其与 DSS 配合使用时能够按预期工作。 但我想将 JS 函数集成到我拥有的一个更大的 Python 应用程序中。

例如、我想创建一个调试会话、连接到电路板并加载程序、之后 python 应用程序将执行必要的测试、然后应该会运行 JS 文件中的 Stack 使用函数。

我曾尝试使用 Jython、但 Jython 脚本需要通过 Jython 命令运行、而不能通过 Python3运行、该命令会在代码中保留、但在运行部分代码时会丢失会话详细信息。

请建议我通过 python 脚本运行各个 JS 函数、同时保持 debugSession 有效。

var PROJ_NAME = "gpio_ex3_interrupt"
var PROJ_WKSPC_LOC = "C:\\Users\\Sanskar Chandaliya\\Workspace_Stack_Paint"
 var PROJ_CONFIG = "CPU1_RAM"
var STACK_START_ADDR = 0xf4; // Example stack start address, adjust as necessary
var STACK_SIZE = 0x700;       // Example stack size, adjust as necessary
var PATTERN = 0xDEADBEEF;//

function calculatePeakStackUsage(startAddr, size, pattern) {
    var peakStackAddr = startAddr;
    for (var addr = startAddr; addr < startAddr + size; addr += 2) {
        var value = debugSession.memory.readData(1, addr, 32);
        if (value != pattern) {
            peakStackAddr = addr;
        }
    }
    return peakStackAddr;
}
//
// Import the DSS packages
//
importPackage(Packages.com.ti.debug.engine.scripting)
importPackage(Packages.com.ti.ccstudio.scripting.environment)
importPackage(Packages.java.lang)


var script = ScriptingEnvironment.instance();
// ccsServer = script.getServer("CCSServer.1")
// ccsSession = ccsServer.openSession(".*") 

script.traceSetConsoleLevel(TraceLevel.ALL)

var ds = script.getServer( "DebugServer.1" );


ds.setConfig("C:\\Users\\Sanskar Chandaliya\\Workspace_Stack_Paint\\gpio_ex3_interrupt\\targetConfigs\\TMS320F280049C.ccxml")
debugSession = ds.openSession( "*", "C28xx_CPU1" );
// debugSession.options.setBoolean("AutoRunToLabelOnReset", true);
try {
    // Connect to the target
    if (!debugSession.target.isConnected()) {
        debugSession.target.connect();
    }
} catch (ex) {
    script.traceWrite("Connect to target " + " failed!\nTerminating script.");
    throw ex; // Exit the script
}
if (!debugSession.target.isHalted()) {
    debugSession.target.halt();
}

// debugSession.memory.loadProgram("D:\\git_repos\\MC-BOOTLOADER\\UV_Bootloader\\CPU1_FLASH\\Bootloader.out")
debugSession.flash.options.setString("FlashEraseSelection", "Necessary Sectors Only (for Program Load)");
debugSession.options.setBoolean("AutoRunToLabelOnRestart", false);

debugSession.memory.loadProgram("D:\\git_repos\\MC-FIRMWARE-SUPER\\UV_MotorControl\\280049C_MC01\\UV_MotorControl.out")
if (!debugSession.target.isHalted()) {
    debugSession.target.halt();
}
print("Painting Stack")

for (var addr = STACK_START_ADDR; addr < STACK_START_ADDR + STACK_SIZE; addr += 2) {
    debugSession.memory.writeData(1, addr, PATTERN, 32); // Using 0 for PROGRAM memory page, adjust if needed
}
print("Stack Painted")

var verificationSuccess = true;
for (var addr = STACK_START_ADDR; addr < STACK_START_ADDR + STACK_SIZE; addr += 2) {
    var value = debugSession.memory.readData(1, addr, 32);
    if (value != PATTERN) {
        print("Verification failed at address 0x" + addr.toString(16) + ": expected 0xDEADBEEF, got 0x" + value.toString(16));
        verificationSuccess = false;
        break;
    }
}
if (verificationSuccess) {
    print("Stack verification successful.");
} else {
    print("Stack verification failed.");
}
print("Program is Loaded Successfully")
var properties=debugSession.breakpoint.createProperties();
properties.setString("Hardware Configuration.Type.Trigger 1", "");
properties.setString("Hardware Configuration.Type.Trigger 1.Location", 0x00760);
properties.setString("Hardware Configuration.Type.Trigger 1.Access", "Write");
properties.printProperties();
// env.traceWrite("--");

debugSession.breakpoint.add(properties);
debugSession.clock.runBenchmark()
if (debugSession.target.isHalted()) {
    print("targget is running")
    var peakStackAddr = calculatePeakStackUsage(STACK_START_ADDR, STACK_SIZE, PATTERN);
    print("Peak stack usage address: 0x" + peakStackAddr.toString(16));
    print("Peak stack usage size: " + (peakStackAddr - STACK_START_ADDR) + " bytes");
}

debugSession.target.runAsynch()
java.lang.Thread.sleep(10000); // Adjust sleep time as needed
if (!debugSession.target.isHalted()) {
    debugSession.target.halt();
}
print("Target is halted")
var haltedAddress = debugSession.memory.readRegister("PC"); // Adjust if needed based on the architecture
print("Target halted at address: 0x" + haltedAddress.toString(16));
// Calculate peak stack usage
var peakStackAddr = calculatePeakStackUsage(STACK_START_ADDR, STACK_SIZE, PATTERN);
print("Peak stack usage address: 0x" + peakStackAddr.toString(16));
print("Peak stack usage size: " + (peakStackAddr - STACK_START_ADDR) + " bytes");

while(1){}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您需要一个可以与 Jython 等 Java API 连接的 python 实现。 股票 python 将不起作用。 请注意、DSS 正式支持的唯一语言是 javascript。 任何其他语言都需要一种实现、使其能够与 Java API 交互。 请注意、此功能"按原样"提供、我们无法对此提供任何支持。

    理想情况下、您应该在此处使用一个环境(Jython)、而不是尝试混合和匹配。

    Ki