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

Познающий...
     
Группа: Свой
Сообщений: 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 На всякий случай прикладываю некоторые файлы своего проекта.
--------------------
Выбор.
|
|
|
|
|
 |
Ответов
|
Dec 13 2006, 09:48
|

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

|
Цитата(Terminator @ Dec 13 2006, 11:36)  Я почему-то считал, что в scmRTOS вытесняющая многозадачность ... Невнимательно читал мануал? Вытесняющая, но вытесняет тот процесс, у кого приоритет выше. Если процесс с наивысшим приоритетом будет крутиться бесконечно, то все остальные будут курить бамбук...
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Dec 13 2006, 10:25
|

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

|
Цитата(spf @ Dec 13 2006, 14:48)  Цитата(Terminator @ Dec 13 2006, 11:36)  Я почему-то считал, что в scmRTOS вытесняющая многозадачность ... Невнимательно читал мануал? Вытесняющая, но вытесняет тот процесс, у кого приоритет выше. Если процесс с наивысшим приоритетом будет крутиться бесконечно, то все остальные будут курить бамбук... Так чтоже получается, любой процесс может угробить всю ОС простым зацикливанием. И как быть? Оооочень внимательно программировать? И как опеределить, сколько может такой цикл крутиться? Чутье мне подсказывает, что не более, чем один тик ОС. В моем случае 4 мс. Так ли это?
--------------------
Выбор.
|
|
|
|
|
Dec 13 2006, 10:35
|

Странник
   
Группа: Свой
Сообщений: 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.
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|