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

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

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

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

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

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


 
Опции темы
Непрочитано 13.03.2013, 23:33  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от Hives Посмотреть сообщение
ну да, это сейчас очень актуально
Апломбом потянуло. Типа "мы здеся килабайтов не щитаем, мы глыбше плаваем!"
Могу и ошибиться, обидеть не хотел. Просто почудилось...
Реклама:
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 14.03.2013, 13:23  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от Boba_spb Посмотреть сообщение
Давайте чуть посчитаем на пальцах. У нас есть 20 битное число N и нам надо отобразить B= (N+500)/1000 - +500 - округление.

Число N - можно представить как А*1024 + R = 1000*A +24*A +R; Где A - старшие 10 бит числа N A=N››10, а R - младшие 10 бит числа N R=N&1023.

Итак B = A + (A*24+R+500)/1000;
Начальное приближение B=A;
A*24= A‹‹3 +A‹‹4 ;
Тогда пусть С= А ‹‹ 3+А ‹‹ 4 +600;

Но как мы знаем, С- можно представить как M*1024+R1.
Тогда B=B+M - второе приближение;
И наконец, если M*24+R1›1000, то B=B+1;

Как видите, никаких умножений и делений - банальные сдвиги и суммирование.
Причем все ложиться в в двухбайтовую арифметику.
Boba_spb, я конечно снимаю шляпу, но я еще не владею столь свободно операциями сдвига, но думаю, при определенной практике это достижимо. Научите!
Объясните, почему мы берем такое С, откуда взялось М и R1.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 14.03.2013, 13:43  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
Boba_spb, я конечно снимаю шляпу, но я еще не владею столь свободно операциями сдвига, но думаю, при определенной практике это достижимо. Научите!
Объясните, почему мы берем такое С, откуда взялось М и R1.
Ну просто так мне захотелось назвать 16битную переменную именем "С";
Все ж привыкли что 16 битное число можно представить как младший байт + старший бат*256. Но можно это же число представить как 6 старших бит - это М, *1024 + R1. Т.е R1 - это младшие 10бит
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
gary2007 (14.03.2013)
Непрочитано 14.03.2013, 14:26  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Получается R1=R (младшие 10 бит)
Тогда код со слов выглядит так
PHP код:
unsigned int a,b,c,r,m;
 
  
›› 10;
  
1023;
  
a
  
= (‹‹ 3) + (‹‹ 4) +600;
  
1023;
  if((
m*24 r) › 1000b++; 
Но это работает неправильно, или я чего-то не уловил...
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 14.03.2013, 14:28  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Может так будет понятнее
Ваше 20битное число = 1048575
Мы его представляем как 1023*1024 +1023 = 1048575; A=1023 R=1023

тогда B=1023 и мы получаем новое число С=1023*24+500+1023=26075;

Но 26075= 25*1024+475; M=25 R1=475

тогда B=B+25= 1048;

Далее 25*24+475=1075 и это больше 1000.
Значит B=B+1= 1049 - что и требовалось найти
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
gary2007 (14.03.2013)
Непрочитано 14.03.2013, 15:24  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

PHP код:

unsigned short  a
,b,c,r,m;
 
  
=   (short)  (›› 10);
  
=   (short)   (1023);
  
a
  
=   (‹‹ 3) + (‹‹ 4) +500+r;
  
c››10;
  
r=c&1023;
  
b=b+m;
  if(( (
m‹‹3)  + (m‹‹4) + r) ›= 1000b++; 
Вот так должно работать;
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
gary2007 (14.03.2013)
Непрочитано 14.03.2013, 15:36  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Вот так оно в работе;
Миниатюры:
Нажмите на изображение для увеличения
Название: IntDig.JPG
Просмотров: 54
Размер:	34.3 Кб
ID:	44646  
Boba_spb вне форума  
Непрочитано 14.03.2013, 16:02  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Да, у меня тоже уже заработало, час на него глазею, меряю такты. Надо еще шорты повставлять.
Эффективность по моему выше уже некуда.
Спасибо за разжевывание!
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 14.03.2013, 16:17  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Ну чуть что,если тактов много - то на ASMе ваять надо, там совсем все коротко будет. Хотя можно и тут урезать чуток.
Boba_spb вне форума  
Непрочитано 14.03.2013, 16:58  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
Надо еще шорты повставлять.
Это зачем? Если пишете на IAR AVR, то short и int - одного размера.
Уж лучше убрать излишества, вроде этого:
PHP код:
  a =   (short)  (›› 10);
  ...;
  
a
Сообщение от gary2007 Посмотреть сообщение
Эффективность по моему выше уже некуда.
А как в строку преобразуете?
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 14.03.2013 в 17:00.
tempora вне форума  
 

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

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

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

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

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


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


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