Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
19.03.2008, 22:50
|
#1
|
Частый гость
Регистрация: 05.08.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Подпрограммы деления (32/32) для AVR, PIC и 51
Я часто использую в своих прогах эти подпроги(32/32), но они очень длительные(стандартные).
Занимает она до 1000 циклов, в зависимости от делимого и делителя. Т.е. от 16 Мгц AVR ничего не остается...
Есть ли более эффективные (м.б. нестандартные)подпрограммы?
|
|
|
|
19.03.2008, 23:45
|
#2
|
Частый гость
Регистрация: 05.08.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Кстати, интересно было бы сравнить разные архитектуры 8-ми битных контроллеров в этом отношении: какие контроллеры быстрее всех справляются с делением 32/32? AVR, MSP430, PIC or SI51?
|
|
|
|
20.03.2008, 00:18
|
#3
|
Частый гость
Регистрация: 24.04.2007
Сообщений: 48
Сказал спасибо: 20
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Я раньше тоже использовал подпрограммы деления чисел, когда писал на асме. Деление целого очисла 32768 на 1 занимало 0,107 сек. И это при минимуме команд и 10 MIPS
(PIC18F452).
Какое было мое удивление, когда, написанная на С, программа
for (x=0;x‹6.28;x=x+0.0157)
.........................
massiv [j]=sin(x)*k/i;
...........................
выполнилась ,по данным МПЛАБ, за 0,15 секунд.
Аппаратно не проверял, может и глюк среды.
Если это так, то вполне возможно, что деление 32 х разрядных чисел лучше написать на С.
|
|
|
|
20.03.2008, 12:30
|
#4
|
Частый гость
Регистрация: 05.08.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Не совсем понял, 0.107 сек или мсек? AVR с помощью используемых мной подпрограмм делит 32762 на 1 за 0.00008 сек (=0.08 мсек)т.е. в 1200 раз быстрее. А указанный Вами массив вычисляется примерно за (0.08+0.01)*(6.28/0.0157)=36мс т.е. 0.036 сек.(конечно если sin табличный .
Я имею ввиду подпрограммы более продвинутые. Си здесь кажется не выручит. Но может действительно есть на Си что-то крутое?
|
|
|
|
20.03.2008, 12:38
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Подпрограммы деления (32/32) для AVR, PIC и 51
Сообщение от karuzus
|
Есть ли более эффективные (м.б. нестандартные)подпрограммы?
|
На electronix.ru поищи, там было.
|
|
|
|
21.03.2008, 09:52
|
#6
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
В тех случаях, когда нужно делить на константу, я заменяю деление умножением. Зачем, например, делить на 345, если можно умножить на 1/345? Или умножить на 190 и разделить на 65536 . А уж разделить на 65536 быстро я думаю знаете как. Я думаю идея понятна.
Удачи.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
MCS-51, asm, алгоритм деления слова на слово?
|
joogorden |
Микроконтроллеры, АЦП, память и т.д |
3 |
26.07.2007 17:45 |
Схема включения LCD панели от Motorola StarTAC для AVR/PIC
|
Gobsek |
Микроконтроллеры, АЦП, память и т.д |
0 |
11.03.2007 17:44 |
Алгоритм деления
|
kviper |
Микроконтроллеры, АЦП, память и т.д |
5 |
03.01.2007 15:15 |
Проблема деления целых чисел с заданной точностью на AVR
|
KiberBOSS |
Микроконтроллеры, АЦП, память и т.д |
8 |
16.02.2006 16:35 |
Часовой пояс GMT +4, время: 01:41.
|
|