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

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


 
Опции темы

IAR Embedded Workbench

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

Сообщение от Hives Посмотреть сообщение
ну да, это сейчас очень актуально
Апломбом потянуло. Типа "мы здеся килабайтов не щитаем, мы глыбше плаваем!"
Могу и ошибиться, обидеть не хотел. Просто почудилось...
Реклама:
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 14.03.2013, 13:23  
gary2007
Почётный гражданин KAZUS.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
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.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 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.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

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

PHP код:

unsigned short  a,b,c,r,m;
 
  a =   (short)  (n ›› 10);
  r =   (short)   (n & 1023);
  b = a; 
  c =   (a ‹‹ 3) + (a ‹‹ 4) +500+r;
  m = c››10;
  r=c&1023;
  b=b+m;
  if(( (m‹‹3)  + (m‹‹4) + r) ›= 1000) b++; 
Вот так должно работать;
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
gary2007 (14.03.2013)
Непрочитано 14.03.2013, 15:36  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 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.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

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

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

Сообщение от gary2007 Посмотреть сообщение
Надо еще шорты повставлять.
Это зачем? Если пишете на IAR AVR, то short и int - одного размера.
Уж лучше убрать излишества, вроде этого:
PHP код:
  a =   (short)  (n ›› 10);
  ...;
  b = 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, время: 21:16.


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