День добрый всем.
Компилятор Avrasm2. Столкнулся с непонятными его действиями при задании констант.
.equ N=10
.equ t1= int(666938/N-7.9207)
.equ t2= int(666938/N-7-9207/10000)
Почему-то t1 не равно t2, который дает корректный для работы устройства результат.
Второй вопрос. Как задать вещественную константу, например 34.5, чтобы потом простые формулы с её участием использовать для задания целых констант (хотелось как ниже представлено)
A=34.5????
.equ t3= int(666938/A)
Вот не нашел в разных описания avrasm2 этих моментов. Может кто сталкивался.
Посмотрите instruction set (хотя-бы Atmel-0856L-AVR-Instruction-Set-Manual)...
Ежли найдете команду, в которой в качестве данных подставляется ДРОБНОЕ значение - тогда можете работать с оным и под ассемблером.
Не надо путать препроцессор с собственно системой команд.
Собственно система команд и АЛУ могут работать только со знаковой арифметикой.
Для обработки дробных величин (и прочего...) необходимо предварительно создать соответствующие подпрограммы и уж затем скармливать им соответствующего формата данные.
INT(expression) Truncates a floating point expression to integer (ie discards fractional part)
FRAC(expression) Extracts fractional part of a floating point expression (ie discards integer part).
Q7(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign + 7-bit fraction)
Q15(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign +15-bit fraction)
перевод
Следующие функции определены только в AVRASM2:
INT (выражение) Обрезает выражение с плавающей запятой до целого числа (т.е. отбрасывает дробную часть)
FRAC (выражение) Извлекает дробную часть выражения с плавающей запятой (т.е. отбрасывает целую часть).
Q7 (выражение) Преобразует дробное выражение с плавающей запятой в форму, подходящую для инструкций FMUL / FMULS / FMULSU. (знак + 7-битная дробь)
Q15 (выражение) Преобразует дробное выражение с плавающей запятой в форму, подходящую для инструкций FMUL / FMULS / FMULSU. (знак + 15-битная дробь
Спасибо за содержательный ответ.
[uquote="BOB51",url="/forum/viewtopic.php?p=4013722#p4013722"][/uquote]
Я Вас не спрашивал про арифметику вещественных чисел. Вопрос был именно по avrasm2, а не к набору инструкций.
С set ничего не получалось. А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.
С.Н. писал(а):Архитектурой и ассемблером avr владею на серьезном уровне
очень плохо ты владеешь, если пытаешься подставить дробное число.
на самом деле делается так:
числа, которые должны быть дробными, представляются целыми числами с фиксированной точкой.
и для каждого такого числа программописатель знает, где в этом числе находится точка.
С.Н. писал(а):A=34.5????
.equ t3= int(666938/A)
поэтому в данном конкретном случае нужно записать так:
.equ t3= 666938 * 10 / 345
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
[uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4013763#p4013763"]очень плохо ты владеешь, если пытаешься подставить дробное число.[/uquote]
Во первых, призываю Вас сохранять уважительный тон общения и обращаться на "Вы".
Во-вторых, я спросил то что спросил. Мне не надо объяснять про альтернативную форму представления, тем более что она есть в первой части вопроса, а глаза цепляются за последнюю строчку. Правда?
Я программу пишу для других, у которых познания в этом близко к нулю. Им приходиться править прошивку под себя. Так вот, они в состоянии число записать как привыкли "34.5", а не приводить к удобной форме. Пока обхожусь и без этого, но хочется упростить кое какие моменты.
Вопросы снимаю... Спрашивал личный опыт, а не вырезки документации, которые и сам читал.
Добавлено after 3 minutes 29 seconds:
[uquote="oleg110592",url="/forum/viewtopic.php?p=4013766#p4013766"][uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.[/uquote]
Да я тоже не нашел и мало того переперобывал разные комбинации... Видать придется мириться с этим.
Извиняюсь за баян, кто-то пробовал ЖКИ ч/б нокии 5110 на AVR? Собрал схемку в протеусе, делаю тестовый код для самых базовых команд, а дело не едет, даже зажечь все сегменты черным не получается, что-то упускаю.
Согласно мануалу для общения используется SPI, накидал тестовый софтварный обмен, в мануале пишется, данные считываются при подъеме с лог0 на лог 1 клока, но в протеусе и на макетке стола дело не двинулось
С протеусом удалось договорится используя пример из компонента ЖКИ и отладочный виртуальный SPI, подглядел тайминги и задержки, после чего виртуальная среда начала рисовать примерно то же самое что в коде, но на реальном ЖКИ изображения пока нет. Продолжаю мучить
Следуя примеру выяснилось что сам ЖКИ внутри не касался платы, поэтому не грузился
Подогнув контакты проблема не отображения была решена, но видать индикатор не новый, поле не полное, и отображаются 38 строк из 48, а так работает.
Так и есть, где многоточие блок закраски строки в 8 пикселей, на всем ЖКИ 6 таких строк по 8, ну по байту, суммарно 6*8=48 пикселей, все как в мануале, а многоточие поставил чтобы не копипастить на форуме 6 одинаковых блоков кода, это же тестовая наброска, ей можно быть портянкой