Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 26.02.2013, 00:33  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Компилятор должен был "двинуть" его на 8 влево.
Реклама:
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 26.02.2013, 00:35  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию 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
Ну что я скажу. В целом неудивительно ... Я только что привёл вам умножение для long long чисел и там счёт на тысячи. Это как раз показывает, что компилятор оценил уровень вашего мастерства и заменил cnt_ovf * 65536 на cnt_ovf ‹‹ 16, а точнее прибавил сразу к старшим байтам результата ...

Поймите ... нечего на зеркало пенять, коли рожа крива ... Я не в обиду, просто привёл пословицу. В данном контексте, я просто убей не пойму ЗАЧЕМ использовать long long для коррекции времени ... Быть может я мал и глуп. Просто расскажите ваш алгоритм, я попытаюсь понять, а то совсем в голову не лезет ... Я бы обошёлся максимум 16 битами, с фиксированной точкой и без умножения ... Это на вскидку конечно ... Может быть я и ошибаюсь ...
SasaVitebsk вне форума  
Непрочитано 26.02.2013, 00:36  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
Компилятор должен был "двинуть" его на 8 влево.
На 16, в смысле? Ну, и как - двинул?
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 26.02.2013, 00:40  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию 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.
tempora вне форума  
Непрочитано 26.02.2013, 00:40  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от SasaVitebsk Посмотреть сообщение
Да успокойтесь вы за компилятор волноваться ... Сейчас специально для вас взял фильтр движения свой... Он у меня на ASM написан, так как в прерывании и 6 двигателей на 5 кгц...
Да что мне волноваться ? Не первый год замужем.

Простая задачка - байт умножить на байт, без аппаратного умножения.
Какой алгоритм самый быстрый и на сколько он быстрее чем в библиотеке, которую использует компилятор.
Boba_spb вне форума  
Непрочитано 26.02.2013, 00:42  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Да ладно вам, алгоритм прост как 5 копеек.
За 1 час (2, 3...24) вычисляем количество системных тиков, затем определяем их количество за секунду. И 16-ти битный таймер формирует эту самую секунду в дальнейшем. Точность подстройки 24 бита.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 26.02.2013, 00:59  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Я бы накапливал .. понимаете ... Не надо вычислять ... только вычитать ...
Что за компилятор? Оптимизация включена?
Ну ради прикола запишите вашу формулу так
cnt_ovf =TCNT1 + corr_L * cnt_cmp;
cnt_ovf += cnt_ovf ‹‹ 16;
SasaVitebsk вне форума  
Непрочитано 26.02.2013, 01:09  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Компилятор
IAR C/C++ Compiler V5.51.0.50312/W32 for Atmel AVR
Оптимизацию не включал. Это разовое вычисление, в дальнейшем оно не используется.
Зато не болит голова, ничего не надо вводить. Кварц +/-2% и все делается автоматом, от пользователя требуется только 2 раза нажать вовремя кнопку.

Что означает
Сообщение от SasaVitebsk Посмотреть сообщение
Не надо вычислять ... только вычитать ...
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 26.02.2013, 01:11  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Я бы сделал просто ...
Высчитал бы частоту на калькуляторе ...
Ну например у вас получилось 5454.4576 тиков в секунду.
Вам надо завести целочисленный аккумулятор и прибавлять эти delta = 0,4576 каждую секунду. Точка конечно условная то есть раз в секунду вам надо делать следующее
acc += delta;
if(acc›10000)
{
acc -= 10000;
+1 к таймеру
}
SasaVitebsk вне форума  
Непрочитано 26.02.2013, 01:13  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
Точность подстройки 24 бита.
Если в самом деле нужна такая точность, то видимо какое-то серьезное назначение, а как же тогда старение кварца, его уплывание от температуры?
__________________
There's always more than one way to skin a cat.
tempora вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot