请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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){}