Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 20000 рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2021, 18:45   #91
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

sergey.serg-72,
Но всё это меркнет , на фоне того (сейчас Вас рассмешу ),что сегодня, по злой усмешки судьбы, или иронией ... Я вытащил "счастливый" билет, а точней чёрную метку для себя.
Сегодня как и предполагалось (но гораздо позже) тянули кому что писать и мне выпал srec....
Я в шок ушёл сразу.... Даже без комментариев , столько убил сил на hex, всё как таблицу умножения выучил, разобрался во всём и думал что всё будет отлично. Я srec забросил совсем изучать не до него было.Всё на hex поставил. И такая засада... ребята ржали до слёз, а мне не до смеха , если честно. Вот это залёт, так залёт !!!
При чём hex писать без смещений. А вот srec со смещением обязательно ( edit).
Ботан и так лучший, да и по hex всё благодаря Вам решили, а ему и выпал hex.
Я Джонсу и так и этак, мол пощади, лучше hex ...Джонс не в какую....
Пол группы повезло, так повезло. А остальные попали конкретно.....
Мне к стате, интуиция сразу подсказывала про srec изначально мелькнуло, но мне этот формат не понравился сразу почему то, вот не лежала к нему душа и всё тут.
Вот ирония судьбы.... Сейчас приступил к изучению srec, но как подумаю, что то дурновато становится... Вот такие пироги с котятами !!! Короче попадос полный !!!

Последний раз редактировалось sergey.serg-72; 22.03.2021 в 18:54.
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.03.2021, 06:02   #92
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,172
По умолчанию

