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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 14.04.2009, 16:19   #51
CERGEI1982
Senior Member
 
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48
CERGEI1982 has a spectacular aura aboutCERGEI1982 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
Примеры даны отдельно в разделе примеры: http://wiki.pic24.ru/doku.php/osa/ref/intro
Я понимаю,просто посмотрел что там идет увеличение сложности программы тестовых проектов и решил по ним научится,а не братся за проект,где есть все функции(задержки,таймеры,сообщения,приоритеты) думаю у меня в голове каша будет,а так потихоньку,пускай они даже и не совсем рабочие тем лучше,буду знать где и как сделать рабочими.Позже хочу собрать вот этот ваш проектик http://pickit2.ru/doku.php/%D0%BF%D1...B3%D0%BD%D0%B8
CERGEI1982 вне форума   Ответить с цитированием
Старый 14.04.2009, 17:17   #52
CERGEI1982
Senior Member
 
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48
CERGEI1982 has a spectacular aura aboutCERGEI1982 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
Это правильно.

По твоему примеру:
Сразу бросилась в глаза ошибка: переменная c из задачи Task1 не объявлена как static. А через очередь передается указатель на нее. Переменные, значения которых должно быть сохранено после передачи управления планировщику должны быть объявлены как static, иначе их значение затрется локальными переменными других задач (обрати внимание, что msg1, msg2 и msg3 располагаются по одному адресу, потому что они локальные). Похоже, что по адресу 203 расположена как раз переменная c, запись в нее перетирает локальную переменную data.
Точно,до самого не дошло,ведь такая же проблема была у меня с переменой count.
Сделал переменую статической и теперь получаю в массив mas с запаздывание,то есть в задаче №1 она успела увеличится на 2,когда мне надо на каждое увеличение.Получается функция обработки сообщения OS_Queue_Wait(queue, msg2); в задаче №2 получает переменую в два раза дольше,чем отправляет задача №1 OS_Queue_Send(queue,&b); ?
Миниатюры
osa1.JPG  
CERGEI1982 вне форума   Ответить с цитированием
Старый 14.04.2009, 17:23   #53
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от CERGEI1982 Посмотреть сообщение
Точно,до самого не дошло,ведь такая же проблема была у меня с переменой count.
Сделал переменую статической и теперь получаю в массив mas с запаздывание,то есть в задаче №1 она успела увеличится на 2,когда мне надо на каждое увеличение.Получается функция обработки сообщения OS_Queue_Wait(queue, msg2); в задаче №2 получает переменую в два раза дольше,чем отправляет задача №1 OS_Queue_Send(queue,&b); ?
Это связано с тем, что при равноприоритетности задач Task1 и Task2 контекст переключается во второй задаче в два раза чеще, чем в первой, (один раз через OS_Yield, а второй - через OS_Queue_Wait). В принципе, это не страшно, т.к. когда выделенный буфер под очередь забьется, задача Task1 будет сама становиться в ожидание появления свободной ячейки в очереди.

Если принципиально, чтобы сообщения принимались синхронно с передачей, то нужно сделать приоритет задачи Task2 выше, чем у Task1.
tester вне форума   Ответить с цитированием
Старый 14.04.2009, 18:01   #54
CERGEI1982
Senior Member
 
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48
CERGEI1982 has a spectacular aura aboutCERGEI1982 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
Переменая queue.Q.cBegin увеличивается на 1, а queue.Q.cFilled уменьшается на 1. Сам массив buf при этом остается неизменным.
Я так понял эти переменые структуры отвечают за то какой текущий указатель доступен,получается типа что то стека первый вошел последний вышел(но какая переменая указывает на текущий указатель в массиве который забираем)? А зачем две переменых? можно было и одной обойтись наверно.
CERGEI1982 вне форума   Ответить с цитированием
Старый 14.04.2009, 18:18   #55
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от CERGEI1982 Посмотреть сообщение
Я так понял эти переменые структуры отвечают за то какой текущий указатель доступен,получается типа что то стека первый вошел последний вышел(но какая переменая указывает на текущий указатель в массиве который забираем)? А зачем две переменых? можно было и одной обойтись наверно.
Первый вошел - первый вышел, поэтому и две переменные (это не стек, а очередь). Если бы принцип был первый вошел - последний вышел (типа стека), то можно было бы обойтись и одной переменной.
tester вне форума   Ответить с цитированием
Старый 15.04.2009, 21:49   #56
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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
Lightbulb Раобрался с ошибкой OSAcfg_Tool

