|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:05 pm
dsPIC33F - оптимизация на for loop
| Автор |
Съобщение |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: dsPIC33F - оптимизация на for loop
По скоро губи време в сетването на дата пин-а (Set serial bit - this macro sets/resets LATx bit). Компилатора трябва да е мноо тъп за да не направи 4 последователни шифта през carry - не е там забавянето, а и ако беше от шифтването щеше да се бави и при втория шифт. Ако битовете са до 48 може да се мине и с 3 шифта както каза Ники. Разгледай си асемблера след компилация и ще видиш къде ти се бави.
|
| Вто Фев 02, 2021 2:10 pm |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
 Re: dsPIC33F - оптимизация на for loop
Да, би било интересно да се види disassembly листинг-а. В макроса за сетване на data пин-а, има също операция с 64 битова променлива - лог AND, което плюс времето за шифтване след това на 64 битовата променлива frame идва в повече от само шифтване на response докато трае CLK HIGH. Да, това вероятно e причината за разликата между времената CLK_HIGH - CLK_LOW, но не е основната причина за това "че бави". Основната причина за това "че бави" според мен е в използването на 64 битови променливи и как се справя с това съответната имплементация на компилатор за dsPIC33F (т.е. колко точно е тъп компилатора). А операциите с 64 битови променливи при 16 битово MCU едва ли стават само и единствено в регистрите на ядрото. Докато стигнеш до тези 3-4 последователни шифтвания, нали променливата се прочита от паметта, между всяко шифтване нали се проверява за пренос, после се пише обратно в паметта и т.н.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
| Вто Фев 02, 2021 5:08 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: dsPIC33F - оптимизация на for loop
Закъснение в долното ниво на клока се допълва заради преход към началото на цикъла и проверката на условието му. В по горно мнение това се избягва с цъкъл do..while, стига компилатора да ползва една инстрикция за проверка. На асемблер дсПИК има инструкция за цикъл и забавяне от преходи и проверка на условие няма да има. След като се уточни от къде и как идва MASK, прочитането на пин е 2-3 инструкции, сетването на пин е 4 инструкции и два шифта по 3 инструкции всеки. Всичко става само с регистри, прехвърляне с памет е преди и след цикъла.
Но ако не се е отказал питащия да даде листинг.
|
| Вто Фев 02, 2021 5:19 pm |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
 Re: dsPIC33F - оптимизация на for loop
Така както е с главни букви, ако се следва популярната нотация, MASK би трябвало да е константа. Но със сигурност за това парче код MASK е променлива, която е в корелация с n и двете зависят от броя битове за текущия фрейм. Ако on build time, MASK се закове на (1<<63) (т.е. дефинираме я като константа) това, на един не толкова тъп компилатор, би помогнало в оптимизациите. Но в случая съм сигурен че MASK е променлива/аргумент щом като:
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
| Вто Фев 02, 2021 5:38 pm |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
 Re: dsPIC33F - оптимизация на for loop
Най-вероятно MASK е дефинирано така: Ако MASK се дефинира като (1ULL<<63) и frame се шифтне преди влизане в цикъла: С тази промяна ще си проличи дали това което предположих по-горе е вярно, в поизравняване на HIGH - LOW времената на клока.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
| Вто Фев 02, 2021 6:06 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: dsPIC33F - оптимизация на for loop
И на мен ми изглежда да е променлива. И маскирането с 64 бита е основнята тежест в забавянето. По горе колегите предложиха хардуерен СПИ, ама с това маскиране и писане на пин не ми се вижда постижимо. Ако е само четене-може би. За да се оптимизира маскирането при тоя проц, ще трябва преди цикъла след проверка на МАСК в кой регион от 64 бита попада, а в цикъла да се маскира само единия регистър, не 64/48 бита.
|
| Вто Фев 02, 2021 6:28 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: dsPIC33F - оптимизация на for loop
Zdraw даде разумен съвет с разцепването на цикъла, SPI-то може да е /може да не е решение - може да е бавно превключването между GPIO и SPI режим на пиновете, платката може да е готова вече и да не позволява SPI.
На мене ми е чудно- защо е избран такъв "плаващ" брой битове , сещам се за някакви светодиодни ленти...
|
| Вто Фев 02, 2021 6:52 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: dsPIC33F - оптимизация на for loop
С максимум оптимизиран цикъл ще се постигне скорост около 1-1.1МХз. А с развитие на идеята на Zdrav, изпълнение не с цикъл а с последователен бит-банг, може и да стигне скорост 2.6МХз.
ПП: Отдавна не бях мислил във формат ембедед. Всъщност се коригирам, този процесор може да превключва периферии на всеки пин, stefan63 е прави и може да се адаптира комбинация от СПИ и бит-банг за повече скорост. С по стари пикове съм имал проблеми от спайкове на клока в подобна комбинация, но за този не съм в час.
|
| Вто Фев 02, 2021 10:01 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
 Re: dsPIC33F - оптимизация на for loop
Незнам дали по-нагоре някой не е писал, но повечето пикове имат малък сегмент програмируема логика(не точно като на фпга или цплд, но имаш примитиви, които може да навържеш). не е трудно да си напишеш какъвто искаш шифт регистър, и да го аксесваш като memory mapped peripheral илиу закакчиш през ДМА.
признавам, че за пик съм писла има няма преди 12 години, и то насила, но повечето микриконтролери го имат - NXP със сигурност.
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Сря Фев 03, 2021 2:53 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: dsPIC33F - оптимизация на for loop
Погледнах, dspic33 има нещо подобно, ама е повече ориентирано към входове. Чак 48 битов регистър ....май не.
|
| Сря Фев 03, 2021 7:32 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
 Re: dsPIC33F - оптимизация на for loop
Хайде сега , не може ли да си опишеш 48 итов регистър?
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Сря Фев 03, 2021 9:30 pm |
|
 |
|
al_at
Ранг: Форумен бог
Регистриран на: Пет Апр 13, 2018 4:00 pm Мнения: 1622 Местоположение: София
|
 Re: dsPIC33F - оптимизация на for loop
Една идея, дано не ви се стори много смешна. Два синхронизирани SPI бъса, единият бълва битовата поредица по MOSI, вторият бълва поредица от 0 и 1 пак по MOSI, които имитират тактовия сигнал, с дължина, каквато е необходима. Съответно, вторият SPI трябва да е с два пъти по-голяма честота. Не знам доколко е осъществима в този процесор.
|
| Сря Фев 03, 2021 9:33 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
 Re: dsPIC33F - оптимизация на for loop
смях 
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Сря Фев 03, 2021 9:43 pm |
|
 |
|
al_at
Ранг: Форумен бог
Регистриран на: Пет Апр 13, 2018 4:00 pm Мнения: 1622 Местоположение: София
|
 Re: dsPIC33F - оптимизация на for loop
Е, от време на време трябва и малко смях. Може би трябваше да го постна в "Хумор". Още един въпрос от серията тъпи - на този dsPIC33F SPI не поддържа ли I2S variable word length data?
|
| Сря Фев 03, 2021 9:52 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: dsPIC33F - оптимизация на for loop
_________________ main[-1u]={1};
|
| Сря Фев 03, 2021 11:07 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 0 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|