| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| uCOS-II въпросче http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2338 |
Страница 1 от 2 |
| Автор: | Nikola Kirov [ Сря Май 10, 2006 2:59 pm ] |
| Заглавие: | uCOS-II въпросче |
Някой занимавал ли се е с uCOS-II? Имам едно въпросче относно прекъсванията. Значи работят си няколко задачи и в един момент по време на изпълнение на задачата настъпва прекъсване. Влизам си в процедурата на прекъсването и трябва да си съхраня контекста. Ако го направя с PUSH директно къде ще си съхраня контекста в стека на съответния task които е прекъснат или някъде другаде? |
|
| Автор: | nickich [ Сря Май 10, 2006 3:25 pm ] |
| Заглавие: | |
За това не се ли грижи операционната система ? |
|
| Автор: | Nikola Kirov [ Сря Май 10, 2006 3:33 pm ] |
| Заглавие: | |
Ами тя не може да знае че аз съм си пуснал прекъсване. Пък може и да има начин операционната система да се грижи за това но не ми е станало ясно как става. |
|
| Автор: | Dimitar [ Сря Май 10, 2006 4:05 pm ] | |||||||||
| Заглавие: | ||||||||||
Aaaaa - тя е умна и всичко знае |
||||||||||
| Автор: | Nikola Kirov [ Сря Май 10, 2006 4:34 pm ] |
| Заглавие: | |
Е добре като знае.В кои стек ще си съхраня контекста при прекъсването тогава? |
|
| Автор: | nickich [ Сря Май 10, 2006 5:03 pm ] |
| Заглавие: | |
... в стека на прекъснатия таск, обаче има някой особености. Тъй като викаш OSIntExit() от същото прекъсване, тя пушва ретърн адреса на ИСР-а в същия стек. Зависи и как забраняваш прекъсванията OS_ENTER_CRITICAL() също може да запази статуса на прекъсванията в същия стек. Затова трябва да използваш OSIntCtxSw(), за да свапне контекста в стека, така че указателя да сочи контекста на прекъснатия таск. |
|
| Автор: | ДедоБоре [ Сря Май 10, 2006 5:25 pm ] |
| Заглавие: | |
и, мисля, че трябва да се забрани суичването на таскове по време на прекъсането то зависи до голяма степен и от процесора - едно ще е на х86, друго е на AVR8 аз нямам опит с uCOS-II има ли го нейде на сорс? |
|
| Автор: | Nikola Kirov [ Сря Май 10, 2006 6:02 pm ] |
| Заглавие: | |
http://www.micrium.com/index.html Ами то излиза че стека на всеки task които пускам ще трябва да го направя по голям от необходимото за да може в него да се съхрани и контекста на прекъсването. Кофти работа като имаш повече task-ове А няма смисъл изобщо да се забранява каквото и да било при AVR щото докато аз не разреша прекъсванията в функцията на прекъсването няма как операционната система да ми се меси в работата. А аз нямам желание да го правя. Така че операционната система няма дори как да знае че е имало прекъсване изобщо. Само проклетия стек ме тормози че нямам много рам свободна |
|
| Автор: | Цецо [ Сря Май 10, 2006 6:21 pm ] |
| Заглавие: | |
Не че съм голям спец в тая комбинация, ама що не си локнеш някаква памет само за това. Да не може RTOS или компилатора да пипат там. И там си запазвай колкото и каквото трябва. |
|
| Автор: | Nikola Kirov [ Сря Май 10, 2006 6:28 pm ] |
| Заглавие: | |
Абе и аз нещо такова си мисля само дето не ми е ясно как да стане самата реализация. Много го мразя асемблера ама работата отива така някак да го правя. |
|
| Автор: | Petar Kaschiyski [ Сря Май 10, 2006 6:49 pm ] |
| Заглавие: | |
Аз ръчкам uCOS-II на LPC2000 не че съм много напред обаче мисля ,че операционната система трябва да се грижи за прекъсванията. Вектора на прекъсването трябва да сочи към OS_CPU_ISR() ,която е функция на порта, а ти при иницичлизацията трябва да я сложиш на интеръпт вектроа(поне при мен е така). Тя запазва контекста на текущия таск и ти пуска твоята програма за прекъсването. А това за големия стек е един от недостатъците на преемптив ртос:) каквато е uCOS-II. |
|
| Автор: | Nikola Kirov [ Сря Май 10, 2006 7:22 pm ] |
| Заглавие: | |
А мерси. Сега ми попросветна как по принцип е замислено. Но нямам възможност да го направя така поради липса на памет. Ще се пробвам с асемблерска процедура която да съхранява контекста в предварително зададелена памет. Дано да успея. |
|
| Автор: | Цецо [ Сря Май 10, 2006 7:44 pm ] |
| Заглавие: | |
По принцип би трябвало да можеш да локнеш някоя памет в линкер скрипт файловете (поне така е на повечето компилатори). После как ще организираш самото съхранение на контекста си зависи от много неща. |
|
| Автор: | Nikola Kirov [ Сря Май 10, 2006 7:53 pm ] |
| Заглавие: | |
За локването няма проблем ама нататък ще се поузоря. Но почвам да се ориентирам ккаво трябва да направя точно |
|
| Автор: | ДедоБоре [ Сря Май 10, 2006 11:50 pm ] |
| Заглавие: | |
дай някой жокер за какъв чип говориш и с какъв компилатор се бориш може да си заделиш памет за прекъсвания в интеръпти и да си сменаш стековия указател при влизане в интеръпта. на мен ми звучи гнило обаче. а и с някой процесори не е толкова лесно. контекст суича е най-финната работа в една многозадачна RTOS. и почти никога не е задоволителен от мой опит |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|