Перейти к содержанию
    

Есть файл на 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
;----------------------------------------------------

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 и если подпрограмма вывода очередного такого то блока не проверяет какие то параметры, длины и прочее - то и могут возникнуть глюки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

symbLCD = recodeTable[inSumb];

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, smk said:

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

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

 

IDE.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Спойлер

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, smk said:

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

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

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

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, smk said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 hours ago, smk said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 minutes ago, smk said:

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, smk said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, k155la3 сказал:

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

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

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

 

KOLOR3.zip

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...