| Автор |
Съобщение |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 uCOS-II въпросче
Някой занимавал ли се е с uCOS-II?
Имам едно въпросче относно прекъсванията.
Значи работят си няколко задачи и в един момент по време на изпълнение на задачата настъпва прекъсване.
Влизам си в процедурата на прекъсването и трябва да си съхраня контекста. Ако го направя с PUSH директно къде ще си съхраня контекста в стека на съответния task които е прекъснат или някъде другаде?
|
| Сря Май 10, 2006 2:59 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
За това не се ли грижи операционната система ? 
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Сря Май 10, 2006 3:25 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Ами тя не може да знае че аз съм си пуснал прекъсване.
Пък може и да има начин операционната система да се грижи за това но не ми е станало ясно как става.
|
| Сря Май 10, 2006 3:33 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
|
| Сря Май 10, 2006 4:05 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Е добре като знае.В кои стек ще си съхраня контекста при прекъсването тогава? 
|
| Сря Май 10, 2006 4:34 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
... в стека на прекъснатия таск, обаче има някой особености. Тъй като викаш OSIntExit() от същото прекъсване, тя пушва ретърн адреса на ИСР-а в същия стек. Зависи и как забраняваш прекъсванията OS_ENTER_CRITICAL() също може да запази статуса на прекъсванията в същия стек. Затова трябва да използваш OSIntCtxSw(), за да свапне контекста в стека, така че указателя да сочи контекста на прекъснатия таск.
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Сря Май 10, 2006 5:03 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
и, мисля, че трябва да се забрани суичването на таскове по време на прекъсането
то зависи до голяма степен и от процесора - едно ще е на х86, друго е на AVR8
аз нямам опит с uCOS-II има ли го нейде на сорс?
|
| Сря Май 10, 2006 5:25 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
http://www.micrium.com/index.html
Ами то излиза че стека на всеки task които пускам ще трябва да го направя по голям от необходимото за да може в него да се съхрани и контекста на прекъсването. Кофти работа като имаш повече task-ове
А няма смисъл изобщо да се забранява каквото и да било при AVR щото докато аз не разреша прекъсванията в функцията на прекъсването няма как операционната система да ми се меси в работата.
А аз нямам желание да го правя. Така че операционната система няма дори как да знае че е имало прекъсване изобщо. Само проклетия стек ме тормози че нямам много рам свободна
|
| Сря Май 10, 2006 6:02 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Не че съм голям спец в тая комбинация, ама що не си локнеш някаква памет само за това. Да не може RTOS или компилатора да пипат там. И там си запазвай колкото и каквото трябва.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Сря Май 10, 2006 6:21 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Абе и аз нещо такова си мисля само дето не ми е ясно как да стане самата реализация. Много го мразя асемблера ама работата отива така някак да го правя.
|
| Сря Май 10, 2006 6:28 pm |
|
 |
|
Petar Kaschiyski
Ранг: Минаващ
Регистриран на: Пет Апр 08, 2005 8:27 am Мнения: 36 Местоположение: София
|
Аз ръчкам uCOS-II на LPC2000 не че съм много напред обаче мисля ,че операционната система трябва да се грижи за прекъсванията. Вектора на прекъсването трябва да сочи към OS_CPU_ISR() ,която е функция на порта, а ти при иницичлизацията трябва да я сложиш на интеръпт вектроа(поне при мен е така). Тя запазва контекста на текущия таск и ти пуска твоята програма за прекъсването. А това за големия стек е един от недостатъците на преемптив ртос:) каквато е uCOS-II.
|
| Сря Май 10, 2006 6:49 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
А мерси. Сега ми попросветна как по принцип е замислено. Но нямам възможност да го направя така поради липса на памет. Ще се пробвам с асемблерска процедура която да съхранява контекста в предварително зададелена памет. Дано да успея.
|
| Сря Май 10, 2006 7:22 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
По принцип би трябвало да можеш да локнеш някоя памет в линкер скрипт файловете (поне така е на повечето компилатори).
После как ще организираш самото съхранение на контекста си зависи от много неща.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Сря Май 10, 2006 7:44 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
За локването няма проблем ама нататък ще се поузоря. Но почвам да се ориентирам ккаво трябва да направя точно
|
| Сря Май 10, 2006 7:53 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
дай някой жокер за какъв чип говориш
и с какъв компилатор се бориш
може да си заделиш памет за прекъсвания в интеръпти и да си сменаш стековия указател при влизане в интеръпта. на мен ми звучи гнило обаче. а и с някой процесори не е толкова лесно. контекст суича е най-финната работа в една многозадачна RTOS. и почти никога не е задоволителен от мой опит
|
| Сря Май 10, 2006 11:50 pm |
|
|