Всем привет. пишу на алгоритм билдере (но это не принципиально сейчас). Пишу программу для работы с датчиком температуры, давления и влажности BME280. Так вот, свалилась проблемка. Необходимо производить умножение с 32 битными числами да еще и со знаком. С обычным умножением справился, а вот со знаковым - затормозил... Обычное умножение реализовано на основе операций умножения описанных в апноуте AVR201. А вот со знаковым забуксовал. Может кто делал это на ассемблере? Контроллер атмега8, желательно использование аппаратного перемножителя, так как есть ограничение на время обработки...
всё очень просто. 1. проверяешь старший бит числа на знак. 2. если число отрицательное ставишь флаг знака, иначе флаг знака сброшен. 3. находишь дополнение отрицательного числа до положительного числа. 4. умножаешь положительные числа. 5. смотришь флаг знака. 6. если флаг установлен, находишь дополнение результата умножения до отрицательного числа.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Чен делал http://elm-chan.org/cc_e.html см. AVR assembler libraries->32bit x 32bit multiply(signed/unsigned) не аппаратное - но там используется обычное умножение - можно свое подсунуть
Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов.
Заголовок сообщения: Re: умножение 32 битных чисел со знаком написать на ассембле
Добавлено: Чт мар 05, 2020 18:12:43
Посмотрите, в архиве есть какие-то вычисления на АВ… может пригодятся. Цитата автора (victor_b_k VRTP):
Цитата:
Кстати, у меня есть наработки по вычислениям с плавающей запятой в более подходящем для микроконтроллеров формате. При этом число занимает не четыре, а три байта. Точность представления чисел более пяти десятичных знаков. Правда из за сокращенного формата диапазон представляемых чисел составляет +/- 1000000 (примерно). Но в реальной жизни редко приходится оперировать большими числами при работе с реальным оборудованием, ведь обычно разрядность обрабатываемых величин (поступающих от разного рода датчиков) не превышает 16 разрядов. А уменьшение формата позволяет сэкономить память и сократить время вычислений.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
ох, любители плавающей запятой ... плавающая запятая нужна тогда и только тогда, когда один и тот же параметр может изменяться от очень малой величины до очень большой величины. господа, кто-нибудь реально в устройствах на МК видел такой огромный диапазон изменения чисел? например, от 0,000001 до 1000000? лично я не видел никогда. в том то и дело, что реальные числа - от АЦП, от датчиков и всё прочее - ВСЕГДА укладывают во вполне представимое целое число. чаще всего в 16 бит (два байта). поэтому спрашивается - а зачем тут нужна плавающая точка? даже, если нужны дробные числа, всегда можно их представить целым числом, а положение точки держать в уме, и выводить точку в нужном месте на экран. а плавающая точка нужна только "малограмотным", которые не могут сообразить, что любое дробное число можно представить целым числом и точкой в нужной позиции.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
а плавающая точка нужна только "малограмотным", которые не могут сообразить, что любое дробное число можно представить целым числом и точкой в нужной позиции.
Как всякое слишком категоричное утверждение - оно в общем случае неверно. Не стану расписывать свои давние разработки, но приходилось делать не только "плавучку", но и массу функций: экспонента, корень, тригонометрические. И не ради понтов и выпендрёжа, а нужно было в реальном времени считать тепловую модель электродвигателя, защищая его, родимого, то ли по 8, то ли по 12 уставкам. "Возьми Си и не парься?" Так в этом МК не было даже сдвига вправо, какой там Си! Утаптывал, борясь за каждый байт. "Так кто виноват, что ты взял неправильный контроллер" - скажет тот, кто никогда не работал на заказчика-частника, у которого каждый цент на учёте. Попробуйте, вам понравится (вряд ли). Но труды того стоили. Некоторые дивайсы исправно несут службу до сих пор, и это не мигание диодами в кубиках, а реальное производство, кующее рубли. Хотя справедливости ради стоит согласиться, что в очень многих случаях без плавучки можно и нужно обойтись. Но подросло поколение АйрДуньщиков, очень далёких от понимания архитектуры МК и даже в далёком приближении понятия не имеющих об форматах данных. Ну вот, началось старческое брюзжание Пойду глотну коньячку, если ещё осталось от днюхи
экспонента, корень, тригонометрические - я не имел в виду такие функции. тут уж для вычисления требуется такой большой диапазон чисел, где без плавающей точки не обойтись. хотя, у Атмел для корня квадратного есть целочисленный алгоритм.
Jack_A писал(а):
справедливости ради стоит согласиться, что в очень многих случаях без плавучки можно и нужно обойтись
именно это я и имел в виду в своем посте.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
хотя, у Атмел для корня квадратного есть целочисленный алгоритм.
Это было бы прекрасно, если бы и остальные формулы в расчёте были в целых числах, а так что в ём проку? Я - не Атмел, но и у меня реализован алгоритм корня. И в части мантиссы - он совершенно целочисленный
тогда, я думаю, для тебя не составит труда и для тригонометрии реализовать в целых числах. а размер числа уже будет зависеть от требуемой точности результата.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Я шёл к цели кратчайшим путём, не заботясь о том, насколько "кошерны" с точки зрения ортодоксов мои решения. Например, плавучка у меня была 3-байтная: знак/порядок + 2 байта мантиссы, даже без скрытого разряда. Компромисс меж точностью и быстродействием. Точность устраивала, а микросекунды всегда были в дефиците. Real time, мать её... Мы, мне кажется, уже пришли к консексусу относительно беспредметности спора "нужно-не нужно" без рассмотрения конкретного набора алгоритмов, параметров, значений.
_________________
Последний раз редактировалось Jack_A Сб мар 07, 2020 21:48:33, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения