Добавление калибровки датчика скорости в карту прошивки Январь 5.1

Регистрация
23.08.2022
Сообщения
65
Лайки
1
Адрес
Майкоп
#41
Датчик опрашивается на интервале 600мс
там МУСОР на выходе.
Мусор на выходе - мусор на входе - мусор в результатах! - ничего из этой скорости считать не выйдет.
и дельты таких скоростей с другими более быстрыми скоростями ничего не дают - лошня это полная.
Т.е. при прочих равных, мусор относительно того же мусора полезной информации не сможет дать?
 
Регистрация
23.08.2022
Сообщения
65
Лайки
1
Адрес
Майкоп
#42
Какие поиски? Зачем отталкиваться? Вот, пишу конкретный адрес:

Посмотреть вложение 90933

Накапливается значение в RAM_7F (смотри в дизассемблере где и как сохраняет в RAM_7F после опроса PORT_3.5)
Код по адресу 5063 сохраняет это значение в XRAM:F8AE откуда оно потом и берется во всех калибровках связанных со скоростью и при выдаче на диагностику.

Осталось только дописать код, который перед сохранением значения будет делать X*6/4, сохранить и скомпилировать новую прошивку.
В общем "прогресс", если его можно так назвать, за пол ночи :
Профи, наверное поржут от души, т.к. похоже на комикс.
Скача иду фриваре, около часа пытался с кормить ей bin. Не ела. Пытался с конвертировать bin в PE:ROFLMAO:. Не получилось. Качнул норм иду, всё открылось. Адрес нужный нашёл. По перекрёстной ссылке нашёл нужный код. Вертикальным) чтением пробежался по даташиту, и нескольким методичка по АСМе.
Вот оригинал
 

Вложения

Регистрация
23.08.2022
Сообщения
65
Лайки
1
Адрес
Майкоп
#44
Есть вопросы:
Какой размер у аккумулятора (А)?
Поместится ли в него 220*6=1320?
Если нет как расширять, если (B) я использую в выражениях?
Зачем там инкремент (А) перед проверкой флага равно ли (А) нулю?
Можно ли работать с дробными(пологаю, что места ещё больше понадобится) для сокращения вычислений(вместо Х*6/4 =>Х*1,5(1.5)?
 
Регистрация
23.08.2022
Сообщения
65
Лайки
1
Адрес
Майкоп
#45
Ещё :
При редактировании, например, есть код:
code 7060
code 7067
если нужно между вписАть code делаю 7061; 7062...и т.д.?
И самое смешное: как в иде перейти в режим редактирования, если она вообще редактирует?
Помучил её, не смог ничего отредактировать и в 4-м часу лёг спать т.к. на работу к 7:30.
 

Maxi

Старожил
Регистрация
07.01.2008
Сообщения
15,834
Лайки
3,127
Адрес
Москва
#48
Регистрация
23.08.2022
Сообщения
65
Лайки
1
Адрес
Майкоп
#50
2 в восьмой степени.

нет

архитектура mcs-51 интел 1979 год.
Смотрел как расширяют с помощью (В), но я её же занял как операнд для вычислений. Походу сути не уловил.
 

Tech

Модератор
Команда форума
Регистрация
25.09.2008
Сообщения
6,281
Лайки
2,391
Адрес
Ульяновск
#53
Продаются множители/делители сигнала ДС с коэффом */10, стоят чОта около 1.5к рублей, выглядит как релюшка.
 

Maxi

Старожил
Регистрация
07.01.2008
Сообщения
15,834
Лайки
3,127
Адрес
Москва
#54

santos

Старожил
Регистрация
21.11.2009
Сообщения
16,018
Лайки
8,038
Адрес
Московская область
#56
Вижу так:
перед mov A, XRAM_7F вставить это:
MOV B, #6
MUL AB
MOV B#4
DIV AB
Есть вопросы:
Какой размер у аккумулятора (А)?
Поместится ли в него 220*6=1320?
Если нет как расширять, если (B) я использую в выражениях?
Зачем там инкремент (А) перед проверкой флага равно ли (А) нулю?
Можно ли работать с дробными(пологаю, что места ещё больше понадобится) для сокращения вычислений(вместо Х*6/4 =>Х*1,5(1.5)?
24 августа 2022 г. 94336 GMT+0300.png

Добро пожаловать в 8-битный мир :)

Аккумулятор А, как и регистр В 8-битные и соответственно могут хранить число 0-255

При умножение (mul AB) результат хранится сразу в двух регистрах в В старший байт в А младший

MUL AB - умножение.

Описание: перемножает целые восьмибитовые беззнаковые числа, хранящиеся в аккумуляторе и регистре В. Старший байт 16-битового произведения помещается в регистр В, а младший байт - в регистр А.

Пример: MUL AB​
Количество байт: 1
Количество циклов: 4
Действие команды: (PC) = (PC) + 1​
(A) = Low((A)*(B))​
(B) = High(A)*(B)​
Машинный код:
1 0 1 0 0 1 0 0​


Поэтому на 6 умножаем легко, а вот деление на 4 любителям Бейсика и дробных чисел потом конечно даётся тяжело, но я подскажу:

Разделить на 4 это тоже самое что всё это побитово два раза сдвинуть вправо:

http://www.gaw.ru/html.cgi/txt/doc/micros/mcs51/asm/start.htm

CLR C (сбрасываем бит переноса)
XCH A,B (меняем значения между А и В)
RRC A (сдвигаем право с учётом бита переноса А)
XCH A,B (опять меняем значения между А и В)
RRCA (сдвигаем право с учётом бита переноса А)
CLR C (повторяем это ещё раз)
XCH A,B
RRC A
XCH A,B
RRCA

Тем самым и значение в 16 битах которые хранятся в регистрах ВА разделили на 4 побитно всё сдвинув 2 раза вправо :)