Наконец, благодаря активной помощи tehnosoft, Mario и vitalka, за что им огромне СПАСИБО, удалось локализовать место и причину незапуска программы. А именно - отсутствие файла msflxgrd.ocx с описанием ActiveX-компонента (сам я в этом мало понимаю, но этот файл нужно зарегистрировать в системе через regsvr32, чтобы программа заработала).

Вот установочный файл, который сам делает регистрацию компонента (он там же) и устанавливает программу на компьютер:
http://wiki.pic24.ru/lib/exe/fetch.p...ro&cache=cache

(Я установщиком пользуюсь впервые, поэтому он выглядит пока немного коряво. Буду приводить его в порядок со временем).
tester вне форума   Ответить с цитированием
Старый 16.04.2009, 18:09   #57
CERGEI1982
Senior Member
 
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48
CERGEI1982 has a spectacular aura aboutCERGEI1982 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Посмотрел алгоритм кода проекта "Бегущие огни" на ОСРВ
http://pickit2.ru/doku.php/%D0%BF%D1...B3%D0%BD%D0%B8
никогда бы так не смог сообразить,особенно програмнный шим,на выходных обязательно испробую в железе и если будет время дополню что будет скорость сама увеличиватся и уменьшатся,думая кнопочка лишняя и заодно испробую новый сервис OS_Run.
CERGEI1982 вне форума   Ответить с цитированием
Старый 19.04.2009, 18:40   #58
CERGEI1982
Senior Member
 
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48
CERGEI1982 has a spectacular aura aboutCERGEI1982 has a spectacular aura about
По умолчанию Re: Вопросы по OSA

В описании OSA есть скоростные характеристики,так вот время реакции события измеряется в тактах микропроцессора?
И как понять среднее время поиска задачи для выполнения. (Вычисляется как среднее за 10000 вызовов OS_Sched())?
Миниатюры
такты.JPG  
CERGEI1982 вне форума   Ответить с цитированием
Старый 19.04.2009, 19:11   #59
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от CERGEI1982 Посмотреть сообщение
В описании OSA есть скоростные характеристики,так вот время реакции события измеряется в тактах микропроцессора?
И как понять среднее время поиска задачи для выполнения. (Вычисляется как среднее за 10000 вызовов OS_Sched())?
Для информации: тесты по скорости проводились на тестовой программе TEST9 (она есть в папке TEST).

"Время реакции на событие" - время с момента установки семафора в задаче Task_T9 (точнее - с первого после установки семафора переключения контекста) до момента получения управления задачей, ожидающий этот семафор. Время измеряется в тактах микроконтроллера.

"Время работы OS_Sched" - среденее время (в тактах контроллера), затрачиваемое ядром ОС на поиск самой приоритетной готовой задачи. Если одна задача передает управление планировщику (например, через OS_Yield), то седующая задача получит управление через некоторое время (то самое, в течение которого планировщик будет ее искать).

Это время варьируется от раза к разу и зависит от многих факторов:
- количества активных (созданных) задач (чем больше здач, тем дольше выполняется OS_Sched; примерно 60-80 тактов на задачу);
- включен или отключен приоритетный режим;
- как расставлены приоритеты: в описании сделана ремарка про ускорние работы ядра за счет присваивания задачам высшего (нулевого) приоритета;
- состояний задач (приведены в порядке увеличения времени обработки): "не создана", "приостановлена", "готова", "в ожидании события";
- типа ожидаемого события (в порядке увеличения времени): выполнение задержки OS_Delay, ожидание семафора или сообщения, ожидание произвольного условия;

Точно сказать, сколько времени выполнится поиск (время работ OS_Sched), нельзя, т.к. задачи то готовы, то ожидают, то готовы, но еще не имеют высший приоритет и т.д. Поэтому и берется среднее время за 10 тыс. переключений контекста (вызовов планировщика).

Последний раз редактировалось tester; 20.04.2009 в 11:09. Причина: Исправил OS_Sched на OS_Yield в определении "Времени работы"
tester вне форума   Ответить с цитированием
Старый 23.04.2009, 19:18   #60
KeMik
Senior Member
 
Аватар для KeMik
 
Регистрация: 05.04.2009
Сообщений: 170
Вес репутации: 126/38
KeMik will become famous soon enoughKeMik will become famous soon enough
По умолчанию Re: Вопросы по OSA

Здравствуйте! Решил начать освоение OSA. У меня проект на PIC16F689. Почитал что OSA pic16 поддерживает. Скачал с сайта wiki.pic24.ru саму ось и мануал по ней. Запустил MPLAB прописал её как сказано в мануале.
и в итоге компилятор у меня выдал ошибку:

Цитата:
HI-TECH C PRO for the PIC10/12/16 MCU family V9.60PL3
Copyright (C) 1984-2008 HI-TECH SOFTWARE
licensed for evaluation purposes only
this licence will expire on Fri, 14 Dec 2029
Error [237] D:\Docs & Manuals\OSA\osa_90406\OSA\port\osa_picc16.c; 440. function "__OS_Task_Create" redefined
Error [237] D:\Docs & Manuals\OSA\osa_90406\OSA\port\osa_picc16.c; 563. function "__OS_CheckEvent" redefined
Error [237] D:\Docs & Manuals\OSA\osa_90406\OSA\osa.c; 749. function "_OS_Init" redefined
Из ошибки видно что пользуюсь я компилятором HI-TECH PRO V9.60.
перешёл по вой ошибке и действительно:
Цитата:
#define _OS_Task_Create_DEFINED
//------------------------------------------------------------------------------

void _OS_Task_Create(_OST_INT_TYPE priority, OST_CODE_POINTER TaskAddr)
{ ...
По второй тоже самое:
Цитата:
#define _OS_CheckEvent_DEFINED
//------------------------------------------------------------------------------

bit _OS_CheckEvent (char bEvent)
{ ...
Третью я вообще не понял. Скажите что я не так сделал или понял?
KeMik вне форума   Ответить с цитированием
Старый 23.04.2009, 19:36   #61
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от KeMik Посмотреть сообщение
Здравствуйте! Решил начать освоение OSA. У меня проект на PIC16F689. Почитал что OSA pic16 поддерживает. Скачал с сайта wiki.pic24.ru саму ось и мануал по ней. Запустил MPLAB прописал её как сказано в мануале.
и в итоге компилятор у меня выдал ошибку:

Из ошибки видно что пользуюсь я компилятором HI-TECH PRO V9.60.
перешёл по вой ошибке и действительно:
По второй тоже самое:
Третью я вообще не понял. Скажите что я не так сделал или понял?
OSA пока что не работает с PRO-версиями компиляторов, поддерживаются только STD (http://wiki.pic24.ru/doku.php/osa/ref/introduction/intro#поддерживаемые_компиляторы)

Если и удастся запустить ее под ПРО, то только не младше версии 9.65 (пока не удается).
tester вне форума   Ответить с цитированием
Старый 23.04.2009, 19:55   #62
KeMik
Senior Member
 
Аватар для KeMik
 
Регистрация: 05.04.2009
Сообщений: 170
Вес репутации: 126/38
KeMik will become famous soon enoughKeMik will become famous soon enough
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
OSA пока что не работает с PRO-версиями компиляторов, поддерживаются только STD (http://wiki.pic24.ru/doku.php/osa/ref/introduction/intro#поддерживаемые_компиляторы)

Если и удастся запустить ее под ПРО, то только не младше версии 9.65 (пока не удается).
Вот блин я... А чем PRO от STD отличается? да и вообще как можно откомпилировать строчку:
Цитата:
#define _OS_Task_Create_DEFINED
void _OS_Task_Create(_OST_INT_TYPE priority, OST_CODE_POINTER TaskAddr)
{ ..
Я конечно недавно на С пишу и мот чего-то не понимаю но по моему писать название в define а потом создавать функцию с таким же именем это не совсем правильно...
KeMik вне форума   Ответить с цитированием
Старый 23.04.2009, 20:01   #63
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от KeMik Посмотреть сообщение
Вот блин я... А чем PRO от STD отличается?
Они сделаны на разных платфомах. PRO пока что, грубо говоря, в стадии отладки на людях.

Цитата:
да и вообще как можно откомпилировать строчку:
Я конечно недавно на С пишу и мот чего-то не понимаю но по моему писать название в define а потом создавать функцию с таким же именем это не совсем правильно...
Вы вчитайтесь в идентификаторы. Дефайном определяется константа _OS_Task_Create_DEFINED. Эта константа говорит основному файлу (osa.c), что для данного контроллера функция _OS_Task_Create() перегружена.
tester вне форума   Ответить с цитированием
Старый 02.06.2009, 20:48   #64
militrik
Member
 
Регистрация: 01.10.2008
Возраст: 36
Сообщений: 79
Вес репутации: 240/40
militrik has a spectacular aura aboutmilitrik has a spectacular aura aboutmilitrik has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Как красивее сделать инверсию бинарного семафора.
Конструкция типа

Код:
     if (OS_Bsem_Check (BS_DIRECTION))    {OS_Bsem_Reset (BS_DIRECTION);}
  BTFSS 0xa, 0, ACCESS
  BRA 0xe78
  BCF 0xa, 0, ACCESS
  BRA 0xe7a
              else                                {OS_Bsem_Set (BS_DIRECTION);}
  0E78    800A     BSF 0xa, 0, ACCESS
выглядит не очень. Вот бы новый сервис типа OS_Bsem_Inv() или что то другое, чтоб на выходе получалось
Код:
movlw 0b0000001
xorwf XXX,f
Кстати, если убрать выделеные фигурные скобки, компилятор picc18 9.51.pl2 ругается на Error [248] inappropriate "else".
militrik вне форума   Ответить с цитированием
Старый 02.06.2009, 20:57   #65
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от militrik Посмотреть сообщение
Как красивее сделать инверсию бинарного семафора.
Конструкция типа

Код:
     if (OS_Bsem_Check (BS_DIRECTION))    {OS_Bsem_Reset (BS_DIRECTION);}
  BTFSS 0xa, 0, ACCESS
  BRA 0xe78
  BCF 0xa, 0, ACCESS
  BRA 0xe7a
              else                                {OS_Bsem_Set (BS_DIRECTION);}
  0E78    800A     BSF 0xa, 0, ACCESS
выглядит не очень. Вот бы новый сервис типа OS_Bsem_Inv() или что то другое, чтоб на выходе получалось
Код:
movlw 0b0000001
xorwf XXX,f
Недокументированный сервис OS_Bsem_Switch это делает. Для PICC18 на выходе получается инструкция btg.

Цитата:
Кстати, если убрать выделеные фигурные скобки, компилятор picc18 9.51.pl2 ругается на Error [248] inappropriate "else".
Большинство сервисов OSA - макросы, содержащие по несколько операторов, заключенных в фигурные скобки. Поэтому наличие ';' перед else и вызывает ошибку компилятора.
tester вне форума   Ответить с цитированием
Старый 02.06.2009, 21:11   #66
militrik
Member
 
Регистрация: 01.10.2008
Возраст: 36
Сообщений: 79
Вес репутации: 240/40
militrik has a spectacular aura aboutmilitrik has a spectacular aura aboutmilitrik has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Крррасота . Хотя btg 0xa, 1 и не получилось.
Код:
546:                                       OS_Bsem_Switch (BS_DIRECTION);
  0CA8    0E01     MOVLW 0x1
  0CAA    1A0A     XORWF 0xa, F, ACCESS
Сколько я нервов и времени сберег используя OSA. Спасибо.

Последний раз редактировалось militrik; 02.06.2009 в 21:16.
militrik вне форума   Ответить с цитированием
Старый 21.06.2009, 03:25   #67
picavr
Senior Member
 
Регистрация: 13.02.2008
Сообщений: 168
Вес репутации: 117/42
picavr will become famous soon enoughpicavr will become famous soon enough
По умолчанию Re: Вопросы по OSA

Хочу спросить, опыта в Си пока мало,только начал, присматриваюсь к операционным системмам для МК. Есть ли смысл использовать, понял что в простых задачках - есть смысл. И возник вот какой вопрос по ОСА.

Если запустить 6 задач, или больше подобных задач.
1-я драйвер 1-wire
2-я драйвер ЖКИ символьный 4 бита.
3-я драйвер USART 9600.
4-я драйвер клавиатуры 4 бита, подключеной к шине данных ЖКИ модуля.
5-я разборка того что пришло в буфер USART и формирование буфера USART для передачи
6-я анализ клавиатуры, подготовка надписей для ЖКИ анализ опраций 1 wire ... система меню. запись в EEPROM параметров...

Будут ли ресурсы МК (порты и АЛУ) распределятся между задачами что бы эти процессы обрабатывались параллельно. То есть происходил приём байт из модуля USART в буфер приёма, из буфера передачи передавался по USART, выводились строки в ЖКИ из RAM или ROM, обрабатывалась клавиатура, и считывался скажем DS18B20 или DS1990 ?
На асме это всё реализуется, написаны драйверы которые работают по прерываниям таймера.

Требуется ли переписывание драйверов, написаных не для многозадачного использования (на задержках програмных циклов, когда скажем в ЖКИ идёт запись строки и задержки между записями байтов отсчитываются тактами МК а не прерываниями таймера) или потребуется их переработать.?

Узкое место в этой задаче в переключении направления шины данных (клавиш-жки неизвестно в какой момент система передаст управление следующей задачке), и в обеcпечении временных интервалов для 1wire и USART 9600 и ЖКИ.
То есть обработка всех задачь должна производится короткими проходами по каждому драйверу в 10-20 микросек, потом передача другому драйверу.

Может быть я не совсем понятно спросил... раскажу по наводящим вопросам.
picavr вне форума   Ответить с цитированием
Старый 21.06.2009, 12:03   #68
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
3-я драйвер USART 9600.
USART лучше принимать/передавать в прерывании. Завести два буфера: для приема и для передачи, - и в задачах ОС работать через эти буферы. Т.е. 3-ю задачу не нужно офомлять в виде задачи ОС (это неэффективно). Все остальное распределено по задачам правильно.
Цитата:
Будут ли ресурсы МК (порты и АЛУ) распределятся между задачами что бы эти процессы обрабатывались параллельно. То есть происходил приём байт из модуля USART в буфер приёма, из буфера передачи передавался по USART, выводились строки в ЖКИ из RAM или ROM, обрабатывалась клавиатура, и считывался скажем DS18B20 или DS1990 ?
Так ОС для того и сделана, чтобы позволить всему этому работать параллельно.
Цитата:
Требуется ли переписывание драйверов, написаных не для многозадачного использования (на задержках програмных циклов, когда скажем в ЖКИ идёт запись строки и задержки между записями байтов отсчитываются тактами МК а не прерываниями таймера) или потребуется их переработать.?
Перерабатывать не нужно.
Цитата:
Узкое место в этой задаче в переключении направления шины данных (клавиш-жки неизвестно в какой момент система передаст управление следующей задачке), и в обеcпечении временных интервалов для 1wire и USART 9600 и ЖКИ.
Раз ЖКИ и клавиши присоеденены к одним и тем же выводам, то следует эти выводы рассматривать как разделяемый ресурс. Заведи двоичный семафор, и им сигнализируй, что порт занят. Пока он занят одной задачей, другая не получит управление (OS_Bsem_Wait).
Цитата:
То есть обработка всех задач должна производится короткими проходами по каждому драйверу в 10-20 микросек, потом передача другому драйверу.
Каких микросек? Зачем? Разберись по каждой задаче, как часто ей надо запускаться. Например, 1-wire: если это 1820, то чаще, чем раз в секунду (а еще лучше - в минуту) эту задачу запускать не нужно (температура не будет меняться быстрее); если это 1990, то ее надо выполнять раз в 50-200 мс (сколько времени человек прижимает таблетку к считывателю?). Какие тут 20 мкс? Кнопки тоже нет смысла запускать чаще, чем в 20-100мс, причем интревалы могут быть разные. Пользователю главное, чтобы он нажал, - и что-то произошло.
tester вне форума   Ответить с цитированием
Старый 21.06.2009, 15:46   #69
picavr
Senior Member
 
Регистрация: 13.02.2008
Сообщений: 168
Вес репутации: 117/42
picavr will become famous soon enoughpicavr will become famous soon enough
По умолчанию Re: Вопросы по OSA

Спасибо за ответ,
Цитата:
Сообщение от tester Посмотреть сообщение
USART лучше принимать/передавать в прерывании.
Обычно и обрабатываю передачу из буфера и приём в буфер в прерывании таймера с периодом менее времени приёма одного байта.

Цитата:
Сообщение от tester Посмотреть сообщение
Заведи двоичный семафор, и им сигнализируй, что порт занят.
понятно

Цитата:
Сообщение от tester Посмотреть сообщение
Каких микросек? Зачем? Разберись по каждой задаче, как часто ей надо запускаться.
Это у меня на АСМ так работает, драйвер вызывается из прерывания таймера и выполняется 5-10 микросек за один проход. К примеру: 1wire и ЖКИ работают в прерывании таймера с периодом 100 микросек,
Я поясню почему я так спросил.
Вот примерный алгоритм для 1wire.
1 проход - выставить выход в "0" (начало RESET) загрузит счётчик длительности = 500/100=5,выставить флаг формирования RESET.это около 20-30 команд, и выход.
2-6 проходы - отсчёт счётчика длительности -1, на последнем проходе выход переключаем на ввод, загружаем счётчик задержку (=2) для проверки отклика и выставляем флаг проверки отклика,это около 10-30 команд за каждый проход, и выход.
7-8 проходы - отсчёт счётчика задержки и после окончания проверяем наличие отклика. Если нет отклика выставляем флаг что нет ответа. Если есть ответ, загружаем счётчик задержку до конца тайм слота и выставим флаг ожидания, и выход.
9-10 отсчёт счётчика задержки конца тайм слота, и вывод первого бита команды для устройства на шине. Грузим счётчик битов=8, выставим флаг, и выводим первый бит команды, и выход.
11-16 проходы - отсчёт счётчика битов и вывод оствшихся битов команды, и так далеее...

Таким образом время на этот драйвер расходуется римерно 3-10% (это когда он работает, а в паузах проверка флага и выход), остальное время распределеяется так же на другие драйверы или задачи.

А в варианте с ОС 1wire и остальные конечно пишутся как непрерывная работа с задержками, это понятно.
СПАСИБО ЗА РАЗЬЯСНЕНИЯ.

Интересно. можно ли портировать на IAR AVR, насколько там привязано к железу? Просто хотелось бы иметь одну ОС для разных МК.
picavr вне форума   Ответить с цитированием
Старый 21.06.2009, 16:27   #70
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от picavr Посмотреть сообщение
Спасибо за ответ,
Обычно и обрабатываю передачу из буфера и приём в буфер в прерывании таймера с периодом менее времени приёма одного байта.
С таких допусков начинаются ошибки. В контроллере есть биты RCIF и TXIF, которые устанавливаются соответственно при приеме и при передаче байта по USART.

Цитата:
Это у меня на АСМ так работает, драйвер вызывается из прерывания таймера и выполняется 5-10 микросек за один проход.
Если ты будешь при работе с RTOS мыслить категорями тактов, то останутся только неприятные впечатления.

Попробуй так прикинуть (программа немного утрирована):
Код:
void Task_18B20 (void)
{
    for (;;)
    {
        OS_Delay(1000);
        DS18B20_ReadTemp();
        ...
    }
}
Пока выполняется OS_Delay, система занята другими задачами, а об этой даже не думает. Потом эта задача поучает управление и вызывает функцию чтения температуры. Это чтение может продлиться несколько миллисекунд, и в течение этого времени ни ЖКИ ни кнопки обрабатываться не будут. Так вот: в этом нет ничего страшного. Критичекие куски кода (в частности прием по USART) - в перерывании, а с остальными ничего не случится, если они подождут 10-20 мс.


Цитата:
Интересно. можно ли портировать на IAR AVR, насколько там привязано к железу? Просто хотелось бы иметь одну ОС для разных МК.
Последний раз я прикасался к АВРу лет 8 назад. Сейчас я уже не в курсе ни о новых контроллерах, ни о том, какие компиляторы сейчас самые распространенные, ни о том, какие ОСРВ уже есть... Сейчас я занят портированием на микроСи для ПИКов. Насчет АРВов пока не думал.
tester вне форума   Ответить с цитированием
Старый 22.06.2009, 03:05   #71
picavr
Senior Member
 
Регистрация: 13.02.2008
Сообщений: 168
Вес репутации: 117/42
picavr will become famous soon enoughpicavr will become famous soon enough
По умолчанию Re: Вопросы по OSA

Цитата:
Сообщение от tester Посмотреть сообщение
С таких допусков начинаются ошибки. В контроллере есть биты RCIF и TXIF, которые устанавливаются соответственно при приеме и при передаче байта по USART.
Естественно по RCIF и TXIF, просто я не организовываю отдельное прерывание для USART а анализирую RCIF и TXIF в прерывании таймера. А за период таймера USART успевает принять-передать только один байт. Всё работает.
Цитата:
Сообщение от tester Посмотреть сообщение
Если ты будешь при работе с RTOS мыслить категорями тактов, то останутся только неприятные впечатления.
Это понятно, что задержки между считыванием температуры будут отрабатыватся средствами ОС.
А задержки формирующие таймслоты 1 wire - циклами?

Цитата:
Сообщение от tester Посмотреть сообщение
Пока выполняется OS_Delay, система занята другими задачами, а об этой даже не думает. Потом эта задача поучает управление и вызывает функцию чтения температуры. Это чтение может продлиться несколько миллисекунд, и в течение этого времени ни ЖКИ ни кнопки обрабатываться не будут. Так вот: в этом нет ничего страшного. Критичекие куски кода (в частности прием по USART) - в перерывании, а с остальными ничего не случится, если они подождут 10-20 мс.
Да это понятно что ЖКИ, клавиши и интерфейс пользователя подождут.
Но например динамическая индикация на АЛС будет мигать на время считывания иемпературы.
Или если обрабатывается АЦП от которого рулится ШИМ, то будут провалы или горбы в регулировании ШИМ. итд...
Или купюро- монето- приёмник начнёт выдавать информацию о принятых деньгах... им не скажешь подожди...

В моём варианте всё обрабатывается в прерываниях таймеров, и все задачи работают параллельно. Время ядра распределяется таким образом, что бы все задачи успевали отработать В ЛЮБОЕ ВРЕМЯ, и ЖКИ и USART и 1wire и клавиши итд..
Я хотел понять как именно распределяется время между задачами, поэтому я и начал задавать эти вопросы.
Просто думал, что обработка задач будет прерыватся, и на НЕКОТОРОЕ ВРЕМЯ передававать управление другим задачам, по кругу... а не только те которые чего то ожидают...
Теперь понятно, пока задача выполняется остальные ждут, кроме тех что в прерываниях. Спасибо ВАМ за разъяснения.
picavr вне форума   Ответить с цитированием
Старый 04.07.2009, 19:10   #72
militrik
Member
 
Регистрация: 01.10.2008
Возраст: 36
Сообщений: 79
Вес репутации: 240/40
militrik has a spectacular aura aboutmilitrik has a spectacular aura aboutmilitrik has a spectacular aura about
По умолчанию Re: Вопросы по OSA

Как правильно написать ожидание выполнения условия с участием бинарного семафора. Например : ждем пока выход компаратора примет иное значение чем у бинарного семафора
Код:
OS_Cond_Wait (COUT != BS_Semafore);
militrik вне форума   Ответить с цитированием
Старый 04.07.2009, 19:21   #73
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/122
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

Цитата:
Сообщение от militrik Посмотреть сообщение
Как правильно написать ожидание выполнения условия с участием бинарного семафора. Например : ждем пока выход компаратора примет иное значение чем у бинарного семафора
Код:
OS_Cond_Wait (COUT != BS_Semafore);
Код:
OS_Cond_Wait(COUT != (OS_Bsem_Check(BS_Semaphore)?1:0));
Только тут налицо концептуально неправильное использование семафора (хоть и допустимое). Семафор - это не совсем битовая переменная. Здесь лучше использовать именно битовую переменную:
Код:
static bit s_bPrevCOUT;     // Например такую
...
OS_Cond_Wait(COUT != s_bPrevCOUT);  // Ждать так
...
tester вне форума   Ответить с цитированием
Старый 09.10.2009, 01:54   #74
gromovi
Banned
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/0
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: Вопросы по OSA

OSAcfg_Tool?

Последний раз редактировалось gromovi; 19.08.2017 в 16:51.
gromovi вне форума   Ответить с цитированием
Старый 09.10.2009, 03:23   #75
gromovi
Banned
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/0
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: Вопросы по OSA

ну нифига непонять на что жалуется

Последний раз редактировалось gromovi; 19.08.2017 в 16:51.
gromovi вне форума   Ответить с цитированием
Ответ

Метки
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, время: 23:38.


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