Jump to content

    

Правка файла на ASM

Есть файл на ASM. Писан давно и размером 470к. Кодировка текстов какая-то старая. В нотепеде часть текста в ОЕМ866 а часть Win-1251. Стоит задача выправить вывод на LCD чтоб он стал англоязычным. При этом как только я вношу правки в текст с соблюдением к-ва символов в строке прибор начинает плохо работать. По всему видать где-то сбивается какая-то адресация. Может смерить правильно а через 2-3 мин покажет ерунду. Передергивание питания решает проблему но не извабляет от нее. Чем больше правок вношу тем уверенней проявляются глюки. Возникает вопрос как это выявить или как исправить чтоб без глюков. Русскоязычная версия работает хорошо. проблемы начинаются именно по ходу внесения правок. Иногда замечал что как-бы вывод численно правильный но смещен на 1 позицию но это скорее частный случай. Обычно демонстрирует результат измерения полную ерунду. Прошу помочь решить вопрос. Может кто с ASMом на короткой ноге. Платформа C8051F02. Редактирую в Keil. Так как кейл не поддерживает ту кодировку то правлю в нотепеде а в кейле компилирую. Спасибо.

Часть кода с текстом:

;====================================================
ZAS:
        DB      "================"
        DB      "   ”Ћ’ЋЊ…’ђ     "
        DB      "   ЉЋ‹€ђ 3M     "
        DB      "================"


        DB      " Џ…ђ…“‹ЋЉ Ќ…—€‘-"
        DB      " ’Ћ‰ ‘€‹› n 13  "
        DB      " '„ЋЊ ЃЂЃ› џѓ€' "
        DB      "  ’…‹.000-00-00 "
        DB      000H
;----------------------------------------------------
ZAS1A:
        DB      "  Ћ‡“   62256   "
        DB      "  ERROR         "
        DB      "                "
        DB      "                "
        DB      000H
;----------------------------------------------------
ZAS1_2:
        DB      " ЏђЋѓђ…‚ Џђ€ЃЋђЂ"
        DB      " Ћ‘’Ђ‹Ћ‘њ       "
        DB      "  900 ‘…Љ.      "
        DB      " Ћ’Њ…Ќ€’њ       "
        DB      000H
;----------------------------------------------------
ZAS2:
        DB      "  ЉЂ‹€ЃђЋ‚ЉЂ    "
        DB      "  ЌЂ‘’ђ.€‡Њ…ђ…Ќ."
        DB      "  €‡Њ…ђ…Ќ€…     "
        DB      "  ЌЂ‘’ђЋ‰ЉЂ     "
        DB      000H
;----------------------------------------------------

 

Share this post


Link to post
Share on other sites

CP866 там кодировка. которая раньше была под практически всеми DOS.

ZAS:
        DB      "================"
        DB      "   ФОТОМЕТР     "
        DB      "   КОЛИР 3M     "
        DB      "================"


        DB      " ПЕРЕУЛОК НЕЧИС-"
        DB      " ТОЙ СИЛЫ n 13  "
        DB      " 'ДОМ БАБЫ ЯГИ' "
        DB      "  ТЕЛ.000-00-00 "?
        DB      000H
 

не знаю как правит/сохраняет notepad и что он делает с некоторыми русскими буквами такими как я,ё,Ё и другими, но я бы правил такое во внутреннем редакторе FARa например. он умеет работать в той кодировке, в которой создан файл. и надо стараться что бы каждая строка каждого блока из 4-х строк не вылезала за 16 символов. судя по всему в приборе LCD экран 16x4 и если подпрограмма вывода очередного такого то блока не проверяет какие то параметры, длины и прочее - то и могут возникнуть глюки.

Share this post


Link to post
Share on other sites

1. Проверьте, что в настройках IDE не установлен UNICODE.

2. Для 8-битной кодировки многие "проблемы" решаются таблицей перекодировки

(Вам лучше работать в CP1251/Win а перекодировать в LCD)

char recodeTable[256] = {0x01 , 0x02 , . . . 0xFF};

symbLCD = recodeTable[inSumb];

То что надо прописать с "хитрыми"  Йо (Ё)  - пишите так  

char *Msg1 = "12345\0xA8";  // Ё в виде кода 

 

ps извиняюсь, не ASM, но что касаемо кодировки и IDE тоже самое.

Share this post


Link to post
Share on other sites
3 hours ago, smk said:

. . .  Редактирую в Keil. Так как кейл не поддерживает ту кодировку то правлю в нотепеде а в кейле компилирую. . . . 

Это не Keil, но в IDE ейном могут быть аналогичные настройки. Если есть автоопределение кодировки - отключите, это от диавола.

 

IDE.png

Share this post


Link to post
Share on other sites

Что уже только не пробовали. И перекодировали и из фар правили и под досом компилировали. Нашли старую IDE тех лет и под ней правили.  Просмотр процедуры вывода не дал ничего. Там если код символа меньше 128 (англ) ничего не делать, а если больше то пе5рекодировать на русский. Работает. Начинаем править - измерение дает неправильный результат. Питание передергиваем и опять правильно до поры. Потом всеравно неправильно. Как-то что-то с кодом происходит. Отследить даже не знаю как. Нужны еще идеи что это может быть. При компиляции размер хекса не меняется. Судя по коду правка не должна влиять ни на что. Во всяком случае очевидных зависимостей нет. Может есть еще идеи? Спасибо.

Share this post


Link to post
Share on other sites

Бинарники сравнивали? Отличия должны быть только по тем адресам, где текст, и больше нигде.

Если это так, а вычисления всё равно некорректные, автор мог какую-то хитрость учудить, используя текст не только как текст...

Спойлер

В устройстве имеется внешняя SRAM, 32 килобайта. Верно? ;)

 

Share this post


Link to post
Share on other sites
41 minutes ago, smk said:

. . .  Может есть еще идеи? Спасибо.

1. Проверьте тайминги при выдаче на LCD (если они зашкалили или "на пределе"). Может "подшивать" по этой причине. Если тактирование от кварца - поставьте другой, с меньшей частотой. Ну, и вообще аппаратную часть. Если что-то там "подшивает" - то нет смысла софт мучить.

2. Проверьте длины строк. Могло что-то увеличиться и подтереть RAM.

3. Если есть возможность - "заглушите" замер (что оно у Вас там меряет, например вместо "оцифровки" АЦП подложите константу).

4. Добейтесь устойчивого сбоя, например чтобы ОНО вылетало сразу. Далее ищем причину методом бинарного деления (артиллеристы его постоянно применяют).

Вообще, если есть исходник - почему на отладчике не смотрите ? (EC2 или что там) ?

 

 

Share this post


Link to post
Share on other sites
13 hours ago, smk said:

Может есть еще идеи?

Дурацкая идея - автор исходного прибора сделал какую-то самопальную защиту. Если не сходится контрольная сумма, иногда оно что-то где-то будет портить.

Для проверки - поменять ОДНУ букву (или даже цифру), проверить, что в бинарнике поменялся только один байт, и включать...

Share this post


Link to post
Share on other sites
21 hours ago, smk said:

Начинаем править - измерение дает неправильный результат.

А если ничего не исправлять, а собрать в том виде что есть в оригинале? Измерения сбиваются?

Share this post


Link to post
Share on other sites

В оригинале не сбиваются. В том то и дело. Там есть таблица перекодировки под LCD. Вероятно раньше была нужна. Так вот правка этой таблицы приводит с порче измерения. Какая там взаимосвязь совершенно не понятно. Либо портится расчет либо что-то с адресацией. Выяснить это будет очень не просто. и тут ведь не важно что править. Что такс что таблицу - результат одинаковый. Может выложить исходный файл?

Share this post


Link to post
Share on other sites
35 minutes ago, smk said:

В оригинале не сбиваются. . . .

Смотрите опции компилятора/проекта, а также директивы в тексте исходника ASM (например выравнивание итп).

Вам в первую очередь надо добиться "снайперской" компиляции, когда бинарник (прошивка), которая идет изначально и компилировалась не Вами,

будет 1-в-1, побайтно, совпадать с той, что получится после Вашей компиляции в Keil.

те  fc firmware_old.bin  firmware_keil.bin  /b   не даст различий. Сравнивать надо именно образы флеша, а не "объектник" в HEX (или в чем оно там выдает после компиляции). Если это будет выполняться - отловить сбой (причину) будет делом техники.

ps исходник можете через личку забросить.

Share this post


Link to post
Share on other sites
В 20.05.2019 в 20:15, Harbinger сказал:

Бинарники сравнивали? Отличия должны быть только по тем адресам, где текст, и больше нигде.

Если это так, а вычисления всё равно некорректные, автор мог какую-то хитрость учудить, используя текст не только как текст...

  Показать контент

В устройстве имеется внешняя SRAM, 32 килобайта. Верно? ;)

 

Сравнил. Отличия действительно только по байтам текста. Больше нигде. при этом замечено, что как ни правь текст - измерения портятся. Что сделано:

1) была заменена одна строка в характерной странице - измерения испортились.

2) Заменена всех четырех строк дисплея картину не поменяла.

3) была создана дополнительная страница с аналогичным содержанием. Отобразилась правильно, но измерения испортились.

4) Есть там таблица перекодировки. Пробовали исправить ее. На индикаторе текст изменился и измерения испортились.

Обращает на себя внимание факт, что измерения портятся не сразу. Скажем я делаю подряд 3-4-5 измерений и они проходят правильно. Но как только наступает пауза примерно минут 2-3-4 то первое же измерение после паузы неправильное. В любом режиме. Как правило при смене режима измерения по схеме "Цветность (3р) - белизна(3р)-цветность" сбой наступает или сразу или на втором измерении цветности после переключения на этот режим. может время проходит? Измерение примерно сек 20.

Связь с ПК отваливается ну считайте сразу после какой-либо правки.

Теперь следующее. Ребята, чтобы не парились в пустую считайте объявленным своего рода конкурс. Кто первый предоставит рабочие исходники, допускающие правку текстовых строк - получает 100 у.е. Если кто-то предоставит эти исходники до понедельника включительно - получает 200 у.е. Тестирование происходит на реальном железе. Для этого я нахожусь на работе все дни включая выходные с 8-00 до 20-00 по киевскому времени. В особых случаях могу задержаться.

Оплату гарантирую вне зависимости от географического положения получателя. Из России в Россию - нет проблем. Из Украины в Украину - нет проблем. Да и вообще вестерн-юнион поможет. Оплата будет однозначно и без обмана. С руководством согласовано.

Для этого прикрепляю архив:

В архиве: KOL3M003.ASM - файл исходника авторский без правок и изменений;

KOL3M003en.ASM - файл с переведенными страницами

IHEX_Convertor.exe - конвертор из хекс в бин

WinMerge-2.16.2-Setup.exe - программа для сравнения бинарных файлов.

 

Платформа C8051F020 от СиликонЛабс.

Компилятор от Keil для C51.

В архиве ...3,03 проект по IDE от СиликонЛабс. Если нужно - выложу в закрома.

Ну помогайте кто может... Увяз в этом сильно. Без помощи не обойдусь. Спасибо.

Характерная страница - ZAS2A:

 

KOLIR.ZIP

kolirv3.03.zip

Share this post


Link to post
Share on other sites

Авторский хекс, скомпилированный до меня:

 

kol3m003.zip

Share this post


Link to post
Share on other sites
9 minutes ago, smk said:

Авторский хекс, скомпилированный до меня: . . . 

1. Каким компилятором сделан ? 

2. Что навешано на процессор что может хранить параметризацию, контрольные суммы  (имеется периферия, вроде 24LC16, RTC памятью EEPROM итп.)

Share this post


Link to post
Share on other sites
4 минуты назад, k155la3 сказал:

1. Каким компилятором сделан ? 

2. Что навешано на процессор что может хранить параметризацию, контрольные суммы  (имеется периферия, вроде 24LC16, RTC памятью EEPROM итп.)

Компилятор от кейла для С51. Схему прикрепляю.

 

KOLOR3.zip

Вообще если открыть проект для силикон_лабс то там все настройки.

Да вобщем там их и нет особо. Кейл и без них отлично справляется. Там по сути только пути для линкера и компилятора...

Кстати на счет таблицы с аналогичным содержанием. Содержание было с переводом. Не аналогичное.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now