Отговори на тема  [ 33 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща
dsPIC33F - оптимизация на for loop 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: dsPIC33F - оптимизация на for loop
Така както е с главни букви, ако се следва популярната нотация, MASK би трябвало да е константа. Но със сигурност за това парче код MASK е променлива, която е в корелация с n и двете зависят от броя битове за текущия фрейм. Ако on build time, MASK се закове на (1<<63) (т.е. дефинираме я като константа) това, на един не толкова тъп компилатор, би помогнало в оптимизациите. Но в случая съм сигурен че MASK е променлива/аргумент щом като:
Цитат:
...дължината на трансферите не е фиксирана - варира между 10 и 40+ бита.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Вто Фев 02, 2021 5:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: dsPIC33F - оптимизация на for loop
Най-вероятно MASK е дефинирано така:
Код:
#define MASK (1ULL<<(n-1))


Ако MASK се дефинира като (1ULL<<63) и frame се шифтне преди влизане в цикъла:
Код:
frame <<= (63 - n);


С тази промяна ще си проличи дали това което предположих по-горе е вярно, в поизравняване на 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение Re: dsPIC33F - оптимизация на for loop
Незнам дали по-нагоре някой не е писал, но повечето пикове имат малък сегмент програмируема логика(не точно като на фпга или цплд, но имаш примитиви, които може да навържеш).
не е трудно да си напишеш какъвто искаш шифт регистър, и да го аксесваш като memory mapped peripheral илиу закакчиш през ДМА.

признавам, че за пик съм писла има няма преди 12 години, и то насила, но повечето микриконтролери го имат - NXP със сигурност.

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Сря Фев 03, 2021 2:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: dsPIC33F - оптимизация на for loop
Погледнах, dspic33 има нещо подобно, ама е повече ориентирано към входове.
Чак 48 битов регистър ....май не.


Сря Фев 03, 2021 7:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение Re: dsPIC33F - оптимизация на for loop
stefan63 написа:
Погледнах, dspic33 има нещо подобно, ама е повече ориентирано към входове.
Чак 48 битов регистър ....май не.

Хайде сега , не може ли да си опишеш 48 итов регистър?

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Сря Фев 03, 2021 9:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Апр 13, 2018 4:00 pm
Мнения: 1622
Местоположение: София
Мнение Re: dsPIC33F - оптимизация на for loop
Една идея, дано не ви се стори много смешна.
Два синхронизирани SPI бъса, единият бълва битовата поредица по MOSI,
вторият бълва поредица от 0 и 1 пак по MOSI, които имитират тактовия сигнал,
с дължина, каквато е необходима.
Съответно, вторият SPI трябва да е с два пъти по-голяма честота.
Не знам доколко е осъществима в този процесор.


Сря Фев 03, 2021 9:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение Re: dsPIC33F - оптимизация на for loop
al_at написа:
Една идея, дано не ви се стори много смешна.
....

смях :!:

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Сря Фев 03, 2021 9:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Апр 13, 2018 4:00 pm
Мнения: 1622
Местоположение: София
Мнение Re: dsPIC33F - оптимизация на for loop
Е, от време на време трябва и малко смях.
Може би трябваше да го постна в "Хумор".
Още един въпрос от серията тъпи - на този dsPIC33F SPI не поддържа ли
I2S variable word length data?


Сря Фев 03, 2021 9:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: dsPIC33F - оптимизация на for loop
@al_at и SPI "трикове"
https://github.com/fizban99/microbit_hcsr04

_________________
main[-1u]={1};


Сря Фев 03, 2021 11:07 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 33 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни