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

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

Да. Если переходы вычисляются ассемблером - то все должно остаться рабочим (и прямые и относительные).

Не знаю как там в x51, но в других архитектурах компоновщики могут использовать выравнивание секций в памяти. И после добавления 1-3 NOP-ов даже в самое начало исходника, можно получить изменение gap-ов между функциями или данными во flash. И длины переходов поменяются. Ну и коды команд соответственно. Уж не говоря о том, что компоновщик может и расположение секций поменять, на более оптимальное для новых адресов. И получится, что добавив эти NOP-ы, поменяете вообще весь образ прошивки.

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


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

А почему бы не попросить Федосенко Игоря Николаевича подправить прошивку прибора?

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


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

Посмотрел asm.

Что-то мне не нравится флажок LCCNENSE_NO.

Во-первых, название плохое, а во-вторых, какие-то при его выставлении манипуляции странные происходят.

Где он проверяется, правда, я не нашёл.

 

И какой-то FL_LCCN непонятный встречается...

 

Ну и я правильно понял, что начальная калибровка выполняется с помощью какой-то программы с ПК? Такое подозрение, что она в EEPROM пишет какую-то константу в этот момент (специфичную для данной конкретной версии прошивки).

 

PS плотно с 51-ми никогда не работал, бог миловал...

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


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

28 minutes ago, esaulenka said:

Посмотрел asm.

Что-то мне не нравится флажок LCCNENSE_NO.

Во-первых, название плохое, а во-вторых, какие-то при его выставлении манипуляции странные происходят.

Где он проверяется, правда, я не нашёл.

 

LCCNENSE_NO проверяется в прерывании по приему

START_PROG:
        JMP     PROG
        ORG     03H
        CALL    RS_232_IN
        CALL    CRC_KONTROL

Очевидно   идет сравнение кода внутри программы с получаемым по UART.

Но что происходит так просто не скажешь.

Может проверка типа программы: пользователя или технологическая.

 

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


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

7 часов назад, Ozelot сказал:

А почему бы не попросить Федосенко Игоря Николаевича подправить прошивку прибора?

Умер он.

Технологической программы нет. Есть режим настройки в приборе. Включается при подаче питания если нажата комбинация кнопок.

 

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


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

На сегодняшний день ситуация такая. Если изменить один любой символ - измерение портится. При этом не имеет значения отображалась страница или нет. Если строчку ORG     0300H заменить на ORG     0310H - измерение портится, но программа работает. Файл kolib.hex  зашивал. Английские слова видно, но измерение портится. Программа работает. Замечено, что измерение портится не сразу, а несколько позже. Минуты через 3 примерно. При этом время прохождения последних фильтров заметно увеличивается. Там диск с 18 фильтрами. Шаговый двигатель вращает диск и фильтры по очереди подставляются в измерительный канал. У каждого фильтра настроено время экспозиции. Так вот время экспозиции последних фильтров изменяется. Сначала в меньшей степени, но примерно к 3-му испорченному измерению время экспозиции возрастает заметно. Это однозначно приводит к порче измерения т.к. времена экспозиции настраиваются для каждого фильтра индивидуально. В оригинальной прошивке такого не происходит. Завтра смогу глянуть отладчиком. Если есть идеи на что смотреть, то буду рад.

В 23.05.2019 в 14:13, misyachniy сказал:

LCCNENSE_NO проверяется в прерывании по приему

Связь с компьютером отваливается при любой правке. Нет ли тут какой-то взаимосвязи?

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


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

В 22.05.2019 в 19:53, smk сказал:

Авторский хекс

В теме нет данных, пробовали ли Вы менять непосредственно его.

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


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

1 hour ago, smk said:

. . . .Связь с компьютером отваливается при любой правке. Нет ли тут какой-то взаимосвязи?

Если Вы меняете в строке 1 байт (не коде, а литерал для LCD) и связь отваливается - то есть. Если при этом не надо ждать ранее задекларированные 3 минуты для определения сбоя - можно это взять за основу. Надо проснифить (желательно с логом и аппаратно, не через драйвер) обмен по RS232 с компом, нормальный обмен и "сбойный". Потому как многометровый исходник "лопатить" будет достаточно сложно, надо за что-то зацепиться. Сбой протокола - можно уже посмотреть, на отладчике "в нужном месте" BP.

Если защита сделана прямыми руками, то факт работы под отладчиком прога тоже определит.

 

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


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

много странного в коде. 

. . . 
	
	JB      INT1,MENU
	JNB     TEST,MENU
	JMP     NASTROYKI_DOP
	JMP     MENU
MENU2B1:
. . . .

и это далеко не единственный "перл".

Имеем дело с "бразильской разведкой"  ? :crazy:

 

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


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

Если защита сделана прямыми руками, то факт работы под отладчиком прога тоже определит.


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

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


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

Думаю, что решил задачу, отправил автору измененный исходник на [email protected].

Контрольная сумма кода считается здесь:

C_PR:
        MOV     BYTE_CNT,#077H
        MOV     BYTE_CNT+1,#000H
        MOV     DPTR,#TEXT;;;
        MOV     OP+0,#000H
        MOV     OP+1,#000H
CR_LOOP:
        CLR     C
        CLR     A
        MOVC    A,@A+DPTR
        MOV     OP+2,A
        INC     DPTR
        CLR     C
        CLR     A
        MOVC    A,@A+DPTR
        MOV     OP+3,A
        INC     DPTR
        CALL    AD_16
        DJNZ    BYTE_CNT+1,CR_LOOP
        DJNZ    BYTE_CNT,CR_LOOP
        MOV     DPTR,#IND_BUF+2+16
        MOV     A,OP+0
        MOVX    @DPTR,A
        INC     DPTR
        MOV     A,OP+1
        MOVX    @DPTR,A
        RET

И здесь:

CP_PROG:
        MOV     BYTE_CNT,#0EAH
        MOV     BYTE_CNT+1,#000H
        MOV     DPTR,#0100H;;
        MOV     DPTR,#TEXT;;;
        MOV     OP+0,#000H
        MOV     OP+1,#000H
CP_LOOP:
        CLR     C
        CLR     A
        MOVC    A,@A+DPTR
        MOV     OP+2,#0
        MOV     OP+3,A
        INC     DPTR
        CALL    AD_16
        DJNZ    BYTE_CNT+1,CP_LOOP
        DJNZ    BYTE_CNT,CP_LOOP
        MOV     DPTR,#IND_BUF+16
        MOV     A,OP+0
        MOVX    @DPTR,A
        INC     DPTR
        MOV     A,OP+1
        MOVX    @DPTR,A
        RET

На выходе получаются 4 байта контрольной суммы по смещению IND_BUF+16.

Контрольная сумма IND_BUF+16 используется в двух местах, в которых автор при несовпадении ее с некими расчетами проводит дополнительные манипуляции.

Тут:

ID_ID:
;;;        JB      PROGREV2,UF_WR_END2
        JNB     PO_ID_OK,UF_WR_END2
        PUSH    ACC
        PUSH    PSW
        MOV     DPTR,#0F000H
        CLR     A
        CLR     C
        MOVC    A,@A+DPTR
        MOV     MEM_TMP+12,A
        CLR     A
        CLR     C
        INC     DPTR
        MOVC    A,@A+DPTR
        MOV     MEM_TMP+13,A
        MOV     DPTR,#IND_BUF+1+16
        MOVX    A,@DPTR
        CLR     C
        SUBB    A,MEM_TMP+13
        CJNE    A,#000H,L725;<----это можно отключить
        MOV     DPTR,#IND_BUF+0+16
        MOVX    A,@DPTR
        SUBB    A,MEM_TMP+12
        CJNE    A,#000H,L725;<----это можно отключить
        POP     PSW
        POP     ACC
        JMP     UF_WR_END2
L725:;<--------------------------------здесь автор начинает гадить
        MOV     A,MEM_TMP+15
        ADD     A,TL1
        INC     A
        CLR     ACC.6
        CLR     ACC.7
        MOV     MEM_TMP+15,A
        MOV     A,MEM_TMP+14
        ADDC    A,TL1
        INC     A
        MOV     MEM_TMP+14,A
        POP     PSW
        POP     ACC
        MOV     DPH,MEM_TMP+15
        MOV     DPL,MEM_TMP+14
        ADDC    A,MEM_TMP+14

И тут:

F1_DIVV_F1K_END:
        RET
F1_DIVV_F1K:
;;ID_ID2:
        PUSH    DPH
        PUSH    DPL

;Z
;;;;        JMP     L12345



        JNB     Y_PK,L1725
        JNB     PO_ID_OK,L1725
        PUSH    ACC
        PUSH    PSW
        MOV     DPTR,#0F002H
        CLR     A
        CLR     C
        MOVC    A,@A+DPTR
        MOV     MEM_TMP+12,A
        CLR     A
        CLR     C
        INC     DPTR
        MOVC    A,@A+DPTR
        MOV     MEM_TMP+13,A
        MOV     DPTR,#IND_BUF+3+16
        MOVX    A,@DPTR
        CLR     C
        SUBB    A,MEM_TMP+13
        CJNE    A,#000H,L1725;<------------это можно отключить
        MOV     DPTR,#IND_BUF+2+16
        MOVX    A,@DPTR
        SUBB    A,MEM_TMP+12
        CJNE    A,#000H,L1725;<------------это можно отключить
        POP     PSW
        POP     ACC
;;;;;;;;;;;;;;;;;;;;;;;;;;        JMP     L12345
L1725:
L12345:

;;;        PUSH    DPH
;;;        PUSH    DPL
        MOV     DPH,TMP+14;<------------начало манипуляций
        MOV     DPL,TMP+15
        MOVX    A,@DPTR
        MOV     OP+4,A
        INC     DPTR
        MOVX    A,@DPTR
        MOV     OP+5,A
        INC     DPTR
        MOV     TMP+14,DPH
        MOV     TMP+15,DPL
        MOV     OP+6,#27H ;     3  !!!!!!!!!!!!!!!!!!!!!!!!
        MOV     OP+7,#10H;   232
        CALL    MULT16
        MOV     DPH,TMP+12
        MOV     DPL,TMP+13
        MOVX    A,@DPTR
        MOV     OP+6,A
        INC     DPTR
        MOVX    A,@DPTR
        MOV     OP+7,A
        INC     DPTR
        MOV     TMP+12,DPH
        MOV     TMP+13,DPL;<--------------конец манипуляций
        POP     DPL
        POP     DPH

        CALL    DIVV16
        MOV     A,OP+2
        MOVX    @DPTR,A
        INC     DPTR
        MOV     A,OP+3
        MOVX    @DPTR,A
        INC     DPTR
        RET

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

Надеюсь отключение защиты сработает.

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


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

Добро. Выезжаю на работу и сразу проверю. Мне бы уже выправленный чтоб я не ошибся в чем-то. Связь через почту. Форум могу только читать с телефона (спасибо админу за настройки роутера). Потому связь через почту.

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


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

17 часов назад, vguard сказал:

Думаю, что решил задачу, отправил автору измененный исходник на [email protected].

Исходник получил. Все работает. Думаю победитель определился. Спасибо всем за участие и помощь.

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


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

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

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

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

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

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

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

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

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

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