123 lines
2.6 KiB
Plaintext
123 lines
2.6 KiB
Plaintext
|
|
var fileinfo = "";
|
|
var FlashData = {};
|
|
|
|
FuncGetAllData = function(){
|
|
return FlashData;
|
|
}
|
|
FuncGetFileInfo = function(){
|
|
return fileinfo;
|
|
}
|
|
|
|
FuncOpenS19File = function(path){
|
|
import fsys.dlg;
|
|
if(path == null){
|
|
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
|
|
}
|
|
|
|
if(io.exist( path )){
|
|
//winform.editPath.text = path;
|
|
var readbuf = string.load(path);
|
|
|
|
readbuf = string.split(readbuf,'\r\n');
|
|
//console.dumpJson(readbuf);
|
|
var block = null;
|
|
FlashData = {};
|
|
for(i=1;#readbuf;1){
|
|
if(#readbuf[i] == 0){
|
|
continue;
|
|
}
|
|
var str = readbuf[i];
|
|
var data = "";
|
|
var addr = 0;
|
|
var len = 0;
|
|
select(string.slice(str,1,2)) {
|
|
case "S0"{
|
|
//S0为文件信息
|
|
var fileinfobuf = string.slice(str,9,-3);//取出文件信息
|
|
fileinfo = "file info:"+string.unhex(fileinfobuf,"")//解码
|
|
fileinfo = string.replace(fileinfo,"\z"," ");//替换空字符
|
|
FuncDisplay(fileinfo)//显示
|
|
continue;
|
|
}
|
|
case "S1"{
|
|
len = tonumber(string.slice(str,3,4),16)
|
|
addr = tonumber(string.slice(str,5,8),16)
|
|
data = string.slice(str,9,-3)
|
|
}
|
|
case "S2"{
|
|
len = tonumber(string.slice(str,3,4),16)
|
|
addr = tonumber(string.slice(str,5,10),16)
|
|
data = string.slice(str,11,-3)
|
|
|
|
}
|
|
case "S3"{
|
|
len = tonumber(string.slice(str,3,4),16)
|
|
addr = tonumber(string.slice(str,5,12),16)
|
|
data = string.slice(str,13,-3)
|
|
}
|
|
else {
|
|
continue;
|
|
}
|
|
}
|
|
if(block == null){
|
|
//空表,第一次进入
|
|
block = {};
|
|
block["address"] = addr;
|
|
block["data"] = {};
|
|
}
|
|
else {
|
|
//非空表
|
|
if(addr == (block["address"]+#block["data"])){
|
|
//连续,无动作
|
|
}
|
|
else {
|
|
//不同块,新建块
|
|
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
|
|
block["address"] = addr;
|
|
block["data"] = {};
|
|
//不连续,判断是否填充
|
|
/*不填充,所以注释了
|
|
if((addr & 0xfff800) == ((block["address"]+#block["data"])&0xfff800)){
|
|
//同一个块,填充FF
|
|
for(i=1;addr - (block["address"]+#block["data"]);1){
|
|
table.push(block["data"],0xff);
|
|
}
|
|
|
|
}
|
|
else {
|
|
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
|
|
block["address"] = addr;
|
|
block["data"] = {};
|
|
}
|
|
*/
|
|
|
|
}
|
|
|
|
}
|
|
|
|
data = string.unhex(data,"")
|
|
for(i=1;#data;1){
|
|
var bytedata = string.unpack(data,i)
|
|
table.push(block["data"],bytedata)
|
|
}
|
|
|
|
|
|
}
|
|
|
|
if(block != null){
|
|
table.push(FlashData,block)
|
|
//console.dumpTable(block["data"]);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
//blocknum = 1;
|
|
|
|
return path;
|
|
}
|
|
|
|
|
|
|