Отговори на тема  [ 34 мнения ]  Отиди на страница Предишна  1, 2, 3
Въпрос за многозадачно програмиране. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение Re: Въпрос за многозадачно програмиране.
leotron написа:
Здравейте.
Някой може ли да ми каже дали е възможно да се направи многозадачно приложение за PIC процесор. Не съм много наясно, но мисля че не може да се работи със стека. Предполагам че и да има възможност ще е за отделни фамилии. Ако някой има идеи ще е добре да сподели 8)


:arrow: http://www.piclist.com/techref/microchi ... tm#general


Вто Юни 03, 2008 1:54 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
zaphod написа:
не е нужно да е част от задачата, просто трябва да пишеш функции които излизат след крайно време, а "многозадачната" система ги вика една след друга. ако нещо объркаш и някоя задача зацикли, системата забива :)
върши работа, нищо че изглежда глупаво.


Е тоя фокус как става? 8O


Вто Юни 03, 2008 9:51 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 10, 2007 2:22 pm
Мнения: 6492
Местоположение: София
Мнение 
Реконструктор написа:
woody написа:
Реконструктор написа:
По принцип зависи от дефиницията на "многозадачност", но като цяло всеки процесор който има прекъсване по таймер може да изпълнява повече от 1 задачи.


Дори и таймер не ти трябва за кооперативна многозадачност.


Я поясни. Без таймер, единственото, за което се сещам е context switching кода да е част от самата изпълнявана задача, което не ме радва особено.


Ами това е смисълът на кооперативна многозадачност, задачата решава
кога да каже "айде време ми е да си почина до следващо повикване".

Този подход има предимството, че като няма какво да прави - напр. чака
събитие - системата веднага отива да върши друго (ако приложението се
сети, че чака и си каже, де).

Ако не се сети, трябва да бъде принудително извадено.

Единият подход не изключва другия - в DPS се ползват и двете.
Нормално някоя задача като си копае нещо ако отиде да чака я копче,
я опресняване на прозорец, излиза за преразпределяне. Може също да
излезе и да каже "хич не ме търси поне еди-колко си време, и без
друго няма да има какво да правя". Може да излезе и да каже "нямам
нищо против системата да подремне" - и ако всички текущи задачи
са казали последно, че са съгласни на дрямка, системата влиза в
nap mode за 10-тина милисекунди (това драматично намалява консумацията
по време на обща дрямка, събуждането е за много малко - не съм го
мерил, но доста под 1 милисекунда ще е).

Ако пък задачата просто си копае и не пуска - напр. смята нещо тежко - след
някое време (обикновено 10 mS, но може дори и под милисекунда да е)
бива извадена насилствено.

_________________
-------------------
www.tgi-sci.com
-------------------
http://www.flickr.com/photos/didi_tgi/


Вто Юни 03, 2008 11:00 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Реконструктор написа:
woody написа:
Реконструктор написа:
По принцип зависи от дефиницията на "многозадачност", но като цяло всеки процесор който има прекъсване по таймер може да изпълнява повече от 1 задачи.


Дори и таймер не ти трябва за кооперативна многозадачност.


Я поясни. Без таймер, единственото, за което се сещам е context switching кода да е част от самата изпълнявана задача, което не ме радва особено.


Просто има няколко типа многозадачност и най-простата от тях е кооперативната, при която различните модули доброволно сдават управлението. Това изисква самата система да е проектирана така че "задачите" да си работят на кванти. В най-простия случай дори нямаш context switching а всяка задача предава управлението на следващата (round-robin). Например преглежда входа от клавиатурата, пресмята нещо, бродира на екрана - всичкото в един вечен цикъл. И това е кооперативна многозадачност.

Код:
{
        while (1) {
                do_keyin ();
                do_calc ();
                do_display ();
        }
}


Ако ти се размишлява над чашата със сутрешен ободрител, погледни на всяка задача като автомат (state machine). Кооперативната многозадачност постановява примерно по някакво фиксирано (или максимално) количество стъпки на всеки автомат и после преминаване на следващия.

След това пък се замисли че всъщност то цялата система е един огромен автомат и всичките тези много- и по-малко задачности са измислени като абстракции за да се улесни разделянето на голямата задача на по-лесно смилаеми малки под-задачки.


Сря Юни 04, 2008 2:32 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 34 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

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


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

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