Теперь в регистре А хранится скорректированная под твой датчик скорость. Значением в регистре В можно пренебречь, ибо скорость может принимать значения 0-255 ... В общем теперь значение регистра А просто сохраняем в XRAM:F8AE

Осталось тебе просто перекинуть весь код в ассемблер добавить нужный код и перекомпилировать прошивку. Но будь внимателен - когда ты добавишь строчки кода, то с количеством добавленного при компиляции у тебя всё что после добавленного кода сдвинется на количество байт равных количеству байт нового добавленного кода, поэтому не забудь где-нибудь в нужном пустом месте кода, к примеру по адресу 5F00, в ассемблере вставить команду ORG 5F00h чтобы у тебя вся область калибровок и всё что после 5F00 не сползло на количество байт добавленного кода ...
 

santos

Старожил
Регистрация
21.11.2009
Сообщения
16,018
Лайки
8,038
Адрес
Московская область
#57
Ещё :
При редактировании, например, есть код:
code 7060
code 7067
если нужно между вписАть code делаю 7061; 7062...и т.д.?
И самое смешное: как в иде перейти в режим редактирования, если она вообще редактирует?
Помучил её, не смог ничего отредактировать и в 4-м часу лёг спать т.к. на работу к 7:30.
IDA это дизассемблер. Ты можешь с помощью нее File->Produce File->Create ASM file ... Тем самым получишь файл .asm дальше добавляет в него что хочешь, скачиваешь компилятор ассемблера, компилируешь в .HEX а потом в .BIN
 
Регистрация
23.08.2022
Сообщения
65
Лайки
1
Адрес
Майкоп
#58
Посмотреть вложение 90944
Добро пожаловать в 8-битный мир :)

Аккумулятор А, как и регистр В 8-битные и соответственно могут хранить число 0-255

При умножение (mul AB) результат хранится сразу в двух регистрах в В старший байт в А младший

MUL AB - умножение.

Описание: перемножает целые восьмибитовые беззнаковые числа, хранящиеся в аккумуляторе и регистре В. Старший байт 16-битового произведения помещается в регистр В, а младший байт - в регистр А.

Пример: MUL AB​
Количество байт: 1
Количество циклов: 4
Действие команды: (PC) = (PC) + 1​
(A) = Low((A)*(B))​
(B) = High(A)*(B)​
Машинный код:
1 0 1 0 0 1 0 0​


Поэтому на 6 умножаем легко, а вот деление на 4 любителям Бейсика и дробных чисел потом конечно даётся тяжело, но я подскажу:

Разделить на 4 это тоже самое что всё это побитово два раза сдвинуть вправо:

http://www.gaw.ru/html.cgi/txt/doc/micros/mcs51/asm/start.htm

CLR C (сбрасываем бит переноса)
XCH A,B (меняем значения между А и В)
RRC A (сдвигаем право с учётом бита переноса А)
XCH A,B (опять меняем значения между А и В)
RRCA (сдвигаем право с учётом бита переноса А)
CLR C (повторяем это ещё раз)
XCH A,B
RRC A
XCH A,B
RRCA

Тем самым и значение в 16 битах которые хранятся в регистрах ВА разделили на 4 побитно всё сдвинув 2 раза вправо :)

Теперь в регистре А хранится скорректированная под твой датчик скорость. Значением в регистре В можно пренебречь, ибо скорость может принимать значения 0-255 ... В общем теперь значение регистра А просто сохраняем в XRAM:F8AE

Осталось тебе просто перекинуть весь код в ассемблер добавить нужный код и перекомпилировать прошивку. Но будь внимателен - когда ты добавишь строчки кода, то с количеством добавленного при компиляции у тебя всё что после добавленного кода сдвинется на количество байт равных количеству байт нового добавленного кода, поэтому не забудь где-нибудь в нужном пустом месте кода, к примеру по адресу 5F00, в ассемблере вставить команду ORG 5F00h чтобы у тебя вся область калибровок и всё что после 5F00 не сползло на количество байт добавленного кода ...
Как всё сурово, после сишки с библиотекамиo_O
Спасибо(y), нужно время для осмысления Вами написанного.
 

Maxi

Старожил
Регистрация
07.01.2008
Сообщения
15,834
Лайки
3,127
Адрес
Москва
#60
IDA это дизассемблер. Ты можешь с помощью нее File->Produce File->Create ASM file ... Тем самым получишь файл .asm дальше добавляет в него что хочешь, скачиваешь компилятор ассемблера, компилируешь в .HEX а потом в .BIN
поржал.
там между create asm fle и компиляцией то что говнопродуцирует ида неделю надо руками править втч под конкретный компилятор.