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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 19.12.2014, 18:33  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Подскажите более скоростной вариант?

Код:
if(but_get(sr_buff[k], i) bit_set(PORTD, SR_DS);
else bit_clear(PORTD, SR_DS);
где sr_buff это uint8_t
макросы
Код:
#define bit_get(p,m) (p & (1 ‹‹ m))
#define bit_set(p,m) (p |= (1 ‹‹ m))
#define bit_clear(p,m) (p &= ~(1 ‹‹ m))
i у нас в цикле от 0 до 7.
Конструкция в условии if..else просаживает быстродействие, и сильно.
Один из вариантов: выключить SR_DS, и включать в соответствии с .. чем?
Реклама:

Последний раз редактировалось whoim; 19.12.2014 в 19:14.
whoim вне форума  
Непрочитано 19.12.2014, 18:40  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

Код:
			bit_clear(PORTD, SR_DS);
			bit_set(PORTD, SR_DS & bit_get(sr_buff[k], i));
еще хуже работает, хоть и не намного. Камень avr 8bit
whoim вне форума  
Непрочитано 19.12.2014, 19:14  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

Удалось поднять расширением буфера (по байту на флаг) и заменой операций bit_get на обычное сравнение
Код:
if(sr_buff[k*8+i] == 1) set_hi(SR_DS)
else set_lo(SR_DS);
реально дюти-цикл поднялся с 14% до 22% из теоретических 25% (динамика /4)
whoim вне форума  
Непрочитано 19.12.2014, 19:30  
valic
Временная регистрация
 
Аватар для valic
 
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
valic на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

Если в массиве хранить значения соответствующие тому пину то можно приравниванием. Поясню:
например #define SR_DS 1
тогда в массиве хранить 0xFF если нужна лог 1 и 0xFD если лог 0
и потом просто

PORTD &= sr_buff[k*8+i];
valic вне форума  
Сказали "Спасибо" valic
whoim (19.12.2014)
Непрочитано 19.12.2014, 19:33  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

Видимо, SR_DS & sr_buff[k*8+i]? менять то надо пин SR_DS (7 кстати на PORTD)
whoim вне форума  
Непрочитано 19.12.2014, 19:34  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

Ааа туплю, понял, спасибо!
whoim вне форума  
Непрочитано 19.12.2014, 19:34  
valic
Временная регистрация
 
Аватар для valic
 
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
valic на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

в массиве хранить 0xFF если нужна лог 1 и 0x7F если лог 0
PORTD &= sr_buff[k*8+i];
valic вне форума  
Сказали "Спасибо" valic
whoim (19.12.2014)
Непрочитано 19.12.2014, 19:51  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: подскажите более скоростной вариант?

Работает.. но дюти-цикл упал на 0,5% по сравнению с if()else..
хз, отчего. В принципе, врядле больше 20% из 25% можно выжать на динамике к четырем, если столбцы на регистрах. Тем более что для задачи достаточно
whoim вне форума  
Непрочитано 19.12.2014, 21:43  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Подскажите более скоростной вариант?

Делайте асмовские вставки

PHP код:
           ld  r16,X                     
    cbi    PORTx
,bitx       
    sbrс  r16
,bit
    sbi    PORTx
,bitx 
тут даже и комментировать нечего - тактов 6 -7 будет исполняться.

Последний раз редактировалось Boba_spb; 19.12.2014 в 21:57.
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
whoim (19.12.2014)
Непрочитано 19.12.2014, 21:45  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Подскажите более скоростной вариант?

к сожалению, с ассемблером не сталкивался со школы - на zx кодил почутьчуть, по книжке "как написать игру на zx". Уже и не помню ничего. Хотя есть гугл)
Спасибо, попробую на досуге. Но, в принципе, 21-22% из 25 выжал.. Уже хорошо)
whoim вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
собрал термостат, индикация работает некорректно, подскажите intell2000 Микроконтроллеры, АЦП, память и т.д 23 26.06.2009 17:59
Подскажите устройство лазерных светодиодов Sanyo Источники питания и свет 6 03.04.2009 22:16
Подскажите схему линейного усилителя SensorX Аудиотехника 2 31.10.2007 13:35
CodeVision Проблеммы при программе более 50% памяти Andrewg Proteus, KiCAD и другие ECAD 2 07.08.2007 17:20


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


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