|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 2:40 pm
| Автор |
Съобщение |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 RTOS Clock
Kолко трябва да бъде Clock-а за превключване на тасковете в зависимост от МИПСовете и броя на тасковете?
Последна промяна TheWizard на Чет Мар 23, 2006 9:27 pm, променена общо 1 път
|
| Чет Мар 23, 2006 8:33 pm |
|
 |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
Правило няма, зависи колко можеш да си позволиш.
Смисленото от практическа гледна точка е да си загубиш не повече от 10-15% от производителността на процесора за операционната система ...
|
| Чет Мар 23, 2006 9:13 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
би трябвало да има някаква приблизителна/относителна сметка
Гледам за 10 Мипса е около 10 мили сек
за 40 мипса 1 мили
|
| Чет Мар 23, 2006 9:20 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Сметката е, че ти трябват 2х(машинни цикли за пуш-ване на текущия таск във стека=машинни цикли за поп-ване на следващия) + колкото машинни цикли можеш да си позволиш за реална обработка на следващ таск. Като , както каза Балкана, съотношението между двете трябва (въпрос на вкус) да е 1:6 до 1:10. Колкото по-малко съотношението, толкова повече губиш в непроизводителни машинни цикли (служебни, за превключване на тасковете), колкото по-рядко сменяш тасковете, толковапо-голям стек ти трябва, толкова по-бавно ти вървят отделните таскове. Поне при "Салво" е така.
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Чет Мар 23, 2006 9:29 pm |
|
 |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
@evc: Някъде по дебелите книги пишеше че real-time e относително понятие и с него се означава дефинираният краен период от време на реакция на системата на външно въздействие; Практическите съображения от моя гледна точка са следните:
1. Осигуряване на минималното време за реакция на системата за съответното приложение;
2. Минимален загубен ресурс на производителност на операционната система ...
Както винаги, решението е въпрос на компромис. Сигурно има някакъв теоретичен оптимум в който получаваш най-добрия вариант и от двете, но нямам идея дали за това пита TheWizard ...
Аз лично подхождам по чисто практически съображения и после проверявам дали получените резултати ме удовлетворяват.
|
| Чет Мар 23, 2006 10:17 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Прощавай колега Балкана, наистина си мисля, че аз казвам същото. Т.е. точно това искам да кажа и аз. Наистина малко по-профанизиран стил използвах, но това е точно моята мисъл също. /Какво става днеска ве?/
Точка първа от твоите, зависи от времетраенето на самия таск, т.е. колко полезни машинни цикъла се отделят за реална обработка на данните и/или извършвани операции в изпълнението на всеки таск(задача, многозадачна среда - мултитаск, нали?). Значи тука се двете тенденции, от една страна минимално време за изпълнение на задача, от друга страна споделеност на ресурси - многозадачност.
Точка втора (по твоята таблица) - се дефинира със съотношението между "служебните" машинни цикли, т.е. машинните цикли необходими за превключване между изпълнението на текущата задача и изпълнението на следващата, като в това число влизат (понеже говорим за мултитаск при риъл тайм ОС) и машинните цикли за интерпретация на инструкция, но те от гледна точка на потребителя са непроизводителни. И това имах предвид, че както и ти казваш, не е строго зададено съотношение, а си варира, всеки си го избира, според приложенията си, и производителността на системата. Позволих си някакви числа да цитирам така като от личен опит. Или?
Едит: тези съотношения, които съм цитирал всъщност съвпадат също, защото като гледам 10%=1:10, 15%=1:7.
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Чет Мар 23, 2006 10:36 pm |
|
 |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
@evc: Сори, и аз не съм те разбрал съвсем правилно, напълно съм съгласен 
|
| Пет Мар 24, 2006 11:32 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Да попитам и аз: как си организирате стековете на отделните задачи?
|
| Пет Мар 24, 2006 11:52 am |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
Бате, в какъв смисъл как са организирани стековете - какво записвам в стека ли
точката на прекъсване, WREGs, статус и някой регистри...
Всъщност не съм работил със RTOS и реших да си спретна един елементарен за да понауча малко повече
|
| Пет Мар 24, 2006 12:27 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
При пиковете ми нарастват нагоре. Push-ването става с movwf PREINC2 или MOVFF REG,PREINC2. Обратното от POSTDEC2. Така винаги имам достъп до данните на върха (INDF2), което често, го ползвам за временна променлива. Не знам някои производители на компилатори от какви съображения са избрали обратната посока, но на мен така повечи ми допада, заради горното. Не ме интересува през колко банки минава, операциите за бъркане в него ги чрез другите индексни ги извършвам с пълно 12-битово адресиране. Контекста на задачата се запазва като се почне от стека с адреси за връщане (понеже е с променлива дължина), след това общо използваните регистри FSR0,FSR1,PROD,TBLPTR,TABLAT,BSR,STATUS,WREG. Като WREG е последен. В някои ситуации ползвам запазеното съдържание WREG, а и на останалите като параметри при изчакване/следене за някакво събитие.
|
| Пет Мар 24, 2006 12:35 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
за dsPIC30 и за новите пик24
прекъсването записва автоматично PCL & PCH
аз дозаписвам
push.d w0
push.d w2
push.d w4
push.d w6
push.d w8
push.d w10
push.d w12
push w14
push ACCAL
push ACCAH
push ACCAU
push ACCBL
push ACCBH
push ACCBU
push TBLPAG
push PSVPAG
push RCOUNT
push DCOUNT
push DOSTARTL
push DOSTARTH
push DOENDL
push DOENDH
push SR
push CORCON
WREG15 не се записва в стека - той е стек пойтнера, него го записвам във индексен масив(индекс на текущия таск) unsigned int *
масива мисля да го разширя във структора за инфо на таска
|
| Пет Мар 24, 2006 12:48 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Ако на някой му е интересно, още някои подробности по организацията която прилагам при PIC18F.
Всичко е само на асемблер, като ползвам многопасов асемблер, понеже кода не е разположен линейно и се подрежда по време на асемблирането.
За всяка задача заделям една банка, същото и за OS-а. За ОС-а и "драйверите" заделям втората ( адрес 0x100), следват банките на задачите, накрая са разположени стековете, буферите и масивите.
Не ползвам опашки от съобщения, а така да ги нареча софтуерни прекъсвания на задачите (при обработка на събития извън прекъсване). Примерно извеждане на текущото време на всяка една секунда на дисплея.
Всяка задача има 3 нива на прекъсване (т.е. общо са 4 с основното състояние на задачата). При настъпване на събитие състоянието на задачата се запазва, след това се стартира обработката на прекъсването. Ако то бъде прекъснато от друга по-високо приоритетна задача или друго софтуерно прекъсване, контекста се запазва отново в стека на избраната задача. Задачата може динамично да променя нивото си на прекъсване, примерно за синхронизиране на достъпа до общи ресурси ( примерно дисплея ).
В банката на всяка задача първите 16 адреса ги ползвам за временни данни (нещо като overlay). Така имам общи подпрограми които могат да бъдат викани едновременно от всичките задачи (ака реетрантни).
Нивата на приоритет са също 4. Според събитието, което се изчаква/обработва, текущия приоритет също може да се променя динамично).
|
| Пет Мар 24, 2006 1:07 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Off topic: The Wizard виждам ползваш dsPIC и PIC24. Ако нямаш нищо на против може ли да отвориш една тема за приложението им и какви ти са впечатленията. Просто ми е интересно.
|
| Пет Мар 24, 2006 1:11 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
Практически не съм ги ползвал, интересни са ми и ги разучавам
До колкото знам dsPIC на 30 Мипса греят и искат радиатор - 24ките са ги подобрили в това отношение и мах са на 40 мипса
От АСМ-то и С-то(микрочипските - други компилатори не ползвам за ПИК) - как да ти кажа - доста по добри са от 18ките
|
| Пет Мар 24, 2006 3:15 pm |
|
 |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
@БатеАз: Най-простия случай (не-preemptive) операционна система лесно се прави изцяло на С, като задачите не е нужно да работят в отделни стекове ... Така времето за превключване се минимизира. Е, има си съответните недостатъци 
|
| Пет Мар 24, 2006 3:15 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|