Цитата:
Сообщение от sergey.serg-72
в редакторе склеил несколько раз
Да, так и правда проще получить нужный размер.
Цитата:
Сообщение от sergey.serg-72
Единственный плохой (на мой взгляд) момент, он переводит в hex, всё в одну строку
Предположу, что этот конвертер использует Linux переноc строки (#10), а обычный блокнот не умеет его показывать. Попробуйте открыть такой hex в Notepad++, например.
Цитата:
Сообщение от sergey.serg-72
и конверт в ошибку
Это странно. Любой файл ведь можно расценивать как bin при конвертировании в hex.
Цитата:
Сообщение от sergey.serg-72
Разве отниманием от определённого значения (константы) нельзя добится того же ?
Не очень понял, что от чего отнимать.
Цитата:
Сообщение от sergey.serg-72
Может в edit ограничение поставить в 5, или 7 символов максимально ?
Тогда уж в 8 символов.
Цитата:
Сообщение от sergey.serg-72
мне выпал srec
В принципе, отличия минимальные (https://en.wikipedia.org/wiki/SREC_(...SREC_Chart.png). Добавить стандартную шапку "S00600004844521B", вывести весь файл записями S3, добавить запись S5 (хотя HxD не стал ее добавлять, да и запись помечена как опциональная, так что можно не добавлять), завершить стандартной записью конца "S70500000000FA".

Цитата:
Сообщение от sergey.serg-72
Проверки должны быть когда знаешь что программа пойдёт в массы.
Безошибочно редко когда получается. Спидраны без глитчей были бы длиннее и скучнее:Как пройти Шрек 2 за 17 минут | Разбор спидрана
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 23.03.2021 в 22:10.
BDA вне форума Ответить с цитированием
Старый 23.03.2021, 21:31   #93
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Предположу, что этот конвертер использует Linux переноc строки (#10), а обычный блокнот не умеет его показывать. Попробуйте открыть такой hex в Notepad++, например.
Да вроде про Linux в описании не было, может конечно и так вот файл после конвертера, конвертер этот тоже удалил надорвался на большом файле, при чём горазда меньшем , чем наш конвертер делает + в конвертере не обработана ошибка (что мол большой файл) а вылетает окно системы, что не очень хорошо для профи.
Что бы там не говорили, но пока нашему конвертеру нет альтернативы (редакторы не беру), так что труд то нужный, в инете полно конвертеров, да как показывает практика все в утиль пошли ...
Нельзя всё таки пускать в массы такие сырые проги.
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.03.2021, 21:32   #94
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию архив файла

Файл
Вложения
Тип файла: rar тест - .rar (271 байт, 1 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.03.2021, 21:34   #95
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Это странно. Любой файл ведь можно расценивать как bin при конвертировании в hex.
Расценивать конечно можно, но главное делать надо, а не в ошибку уходить.
Раз ушёл, значит не делает, значит фильтр не обходим, чтоб не вводить в заблуждение.
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.03.2021, 21:37   #96
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не очень понял, что от чего отнимать.
Имел ввиду заменить операции с div , mod на простое минус ...- + /
С ними не понятно не видишь какие числа делят и трудно представить.
В общем для меня камнем преткновения они стали, может из за того, что новое и делать не приходилось.
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.03.2021, 21:41   #97
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Тогда уж в 8 символов.
Согласен, надо поставить ограничение и не плохо было бы ,я тут подумал ввести ограничение на максимальный размер файла, чтоб не было , как у других конвертеров , таких косяков ?
Какой поставить размер файла максимальный ?
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.03.2021, 22:34   #98
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,172
По умолчанию

Цитата:
Сообщение от sergey.serg-72
вот файл после конвертера
Да, окончания строк #10.
Цитата:
Сообщение от sergey.serg-72
заменить операции с div , mod на простое
В принципе, можно, но если есть удобные команды div и mod, то записывать их в несколько действий нет смысла. Хотя в данном случае правильнее использовать and и shr вместо mod и div, так как делители являются степенями двойки.
Код:
    cur_high_addr := (fbin.Position + offset) shr 16;
    if cur_high_addr <> high_addr then
    begin
      high_addr := cur_high_addr;
      sum := 6 + high_addr and $FF + high_addr shr 8;
      sum := -sum;
      s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
      ftxt.Write(s[1], Length(s));
    end;
    count := fbin.Read(b[0], BYTES_IN_LINE);
    sum := count + low_addr and $FF + low_addr shr 8;
Цитата:
Сообщение от sergey.serg-72
ввести ограничение на максимальный размер файла, чтоб не было , как у других конвертеров , таких косяков
Правильное ограничение, это не fbin.Size проверить на непревышение размера. Нужно узнавать размер файла до его загрузки в поток. Но проще обернуть весь код в Try блок и обработать все возникающие ошибки с выводом своих окошек-сообщений.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.03.2021, 22:55   #99
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
В принципе, отличия минимальные (https://en.wikipedia.org/wiki/SREC_(...SREC_Chart.png). Добавить стандартную шапку "S00600004844521B", вывести весь файл записями S3, добавить запись S5 (хотя HxD не стал ее добавлять, да и запись помечена как опциональная, так что можно не добавлять), завершить стандартной записью конца "S70500000000FA".
Я бы не сказал что минимальные, геморрой ещё тот этот srec....
Шапку добавить не проблема и конец файла.
вывести весь файл записями S3 : S3 это уже не s19 (16 бит)- 2 байта в адресе , s2 это уже s28 (24 бита ) 3 байта в адресе , а s3 это , уже получается S37 (32 бита) 4 байта в адресе.
Значит какая то разница есть между ними? я имею ввиду как я понял для микроконтроллеров есть разница 8,16 и 32 битные. иначе бы смысл какой в этом s19,s28, s37? значит один может работать на одном микроконтроллере , а другие уже нет.
И я честно говоря не видел конвертеров s37, только редакторы и то один автоматом переключает.

Всё ведь зависит от размера файла, какая длина файла такая s будет 19, маленькие размеры файла и соответственно и адреса не большие , 28 уже на много больше и в адресах три байта, ну и 37 это уже гиганты наверное с огромной адресацией.
запись S5 , да редакторы её игнорят , да и те, что есть конверторы у меня тоже игнорят.Это не обязательные записи, как и шапка к стате.
Можно и s7 завершить она как раз для 32 битной адресации, хотя обычно полный конец s9.
s5, это количество записей в файле (кроме шапки).
Тип записи в начале, потом количество данных (адрес включительно) количество байт в строке скажем 13 =19 включает 13+ адрес+сами данные пересчитал и от $FFFF отнял полученное. Вот и контролка. Это что нормально? зачем считать запись данных и адрес в подсчёт контролке, за чем?, почему не сделать как в hex? Я вообще не понимаю за чем такие сложности, просто адрес записи (зависит от размера файла) , данные и контролка строки с данными и всё, за чем такой гимор , я не понимаю. Сейчас прогеры записывают и сверяют записанное с буфером записи, если всё окей, выводится окно, если ошибка, нажал на перезапись и перезаписал всё. Не считают прогеры контролку строки, они данные записывают и сверяют с буфером по байтно.

Нет и srec трудней hex однозначно. Это только видимость что похожи, я тоже с начало нахрапом навалился стал писать и потом понял, фиг там..... 1) определить тип записи , это надо явно с адресацией увязывать , а на каком размере ? как я понял уже после 65535 байт уже s2, больше s3. Далее тип записи адрес (2 байта, три, или 4 байта ) в адресе, потом данные , а уж потом считать контролку. А в контролку входит как я уже говорил количество байт, адрес, а потом сами данные. Значит надо перво, на перво по размеру файла определится с адресацией 16, 24, или 32 битный адрес как с этим решил вырисовывается тип s19, s28, s37, далее как определились с типом, надо пересчитать данные и пересчитать данные + адрес и записать это в счётчик, а в заключении пересчитать контролку и записать в конец строки.
А с адресами я так и не понял до конца с div, mod мне проще по размеру определится файла если больше, или меньше 65535 то s19 и.тд.
Так что нахрапом не выщло, не тот у меня уровень ещё и не те знания к сожалению.
Это ещё Ботану нашему да, легче на много , пока попросили его заняться , пока он сам тупит, ждём пока.
Чтоб я врубился сам , мне построчное, по шаговое объяснение нужно, чтоб я уловил до конца, а у меня провалы по некоторым моментам . Описываю вроде правильно, потом смотрю что то не то... А раз не допонял , значит не уяснил.

SetLength(b, BYTES_IN_LINE); здесь всё ясно считали в массив данные по 16 байт для строки, вопросов нет , всё ясно что делается.
Далее, с форматом разобрался это форматирование строки при чём и hex и числовые данные и строковые, это действительно вещь хорошая, в формате
s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]); всё ясно : начало записи ,02000004% тоже ясно шапка , 4x% адрес из 4 байт 2x%s' тоже ясно строка , ну и адрес идёт сумма и перенос строки тоже ясно .
count := fbin.Read(b[0], BYTES_IN_LINE); тоже всё ясно переменной присвоили прочитанный массив данных, здесь тоже ясно.
data_s := data_s + IntToHex(b[i], 2);
Inc(sum, b[i]); с этим тоже всё ясно.
ftxt.Write(s[1], Length(s)); с этим тоже всё ясно.

Пошли провалы :

low_addr := fbin.Position + offset; // здесь ясно что переменной low_addr word(2 байта) присваиваем позицию в файле + offset данные смещения из edit
cur_high_addr := (fbin.Position + offset) div $10000; дальше почти тоже самое только другой переменной и делим что позицию + смещение на $10000 ? для чего?
if cur_high_addr <> high_addr then здесь тоже не совсем понятно, данные адреса одной переменной не равны данным адреса другой , а какие данные? Когда не видишь то трудно представить. Если скажем требуется делением от 30, получить 6, то тут ясно что 30/ 6=5 это ясно, потому что видишь данные и понимаешь что на что , надо делить.

sum := 6 + high_addr mod $100 + high_addr div $100; далее тоже не понятное действие почему к 6 прибавляем ? откуда 6 взято? $100- это очевидно деление по модулю . 256, далее опять делим но уже с помощью div а что на выходе ?

sum := count + low_addr mod $100 + low_addr div $100; тоже самое не понятно, кроме того, что переменной sum мы присваиваем буфер данных прочитанных из файла , дальше прибавляем адрес и делим опять..... провал...

Понятно что первый блок в коде обрабатывает адреса и готовит тип записи , это понятно.
Но mod, div + адрес, затем делим по модулю 256 не ясно какие данные, цифры мы делим.
По этому провал и заминка...

А в srec уже всё по другому надо формировать.

https://ru.qaz.wiki/wiki/SREC_(file_format)

Последний раз редактировалось sergey.serg-72; 23.03.2021 в 23:20.
sergey.serg-72 вне форума Ответить с цитированием
Старый 24.03.2021, 05:31   #100
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,172
По умолчанию

Если в задании сказано просто SREC и не уточнено, какой из вариантов строго, то, для упрощения переделки, лучше равняться на s37. Мне кажется, для микроконтроллеров главное, чтобы адреса в файле не вылезли за размеры памяти микроконтроллера, а не битность адреса.
Цитата:
Сообщение от sergey.serg-72
Всё ведь зависит от размера файла
Еще и от желаемого смещения.
Цитата:
Сообщение от sergey.serg-72
не обязательные записи, как и шапка к стате
Запись шапки не помечена как необязательная, так что лучше добавить.
Цитата:
Сообщение от sergey.serg-72
хотя обычно полный конец s9
По документации строго S9 завершает записи S1, S8 - записи S2, S7 - записи S3.
Цитата:
Сообщение от sergey.serg-72
почему не сделать как в hex?
Так ведь, наоборот, складывается даже меньше полей, чем в HEX. В HEX еще и поле типа прибавлялось, а в SREC - нет.
Цитата:
Сообщение от sergey.serg-72
Не считают прогеры контролку строки, они данные записывают и сверяют с буфером по байтно.
И зря. Мало ли как данные в файле изменили перед заливкой. А так хоть гарантия того, что потрудились и контрольные суммы под свои изменения тоже поправили.
Цитата:
Сообщение от sergey.serg-72
вырисовывается тип s19, s28, s37
Или смотреть максимально возможный адрес (длина файла + смещение) и выбирать тип. Или упростить себе жизнь и сразу выдавать только в формате s37.
Цитата:
Сообщение от sergey.serg-72
считали в массив данные по 16 байт для строки
Это не так. SetLength устанавливает размер динамического массива "b" в BYTES_IN_LINE элементов. А чтения в массив это "count := fbin.Read(b[0], BYTES_IN_LINE);".
Цитата:
Сообщение от sergey.serg-72
s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
Тут места подстановки чуть съехали. "%.4x" - адрес, "%.2x" - контрольная сумма, "%s" - строка.
Цитата:
Сообщение от sergey.serg-72
count := fbin.Read(b[0], BYTES_IN_LINE);
Нет, в переменной count количество реально прочитанных байтов. А сами данные в массиве "b".
Цитата:
Сообщение от sergey.serg-72
low_addr word(2 байта) присваиваем позицию
Сумма позиции и смещения является 8байтовым числом, а при записи в 2хбайтовую переменную старшие байты отбросятся, а останутся младшие.
Цитата:
Сообщение от sergey.serg-72
на $10000 ? для чего?
Чтобы узнать старшие 2 байта адреса. Весь 4хбайтовый адрес разделяется на младшие (low_addr) и старшие (cur_high_addr) два байта.
Цитата:
Сообщение от sergey.serg-72
а какие данные?
У каждого прочитанного кусочка данных из файла свой полный адрес, который растет при каждом новом чтении на 16. Вот как только младшие 2 байта адреса "переполнятся", то изменяются старшие 2 байта. Простой пример для десятичных чисел: 00, 01, 02, ..., 09, 10. После 9 идет 10 - ноль сменился на единицу в старшем разряде. Вот это событие нужно поймать.
Цитата:
Сообщение от sergey.serg-72
откуда 6 взято?
Потому что считаем контрольную сумму строки "02000004DDDDCC", т.е. 2 + 0 + 0 + 4 + DD + DD. Адрес 2хбайтовый - к сумме нужно прибавить старший и младший байты.
Цитата:
Сообщение от sergey.serg-72
переменной sum мы присваиваем буфер данных прочитанных из файла
Это не буфер, а поле количества данных (в документации LL).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно создать "батник", вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Помощь студентам 2 03.09.2013 15:03
Удаление первых n-строк из txt-файла Neksion Помощь студентам 2 10.07.2013 17:12
Создать чтение из файла и запись в файл txt на С++ skifre Фриланс 0 01.06.2012 15:16
поиск и выципление строк из txt файла D_e_n_n Помощь студентам 7 04.02.2011 05:39
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 11:51


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS