Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Инструментарий

Инструментарий Тестеры, паяльники, осциллографы, программаторы, IDE.

Ответ
 
Опции темы Опции просмотра
Старый 03.02.2010, 00:09   #151
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от artko Посмотреть сообщение
Получается, все это из-за экономии ресурсов стека? (исходя из примера для 16-го).
Нет, прочитайте внимательно описание этой проблемы в FAQ (ремарка про стек там дана только для понимания содержимого стека в приведенной таблице). В MCC18 произойдет то же самое.
tester вне форума   Ответить с цитированием
Старый 18.02.2010, 18:25   #152
master19
Senior Member
 
Регистрация: 22.01.2008
Возраст: 41
Сообщений: 237
Вес репутации: 162/47
master19 has a spectacular aura aboutmaster19 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

а почему во всех примерах OSA исходники си включаются через #include. Всегда считал моветоном такое делать... с другой стороны сильно все упрощается...
master19 вне форума   Ответить с цитированием
Старый 18.02.2010, 18:38   #153
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от master19 Посмотреть сообщение
а почему во всех примерах OSA исходники си включаются через #include. Всегда считал моветоном такое делать... с другой стороны сильно все упрощается...
Если честно, то сначала просто поленился все оформить в виде отдельных модулей, а потом забыл. Вы правы, для людей надо делать по-человечески. Найду время - переделаю.
tester вне форума   Ответить с цитированием
Старый 18.02.2010, 18:51   #154
master19
Senior Member
 
Регистрация: 22.01.2008
Возраст: 41
Сообщений: 237
Вес репутации: 162/47
master19 has a spectacular aura aboutmaster19 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
Если честно, то сначала просто поленился все оформить в виде отдельных модулей, а потом забыл. Вы правы, для людей надо делать по-человечески. Найду время - переделаю.
Спасибо! Хоть посмотрю как правильно делать, а то до сих пор иногда мучаюсь... А с осью еще сложнее.
master19 вне форума   Ответить с цитированием
Старый 12.03.2010, 21:40   #155
uaNorb
Junior Member
 
Регистрация: 19.02.2010
Возраст: 32
Сообщений: 3
Вес репутации: 100/0
uaNorb will become famous soon enoughuaNorb will become famous soon enough
По умолчанию Re: Вопросы по OSA

Уважаемый tester, не могу подключить OSA к компилятору AVR GCC. Использую Ваш пример из папки example, но при компиляции получаю следующую ошибку:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
make: *** [lights_winavr.o] Error 3
Build failed with 1 errors and 0 warnings...

Подскажите, пожалуйста, в чем дело (возможно, я что-то не подключил в проект). Очень хочется попробовать RTOS на AVR.
uaNorb вне форума   Ответить с цитированием
Старый 12.03.2010, 21:59   #156
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от uaNorb Посмотреть сообщение
Подскажите, пожалуйста, в чем дело (возможно, я что-то не подключил в проект). Очень хочется попробовать RTOS на AVR.
Как и чем Вы его открыли? У меня AVR Studio 4.17, компилятор WinAVR 20090313. OSA расположена в папке c:\OSA. Запускаем АВР Студио, открываем проект c:\osa\example\winavr\lights_winavr.aps (через меню Project\Open project). Дальше давим F7.
tester вне форума   Ответить с цитированием
Старый 12.03.2010, 23:51   #157
VXDRV
Senior Member
 
Аватар для VXDRV
 
Регистрация: 25.02.2007
Адрес: Karagandy
Возраст: 36
Сообщений: 375
Вес репутации: 230/52
VXDRV has a spectacular aura aboutVXDRV has a spectacular aura aboutVXDRV has a spectacular aura about
Отправить сообщение для VXDRV с помощью ICQ
По умолчанию Re: Вопросы по OSA

AVR Studio 4.17
WinAVR 20090313
Версия OSA - 100312
Контроллер - ATmega8
Смотрю в симуляторе AVR Studio...

main.c
Код:
#include <osa.h>
#include <avr\io.h>
#include <avr\interrupt.h>

void Task_1(void)
{
	for(;;)
	{
		OS_Yield();
	}
}

void Task_2(void)
{
	for(;;)
	{
		OS_Yield();
	}
}

void Task_3(void)
{
	for(;;)
	{
		OS_Yield();
	}
}

int main(void)
{
	OS_Init();
	OS_Task_Create(3, Task_1);
	OS_Task_Create(3, Task_2);
	OS_Task_Create(4, Task_3);
	OS_EI();
	OS_Run();
}
OSСAfg.h

