![]() |
|
|
Инструментарий Тестеры, паяльники, осциллографы, программаторы, IDE. |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#51 | |
Senior Member
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48 ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#52 | |
Senior Member
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48 ![]() ![]() |
![]() Цитата:
Сделал переменую статической и теперь получаю в массив mas с запаздывание,то есть в задаче №1 она успела увеличится на 2,когда мне надо на каждое увеличение.Получается функция обработки сообщения OS_Queue_Wait(queue, msg2); в задаче №2 получает переменую в два раза дольше,чем отправляет задача №1 OS_Queue_Send(queue,&b); ? |
|
![]() |
![]() |
![]() |
#53 | |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Если принципиально, чтобы сообщения принимались синхронно с передачей, то нужно сделать приоритет задачи Task2 выше, чем у Task1. |
|
![]() |
![]() |
![]() |
#54 |
Senior Member
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48 ![]() ![]() |
![]()
Я так понял эти переменые структуры отвечают за то какой текущий указатель доступен,получается типа что то стека первый вошел последний вышел(но какая переменая указывает на текущий указатель в массиве который забираем)? А зачем две переменых? можно было и одной обойтись наверно.
|
![]() |
![]() |
![]() |
#55 | |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#56 |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Наконец, благодаря активной помощи tehnosoft, Mario и vitalka, за что им огромне СПАСИБО, удалось локализовать место и причину незапуска программы. А именно - отсутствие файла msflxgrd.ocx с описанием ActiveX-компонента (сам я в этом мало понимаю, но этот файл нужно зарегистрировать в системе через regsvr32, чтобы программа заработала).
Вот установочный файл, который сам делает регистрацию компонента (он там же) и устанавливает программу на компьютер: http://wiki.pic24.ru/lib/exe/fetch.p...ro&cache=cache (Я установщиком пользуюсь впервые, поэтому он выглядит пока немного коряво. Буду приводить его в порядок со временем). |
![]() |
![]() |
![]() |
#57 |
Senior Member
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48 ![]() ![]() |
![]()
Посмотрел алгоритм кода проекта "Бегущие огни" на ОСРВ
http://pickit2.ru/doku.php/%D0%BF%D1...B3%D0%BD%D0%B8 никогда бы так не смог сообразить,особенно програмнный шим,на выходных обязательно испробую в железе и если будет время дополню что будет скорость сама увеличиватся и уменьшатся,думая кнопочка лишняя ![]() |
![]() |
![]() |
![]() |
#58 |
Senior Member
Регистрация: 02.03.2007
Возраст: 36
Сообщений: 345
Вес репутации: 151/48 ![]() ![]() |
![]()
В описании OSA есть скоростные характеристики,так вот время реакции события измеряется в тактах микропроцессора?
И как понять среднее время поиска задачи для выполнения. (Вычисляется как среднее за 10000 вызовов OS_Sched())? |
![]() |
![]() |
![]() |
#59 | |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
"Время реакции на событие" - время с момента установки семафора в задаче 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 в определении "Времени работы" |
|
![]() |
![]() |
![]() |
#60 | |||
Senior Member
Регистрация: 05.04.2009
Сообщений: 170
Вес репутации: 126/39 ![]() ![]() |
![]()
Здравствуйте! Решил начать освоение OSA. У меня проект на PIC16F689. Почитал что OSA pic16 поддерживает. Скачал с сайта wiki.pic24.ru саму ось и мануал по ней. Запустил MPLAB прописал её как сказано в мануале.
и в итоге компилятор у меня выдал ошибку: Цитата:
перешёл по вой ошибке и действительно: Цитата:
Цитата:
|
|||
![]() |
![]() |
![]() |
#61 | |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Если и удастся запустить ее под ПРО, то только не младше версии 9.65 (пока не удается). |
|
![]() |
![]() |
![]() |
#62 | ||
Senior Member
Регистрация: 05.04.2009
Сообщений: 170
Вес репутации: 126/39 ![]() ![]() |
![]() Цитата:
![]() Цитата:
|
||
![]() |
![]() |
![]() |
#63 | |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Они сделаны на разных платфомах. PRO пока что, грубо говоря, в стадии отладки на людях.
Цитата:
|
|
![]() |
![]() |
![]() |
#64 |
Member
Регистрация: 01.10.2008
Возраст: 36
Сообщений: 79
Вес репутации: 240/40 ![]() ![]() ![]() |
![]()
Как красивее сделать инверсию бинарного семафора.
Конструкция типа Код:
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 Код:
movlw 0b0000001 xorwf XXX,f |
![]() |
![]() |
![]() |
#65 | ||
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#66 |
Member
Регистрация: 01.10.2008
Возраст: 36
Сообщений: 79
Вес репутации: 240/40 ![]() ![]() ![]() |
![]()
Крррасота
![]() Код:
546: OS_Bsem_Switch (BS_DIRECTION); 0CA8 0E01 MOVLW 0x1 0CAA 1A0A XORWF 0xa, F, ACCESS Последний раз редактировалось militrik; 02.06.2009 в 21:16. |
![]() |
![]() |
![]() |
#67 |
Senior Member
Регистрация: 13.02.2008
Сообщений: 167
Вес репутации: 117/43 ![]() ![]() |
![]()
Хочу спросить, опыта в Си пока мало,только начал, присматриваюсь к операционным системмам для МК. Есть ли смысл использовать, понял что в простых задачках - есть смысл. И возник вот какой вопрос по ОСА.
Если запустить 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 микросек, потом передача другому драйверу. Может быть я не совсем понятно спросил... раскажу по наводящим вопросам. |
![]() |
![]() |
![]() |
#68 | |||||
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
|||||
![]() |
![]() |
![]() |
#69 | |
Senior Member
Регистрация: 13.02.2008
Сообщений: 167
Вес репутации: 117/43 ![]() ![]() |
![]()
Спасибо за ответ,
Обычно и обрабатываю передачу из буфера и приём в буфер в прерывании таймера с периодом менее времени приёма одного байта. понятно Цитата:
Я поясню почему я так спросил. Вот примерный алгоритм для 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, насколько там привязано к железу? Просто хотелось бы иметь одну ОС для разных МК. |
|
![]() |
![]() |
![]() |
#70 | |||
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Цитата:
Попробуй так прикинуть (программа немного утрирована): Код:
void Task_18B20 (void) { for (;;) { OS_Delay(1000); DS18B20_ReadTemp(); ... } } Цитата:
|
|||
![]() |
![]() |
![]() |
#71 | |||
Senior Member
Регистрация: 13.02.2008
Сообщений: 167
Вес репутации: 117/43 ![]() ![]() |
![]() Цитата:
Цитата:
А задержки формирующие таймслоты 1 wire - циклами? Цитата:
Но например динамическая индикация на АЛС будет мигать на время считывания иемпературы. Или если обрабатывается АЦП от которого рулится ШИМ, то будут провалы или горбы в регулировании ШИМ. итд... Или купюро- монето- приёмник начнёт выдавать информацию о принятых деньгах... им не скажешь подожди... В моём варианте всё обрабатывается в прерываниях таймеров, и все задачи работают параллельно. Время ядра распределяется таким образом, что бы все задачи успевали отработать В ЛЮБОЕ ВРЕМЯ, и ЖКИ и USART и 1wire и клавиши итд.. Я хотел понять как именно распределяется время между задачами, поэтому я и начал задавать эти вопросы. Просто думал, что обработка задач будет прерыватся, и на НЕКОТОРОЕ ВРЕМЯ передававать управление другим задачам, по кругу... а не только те которые чего то ожидают... Теперь понятно, пока задача выполняется остальные ждут, кроме тех что в прерываниях. Спасибо ВАМ за разъяснения. ![]() |
|||
![]() |
![]() |
![]() |
#72 |
Member
Регистрация: 01.10.2008
Возраст: 36
Сообщений: 79
Вес репутации: 240/40 ![]() ![]() ![]() |
![]()
Как правильно написать ожидание выполнения условия с участием бинарного семафора. Например : ждем пока выход компаратора примет иное значение чем у бинарного семафора
Код:
OS_Cond_Wait (COUT != BS_Semafore); |
![]() |
![]() |
![]() |
#73 | |
Super Moderator
Регистрация: 28.02.2007
Возраст: 42
Сообщений: 3,577
Вес репутации: 4386/122 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Код:
OS_Cond_Wait(COUT != (OS_Bsem_Check(BS_Semaphore)?1:0)); Код:
static bit s_bPrevCOUT; // Например такую ... OS_Cond_Wait(COUT != s_bPrevCOUT); // Ждать так ... |
|
![]() |
![]() |
![]() |
#74 |
Banned
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/0 ![]() ![]() ![]() ![]() |
![]()
OSAcfg_Tool?
Последний раз редактировалось gromovi; 19.08.2017 в 16:51. |
![]() |
![]() |
![]() |
#75 |
Banned
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/0 ![]() ![]() ![]() ![]() |
![]()
ну нифига непонять на что жалуется
![]() Последний раз редактировалось gromovi; 19.08.2017 в 16:51. |
![]() |
![]() |
![]() |
Метки |
osa, rtos, сторожевой таймер |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Все вопросы по 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 |