Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 31.01.2010, 02:48  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
Печаль scmRTOS

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

Прошу ткнуть носом Ну а потом камнями можно кидатся...
Реклама:
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 31.01.2010, 03:17  
big.chupakabra
Частый гость
 
Регистрация: 03.12.2009
Сообщений: 27
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
big.chupakabra на пути к лучшему
По умолчанию Re: scmRTOS

Усыпить приоритетный процесс в ожидании нужного события. Управление прерйдет к следующему по приоритету
big.chupakabra вне форума  
Непрочитано 31.01.2010, 03:31  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: scmRTOS

Пробывал. Заставляю его (более приоритетный) ждать флаг. Просто усыпляю.
Ничего
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 31.01.2010, 03:39  
big.chupakabra
Частый гость
 
Регистрация: 03.12.2009
Сообщений: 27
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
big.chupakabra на пути к лучшему
По умолчанию Re: scmRTOS

Без исходников больше ничего не скажешь. Попробуйте на основе демо примеров, модифицировав их под себя.

Последний раз редактировалось big.chupakabra; 31.01.2010 в 03:40. Причина: орфю ошибка
big.chupakabra вне форума  
Непрочитано 31.01.2010, 04:03  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: scmRTOS

Я так, впринципе и сделал...
Код:
template‹› void TProc1::Exec()
{
    for(;;)
    {
        PORTC|=(1‹‹0);
        ef.Wait();
    }
}
template‹› void TProc2::Exec()
{
    for(;;)
    {
        PORTC|=(1‹‹1);
        ef.Wait();
    }
}
Весь проект в пакаванке.
Вложения:
Тип файла: rar scmRTOS_3_10_avr_iar.rar (200.6 Кб, 57 просмотров)
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 31.01.2010, 08:17  
Gn0me
Временная регистрация
 
Регистрация: 15.08.2006
Сообщений: 54
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Gn0me на пути к лучшему
По умолчанию Re: scmRTOS

У Вас в прерывании производится возведение флага Timer1_Ovf, а в процессах ожидается событие ef, которого никогда не происходит. Но это еще не все. Даже если в прерывании таймера сигналить событие ef? все равно работать не будет. Это происходит потому, что при возведении флага события управление получает самый приоритетный процесс, в данном случае Proc1, который и сбрасывает флаг события.
В этом проекте паузу лучше сделать функцией Sleep(time); где time - ожидание в системных тиках. Например так
Код:
//----------------------------------------------------------
template‹› void TProc1::Exec()
{
    for(;;)
    {
        PORTC|=(1‹‹0);
        Sleep(100);
        PORTC&=~(1‹‹0);
        Sleep(100);
    }
}
В хелпе на avr в протеусе написано, что нет симуляции самопрограммирования и соответственно прерывания SPM ready, поэтому в протеусе не происходит передачи управления другому процессу.

Последний раз редактировалось Gn0me; 31.01.2010 в 08:19.
Gn0me вне форума  
Непрочитано 31.01.2010, 16:34  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: scmRTOS

На счет того, что жду одного флага - устанавливаю другой это я знаю.
Но в мануале написано (на счет EventFlag, а точнее ф-ции Wait):

Цитата:
ждать. При вызове функции Wait() происходит
следующее: проверяется, установлен ли флаг и,
если установлен, то флаг сбрасывается, и функ-
ция возвращает true, т.е. событие на момент оп-
роса уже произошло. Если флаг не установлен
(т.е. событие еще не произошло), то процесс пе-
реводится в состояние ожидания этого флага
(события) и управление отдается ядру, которое,
перепланировав процессы, запустит следующий.
И на счет SPM. Я использую схему с прямой передачей управления (через планировщик) а не через прерывание.

Контроллер ATmega32.
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 31.01.2010, 17:26  
Gn0me
Временная регистрация
 
Регистрация: 15.08.2006
Сообщений: 54
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Gn0me на пути к лучшему
По умолчанию Re: scmRTOS

Почитал мануал. Действительно управление должны получить все процесс, начиная с более приоритетного.
Цитата:
«сигналить». Процесс, который желает сообщить
посредством объекта TEventFlag другим процес-
сам о том, что то или иное событие произошло,
должен вызвать функцию Signal(). При этом все
процессы, ожидающие указанное событие, будут
переведены в состояние готовых к выполнению,
а управление получит самый приоритетный из
них (остальные в порядке очередности приорите-
тов);
Сообщение от alberio Посмотреть сообщение
Я использую схему с прямой передачей управления (через планировщик) а не через прерывание.
В проекте, который Вы приложили используется как раз передача управления через прерывание. В файле scmRTOS_CONFIG.h есть строка
#define scmRTOS_CONTEXT_SWITCH_SCHEME 1
Gn0me вне форума  
Сказали "Спасибо" Gn0me
alberio (31.01.2010)
Непрочитано 31.01.2010, 18:21  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: scmRTOS

Тысяча извинений! Действительно в этом проекте забыл переопределить "scmRTOS_CONTEXT_SWITCH_SCHEME". Все заработало! Спасибо за помощь!!!
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 04:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot