你好!
1,2.你可以能理解错误了,我刚看了下bootloader 中的函数:SRcdCvt
其实这个函数主要获取s19每行的地址,以及数据。
line+=2;
for(srcd_t->addr=0,i=0; i<adrlen; i++,line=line+2) { //get the address
sdata=hex2value(line);
srcd_t->addr = (srcd_t->addr<<8) + sdata;
checksum+=sdata;
}
这句中的左移8位, 是为了获取整个地址,这里以你提到的s1为例。
S1 13 4000 0030002051740000857C0000857C0000 95
获取地址的意思就是:首先获取0x40,但是实际地址是0x4000,所以需要0x40<<8+0x00.
对于S3也是一样的,s3的地址长度为4,所以需要多左移几次,其实就是一个字节一个字节的累加进来。
3,其实是用于数据长度不是偶数的情况。
s3的数据大小为0x15-(3+1)-1=0x10,所以不会出现oddflag=1的情况,这句可以忽略。
这句的意思就是把最后一个奇数的字节数据刷为0xff,其实这句对你是没有用的。
这样,你把你的应用程序工程发上来,我这边试下。
你自己也可以试下,我说的debug是debug 你的CW CAN bootloader工程,看看接收s19文件时候,s3文件的解析是否正确,而不是烧录了s19文件之后的情况,是过程中测试。 |