Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

STM8(S/L), первые впечатления

Непрочитано 29.10.2010, 00:15  
roxfan
Временная регистрация
 
Регистрация: 25.11.2009
Сообщений: 61
Сказал спасибо: 1
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
roxfan на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от alexgap Посмотреть сообщение
OneTech, проверил ваш метод. К сожалению, он дает неверный результат даже для байта... Например, для 199 / 10 результат 20, что неверно, должно быть 19. А я было обрадовался новому методу оптимизации арифметических операций.
Просто после умножения надо прибавить корректирующий фактор. Как это всё вычислить, подробно расписано в книжке Hacker's Delight (русская версия "Алгоритмические трюки для программистов"). Алгоритм известен под названием "magic division", по этому термину можно найти кучу информации.
Реклама:

Последний раз редактировалось Falconist; 13.04.2011 в 23:09.
roxfan вне форума  
Сказали "Спасибо" roxfan
alexgap (29.10.2010)
Непрочитано 29.10.2010, 00:17  
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 353
Сказал спасибо: 20
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Продолжение, вообщем вот в чём суть:
199 / 10 = 19,9
Для повышения точности будем не 256 / 10, а 65536 / 10 = 6553,6 ~= 6554

199 * 6554 = 1304246 или 0x13E6B6
Проанализуруем старший байт числа это 0x13 или 19 dec.
Конечно на этом можно и остановиться, но... если рассмотреть отбрасываемые 2 байта, то там можно увидеть число 0xE6B6 или 59062 dec
Теперь что-бы понять в какую сторону нужно скорректировать результат достаточно сравнить отбрасываемый остаток с 65536/2 или 32768, если это число 59062 больше или равно 32786 значит результат нужно скорректировать на +1, если меньше значит ничего не делать. Tеперь попробуйте с другими числами
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.

Последний раз редактировалось OneTech; 29.10.2010 в 00:31.
OneTech вне форума  
Сказали "Спасибо" OneTech
alexgap (29.10.2010)
Непрочитано 29.10.2010, 00:19  
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 353
Сказал спасибо: 20
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

roxfan опередил. Честно говоря уважаемый roxfan я до этого метода додумался сам, после того как придумал как обычное число перемножить на дробную константу не прибегая к float. Методика похожая.
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.

Последний раз редактировалось OneTech; 29.10.2010 в 00:24.
OneTech вне форума  
Непрочитано 29.10.2010, 00:55  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от OneTech Посмотреть сообщение
45 тактов, только появилась погрешность, результат деления не 100`000, а 100`021 это недостаток такого метода.
У метода вообще то этого недостатка нет. Замена идет 1 к 1.
А вот делитель я Вам дал самый неудобный.
С ним смысла заменять деление умножением на 8-ми битнике нет. У меня вышло больше 1000 тактов.

Последний раз редактировалось Falconist; 13.04.2011 в 23:10.
kison вне форума  
Непрочитано 29.10.2010, 00:56  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от roxfan Посмотреть сообщение
Просто после умножения надо прибавить корректирующий фактор. Как это всё вычислить, подробно расписано в книжке Hacker's Delight (русская версия "Алгоритмические трюки для программистов").
Оттуда я и беру

Последний раз редактировалось Falconist; 13.04.2011 в 23:11.
kison вне форума  
Непрочитано 29.10.2010, 01:07  
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 353
Сказал спасибо: 20
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
У метода вообще то этого недостатка нет. Замена идет 1 к 1.
А вот делитель я Вам дал самый неудобный.
С ним смысла заменять деление умножением на 8-ми битнике нет. У меня вышло больше 1000 тактов.
Я свои 45 тактов получил на 8-ми битке, только корректирующий фактор не учитывал, а вообще это ещё + ~6 тактов, против 1000.
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.

Последний раз редактировалось Falconist; 13.04.2011 в 23:10.
OneTech вне форума  
Непрочитано 29.10.2010, 02:11  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от OneTech Посмотреть сообщение
Я свои 45 тактов получил на 8-ми битке, только корректирующий фактор не учитывал, а вообще это ещё + ~6 тактов, против 1000.
А попробуйте учесть. Особенно за 6 тактов.
Приведем цифры к единому знаменателю. Делимое 0-1000000 включительно, делитель 10. Это как бы уже прикладное применение имеет - как раз на индикатор что вывести например. Должно делиться точно для любого делимого из вышеприведенного диапазона. Вам кстати проще, число влезает в три байта, так что преимущество перед компилятором Си имеете - ему это не объяснишь.
У меня вышло ровно 75 тактов. Это с учетом загрузки делимого из памяти и выгрузки туда же результата. Так что тоже сделайте так же, чтоб одинаково было. Т.е. есть 4 ячейки ( у Вас может и три быть!), содержимое их надо поделить на 10 и туда же поместить.

Последний раз редактировалось Falconist; 13.04.2011 в 23:13.
kison вне форума  
Непрочитано 29.10.2010, 05:35  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Народ заканчивайте оффтопить, давайте по делу.
zheleznjakov вне форума  
Сказали "Спасибо" zheleznjakov
EugenyAM (29.10.2010)
Непрочитано 29.10.2010, 08:51  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от zheleznjakov Посмотреть сообщение
Народ заканчивайте оффтопить, давайте по делу.
Так похоже STM8 никому не интересны. Как тут выше - пройдет год другой, кто то другой все грабли найдет и на форумах выложит и вот тогда...
Ну в завершении темы с делением - чтоб OneTech велосипед не изобретал закончу.
Выбираем степень двойки, чем больше, тем лучше. Величина зависит от максимального делимого. Удобно выбирать 16,32. Назовем - S
Делим 2^S на наш делитель. Если дробная часть больше или равна 0.5 то округляем вверх и ничего больше не делаем. Если меньше 0.5, то округляем вниз и будем прибавлять единичку к делимому. После умножения сдвиг вправо на S. Если S была кратна 8 можно обойтись без сдвига. На 8-ми битниках метод имеет слабое применение, хотя для относительно небольших делимых все в шоколаде. А вот если 16 миллионов на три поделить, уже не так приятно.
А STM8 я мучить продолжу, сразу после починки компа.

Последний раз редактировалось Falconist; 13.04.2011 в 23:13.
kison вне форума  
Непрочитано 29.10.2010, 09:14  
EugenyAM
Временная регистрация
 
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
EugenyAM на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
Так похоже STM8 никому не интересны. Как тут выше - пройдет год другой, кто то другой все грабли найдет и на форумах выложит и вот тогда...

А STM8 я мучить продолжу, сразу после починки компа.
Очень даже интересны, только пока спрашивать не о чем...
Камни и отладчик в пути, платы в производстве...

Как замена AVR очень даже актуально в свете новых цен на них.

Последний раз редактировалось Falconist; 13.04.2011 в 23:13.
EugenyAM вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
KiCAD-объявления и впечатления al_dan KiCAD 32 03.10.2016 17:02
Народ, посмотрите quasm, Как ваши впечатления? suri Proteus, KiCAD и другие ECAD 5 14.10.2009 11:57


Часовой пояс GMT +4, время: 07:47.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.