Отговори на тема  [ 20 мнения ]  Отиди на страница 1, 2  Следваща
uCOS-II въпросче 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение uCOS-II въпросче
Някой занимавал ли се е с uCOS-II?
Имам едно въпросче относно прекъсванията.
Значи работят си няколко задачи и в един момент по време на изпълнение на задачата настъпва прекъсване.
Влизам си в процедурата на прекъсването и трябва да си съхраня контекста. Ако го направя с PUSH директно къде ще си съхраня контекста в стека на съответния task които е прекъснат или някъде другаде?


Сря Май 10, 2006 2:59 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
За това не се ли грижи операционната система ? :?: :roll:

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Сря Май 10, 2006 3:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Ами тя не може да знае че аз съм си пуснал прекъсване.
Пък може и да има начин операционната система да се грижи за това но не ми е станало ясно как става.


Сря Май 10, 2006 3:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Nikola Kirov написа:
Ами тя не може да знае че аз съм си пуснал прекъсване.

Aaaaa - тя е умна и всичко знае 8) :roll: :idea:


Сря Май 10, 2006 4:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Е добре като знае.В кои стек ще си съхраня контекста при прекъсването тогава? :)


Сря Май 10, 2006 4:34 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

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

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

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Абе и аз нещо такова си мисля само дето не ми е ясно как да стане самата реализация. Много го мразя асемблера ама работата отива така някак да го правя.


Сря Май 10, 2006 6:28 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Апр 08, 2005 8:27 am
Мнения: 36
Местоположение: София
Мнение 
Аз ръчкам uCOS-II на LPC2000 не че съм много напред обаче мисля ,че операционната система трябва да се грижи за прекъсванията. Вектора на прекъсването трябва да сочи към OS_CPU_ISR() ,която е функция на порта, а ти при иницичлизацията трябва да я сложиш на интеръпт вектроа(поне при мен е така). Тя запазва контекста на текущия таск и ти пуска твоята програма за прекъсването. А това за големия стек е един от недостатъците на преемптив ртос:) каквато е uCOS-II.


Сря Май 10, 2006 6:49 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
А мерси. Сега ми попросветна как по принцип е замислено. Но нямам възможност да го направя така поради липса на памет. Ще се пробвам с асемблерска процедура която да съхранява контекста в предварително зададелена памет. Дано да успея.


Сря Май 10, 2006 7:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
По принцип би трябвало да можеш да локнеш някоя памет в линкер скрипт файловете (поне така е на повечето компилатори).

После как ще организираш самото съхранение на контекста си зависи от много неща.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Май 10, 2006 7:44 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

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


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

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