C#实现s19文件解析

news/2024/11/30 14:33:41/

 

如下是s19实现解析简易代码,具体如下:

外部调用接口:ParseS19

输入参数:

1、path:文件绝对路径

输出参数:

1、startAddr:文件烧入芯片起始地址

2、BinData:文件二进制流List,List类型为Byte

设计要点:

1、读取行直至读不到数据结束

2、通过判断S1、S2、S3类型确定文件长度,将ASCII转换为字节流数据

3、使用Byte List存储数据

待完善:

1、未判断s19文件是否存在

2、未判断s0、S5、S7、S8、S9

3、未对文件做校验功能判断

 

/******************************************************************************* 该部分为S19文件和srec文件解析规则 * S0,位于文件的第一行,和其他行不同,地址部分没有使用,用0000置位,整行表示记录的开始* S1表示地址长度为两字节(4字符)的记录,包含类型、长度、地址、数据和校验和五个部分* S2表示地址长度为三字节(6字符)的记录,包含类型、长度、地址、数据和校验和五个部分* S3表示地址长度为四字节(8字符)的记录,包含类型、长度、地址、数据和校验和五个部分* S5表示文件中含有S1、S2、S3记录的个数,其后不接数据,包含S5的记录并不是每个文件必须的* S7表示地址长度为四字节(8字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束* S8表示地址长度为三字节(6字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束* S9表示地址长度为两字节(4字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束* 只有S1、S2、S3需要写入Flash中* ***************************************************************************/public static string ParseS19(string path, ref UInt32 startAddr, ref List<Byte> BinData)
{try{uint sumLen = 0;//记录的是字符的长度int lineNum = 0;string szLine = ""; //数据处理临时字符串string sTemp = "";int nowLineAddressLen = 0;int nowLineRecordLen = 0;uint nowLineAddr;//打开文件StreamReader HexReader = new StreamReader(path);while (true){//读取一行数据szLine = HexReader.ReadLine();//读完所有行导出最后一个块if (szLine == null){//Log("总函数:" + lineNum.ToString() + ",总长度:" + sumLen.ToString());sumLen = 0;break;}lineNum++;//判断第1字符是否是Sif (szLine.Substring(0, 1) != "S"){HexReader.Close();throw new Exception("S19文件第1个字符不是S");}//获取类型sTemp = szLine.Substring(0, 2);//为S0或S5 S7-S9则略过if (sTemp == "S0" || sTemp == "S5" || sTemp == "S7" || sTemp == "S8" | sTemp == "S9"){continue;}//获取当前行内数据的地址长度nowLineRecordLen = Convert.ToInt32(szLine.Substring(2, 2), 16);//Console.WriteLine("line=" + lineNum.ToString() + ",len=" + nowLineRecordLen.ToString());if (nowLineRecordLen % 2 != 0){//throw new Exception("S19文件第"+lineNum.ToString()+ "行数据长度不对");}//获取当前行内数据的地址nowLineAddressLen = ParseAddressLen(sTemp);nowLineAddr = Convert.ToUInt32(szLine.Substring(4, nowLineAddressLen), 16);//首行地址当作文件起始地址if (sumLen == 0){startAddr = nowLineAddr;}记录数据int dataLen = nowLineRecordLen*2 - nowLineAddressLen - 2;sTemp = szLine.Substring(4 + nowLineAddressLen, dataLen);for (int i = 0; i < dataLen; i += 2){string valStr = sTemp.Substring(i, 2);BinData.Add(Convert.ToByte(valStr, 16));sumLen += 1;}}HexReader.Close();return "OK";}catch (Exception ex){return ex.Message;}
}//返回地址长度
private static int ParseAddressLen(string SecondFlag)
{int AddressLen = 0;switch (SecondFlag){case "S0":AddressLen = 2 * 2;break;case "S1":AddressLen = 2 * 2;break;case "S2":AddressLen = 3 * 2;break;case "S3":AddressLen = 4 * 2;break;case "S7":AddressLen = 4 * 2;break;case "S8":AddressLen = 3 * 2;break;case "S9":AddressLen = 2 * 2;break;}return AddressLen;
}

 


http://www.ppmy.cn/news/178720.html

相关文章

KILE生成S19或者BIN文件

Keil生成S19文件或者Bin文件需要.axf文件&#xff0c;首先我们需要直到.axf文件的位置 keil或者IAR提供了一个格式转换的小工具&#xff1a;fromif fromelf.exe文件的位置在安装目录 Keil_v5\ARM\ARMCC\bin 或者 Keil_v5\ARM\ARMCLANG\bin 目录下。 具体设置方法如下&#x…

飞思卡尔 s19 转 bin

1. S19文件格式详解 S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件&#xff0c;是一段直接烧写进MCU的ASCII码&#xff0c;英文全称问Motorola format for EEPROM programming。【注意&#xff1a;编者】&#xff1a; 上面“是一段直接烧写进M…

S19格式

S19格式介绍&#xff1a; 为了在不同的计算机平台之间传输程序代码和数据&#xff0c;摩托罗拉将程序和数据文件以一种可打印的格式(ASCII格式)编码成s格式文件。S-record格式文件是FreescaleCodeWarrior编译器生成的后缀名为.S19的程序文件&#xff0c;S格式文件是Freescale推…

【C++】位图应用 | 布隆过滤器

文章目录 1. 位图应用题目一代码实现setrsettest具体代码 题目二位图优缺点总结 2. 布隆过滤器提出背景概念具体实现hash1 hash2 hash3N取值问题settsettset中在与不在那个准确&#xff1f;使用场景及特点具体代码 1. 位图应用 题目一 给40亿个不重复的无符号整数&#xff0c…

c语言解析s19文件,常见image格式(hex/s19)如何校验?且看Checksum-嵌入式系统-与非网...

今天痞子衡继续给大家介绍针对 packet 校验的最简单的校验法 - 即和校验法。 一、和校验法基本原理 1.1 校验依据 和校验法的校验依据就是判断一次传输的 n bytes 组成的 packet 的所有 byte 累加和结果(仅截取低 byte)在传输前后是否一致。 1.2 和校验位 为了实现和校验,通常…

关于s19赛季服务器维修,王者荣耀S19赛季版本更新问题及解决办法一览

王者荣耀3月31日进行了一波大更新&#xff0c;因为之前早有爆料&#xff0c;所以大家对这次更新内容应该有了解&#xff0c;主要就是s19赛季的更新&#xff0c;有很多新英雄新皮肤。不过&#xff0c;有些玩法发现更新不了&#xff0c;更新中出现了不少问题。今天王者荣耀正式更…

S19文件和HEX文件解析

目录 一、S19文件解析&#xff1a; 1、记录类型 2、长度计算 3、地址 4、数据 5、校验和及计算 二、HEX文件解析 1、记录类型 2、起始地址 3、数据长度 4、校验和 一、S19文件解析&#xff1a; S19文件格式与mot文件只是命名方式不同&#xff0c;看数据格式的话&…

关于s19赛季服务器维修,王者荣耀S19赛季有哪些调整 S19野区和中线调整内容一览...

S19&#xff0c;目前呢&#xff0c;王者荣耀s19赛季的皮肤已经曝光&#xff0c;大家都知道是明世隐了&#xff0c;同时s19赛季相关调整也都跟着曝光了&#xff0c;那么王者荣耀s19赛季有哪些调整呢&#xff1f;本次就为大家带来了王者荣耀S19赛调整一览&#xff0c;还不清楚S19…