26.02.2013, 00:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
Компилятор должен был "двинуть" его на 8 влево.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
26.02.2013, 00:35
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от gary2007
|
У меня на меге8 такая строчка :
cnt_ovf =TCNT1 + corr_L * cnt_cmp + cnt_ovf * 65536;
выполняется за 996 тактов.
cnt_cmp, cnt_ovf переменные unsigned long long int
|
![Валяюсь от смеха](images/smilies/icon_biggrin.gif) Ну что я скажу. В целом неудивительно ... Я только что привёл вам умножение для long long чисел и там счёт на тысячи. Это как раз показывает, что компилятор оценил уровень вашего мастерства и заменил cnt_ovf * 65536 на cnt_ovf ‹‹ 16, а точнее прибавил сразу к старшим байтам результата ...
Поймите ... нечего на зеркало пенять, коли рожа крива ... Я не в обиду, просто привёл пословицу. В данном контексте, я просто убей не пойму ЗАЧЕМ использовать long long для коррекции времени ... Быть может я мал и глуп. Просто расскажите ваш алгоритм, я попытаюсь понять, а то совсем в голову не лезет ... Я бы обошёлся максимум 16 битами, с фиксированной точкой и без умножения ... Это на вскидку конечно ... Может быть я и ошибаюсь ...
|
|
|
|
26.02.2013, 00:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от gary2007
|
Компилятор должен был "двинуть" его на 8 влево.
|
На 16, в смысле? Ну, и как - двинул?
__________________
There's always more than one way to skin a cat.
|
|
|
|
26.02.2013, 00:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от SasaVitebsk
|
компилятор оценил уровень вашего мастерства и заменил cnt_ovf * 65536 на cnt_ovf ‹‹ 16, а точнее прибавил сразу к старшим байтам результата
|
А это разве не умножение? --›
Код:
|
LDI R26, LOW(__Constant_10000_0)
LDI R27, (__Constant_10000_0) ›› 8
RCALL ?LL_MUL_L12 |
__________________
There's always more than one way to skin a cat.
|
|
|
|
26.02.2013, 00:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от SasaVitebsk
|
Да успокойтесь вы за компилятор волноваться ... Сейчас специально для вас взял фильтр движения свой... Он у меня на ASM написан, так как в прерывании и 6 двигателей на 5 кгц...
|
Да что мне волноваться ? Не первый год замужем.
Простая задачка - байт умножить на байт, без аппаратного умножения.
Какой алгоритм самый быстрый и на сколько он быстрее чем в библиотеке, которую использует компилятор.
|
|
|
|
26.02.2013, 00:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
Да ладно вам, алгоритм прост как 5 копеек.
За 1 час (2, 3...24) вычисляем количество системных тиков, затем определяем их количество за секунду. И 16-ти битный таймер формирует эту самую секунду в дальнейшем. Точность подстройки 24 бита.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
26.02.2013, 00:59
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: IAR Embedded Workbench
Я бы накапливал .. понимаете ... Не надо вычислять ... только вычитать ...
Что за компилятор? Оптимизация включена?
Ну ради прикола запишите вашу формулу так
cnt_ovf =TCNT1 + corr_L * cnt_cmp;
cnt_ovf += cnt_ovf ‹‹ 16;
|
|
|
|
26.02.2013, 01:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
Компилятор
IAR C/C++ Compiler V5.51.0.50312/W32 for Atmel AVR
Оптимизацию не включал. Это разовое вычисление, в дальнейшем оно не используется.
Зато не болит голова, ничего не надо вводить. Кварц +/-2% и все делается автоматом, от пользователя требуется только 2 раза нажать вовремя кнопку.
Что означает
Сообщение от SasaVitebsk
|
Не надо вычислять ... только вычитать ...
|
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
26.02.2013, 01:11
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: IAR Embedded Workbench
Я бы сделал просто ...
Высчитал бы частоту на калькуляторе ...
Ну например у вас получилось 5454.4576 тиков в секунду.
Вам надо завести целочисленный аккумулятор и прибавлять эти delta = 0,4576 каждую секунду. Точка конечно условная то есть раз в секунду вам надо делать следующее
acc += delta;
if(acc›10000)
{
acc -= 10000;
+1 к таймеру
}
|
|
|
|
26.02.2013, 01:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от gary2007
|
Точность подстройки 24 бита.
|
Если в самом деле нужна такая точность, то видимо какое-то серьезное назначение, а как же тогда старение кварца, его уплывание от температуры?
__________________
There's always more than one way to skin a cat.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Подниму тему WinAVR vs IAR
|
oleg110592 |
Микроконтроллеры, АЦП, память и т.д |
5 |
24.10.2015 14:06 |
Часовой пояс GMT +4, время: 02:27.
|
|