Код:
#ifndef _OSACFG_H
#define _OSACFG_H

#define OS_TASKS	3

#endif
Бегает по трём задачам, хотя, вроде, должно только по двум. Что не так?

Последний раз редактировалось VXDRV; 12.03.2010 в 23:56.
VXDRV вне форума   Ответить с цитированием
Старый 13.03.2010, 00:08   #158
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от VXDRV Посмотреть сообщение
Бегает по трём задачам, хотя, вроде, должно только по двум. Что не так?
Проверил Ваш пример, у меня бегает по 2м задачам. Прикладываю свой проект (распаковать в C: ), все версии, как у Вас.

Статистика компилятора: ROM = 948, RAM = 29.

(Сегодня-завтра выложу очередное обновление, при определенных условиях не все оптимизации работают).
Вложения
Тип файла: rar example.rar (20.9 Кб, 7 просмотров)
tester вне форума   Ответить с цитированием
Старый 13.03.2010, 00:27   #159
VXDRV
Senior Member
 
Аватар для VXDRV
 
Регистрация: 25.02.2007
Адрес: Karagandy
Возраст: 36
Сообщений: 375
Вес репутации: 230/52
VXDRV has a spectacular aura aboutVXDRV has a spectacular aura aboutVXDRV has a spectacular aura about
Отправить сообщение для VXDRV с помощью ICQ
По умолчанию Re: Вопросы по OSA

В своём проекте в файле OSСAfg.h оставил только строчку:
Код:
#define OS_TASKS          3
Стало работать и статистика совпала.
До этого было... уже не могу сказать - ситуация не повторяется (вернул как было)...
Тем не менее - она была... - а обратно не воспроизводится... Может луна не в той фазе - или я "глючу"...
Всё разобрался - дело было в том, что не сохранял изменённый конфиг файл перед компиляцией. Студия этого тоже не делала. Взял его из примера и убрал OS_DISABLE_PRIORITY. При этом не сохранил изменения. Спасибо за потраченное время.

Последний раз редактировалось VXDRV; 13.03.2010 в 00:34.
VXDRV вне форума   Ответить с цитированием
Старый 13.03.2010, 00:30   #160
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от VXDRV Посмотреть сообщение
До этого было... уже не могу сказать - ситуация не повторяется (вернул как было)...
Тем не менее - она была... - а обратно не воспроизводится... Может луна не в той фазе - или я "глючу"...
Вообще-то AVR Studio иногда может собрать проект, не обращая внимания на изменения (если собирать по F7). Можно иногда для проверки собирать через меню "Build/Rebuild all".
tester вне форума   Ответить с цитированием
Старый 13.03.2010, 00:36   #161
uaNorb
Junior Member
 
Регистрация: 19.02.2010
Возраст: 32
Сообщений: 3
Вес репутации: 100/0
uaNorb will become famous soon enoughuaNorb will become famous soon enough
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
Как и чем Вы его открыли? У меня AVR Studio 4.17, компилятор WinAVR 20090313. OSA расположена в папке c:\OSA. Запускаем АВР Студио, открываем проект c:\osa\example\winavr\lights_winavr.aps (через меню Project\Open project). Дальше давим F7.
У меня стоит AVR Studio 4.18, компилятор WinAVR 20090313, OSA расположена в папке F:\osa.
Не удается подключить через Projects->Configuration options->Include Directories папку F:\osa. Если добавить такую строку, нажать "Ок", и снова зайти Projects->Configuration options->Include Directories, то видно, что там ничего не сохранилось (пустая строка). Единственная строка, которую можно добавить выглядит так: .\ Но после этого компилятор выдает ошибку, о которой я написал в предыдущем посте. Если же попробовать удалить из Include Directories и строку .\ , то при компиляции не находится файл osa.h
uaNorb вне форума   Ответить с цитированием
Старый 13.03.2010, 00:41   #162
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от uaNorb Посмотреть сообщение
У меня стоит AVR Studio 4.18, компилятор WinAVR 20090313, OSA расположена в папке F:\osa.
Не удается подключить через Projects->Configuration options->Include Directories папку F:\osa. Если добавить такую строку, нажать "Ок", и снова зайти Projects->Configuration options->Include Directories, то видно, что там ничего не сохранилось (пустая строка). Единственная строка, которую можно добавить выглядит так: .\ Но после этого компилятор выдает ошибку, о которой я написал в предыдущем посте. Если же попробовать удалить из Include Directories и строку .\ , то при компиляции не находится файл osa.h
Конкретно для этого проекта в include path должно быть прописано 2 пути:
".\"
"..\..\"
(без кавычек)
У Вас так?
tester вне форума   Ответить с цитированием
Старый 15.03.2010, 22:44   #163
uaNorb
Junior Member
 
Регистрация: 19.02.2010
Возраст: 32
Сообщений: 3
Вес репутации: 100/0
uaNorb will become famous soon enoughuaNorb will become famous soon enough
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
Конкретно для этого проекта в include path должно быть прописано 2 пути:
".\"
"..\..\"
(без кавычек)
У Вас так?
Tester, спасибо за оперативные ответы. Разобрался с ошибкой - это не проблема OSA, а проблема работы среды .Net 2.0 Framework. Описание этой проблемы и её решение предлагается на сайте Microsoft, но мне не помогло. На другом же компьютере (операционная система тоже Windows XP) проект из папки example скомпилировался с первого раза.
uaNorb вне форума   Ответить с цитированием
Старый 25.03.2010, 00:41   #164
Tsimur Smolau
Member
 
Регистрация: 26.08.2007
Возраст: 40
Сообщений: 41
Вес репутации: 123/46
Tsimur Smolau will become famous soon enoughTsimur Smolau will become famous soon enough
По умолчанию Re: Вопросы по OSA

Подскажите, пожалуйста, можно ли использовать OSA на PIC18F4550 вместе с USB Bootloader-ом от Microchip?
Как я понимаю, всё (возможно) упрется в биты конфигурации.

Заранее спасибо.
Tsimur Smolau вне форума   Ответить с цитированием
Старый 25.03.2010, 09:11   #165
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от Tsimur Smolau Посмотреть сообщение
Подскажите, пожалуйста, можно ли использовать OSA на PIC18F4550 вместе с USB Bootloader-ом от Microchip?
Как я понимаю, всё (возможно) упрется в биты конфигурации.
OSA не использует абсолютные адреса. Поэтому любая программа, написаная с использованием OSA, - это обычная программа. А биты конфигурации тут не при чем, что с бутлоадером, что с OSA, что без них.
tester вне форума   Ответить с цитированием
Старый 24.05.2010, 17:30   #166
maxNTF
Senior Member
 
Регистрация: 12.07.2007
Возраст: 36
Сообщений: 908
Вес репутации: 287/57
maxNTF is a jewel in the roughmaxNTF is a jewel in the roughmaxNTF is a jewel in the rough
По умолчанию Вопрос по сервисам!

Начал разбирать Вашу ОС, возникло несколько вопросов.
По документации.
Пиктограмма "Есть расширенный сервис с суффиксом _I для работы в прерывании" - что это значит?
Сообщения.
На сколько я понял, 2 задачи не могут получить одно и то же сообщение?
А так же я не нашел где происходит перевод сообщения в состояние свободно. Автоматически после выполнения сервиса OS_Msg_Wait и OS_Msg_Wait_ТО?

Заранее благодарен за помощ!
maxNTF вне форума   Ответить с цитированием
Старый 24.05.2010, 17:42   #167
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопрос по сервисам!

Цитата:
Сообщение от maxNTF Посмотреть сообщение
Начал разбирать Вашу ОС, возникло несколько вопросов.
По документации.
Пиктограмма "Есть расширенный сервис с суффиксом _I для работы в прерывании" - что это значит?
Сервисы - это макросы, состоящие из нескольких операторов. Если в момент выполнения макроса возникает прерывание, в котором используется сервис для работы с тем же объектом (например из прерывания отсылается сообщение, а в основной программе оно принимается), то могут возникнуть проблемы с доступом. Например, если сообщение двухбайтовое, то мы в основной программе можем успеть прочитать только первый байт, а в прерывании изменим сообщение целиком, из-за чего второй байт будет уже от нового сообщения.

Чтобы таких коллизий не возникало, в файле конфигурации определяется переменная OS_ENABLE_INT_xxx (например, для сообщений - OS_EMABLE_INT_MSG), которая добавляет в сервисы обработки объекта запрет прерываний на критические участки кода. Такие сервисы становится невозможным использовать внутри прерываний (именно из-за сброса/установки GIE). Поэтому для работы в прерываниях есть специальные сервисы с суффиксом _I, которые не содержат кода запрета/разрешения прерываний.

В прерываниях разрешается использовать только сервисы с суффиксом _I. Но в прерываниях можно вызывать не все сервисы, поэтому те, которые можно, отмечены в списке дополнительной пиктограммой "+".

Цитата:
Сообщения.
На сколько я понял, 2 задачи не могут получить одно и то же сообщение?
Не могут. Но могут ожидать одно и то же сообщение, и получит его та задача, чей приоритет выше.


Цитата:
А так же я не нашел где происходит перевод сообщения в состояние свободно. Автоматически после выполнения сервиса OS_Msg_Wait и OS_Msg_Wait_ТО?
Да. Еще есть сервис OS_Msg_Accept.
tester вне форума   Ответить с цитированием
Старый 25.05.2010, 16:24   #168
maxNTF
Senior Member
 
Регистрация: 12.07.2007
Возраст: 36
Сообщений: 908
Вес репутации: 287/57
maxNTF is a jewel in the roughmaxNTF is a jewel in the roughmaxNTF is a jewel in the rough
По умолчанию Вопрос по очередям сообщений.

П1. Есть две задачи которые добавляют сообщения в список сообщений:
Task_R1 добавляет в список MesList1
Task_R2 добавляет в список MesList2

П2. Есть задача Task_RT, которая:
1. читает сообщения MesList1 и MesList2
2. обрабатывает данные
3. по необходимости переписывает сообщения из MesList1 в MesList3, и из MesList2 в MesList4

П3. И еще две задачи
Task_T1 читает сообщения из списка MesList3
Task_T2 читает сообщения из списка MesList4

Все списки сообщений состоят из 10 элементов.

На сколько я понимаю элемент списка сообщений это указатель на начальный адрес тела сообщения. А теперь собственно сам вопрос, как в данной ситуации более эффективно распределить ресурсы?
То есть самый простой вариант под каждый список выделить свой массив "тел" . Но тогда появляется избыточность когда во время операции П2. 3, необходимо одни и те же данные ганять из массива в массив.
Можно использовать один и тот же буфер, но тогда может возможно наложение данных.

Если можно дайте оптимальный пример решения моей задачи. Пускай сообщение – массив целых из 5 элементов.
Заранее благодарен за помощ!
maxNTF вне форума   Ответить с цитированием
Старый 25.05.2010, 17:00   #169
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопрос по очередям сообщений.

Будет лучше, если мы будем придерживаться одной терминологии. Под списком Вы понимаете очередь?

Цитата:
Сообщение от maxNTF Посмотреть сообщение
На сколько я понимаю элемент списка сообщений это указатель на начальный адрес тела сообщения. А теперь собственно сам вопрос, как в данной ситуации более эффективно распределить ресурсы?
То есть самый простой вариант под каждый список выделить свой массив "тел" . Но тогда появляется избыточность когда во время операции П2. 3, необходимо одни и те же данные ганять из массива в массив.
Можно использовать один и тот же буфер, но тогда может возможно наложение данных.
Я не знаю всей задачи, но почти уверен, что в данном случае один буфер для разных задач - неудачное решение. Чтобы не было "избыточности", попробуйте использовать столько памяти, сколько нужно. а не столько, сколько "а вдруг потребуется?".

Вы написали: все списки состоят из 10 элементов. А точно всем нужно по 10?

Цитата:
Если можно дайте оптимальный пример решения моей задачи. Пускай сообщение – массив целых из 5 элементов.
Заранее благодарен за помощь!
Хм... А что беспокоит? Чем Ваш вариант кажется неоптимальным? Да и как дать решение, если я постановки задачи не знаю? У Вас, если я не ошибаюсь, ПИК16? Т.е. 4 списка по 10 сообщений по 5 двухбайтовых целых = 4*10*5*2 = 400 байт ОЗУ. Опишите задачу более реальную, чем "допустим, будет так".

С какой частотой следуют сообщения? Может, и не надо никаких очередей?
tester вне форума   Ответить с цитированием
Старый 25.05.2010, 17:42   #170
maxNTF
Senior Member
 
Регистрация: 12.07.2007
Возраст: 36
Сообщений: 908
Вес репутации: 287/57
maxNTF is a jewel in the roughmaxNTF is a jewel in the roughmaxNTF is a jewel in the rough
По умолчанию Re: Вопросы по OSA

Task_R1 - принимает данные с внешней шины (к шине подключен рад аналогичных устройств) некие команды (входящие) и добавляет их в очередь сообщений - MesList1.
Task_R2 - принимает данные с внешних датчиков, генерирует команды (исходящие) и добавляет их в очередь сообщений - MesList2.
Task_RT:
1. Читает сообщения с обоих очередей, выполняет некоторые вычисления.
2. Если сообщение имеет какое либо отношение к задаче Task_T2 (модуль реле), то данное сообщение пишется в очередь MesList4. (*)
3. Все новые сообщения из очереди MesList2 переписать в очередь MesList3. (*)
Task_T2 - передает сообщения из очередь MesList3 во внешнюю шину, пакетами собранными по таймауту.
Вот где то так! (*) это то где мне кажется избыточность.
Цитата:
Может, и не надо никаких очередей?
Может и не надо не каких очередей, по этому и задал этот вопрос, только начал разбираться с OSA.
Цитата:
С какой частотой следуют сообщения?
Цитата:
Чтобы не было "избыточности", попробуйте использовать столько памяти, сколько нужно. а не столько, сколько "а вдруг потребуется?".
Эти характеристики зависят от количества подключенных устройств, и периодичности изменения внешних событий. По этому с запасом все же придется.

Так же хочется добавить что Task_R1 и Task_R2 имеют высший приоритет перед Task_RT, Task_T1 и Task_T2. По этому до начала обработки сообщений их уже может набраться некоторое количество.
maxNTF вне форума   Ответить с цитированием
Старый 25.05.2010, 17:58   #171
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

А те данные, которые собирают Task_R1 и Task_R2, между собой связаны? Я к тому, что может произойти рассинхронизация данных в очередях, и Task_RT начнет вести рассчеты с данными полученными в разное время.

Цитата:
Сообщение от maxNTF Посмотреть сообщение
Task_RT:
1. Читает сообщения с обоих очередей, выполняет некоторые вычисления.
2. Если сообщение имеет какое либо отношение к задаче Task_T2 (модуль реле), то данное сообщение пишется в очередь MesList4. (*)
3. Все новые сообщения из очереди MesList2 переписать в очередь MesList3. (*)
По п.2: Сообщение целиком должно быть передано? Реле нужны все 5 значений из массива?
По п.2 и 3: между задачами передаются только указатели на сообщения. Само сообщение сидит в одном и том же месте, поэтому тут избыточность будет небольшая. Но вот кое-что, о чем следует задуматься.
tester вне форума   Ответить с цитированием
Старый 26.05.2010, 09:01   #172
maxNTF
Senior Member
 
Регистрация: 12.07.2007
Возраст: 36
Сообщений: 908
Вес репутации: 287/57
maxNTF is a jewel in the roughmaxNTF is a jewel in the roughmaxNTF is a jewel in the rough
По умолчанию Re: Вопросы по OSA

Цитата:
По п.2 и 3: между задачами передаются только указатели на сообщения. Само сообщение сидит в одном и том же месте, поэтому тут избыточность будет небольшая.
Но тогда если у очередей MesList1(2) и MesList3(4) один и тот же буфер. То при создании нового сообщения в очереди MesList3(4), эта позиция в очереди MesList1(2) должна быть недоступна, пока сообщение активно. Следовательно Task_R1(2) не смогут туда ни чего поставить. А приоритет у них больше!
maxNTF вне форума   Ответить с цитированием
Старый 26.05.2010, 10:54   #173
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от maxNTF Посмотреть сообщение
Но тогда если у очередей MesList1(2) и MesList3(4) один и тот же буфер. То при создании нового сообщения в очереди MesList3(4), эта позиция в очереди MesList1(2) должна быть недоступна, пока сообщение активно. Следовательно Task_R1(2) не смогут туда ни чего поставить. А приоритет у них больше!
Еще немного терминологии:

Очередь - упорядоченный список указателей на сообщения.
Буфер очереди - область памяти для хранения списка указателей.
Сообщение - передаваемая информация.
Тело сообщения - непрерывный фрагмент памяти, содержащий информацию.

Т.е. буфер не может быть один на обе очереди; каждая очередь хранит список сообщений в своем буфере. А вот тело сообщения может быть одно. Рабоая с сообщениями, нужно помнить, что тело сообщения нельзя переписывать до тех пор, пока инвормация в нем не будет получено всеми получателями. Для этого существуют различные механизмы: от динамического выделения памяти (неприменимо для ПИК16) до установки маркеров в самом теле сообщения.

Есть в OSA еще "короткие сообщения" (и, соответственно, "очереди коротких сообщений"). Отличаются тем, что телом сообщения является сама ячейка в буфере. При этом у задачи-передатчика исключается необходимост проверять факт принятия сообщения задачей-приемником.

Я еще раз задаю Вам вопрос про об объеме данных, которые Вы собираетесь передавать между задачами. Двумя-тремя постами ниже я Вам привел расчет, что одни только сообщения потребуют под себя 400 байт RAM, которых нет в 16-м ПИКе. А ведь туда адо еще и сами очереди затолкать. Поэтому вопрос: какие данные Вы передаете?

(Сдается мне, нужно писать "Урок 5" про очереди сообщений... Они много трудностей вызывают у программистов).
tester вне форума   Ответить с цитированием
Старый 26.05.2010, 11:37   #174
maxNTF
Senior Member
 
Регистрация: 12.07.2007
Возраст: 36
Сообщений: 908
Вес репутации: 287/57
maxNTF is a jewel in the roughmaxNTF is a jewel in the roughmaxNTF is a jewel in the rough
По умолчанию Re: Вопросы по OSA

Да с терминологией я немного путаюсь, так как тяжело сходу привыкнуть. Но суть та же!
Попробую более корректно изложить волнующий меня вопрос.
ПИК18 - это для справки.
Было написано, что тело сообщения может быть одно для нескольких очередей.
Меня интересует, каким способом определять принадлежит ли данное тело сообщения какому ни будь активному сообщению. С целью его (тела сообщения) занять новым!
maxNTF вне форума   Ответить с цитированием
Старый 26.05.2010, 12:11   #175
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/125
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от maxNTF Посмотреть сообщение
ПИК18 - это для справки.
Да, верно, извиняюсь. (Разговор же и начался с доступа к стеку, а я и забыл...)
Цитата:
Меня интересует, каким способом определять принадлежит ли данное тело сообщения какому ни будь активному сообщению. С целью его (тела сообщения) занять новым!
Я в предыдущем сообщении написал: "Для этого существуют различные механизмы: от динамического выделения памяти до установки маркеров в самом теле сообщения.".

Динамическое выделение памяти.
Задача-отправитель выделяет требуемое количество байтов в памяти функцией malloc для каждого нового сообщения. Задача-приемник, прочитав и обработав сообщение, освобождает память функцией free. Я никогда в PICC18 не использовал эти функции, но они там есть (см. файл sources\malloc.c)

Маркер.
Тело сообщения представляет собой структуру, один из элементов которой отвечает как раз за "занятость" сообщения:
Код:
typedef struct 
{
    uchar Busy;
    uint  Data[5];
} T_MESSAGE;
При отправке задача-отправитель проверяет поле Busy, если оно нулевое, значит сообщение свободно. Тогда в Data пишутся данные для отправки, а поле Busy устанавливается в "1". Задача-приемник, получив и обработав сообщение, пишет в Busy "0".

(Можно сделать просто с массивом, выделив под маркер его первый элемент)

Равноразмерный буфер.
Создается массив тел сообщений той же размерности, что и размерность очереди (например, для очереди из 10 указателей создается массив из 10-ти "int Data[5]").

Короткие сообщения.
Наконец, можно использовать короткие сообщения, переопределив их тип на структуру, содержащую сообщение. Это немного за рамками концепкции коротких сообщений, но такое возможно. Тогда каждая структура, т.е. каждое тело сообщения будет гарантированно сидеть в своей ячейке буфера очереди.

В файле osacfg.h:
Код:
typedef struct
{
    int Data[5];
} T_SMESSAGE;
 
#define OST_SMSG_TYPE    T_MESSAGE

Последний раз редактировалось tester; 22.09.2010 в 10:52. Причина: исправлена ошибка в последнем примере
tester вне форума   Ответить с цитированием
Ответ

Метки
osa, rtos, сторожевой таймер


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все вопросы по MikroC shnitz Инструментарий 971 23.09.2016 13:22
Статья по RTOS OSA tester Продукция MICROCHIP 12 24.02.2009 12:04
16F690, вопросы по timer1 и встроенному 32кГц-генератору e_glu Продукция MICROCHIP 3 29.01.2009 17:14
Есть вопросы по алгоритму работы устройства на пике. 40grad Продукция MICROCHIP 9 27.10.2007 15:55
Пишу руководство по RS485 и есть вопросы pvl2000 Cетевые протоколы и технологии 2 16.04.2007 00:57


Часовой пояс GMT +3, время: 07:28.


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