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.
工具/软件:Code Composer Studio
我编写了一段 Java 代码、它占用程序内存并将其解析为我需要的另一种格式。
目标:我希望在调试器中将此 Java 代码作为初始化脚本运行、或者在构建步骤中作为预编译命令运行。
问题:这是可能的吗? 您能否向我提供详细说明如何执行此操作的任何可用资源? 我知道 DSS 在 Java 命令上运行、我获得了使用 JavaScript 命令所需的一些功能。 是否有人可以向我提供一些文档或提供有关如何实现这一目标的分步指南?
我在下面添加了我的 Java 代码。 它按设计工作、但我希望在按下调试按钮时将其作为脚本运行、或者让脚本调用它。
感谢您的帮助、让这一点变得更加清晰。
//导入语句
导入 com.ti.ccstudio.scripting.environment.*;
导入 com.ti.debug.engine.scripting.*;
导入 java.io.*;
/*变量声明*/
//有关操作此代码的说明,请参见 README
/*
*主要计划目标:自动创建 VHD 存储器。
*
*类函数的详细信息:
*
*本课程利用 Code Composer Studio 的 DSS 脚本环境。
*此处编写的代码在 IDE Code Composer Studio 的调试配置中用作初始化脚本。
*
*程序流程:
***/
公共类 VHD_MEMORY_Automation{
公有静态 void hex_pars(){
system.out.println ("HEXPARSE!");
INT START = 32768;
INT FIRST = 0;
尝试(BufferedWriter bw = new BufferedWriter (new FileWriter ("C:\\Users\\Blake\\Internship\\src\\meta-inf\\program_memory.vhd"、TRUE))){
system.out.println ("FIRSTWRITE!");
bw.write ("library IEEE;\n"+
"使用 IEEE.std_logic_1164.all;\n"+
"使用 IEEE.numeral_std.all;\n"+
"\n"+
"\n"+
"实体 program_memory 为\n"+
"端口(clock\t:in\tstd_logic;\n"+
"\t maB\t\t\t:in\tstd_logic_vector (15向下到0);\n"+
"\t mdb_in \t:out\tstd_logic_vector (15下载到0);\n"+
"\t mdb_out \t:in\tstd_logic_vector (15向下减至0);\n"+
"\t write\t:in\tstd_logic);\n"+
"结束实体;\n"+
"\n"+
"program_memory 的 architure program_memory_archis \n"+
"\n"+
"类型 ROM_TYPE 是 std_logic_vector (7下载到0)的数组(32768至65535);--这是 MAB:X8000至 xFFFFFFF\n"+
"\n"+
"常量 ROM:rom_type:=(");
bw.flush();
BW.Close();
}捕捉(IOException e){
e.printStackTrace();
}
system.go();
尝试{
system.out.println ("SECONDWRITE!");
BufferedWriter ZW =新的 BufferedWriter (新的 FileWriter ("C:\\Users\\Blake\\Internship\\src\\meta-inf\\program_memory.vhd"、TRUE));
BufferedReader 读取器=新的 BufferedReader (新的 FileReader (
"C:\\ti\\hex_output.txt"));
string line = reader.readline();
while (line!= null){
if (line.compareTo("0xFFFF")!= 0){
system.out.println (行);
system.out.println ("比较 FFF");
system.out.println( line.compareTo("0xFFFF")!= 0);
开关(第一个){
//忽略第一行
情况0:
system.out.println ("忽略! "+行);
First = 1;
中断;
//特殊情况第一行需要唯一的间距
案例1:
system.out.println ("第一行!"+行);
system.out.println (line.charAt(0));
system.out.println (line.charAt(1));
system.out.println (line.charAt(2));
system.out.println (line.charAt(3));
system.out.println (line.charAt(4));
system.out.println (line.charAt(5));
First = 2;
Line = line.replace ("\n"、"");
zw.write (start +"=> x"+"\");
zw.write (line.charAt(4));
zw.write (line.charAt(5));
zw.write ("\"+"、"+"\n");
Start++;
zw.write (") ");
zw.write (start +"=> x\"+ line.charAt(2));
zw.write (line.charAt(3)+"\"+"、"+"\n");
Start++;
中断;
//所有其他情况都属于此类别。
案例2:
system.out.println ("第二行! "+行);
Line = line.replace ("\n"、"");
zw.write (") ");
zw.write (start +"=> x\"+ line.charAt(4));
zw.write (line.charAt(5)+"\"+"、"+"\n");
Start++;
zw.write (") ");
zw.write (start +"=> x\"+ line.charAt(2));
zw.write (line.charAt(3)+"\"+"、"+"\n");
Start++;
中断;
默认值:
抛出新的 IllegalStateException (“意外值:“+第一个”);
}
Line = reader.readline();
}否则中断;
}
system.out.println ("LASTWRITE!");
zw.write (") --IRQ 引导程序\n"+
" 65534 => x\"00\"、--复位向量= xFFFE:xFFFFFFFFF\n"+
" 65535 => x\"80\"、--启动值= X8000\n"+
"\n"+
" 其他=>x\"00\");\t\n"+
"\n"+
"信号 EN:std_logic;\n"+
"\n"+
"开始\n"+
"--注1:总线系统使用16位地址(MAB)\n"+
"-- 此地址大小可访问 x0000到 xFFFF 之间的位置\n"+
"-- 但我们的数组只能从 X8000到 xFFFF 和\n"+定义
"-- 如果我们尝试使用任何其他地址访问它,它将会崩溃。\n"+
"-- 因此、我们首先需要做的是创建一个本地使能项、\n"+
"-- 仅当 MAB 在 X8000至 xFFFF 范围内时才会生效。\n"+
"\n"+
" LOCAL_EN:进程(MAB)\n"+
" 开始\n"+
" 如果((TO_INTEGER (UNSIGNAL (MAB))>= 32768)和(TO_INTEGER (UNSIGNAL (MAB))<= 65535))、则\n"+
" en <='1';\n"+
" 否则\n"+
" EN <='0';\n"+
" 结束 IF;\n"+
" 结束进程;\n"+
"\n"+
"\n"+
"--注2:总线系统使用16位地址(MAB)\n"+
"-- MDB_OUT 也作为一个16位字提供\n"+
"-- 但是,内存阵列实际上是作为8位字节构建的。\n"+
"-- 因此对于给定的16位 MAB,我们给出了 MDB_OUT = HB:lb\n"+
"-- 或= ROM (MAB+1):ROM (MAB)\n"+
"\n"+
" memory_rom:进程(时钟)\n"+
" 开始\n"+
" 如果(上升沿(时钟))、则\n"+
" 如果(EN='1'和 write='0')则 \n"+
" mdb_in <= ROM (TO_integer (unsigned (MAB))+ 1)& ROM (TO_integer (unsigned (MAB)));\n"+
" 结束 IF;\n"+
" 结束 IF;\n"+
"结束进程;\n"+
"\n"+
"\n"+
"终端架构;");
reader.close();
Zw.close();
}捕捉(IOException e){
e.printStackTrace();
}
公共静态空 main (String[] args){
int IOMEMORY_HEX = 1;
int page_program = 0;
//创建我们的脚本环境对象-这是任何脚本和的主要入口点
//创建其他可脚本服务器和会话的工厂
ScriptingEnvironment 脚本 Env = ScriptingEnvironment.instance();
尝试{
//在当前目录中创建日志文件以记录脚本执行
ScriptEnv.traceBegin ("VHD_MEMORY_LOG.xml");
DebugServer debugServer =空;
DebugSession debugSession=空;
//记录所有内容
Scriptenv.traceSetConsoleLevel (TraceLevel.all);
ScriptEnv.traceSetFileLevel (TraceLevel。all);
debugServer =(DebugServer) scriptEnv.getServer ("DebugServer.1");
debugServer.setConfig("C:/Users/blake/ti/CCSTargetConfigurations/NewTargetConfiguration.ccxml");
debugSession=debugServer.openSession(".*");
debugSession.target.connect();
//设置超时
scriptEnv.setScriptTimeout(15000);
debugSession.memory.loadProgram ("C:\\Users\\Blake\\workspace_v10\\asm_AddrMode3_Absolute\\Debug\\asm_AddrMode3_Absolute.out");
debugSession.memory.SaveData (page_program、0x8000、"C:\\ti\\hex_output.txt"、0x800、IOMEMORY_HEX、false);
hex_parse();
}捕获(ScriptingException e){
ScriptEnv.traceWrite ("error");
e.printStackTrace();
}
}
}
您好、Blake、
[引用 user="Blake Tanger">目标:我希望在调试器中将此 Java 代码作为初始化脚本运行、或在构建步骤中作为预编译命令运行。 [/报价]
两者都是可行的。 通过初始化脚本或预编译步骤,您可以调用以运行 Java 程序
对于后者、它非常简单。 预编译步骤 字段只需将字符串传递到系统控制台即可运行。 因此, 您只需指定运行 Java 程序的命令,就像从系统控制台运行一样。
请注意、预编译步骤仅在实际需要编译程序时运行。 因此、如果使用"重建"、它将始终运行。 但不适用于"增量构建"。
对于前者、可以在 目标配置文件中的 GEL 文件 中、也可以在 调试配置中的 js 初始化脚本中。您还可以发送命令以从系统控制台执行。 在我进一步阐述之前、您是否会考虑将 Java 代码转换为 javascript? 然后您可以按原样指定 js 脚本。
谢谢
Ki
Ki、
再次感谢您的帮助说明和指导。 我能够使用您推荐的预编译步骤资源来运行 Java 程序。 非常感谢您回答这么好的问题。
Blake