工具/软件: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();
}
}
}