| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| dsPIC33F - оптимизация на for loop http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=17742 |
Страница 1 от 3 |
| Автор: | stewie [ Пон Фев 01, 2021 10:20 am ] | |||||||||
| Заглавие: | dsPIC33F - оптимизация на for loop | |||||||||
Здравейте, Имам един dsPIC33F, който се ползва за серийна комуникация с периферно устройство, Протоколът е подобен на SPI, но няма CS и дължината на трансферите не е фиксирана - варира между 10 и 40+ бита. За момента ползвам следния код:
Кодът работи, но for цикълът бави доста и максималната честота, която постигам, е около 250 kHz. Искам да го оптимизирам малко, че да стане по-бърз, и мисля да позлвам inline assembly. Ако някой има подобно примерче - да пише. Иначе по какъв друг начин мога да оптимизирам кода? |
||||||||||
| Автор: | TheWizard [ Пон Фев 01, 2021 10:29 am ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
пробвай while(i--) или си го оптимизирай на ASM, дсПИКа има нативен опер за loop мисля че беше DO |
|
| Автор: | t_i_t_o [ Пон Фев 01, 2021 10:34 am ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Е па махни дилей-а! Той ти е половината от загубата на време ако коментара му е правилен. Закачи осцилоскоп и така подреди кода, че да получих хубав клок и данни без дилей. |
|
| Автор: | nobodyshadow [ Пон Фев 01, 2021 10:36 am ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Е той кода ти се изпълнява по-бързо от това изчакване от 2us. Там гледай дали може да направиш нещо. |
|
| Автор: | Ники [ Пон Фев 01, 2021 11:42 am ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
do..while цикъла ще е най оптималния за контрол на цикъла на С, на асемблер ще се спестят и инструкциите за въртене на цикъла. Както каза tito оптимизиране на кода да се получи изравнен клок., и може да стигнеш около 1-1.5МХз. |
|
| Автор: | Zdrav [ Пон Фев 01, 2021 12:44 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
А бре не се хващайте за заглавието буквално. Не му е проблема да рендоса малко тактове от оптимизиране на инструкциите които завъртат цикъла ами... има нужда от оптимизиране на това, че шифтва 64 битови променливи вътре в тялото му. За dsPIC33F пише че има 40 битов барел шифтър, дали компилатора е генерирал код който го ползва? Явно с този сорс който е постнал, on build time няма как компилатора да знае дали фрейма ще е само до 40 бита и ще върти и суче да прави шифтване на 64 битови променливи. По-скоро за това му дайте съвет на човека. Delay-а вероятно търпи настройка ако може да вдигне скоростта на тялото на цикъла. |
|
| Автор: | stefan63 [ Пон Фев 01, 2021 1:14 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Е той иска 40+ бита, а едва ли ползва платените оптимизации. По-скоро трябва да модифицира цикъла и да ползва инструкции съобразно архитектурата. |
|
| Автор: | Zdrav [ Пон Фев 01, 2021 1:22 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Мда, това плюсче ми е убягнало. Но пък се сетих, че ако се опре до оптимизиране на самото завъртане на цикъла, една от стратегиите е loop unrolling. На цената на раздуване на размера на програмчето разбира се. Ето един пример за ръчно(т.е. не се ползва оптимизатора на компилатора) loop unrolling: https://en.wikipedia.org/wiki/Duff%27s_device |
|
| Автор: | Ники [ Пон Фев 01, 2021 1:28 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Съмнявам се компилатора да ползва барел-шифт регистъра. Шифтването ще стане с три последователни инструкции RLC, четвъртата е излишна, другата част от кода зависи от SET_DATA, MASK и DATA_STATE. |
|
| Автор: | TheWizard [ Пон Фев 01, 2021 3:19 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
мързи ме да мисля - виж тва https://microchipdeveloper.com/dsp0201:barrel-shifter http://ww1.microchip.com/downloads/en/d ... 05158b.pdf стр 31 |
|
| Автор: | nobodyshadow [ Пон Фев 01, 2021 5:16 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Е клока що го правиш софтуерно? Сложи си го на някакъв брояч. Прекъсвания, дма ползвай желязото.. |
|
| Автор: | ToHu [ Пон Фев 01, 2021 5:52 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
мм това нема да му помогне, клока ще му е хардуерен но данните пак ще ги върти на ръка, то там отива времето. Защо не използваш някоя от перифериите, конкретно SPI ? |
|
| Автор: | t_i_t_o [ Пон Фев 01, 2021 6:28 pm ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Както казва Тони, опитай да използваш SPI за 16-те бита, а за 17тия - софтуерно клати данните и клока. Така само 1/17 ще правиш софтуерно, другите 16/17 хардуера ще ги клати, даже софтуера ще ти се опрости, щото няма да шифтваш битове... |
|
| Автор: | ToHu [ Вто Фев 02, 2021 10:16 am ] |
| Заглавие: | Re: dsPIC33F - оптимизация на for loop |
Аз не знам как е реализирано при dspica, при някои процесори има начин да го прекъснеш на произволен бит, вярно със заобиколки ама работи, та виж няма ли такава възможност. |
|
| Страница 1 от 3 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|