![]() |
|
|
Продукция MICROCHIP Технические вопросы по всей продукции Microchip |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#276 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Очередное Ваше заблуждение.
Если круг решаемых задач подразумевает постоянную необходимость в РТОС (например телематические мониторы и т.п.) то ЕСТЕСТВЕННО, что нанимают специального программиста, который пишет код, а схемотехникой занимаются специально обученные этому люди. А если продукция В ОСНОВНОМ представляет из себя радиотехническое изделие и алгоритмы обработки сигналов - это практически весь код, то никакой ОСРВ для этого не требуется. Латентность переключения контекста может потребовать В РАЗЫ увеличить быстродействие ядра, а значит сменить платформу МК. И не факт, что аналоговый фронтэнд требуемый задачей будет устраивать в этой новой платформе. И всё становится с бюджетом изделия совсем плохо. Такшта я повернулся спиной к столу стоящему в углу и посмотрел на своих соратников по борьбе, которые весьма успешно создают коммерческие продукты. И не нашел среди них специалиста по РТОС, такого как Вы. Себя я к таким специалистам не отношу. Я сразу сказал, что дилетант, но имеющий некоторый опыт. ЗЫ. Так, к слову. Семейство dsPIC33C и одноядерное и двухядерное имеет в ядре (ядрах) ПЯТЬ аппаратно переключаемых контекстов. Полного набора регистров ядра, кроме регистра WREG15 в котором сидит TOS. Очень неплохая, хоть и специальная платформа для создания на ней достаточно простой вытесняющей RTOS с ограниченным количеством задач. При этом задачи могут содержать и несколько функций. Просто эмуляция четырех ядер на каждом физическом. |
![]() |
![]() |
![]() |
#277 | |
Super Moderator
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,086
Вес репутации: 6158/182 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
можно на каждую кнопку по задаче ос повесить, но я это и называл притянутым за уши примером. сейчас эту фриртос пихают куда ни лень, но на тех же кортексах с 8 кб памяти (озу) - получается самоед... |
|
![]() |
![]() |
![]() |
#278 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,679
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Марк
Вы 2 страницы назад писали, что у Вас есть опыт работы с ОС, сейчас пишете что у я заблуждаюсь относительно опыта работы с ОС у присутствующих здесь. Как это объяснить кроме как тем, что Вы меня задираете я не могу. Я всё. Ума не приложу как я еще раз купился на Ваши трюки. |
![]() |
![]() |
![]() |
#279 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Все дело в том, что большинство задач с сетевым питанием не требуют выключать тактирование ядра, вешая задачи на прерывания. А есть ПОСТОЯННО РАБОТАЮЩИЕ задачи, которые к тому же, чаще всего, жестко синхронны и только обмены по внешним коммуникациям нарушают эту идиллию. Но обмены сидят на ДМА и спокойно врезаются в FSM без малейших намеков на блокировки.
Возьмите, например, какой нибудь частотник. Или мои противокражные системы (по сути радиолокаторы). Или измерительные датчики на технологическом оборудовании с единственным работающим интерфейсом, сколько бы их не было в наборе. Как то так. Ваш мир - это только Ваш мир. У других он совсем другой. |
![]() |
![]() |
![]() |
#280 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#281 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Скажем, в тех же Микрочипах, выход из сна может осуществляться двумя путями- продолжить через 2 машцикла исполнение от точки слипа, либо уйти на обработчик по событию разбудившему ядро. То есть задержка практически нулевая, особенно если тактирование без PLL. Для такого ленивого дела, как кнопка, вообще мгновенно. Если событий от кнопки нет, то по разумному (2...10 сек) таймауту валимся в сон. Но защита от дребезга именно поллингом по фиксированному интервалу. А не вычурным запуском таймера с запретом-разрешением прерываний. И уж точно не клацая затвором шедулера в прерывании по кнопке, когда систики следуют в 30 раз чаще, чем требует защита от дребезга ПРИ ЛЮБОМ РАСКЛАДЕ.
Последний раз редактировалось Марк; 30.11.2020 в 15:55. |
![]() |
![]() |
![]() |
#282 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Вообще то шедулер - это систик. В его функции входит, в том числе, администрирование очередей. И если на поллинге кнопок стоит 30 клоков, то нужно только активировать эту задачу. И всё, Карл. Все остальное в самой задаче.
Вот только твоих впечатлений нам не хватало... |
![]() |
![]() |
![]() |
#283 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Сравнивать вообще ничего не надо. Обычный D триггер является идеальным фильтром дребезга. То есть при интервале опроса больше, чем дребезг, дребезга вообще не будет. Без какого либо сравнения. Тупо задвигаем считанное состояние кнопки в ее статическую переменную и маскируем два последних разряда. Обычный Switch-case дает два события и дефолт - без событий. Вот и весь код.
|
![]() |
![]() |
![]() |
#284 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Причем тут модуль? D триггер не нужен. Это просто модель поллинга. Опрос кнопки идентичен записи в D триггер в момент чтения порта.
Как ты вообще работал инженером - ума не приложу. Такое ощущение, что я говорю с полным ламером. |
![]() |
![]() |
![]() |
#285 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,376
Вес репутации: 1008/63 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
![]() или это, когда вы писали, в голове подразумевалось ? |
|
![]() |
![]() |
![]() |
#286 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#287 |
Senior Member
Регистрация: 09.01.2012
Возраст: 37
Сообщений: 565
Вес репутации: 373/41 ![]() ![]() ![]() ![]() |
![]()
Марк добрый день.
Не стоит перед свиньями бисер метать. |
![]() |
![]() |
![]() |
#288 |
Senior Member
Регистрация: 09.01.2012
Возраст: 37
Сообщений: 565
Вес репутации: 373/41 ![]() ![]() ![]() ![]() |
![]()
Для dsPIC33FJ32GP регистр CNPU1 и CNPU2 определяет прерывание на вывод. То есть можно группу выводов задействовать ну допустим кнопки подключу на несколько выводов и эти не сколько выводов на каждую кнопку своё прерывание?
|
![]() |
![]() |
![]() |
#289 | |
Senior Member
Регистрация: 30.09.2008
Сообщений: 1,638
Вес репутации: 3789/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Мне как-то раз было лень резать по узлам чужую "библиотеку", поэтому смастерил обертку... На входе сохранял контекст вызова обертки, а периодически встречающиеся WaitInterruptTiming заменил на setjmp с последующим выходом сразу в loop а возвращался по условию (благо их всего два - таймаут и нибудь какое прерывание от периферии, какое - "библиотека" разбирает) "на шесть уровней вложения" longjmp-ом. Благо ждала она подолгу но не часто, стек, как не в себя, жрала только при декодировании ответа а полезный выхлоп этого ожидания был байт двести. Получилась имхо какая-то херня, не... как "демонстратор технологии" вполне себе, но я вообще хреновый программист, мне тупо не везёт всегда ![]() Слава богу "не одни мы дураки" у Cisco например, тупо портированный линух по разному обрабатывает пакеты от четных и нечетных MAC, а групповую адресацию по дефолту не пропускает вовсе(а может и вообще на пропускает х.з.) но где я и где Cisco ![]() |
|
![]() |
![]() |
![]() |
#290 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,679
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
ATAMAN
То есть можно группу выводов задействовать ну допустим кнопки подключу на несколько выводов и эти не сколько выводов на каждую кнопку своё прерывание? - на все change notice один вектор. внутри вектора можете самостоятельно сделать разбиение на дальнейшие обработчики, однако тк. вектор один, то и приоритет у вот этого вот всего всё равно будет один. Если по какой-то причине на каждую кнопку нужен вектор, то можете использовать external interrupt. |
![]() |
![]() |
![]() |
#291 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,679
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
pal1222@yandex.ru
Мне как-то раз было лень резать по узлам чужую "библиотеку" - декомпозиция чего-либо вполне может показать, что по другому собрать сложно/невозможно в разумные сроки. Получилась имхо какая-то херня, не... как "демонстратор технологии" вполне себе - PoC от релиза часто отделяет, как кажется, немного. Однако бывает и этого хватает, чтобы утонуть. не помню чтобы setjmp/longjmp хорошо кончались. Алгоритм, сделанный для ОС переделать под fsm та еще задача и скорее всего это будет работать хуже, чем если бы была ОС. тк. в fsm будет тупо кусок функциональности, который выполняла до этого ОС, только в разы хуже сделанный. |
![]() |
![]() |
![]() |
#292 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#293 | |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Но я как то постеснялся задать Вам вопрос про РТОС, которую Вы портируете на свои устройства. Какую РТОС Вы портируете? |
|
![]() |
![]() |
![]() |
#294 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,679
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Марк
Я написал ОС, ее и использую. Если Вас интересуют какие-то фрагменты, АBI или что-либо еще, то могу поделиться фрагметом реализации той или иной фукнциональности. Естественно, что я поверхностно знаком с freertos, tnkernel и linux. В силу того, что ОС сугубо коммерческая - весь код открывать не буду. что "изобретать велосипед" - дело не только бесперспективное, но и непрофессиональное - за это не платят. по опыту многих - увольняют. приходит время сдавать проект, а сдавать нечего. Зато есть велосипед. |
![]() |
![]() |
![]() |
#295 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Тогда странно слышать от Вас по поводу как делают в ОС, а как нет.
На основании чего Вы назвали глупостью вызов шедулера из прерывания систикТаймера? И чем отличается У ВАС вызов шедулера из любого прерывания от простой обработки задач в прерываниях с простым управлением приоритетами? То есть от условного "варианта СергП01"... ![]() Последний раз редактировалось Марк; 01.12.2020 в 09:22. |
![]() |
![]() |
![]() |
#296 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,679
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Марк
На основании чего Вы назвали глупостью вызов шедулера из прерывания систикТаймера? - вызовы делают не каждую 1ms, а тогда, когда нужно. составляется очередь допустим спящих из тех, кто ожидает и вызывается только тогда, когда нужно. Вызывать что-либо просто чтобы совершить вызов - так не делают. И чем отличается У ВАС вызов шедулера из любого прерывания от простой обработки задач в прерываниях с простым управлением приоритетами? - 1. контекстом - каждый поток выполняется в своем контексте и имеет свой стек. 2. приоритетом - прерывания может ждать несколько потоков с разным приоритетом и в таком случае готовые задачи будут всё равно выполняться в порядке, согласно их приоритетам. 3. внезапно, задача может ожидать условия с требованием захвата мутекса - соответственно в таких случаях задача будет ждать освобождения мутекса. 4. в прерывании нельзя уступить исполнение. в задаче можно - нужно сделать, чтобы задача сперва захватила мутекс, потом подождала какое-то время, или подождала прерывания какое-то время, или что-то еще - пожалуйста. Скорее проще найти чем похожи, чем описать чем отличаются. Похожи тем, что из прерывания тоже можно запустить выполнение код. Всем остальным наверное отличаются. |
![]() |
![]() |
![]() |
#297 |
Senior Member
Регистрация: 12.07.2012
Возраст: 34
Сообщений: 2,679
Вес репутации: 4859/106 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Марк
Скорее интересно, как Вы до такого дошли - вызывать кнопки, когда ничего не происходит, вызывать прерывание таймера, когда от него скорее всего ничего не нужно, не отправлять с сон ядро, когда нет задач. Вот есть описание архитектуры системы - в ней прямо так написано что-ли? - будет каждую 1ms вызывать диспетчер на всякий случай. |
![]() |
![]() |
![]() |
#298 | |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/128 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Тут ошибка множественного числа. Не "вызовы делают", а "я вызовы делаю". Ибо даже первый попавшийся мне пример RTOS (FreeRTOS) вызывает шедулер по систику (каждую 1 мс или иное заранее определенное время). Естественно, что спящие задачи он не вызывает. Методы арбитража очереди задач в шедулере я не рассматриваю. Это отдельный вопрос.
Цитата:
Но! Есть реальный прибор в котором есть 10 задач. Каждая из них активируется своим событием или комбинацией общих. В общем самая громоздкая из задач выполняется, допустим, 1 секунду. Другая 200 мс. Ну и по спадающей. Если мы будет постоянно прерывать тяжелую задачу, то она может не успеть к своему времени. А одновременно активными, например, могут быть 7...9 задач из 10. Кто будет переключать задачи, обеспечивая их псевдопараллельное исполнение? |
|
![]() |
![]() |
![]() |
#299 | |
Senior Member
|
![]() Цитата:
А почему собственно нужно НЕ опрашивать кнопки по таймеру, так делают многие, но для Вас это почему-то стало откровением. И почему обязательно нужно отправлять ядро в сон, так делают когда надо батарейки экономить, но не всегда работают на батарейках и тогда на сон вообще плевать. У меня сложилось впечатление, что для Вас существует всего два мнения: одно Ваше и второе - неправильное.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3) |
|
![]() |
![]() |
![]() |
#300 |
Senior Member
Регистрация: 10.06.2008
Возраст: 59
Сообщений: 2,982
Вес репутации: 4193/117 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Не обязательно... так ещё повышают реакцию на событие...
__________________
"Я не даю готовых решений, я заставляю думать!"(С) |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с RTL8201BL | Рак | Cетевые протоколы и технологии | 13 | 30.01.2017 10:01 |
проблема с обновлением pickit2 | ctef | Продукция MICROCHIP | 13 | 25.08.2008 18:16 |
Проблема с PIC18F452 | MaxPIC | Продукция MICROCHIP | 4 | 09.02.2008 21:47 |
Проблема с кнопками в MPLAB | RexeR | Продукция MICROCHIP | 0 | 14.11.2007 18:18 |
PIC16F689 проблемы с FSCM | 3682_iop | Продукция MICROCHIP | 17 | 02.11.2007 12:50 |