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

 
 
> Помоги найти мой косяк. Функция Sleep перестает работать.
a9d
сообщение Dec 26 2010, 22:00
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



У меня есть в проекте ошибка. Но я ее не могу отловить, вылетает в разные моменты времени.
Проект показывать смысла нет. Кода дохрена и никто не поймет.

Контролер ATmega8A 16MHz. Всего два процесса.
В какой то момент времени перестает работать правильно функция Sleep(). Т.е Sleep(500) начинает работать как Sleep(1) . При этом ОС работает замечательно.

Вот не могу понять. Что приводит к такому дивному эффекту? Или как эту хрень отловить.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BAT
сообщение Mar 9 2011, 17:48
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 22-12-05
Пользователь №: 12 556



Ну вроде похоже отловил причину. Не знаю как назвать, багом или особенностью Scm.

Что получилось.
Процесс с более высоким приоритетом прерывает ожидающий сообщений из канала. ConsumersProcessMap соответственно указывает, что процесс в ожидании. Далее Высокоприоритетный начинает отрабатываться достаточно долго, чтоб в ожидающем процессе произошел таймаут ожидания сообщения из канала. Ожидающий процесс встал в готовность. Теперь высокоприоритетный доходит до конца выполнения и кладет элемент в очередь сообщений, естественно не обнуляя ConsumersProcessMap (ожидающий процесс уже готов!). Далее управление передается ожидавшему процессу и тут идет проверка на наличие элемента в очереди (а он уже есть!), соответственно ConsumersProcessMap тоже в этом месте не нулится, как при вылетании по таймауту.

Итого:
Теперь если процесс попытается встать на ожидание какого-то другого события и в очередь сообщений придет элемент получится пролет ожидание этого события.

Вот думаю, что делать. Добавить чистку ConsumersProcessMap во время POP из канала? Но получится идеологически неверно влезать в сорцы оси. Но и в своем коде менять принцип не хочется.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- a9d   Помоги найти мой косяк. Функция Sleep перестает работать.   Dec 26 2010, 22:00
- - dxp   Цитата(a9d @ Dec 27 2010, 07:00) Вот не м...   Dec 27 2010, 03:04
- - a9d   Все нашел. Для меж процессорного обмена использов...   Dec 30 2010, 16:56
- - BAT   Добавлю свой вопрос сюда. Есть ощущение, что из то...   Mar 6 2011, 11:24
- - Rusoil   Как понимаю функция ожидания эвента должна возвращ...   Mar 6 2011, 14:13
- - BAT   В данном случаи возврат идет с результатом false, ...   Mar 6 2011, 17:12
- - BAT   Нащупал точку проблемы. Похоже я неправильно испол...   Mar 9 2011, 15:54
|- - dxp   Цитата(BAT @ Mar 9 2011, 23:48) Процесс с...   Mar 10 2011, 07:45
|- - BAT   Цитата(dxp @ Mar 10 2011, 10:45) Не понял...   Mar 10 2011, 09:35
|- - dxp   Цитата(BAT @ Mar 10 2011, 15:35) По повод...   Mar 10 2011, 11:51
|- - 501-q   Цитата(dxp @ Mar 10 2011, 17:51) Мы спори...   May 17 2011, 09:59
|- - dxp   Цитата(501-q @ May 17 2011, 16:59) Н...   May 17 2011, 12:28
- - BAT   Поменял местами. Как и ожидалось, проблема ушла. ...   Mar 10 2011, 12:03
- - dxp   Цитата(BAT @ Mar 10 2011, 18:03) Поменял ...   Mar 10 2011, 12:36


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

 


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


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