Hello,
I want to write a SREC file into RAM memory by using a C code. I also parsed the srec by address and memory but it doesn't write to the specific memory. Must I restart the device also in the code so this will work? Here is my C code:
const char *mode = {"S00F000063765F5A345F312E73726563BF\
S31501002BD0182106B01881110CD231707FE4045063BC\
S31501002BE000207C008146C03318211114009318017E\
S31501002BF0112400051821101418011024707FE40413\
S31501002C007C0006AC7C00014654630030C231188159\
S31501002C10100C1C2100500008182106E00080D90183\
S31501002C20D7F1011F71200000553F00087140600077\
S31501002C30512A03C8710000017509C98C552A03C8B8\
S31501002C407120600071400001354913627800020D60\
S31501002C50513F000819298001553F0008515F0008BE\
S31501002C60712018007121C5407F8A48007D20002609\
S31501002C707529E0077529E03F7D2401207529203F4C\
S31501002C807A05004071200000553F00087120600060\
S31501002C9071406000314A1362754A063F194AE001E4\
S31501002CA0754A063F35491362712060003129136266\
S31501002CB07529063F7D2A4B787128E00055490000A9\
S31501002CC079FFFF90182106F0D3F1011F780000006B\
S31501002CD0182106E0D7F1011F712058001929D1806A\
S31501002CE051290004553F0008712058001929D18047\
S31501002CF0714000FE5D4901C8712058001929D18033\
S31501002D007140E11D194AD001554901E87120580069\
S31501002D101929D180714000FE5D4901CA7120580010\
S31501002D201929D1807140E13A194AD001554901EC7E\
S31501002D30712058001929D180515F0008754A001F7A\
S31501002D40714BC2F055490004712058001929D180F0\
S31501002D50515F000855490004197F802053EBFFFCA1\
S31501002D6003310004182106F0D3F1011F02317D3F22\
S31501002D700BA6197F801053EBFFFC033100041821C9\
S31501002D8006E0D7F1011F7D3E42A6553F0008513F9F\
S31501002D9000085D3F000C713FE404715FE404510AD1\
S31501002DA00000595F000C754A043F7D4A20704817A0\
S31501002DB07CEA50307D4A50F87D0A5038554900006A\
S31501002DC0715FE404593F000C7529043F19298008F5\
S31501002DD07D2910707D2A4A1451290000553F0010A3\
S31501002DE0711FE404593F000C7529043F7140E1004D\
S31501002DF01D4A2000192980087D2910707D284A1452\
S31501002E0055490000197F802053EBFFFC0331000474\
S31501002E10182106E0D7F1011F7D3E42A6553F000865\
S31501002E20513F00085D3F000C715FE404593F000CFF\
S31501002E307529043F192980047D2910707D2A4A14B9\
S31501002E4071400000554900007C008146197F8020B1\
S31501002E5053EBFFFC03310004182106F00080D50175\
S31501002E60D3F1011F7120E1001D291000031379FF21\
S31501002E70FEF779FFFF0D79FFFF9B197F8010500B3D\
S31501002E800004009053EBFFFC033100040000000036\
S70501000000F9"};
void functionSrec() {
int i = 0;
int end = 0;
int end2;
uint8_t value[255];
uint8_t add[2];
memcpy(add, &mode[end + 2], 2);
end2 = 2 * strtol(add, NULL, 16);
while (end < strlen(mode)) {
i++;
if (i == 1 && (mode[end + 1] == '0' || mode[end + 1] == '1')) {
uint8_t address[4];
address[0] = mode[end + 4];
address[1] = mode[end + 5];
address[2] = mode[end + 6];
address[3] = mode[end + 7];
uint8_t value2[end2 - 6];
memcpy(value2, &mode[end + 8], end2 - 6);
*((char *)address) = value2;
}
else if (i == 1 && mode[end + 1] == '2') {
uint8_t address[6];
address[0] = mode[end + 4];
address[1] = mode[end + 5];
address[2] = mode[end + 6];
address[3] = mode[end + 7];
address[4] = mode[end + 8];
address[5] = mode[end + 9];
uint8_t value2[end2 - 8];
memcpy(value2, &mode[end + 10], end2 - 8);
*(char *)address = value2;
}
else if (i == 1 && mode[end + 1] == '3') {
uint8_t address[8];
address[0] = mode[end + 4];
address[1] = mode[end + 5];
address[2] = mode[end + 6];
address[3] = mode[end + 7];
address[4] = mode[end + 8];
address[5] = mode[end + 9];
address[6] = mode[end + 10];
address[7] = mode[end + 11];
uint8_t value3[end2 - 10];
memcpy(value3, &mode[end + 12], end2 - 10);
*(char *)address = value3;
}
else if (i == 1 && mode[end + 1] == '7') {
uint8_t address[8];
address[0] = mode[end + 4];
address[1] = mode[end + 5];
address[2] = mode[end + 6];
address[3] = mode[end + 7];
address[4] = mode[end + 8];
address[5] = mode[end + 9];
address[6] = mode[end + 10];
address[7] = mode[end + 11];
uint8_t value2[end2 - 10];
memcpy(value2, &mode[end + 12], end2 - 10);
*((char *)address) = value2;
}
if (i == 1) {
i = 0;
end += (2 * strtol(add, NULL, 16)) + 4;
memcpy(add, &mode[end + 2], 2);
end2 = 2 * strtol(add, NULL, 16);
}
}
}