реклама на сайте
подробности

 
 
> scmRTOS: если в одном из процессов "быстрый цикл", то все остальные процессы загибаются
haker_fox
сообщение Dec 13 2006, 07:33
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Здравствуйте!
Такая вот проблема. Использую ОС scmRTOS на ATmega16. Создано два процесса. Первый: работа с USART, второй - с ЖКИ. Проблема: если во втором процессе применить цикл вида
Код
while(PINB & (1 << KEY0));
, то первый процесс не работает. Если цикл исправить на такой
Код
            while(PINB & (1 << KEY0))
                Sleep(50/OS_SWITCH_TASK);

то все ок. В этом цикле мы ждем нажатия некой кнопки и в это время первый процесс не работает. При нажатии на кнопку (т.е. когда происходит выход из цикла), первый процесс начинает абсолютно нормально работать.
Сложилось впечатление, что если в задаче (процессе) применен бесконечный цикл, то все остальные процессы "падают" до тех пор, пока это цикл не прекратится. Доку перечитал. Не нашел никаких комментариев на эту тему. Сам сообразить, в чем дело, не могу. Прошу помощи у бывалых. Заранее спасибо!
Детали:
МК ATmega16, кварц 16MHz
Время тика ОС 4.096 мс (TCCR0 = 0x04;)
Версия ОС 1.10
Компилятор WinAVR 20060421

На всякий случай прикладываю некоторые файлы своего проекта.
Прикрепленные файлы
Прикрепленный файл  WAKE_RTOS.rar ( 45.6 килобайт ) Кол-во скачиваний: 92
 


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Dec 13 2006, 09:28
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Ну тут все очень просто. Чтобы могли крутиться другие процессы, надо чтобы "скоростной" процесс дал им такую возможность - грубо говоря "приспнул" (пардон за жаргон) на некоторое время. Именно это и делает функция Sleep. Без нее процесс никому управление и не отдаст.
Go to the top of the page
 
+Quote Post
Terminator
сообщение Dec 13 2006, 09:36
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Цитата(sergeeff @ Dec 13 2006, 12:28) *
Ну тут все очень просто. Чтобы могли крутиться другие процессы, надо чтобы "скоростной" процесс дал им такую возможность - грубо говоря "приспнул" (пардон за жаргон) на некоторое время. Именно это и делает функция Sleep. Без нее процесс никому управление и не отдаст.

Я почему-то считал, что в scmRTOS вытесняющая многозадачность ... Невнимательно читал мануал?
Go to the top of the page
 
+Quote Post
spf
сообщение Dec 13 2006, 09:48
Сообщение #4


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(Terminator @ Dec 13 2006, 11:36) *
Я почему-то считал, что в scmRTOS вытесняющая многозадачность ... Невнимательно читал мануал?

Вытесняющая, но вытесняет тот процесс, у кого приоритет выше.
Если процесс с наивысшим приоритетом будет крутиться бесконечно, то все остальные будут курить бамбук...


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Dec 13 2006, 10:25
Сообщение #5


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(spf @ Dec 13 2006, 14:48) *
Цитата(Terminator @ Dec 13 2006, 11:36) *
Я почему-то считал, что в scmRTOS вытесняющая многозадачность ... Невнимательно читал мануал?

Вытесняющая, но вытесняет тот процесс, у кого приоритет выше.
Если процесс с наивысшим приоритетом будет крутиться бесконечно, то все остальные будут курить бамбук...

Так чтоже получается, любой процесс может угробить всю ОС простым зацикливанием. И как быть? Оооочень внимательно программировать? И как опеределить, сколько может такой цикл крутиться? Чутье мне подсказывает, что не более, чем один тик ОС. В моем случае 4 мс. Так ли это?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
spf
сообщение Dec 13 2006, 10:35
Сообщение #6


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(haker_fox @ Dec 13 2006, 12:25) *
Цитата(spf @ Dec 13 2006, 14:48) *
Вытесняющая, но вытесняет тот процесс, у кого приоритет выше.
Если процесс с наивысшим приоритетом будет крутиться бесконечно, то все остальные будут курить бамбук...
Так чтоже получается, любой процесс может угробить всю ОС простым зацикливанием. И как быть? Оооочень внимательно программировать? И как опеределить, сколько может такой цикл крутиться? Чутье мне подсказывает, что не более, чем один тик ОС. В моем случае 4 мс. Так ли это?

Не совсем так.
Программирование под OS несколько отличается от "обычного" программирования.
1. Работа должна выполняться на основе "событий". Никаких зацикливаний быть не должно.
2. Когда процессу делать нечего он должен отдать управление, управление будет передано тому, которому есть что делать.

Чутье не то чует, тик OS нужен только для таймера OS.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- haker_fox   scmRTOS: если в одном из процессов "быстрый цикл", то все остальные процессы загибаются   Dec 13 2006, 07:33
|- - haker_fox   Цитата(spf @ Dec 13 2006, 15:35) Цитата(h...   Dec 13 2006, 10:41
|- - amusin   Цитата(haker_fox @ Dec 13 2006, 12:41) Кс...   Dec 13 2006, 11:29
|- - haker_fox   Цитата(amusin @ Dec 13 2006, 16:29) Цитат...   Dec 13 2006, 11:33
|- - spf   Цитата(haker_fox @ Dec 13 2006, 13:33) Ну...   Dec 13 2006, 12:17
- - sergeeff   Вытесняющая. Но надо же дать возможность другим пр...   Dec 13 2006, 09:40
- - IEC   А в вашем привере цикл можно разбать на несколько ...   Dec 13 2006, 11:45
- - Wild007   ИМХО в основном цикле "влет" проверять с...   Dec 13 2006, 12:19
- - IgorKossak   haker_fox, Вы писали, что у Вас два процесса: UART...   Dec 13 2006, 12:39
- - amusin   "cпустя минут 10 после запуска все накрылось....   Dec 13 2006, 14:24
|- - IgorKossak   Цитата(amusin @ Dec 13 2006, 13:24) ... Н...   Dec 13 2006, 14:55
|- - haker_fox   Цитата(amusin @ Dec 13 2006, 19:24) Наско...   Dec 14 2006, 04:09
- - amusin   Я не буду спорить ни по ЦитатаПри частоте кварца 8...   Dec 13 2006, 15:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 22:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016