По пунктам: - выделить массив и заполнить его
Не очень понятно, о чём это. SRecord работает так: при загрузке HEX/SREC/BIN/etc заполняются те диапазоны, которые есть в этих файлах. Всё остальное - дырки. До загрузки - одна сплошная дыра размером 4 ГБайт. Также заполнять можно разными генераторами данных (включая генератором контрольной суммы), а не только загрузкой файлов.
- прочитать туда входной hex/srec
Это легко: "srec_cat infile.hex -intel -o outfile.s19 -motorola" (загрузили HEX, выгрузили SREC).
Кстати, в командную строку можно вписывать длинную последовательность преобразования, но для начала я советую делать по одному преобразованию за раз, сохраняя промежуточный результат во временном файле. Временный файл может быть всего один: при новой выгрузке старое содержимое файла перетирается.
- рассчитать контрольную сумму по нужному диапазону и положить в нужное место
Это тоже легко: "srec_cat infile.hex -intel -crc16-big-endian 0x1234 -o outfile.s19 -motorola" (поместили сумму по адресу 0x1234).
- записать выходной srec
Уже сделано в предыдущем пункте.
- перенести блок данных (таблица векторов) из одного места в другое место
Вообще-то таблицу векторов можно разместить где надо средствами линкера. Но можно и перенести при помощи SRecord в несколько шагов:
srec_cat infile.hex -intel -crop 0x8000 0x8080 -o vectors.hex -intel (сохранить таблицу векторов в отдельном файле)
srec_cat infile.hex -intel -exclude 0x8000 0x8080 -o vectorless.hex -intel (сохранить всё кроме таблицы векторов в отдельном файле)
srec_cat vectors.hex -intel -offset 0x1000 -o vectors.hex -intel (переместить таблицу векторов на 4 КБ вверх)
srec_cat vectors.hex -intel vectorless.hex -intel -o outfile.s19 -motorola (склеить 2 файла вместе)
Одной строкой (если ничего не путаю):
srec_cat '(' infile.hex -intel -crop 0x8000 0x8080 -offset 0x1000 ')' '(' infile.hex -intel -exclude 0x8000 0x8080 ')' -o outfile.s19 -motorola
- записать выходной srec строками s2/s3, располагая данные в строке в нужном количестве (предполагается, что загрузчик будет отправлять строки srec)
srec_cat blah-blah-blah -o outfile.s19 -motorola -address-length=3 -output-block-size=16 -data-only (это не пробовал, взял опции из мануала)
Кстати, мануал тут:
http://srecord.sou …e.net/srecord-1.62.pdf