реклама на сайте
подробности

 
 
> TNeo: тщательно протестированная РТОС для Cortex-M0/M0+/M3/M4/M4F, PIC24/dsPIC, PIC32MX.
dimonomid
сообщение Jan 18 2015, 01:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Представляю новое ядро реального времени: TNeo. Как можно догадаться из названия, изначально она основана на TNKernel, но в итоге код был переписан почти полностью (потому что оригинальный код, по моему мнению, далек от совершенства), написаны подробные юнит-тесты, исправлены ошибки и добавлено много новых фич.

Список найденных и исправленных ошибок в TNKernel 2.7 можно посмотреть тут: http://dfrank.bitbucket.org/tneokernel_api...implement__bugs

Код TNeo написан аккуратно и тщательно, документирован очень подробно. Документация генерируется автоматически посредством doxygen, таким образом, легко поддерживать документацию в актуальном состоянии:
Список новых возможностей:

* Dynamic tick (опционально): если системе нечего делать, эта опция позволяет действительно ничего не делать (уйти в sleep), и даже не просыпаться каждую миллисекунду для обработки системного тика. Подробнее: http://dfrank.bitbucket.org/tneokernel_api...time_ticks.html
* Timer: позволяет попросить ядро запустить пользовательскую функцию через определенный промежуток времени. Подробнее: http://dfrank.bitbucket.org/tneokernel_api...__timer_8h.html
* Event group connection: позволяет "соединить" группу флагов с другими объектами РТОС. Очень удобно в случаях, когда в задаче нужно ждать, скажем, сообщения из нескольких очередей, или ждать каких-то флагов плюс сообщения из очереди. Подробнее: http://dfrank.bitbucket.org/tneokernel_api...ventgrp_connect
* Profiler (опционально): позволяет узнать общее время работы каждой задачи, максимальное время работы задачи подряд и т.д. Полезно для отладки.
* Software stack overflow check (опционально) - программный контроль переполнения стека, очень существенно облегчает дебаг;
* Recursive mutexes (опционально) - позволяет вложенную блокировку мютексов;
* Mutex deadlock detection (опционально) - в случае deadlock, ядро сообщает об этом посредством callback-функции;
* Separate interrupt stack - на всех поддерживаемых платформах прерывания используют отдельный стек.

Полный список фич тут: http://dfrank.bitbucket.org/tneokernel_api...l/features.html
Отличия API TNeo от API TNKernel 2.7 тут: http://dfrank.bitbucket.org/tneokernel_api...ernel_diff.html

Чем не устраивает TNKernel: см. документацию: Why reimplement TNKernel, также можно посмотреть мой старый пост на этом форуме: http://electronix.ru/forum/index.php?s=&am...t&p=1280109

Кратко: ключевые проблемы TNKernel:
  • Самая основная проблема в том, что TNKernel - проект, написанный на коленке, т.е. в спешке. Огромное количество дублирования кода, непоследовательности и недостаточной продуманности.
  • Проект не тестировался (только "вручную", как это нередко делается в эмбеддинге, к сожалению). Среди найденных багов есть банальнейшие ситуации с мютексами, которые не обрабатываются ядром корректно (см. ссылку на список багов выше). Ну, учитывая первый пункт про спешку, отсутствие тестов неудивительно, т.к. на них нужно огромное количество времени. У меня на тесты ушло примерно столько же времени, сколько на само ядро.
  • Документация живет отдельной от самого ядра жизнью.
  • Проект не поддерживается. Я присылал Юрию исправления некоторых ошибок, мои сообщения были проигнорированы.


Любопытный читатель может спросить: если уж я так сильно ругаю TNKernel, почему же я взял это ядро за основу? С удовольствием отвечу: не смотря на то, что реализация TNKernel, по моему мнению, далека от совершенства, идеи, стоящие за реализацией, я считаю в целом очень достойными. Ядро компактное и быстрое, и данные организованы грамотно.

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

Попутно я реализовал вещи, которых мне самому раньше не хватало, плюс реализовал пожелания людей, заинтересовавшихся проектом (я представил TNeo на семинаре Microchip MASTERS 2014, после чего и получил предложение реализовать порт для линейки Cortex-M и несколько других фич)

Выражаю огромную благодарность Юрию за проделанную работу над TNKernel: без нее, конечно, TNeo никогда не появилась бы. Полный список благодарностей можно прочитать на странице Thanks.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aner
сообщение Jan 19 2015, 18:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Философия однако, не даром западные программисты все доктора философскмх наук, а не доктора лингвистики по языкам. Для кого как а для меня "мютекс" это и есть один из видов "Семафора". Наверное как и вы, я пользую (к примеру при юзании Free RTOS) их очень много и везде, не очень понимаю как без них можно писать, начиная уже с 2-3 ниток, даже средненький софтик. Но вот разницу в TNeo и Free RTOS к примеру в v7.1 не очень увидел. TNeo, возможно ценна другим, ... вот в чём?
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 19 2015, 18:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(Aner @ Jan 19 2015, 22:08) *
Для кого как а для меня "мютекс" это и есть один из видов "Семафора".

Главное отличие между мютексом и семафором в том, что у заблокированного мютекса есть задача-владелец. У семафора владельца нет и быть не может.

Использование мютекса всегда сводится к следующему: задача А заблокировала мютекс, задача А разблокировала мютекс. Не может быть другой последовательности. Пока мютекс заблокирован задачей, никто больше не может его заблокировать, и никто кроме задачи А также не может его разблокировать.

И вот тот факт, что у мютекса есть владелец, позволяет реализовать алгоритмы обхода инверсии приоритетов. И, разумеется, мютекс нельзя блокировать в прерывании.

С семафором же все совершенно иначе: задача А может семафор ожидать, а задача Б, или даже прерывание, может семафорить. И корректное использование семафоров заключается именно в том, что одна задача (или прерывание) семафорит другой: типа, у меня все готово, теперь ты давай.

Еще раз дам эту ссылку на stackoverflow, где человек чуть подробнее объясняет то же самое: http://stackoverflow.com/a/86021/1099240.

Цитата(Aner @ Jan 19 2015, 22:08) *
Но вот разницу в TNeo и Free RTOS к примеру в v7.1 не очень увидел. TNeo, возможно ценна другим, ... вот в чём?

Я уже выше писал, что я всерьез не использовал FreeRTOS, так что не смогу вам ответить. Ну вот товарищ AlexandrY отметил, что в FreeRTOS нет event group connection, а это иногда ну очень удобно. От коллег слышал что FreeRTOS значительно медленнее TNKernel, но сам не проверял.

Сообщение отредактировал dimonomid - Jan 19 2015, 18:51
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 19 2015, 20:35
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimonomid @ Jan 19 2015, 20:50) *
Использование мютекса всегда сводится к следующему: задача А заблокировала мютекс, задача А разблокировала мютекс. Не может быть другой последовательности. Пока мютекс заблокирован задачей, никто больше не может его заблокировать, и никто кроме задачи А также не может его разблокировать.

И вот тот факт, что у мютекса есть владелец, позволяет реализовать алгоритмы обхода инверсии приоритетов. И, разумеется, мютекс нельзя блокировать в прерывании.


Ну зачем париться об инверсии если не подводите структуру задач под Rate Monotonic Algorithm ?
Есть там инверсия или нет инверсии вашему софту все равно будет по барабану.
Это же не deadlock, а вполне себе невинная коллизия.

И потом, разве в TNeo мьютекс не будет удален при удалении создавшей его задачи?
Логично ожидать его удаления, а значит мьютексы можно разблокировать и из других задач.
Т.е. принципиальная разница с семафором не такая уж и огромная.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 19 2015, 21:14
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(AlexandrY @ Jan 20 2015, 00:35) *
Ну зачем париться об инверсии если не подводите структуру задач под Rate Monotonic Algorithm ?
Есть там инверсия или нет инверсии вашему софту все равно будет по барабану.

Нет, не по барабану. Если вашему софту по барабану, значит, вашим задачам и приоритизация вообще не нужна: сделать все тупо одного приоритета, да и все. У меня же бывают задачи, для которых существуют требования типа "задача X обязана отреагировать на сообщение Y в течение времени Z". Необязательно все прям рассчитывать с точностью до микросекунд, бывает просто эмпирически становится ясно, что определенная задача перестает успевать за естественными требованиями по времени.

Цитата(AlexandrY @ Jan 20 2015, 00:35) *
И потом, разве в TNeo мьютекс не будет удален при удалении создавшей его задачи?
Логично ожидать его удаления, а значит мьютексы можно разблокировать и из других задач.

Ну вы сравнили. Удаление задачи без разблокировки мютекса - это, извиняюсь за выражение, говнокод. И рассчитывать на это можно только в случае аварийной ситуации, когда нормально задачу уже никак не завершить, и ничего другого не остается, кроме как грохнуть ее без суда и следствия.

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

Цитата(AlexandrY @ Jan 20 2015, 00:35) *
Т.е. принципиальная разница с семафором не такая уж и огромная.

Я устал тратить время на доказывание того, что белое - это белое. Как я уже сказал в самом начале, тот факт, что многие эмбеддеры не хотят понимать разницу между мютексами и семафорами, и используют одно вместо другого - для меня не новость. Можно и саморезы в стену молотком забивать - держаться будут. sm.gif Так что принципиальная разница между гвоздями и саморезами не такая уж и огромная.

Если есть что-то конкретно по TNeo - с удовольствием отвечу, а если только холивар про использование примитивов синхронизации, то давайте лучше просто займемся своими делами.


Цитата(Aner @ Jan 20 2015, 00:45) *
Про то что FreeRTOS значительно медленнее TNKernel думаю, так говорить некорректно; от задачи и окружения зависит

Ладно, это спор без фактов: как я вам сразу сказал, я сам не проверял. Насколько я слышал, сравнения проводились при прочих явных условиях без побочных вещей: типа, отправляем сообщение из задачи А в высокоприоритетную задачу Б и смотрим сколько прошло тиков до получения управления задачей Б.

Если я заморочусь когда-нибудь на подобное сравнение, я напишу. Пока нечего сказать.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 20 2015, 07:09
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimonomid @ Jan 19 2015, 23:14) *
Нет, не по барабану. Если вашему софту по барабану, значит, вашим задачам и приоритизация вообще не нужна: сделать все тупо одного приоритета, да и все. У меня же бывают задачи, для которых существуют требования типа "задача X обязана отреагировать на сообщение Y в течение времени Z". Необязательно все прям рассчитывать с точностью до микросекунд, бывает просто эмпирически становится ясно, что определенная задача перестает успевать за естественными требованиями по времени.


Ну, и были случаи когда только мьютекс помогал задаче гарантированно выполниться до deadline?

Цитата(dimonomid @ Jan 19 2015, 23:14) *
Ну вы сравнили. Удаление задачи без разблокировки мютекса - это, извиняюсь за выражение, говнокод. И рассчитывать на это можно только в случае аварийной ситуации, когда нормально задачу уже никак не завершить, и ничего другого не остается, кроме как грохнуть ее без суда и следствия.


Т.е. ваш код не отрабатывает аварийные ситуации, пилит и пилит дальше не смотря ни на что?
А у других 90% кода это сплошь обработка аварийных ситуаций знаете-ли, иначе сертификацию не пройдут.


Цитата(dimonomid @ Jan 19 2015, 23:14) *
При нормальном завершении, задача должна сама явно освободить все мютексы и другие ресурсы, после чего завершиться.


Не будем наделять задачи разумом, а скажем так - при вызове функции уничтожения задачи происходит уничтожение и всех объектов синхронизации которые были привязаны к ней.
Уничтожение задачи можно вызвать и из другой задачи.
Это стандартный подход в развитых RTOS, в MQX в частности.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 20 2015, 08:03
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(AlexandrY @ Jan 20 2015, 11:09) *
Ну, и были случаи когда только мьютекс помогал задаче гарантированно выполниться до deadline?

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


Цитата(AlexandrY @ Jan 20 2015, 11:09) *
Т.е. ваш код не отрабатывает аварийные ситуации, пилит и пилитдальше не смотря ни на что?
А у других 90% кода это сплошь обработка аварийных ситуаций знаете-ли, иначе сертификацию не пройдут.

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

И приведите пожалуйста примеры, когда вы используете удаление задачи в качестве разрешения нештатной ситуации?



Цитата(AlexandrY @ Jan 20 2015, 11:09) *
Не будем наделять задачи разумом, а скажем так - при вызове функции уничтожения задачи происходит уничтожение и всех объектов синхронизации которые были привязаны к ней.
Уничтожение задачи можно вызвать и из другой задачи.
Это стандартный подход в развитых RTOS, в MQX в частности.

Единственный объект синхронизации, привязанный к задаче - мютекс. Например, выделенная из TN_FMem или вообще из кучи память никак не привязывается к задаче (т.к. память легко может быть выделена в одной задаче, а освобождена в другой), так что удаление задачи, выделяющей память динамически, может привести к утечке памяти. Хотя, конечно, не удивлюсь, если вы и динамическое выделение памяти не используете.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 20 2015, 11:03
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimonomid @ Jan 20 2015, 10:03) *
Уж конечно я не измерял, т.к. для блокировки ресурсов всегда сразу использую корректный объект синхронизации (мютекс), но назовите мне причину, по которой я должен оставлять потенциальную возможность инверсии приоритетов?


Если вы не анализируете условия RMA, то не знаете плохо или хорошо вдруг низкоприоритетной задаче поднимать приоритет.
А по сути именно это происходит при захвате мьютекса самой низкоприоритетной задачей.
Тогда вопрос - почему она была сделана низкоприоритетной?

Предположу что мьютексы используете для коротких участков доступа к глобальным данным.
Вот это и есть излишество. Получается чтобы защитить доступ длительностью в доли микросекунды применяются сервисы в десять раз более длинные.
Для этого в RTOS применяется гораздо более эффективный механизм - изменение уровня разрешенных прерываний.

Цитата(dimonomid @ Jan 20 2015, 10:03) *
Конечно обрабатывает, только называть удаление задачи способом "разблокировать мютекс" и говорить, что, дескать, значит семафор и мютекс это одно и то же - некорректно, т.к. для семафора ожидание и сигнализирование из разных задач - рабочая ситуация, а для мютекса - крайняя и аварийная.

И приведите пожалуйста примеры, когда вы используете удаление задачи в качестве разрешения нештатной ситуации?


Во первых половину задач я создаю динамически. Их цель выполнить операцию и прекратить свое существование.
Например дали команду с клавиатуры сложному механизму выполнить определенное движение.
На запуск движения (еще не на само движение) создается задача.
Движение сложного механизма сопряжено с выполнение многих подготовительных действий.
Это управление элементами индикации: лампочки, бузера; включение или выключение каких-то соленоидов, активация вспомогательных приводов и проч. и проч.
И вот если какая либо из этих мелочей по ходу не сработает или не даст подтверждения происходит аварийная выгрузка задачи. В MQX это будет просто команда return errorcode. И все!
Все мьютексы, семафоры, флаги, блоки памяти занятые этой задачей будут освобождены автоматически. Никаких хлопот.



Цитата(dimonomid @ Jan 20 2015, 10:03) *
Единственный объект синхронизации, привязанный к задаче - мютекс. Например, выделенная из TN_FMem или вообще из кучи память никак не привязывается к задаче (т.к. память легко может быть выделена в одной задаче, а освобождена в другой), так что удаление задачи, выделяющей память динамически, может привести к утечке памяти. Хотя, конечно, не удивлюсь, если вы и динамическое выделение памяти не используете.


Не возводите только в ранг стандарта то, что сами себе придумали. Как написал выше в развитых RTOS это не так.

Кстати советую подумать зачем мьютексы нужны в Windows если это не система реального времени и на инверсию приоритетов... ну она там точно не важна.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 20 2015, 16:39
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(AlexandrY @ Jan 20 2015, 15:03) *
Предположу что мьютексы используете для коротких участков доступа к глобальным данным.

Мда, интересно, из чего вы сделали такой вывод? Я вам приводил примеры использования мютексов для работы с флешкой, вы говорите про глобальные данные.
Когда это разумно, конечно я использую критические секции.

Цитата(AlexandrY @ Jan 20 2015, 15:03) *
Все мьютексы, семафоры, флаги, блоки памяти занятые этой задачей будут освобождены автоматически. Никаких хлопот.

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

Но я наверное слишком идеалист для эмбеддерства и вообще не прав.

Цитата(AlexandrY @ Jan 20 2015, 15:03) *
Не возводите только в ранг стандарта то, что сами себе придумали. Как написал выше в развитых RTOS это не так.

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

Как вы сказали, "разработчики потратили на мьютексы уйму времени, а зачем они нужны в жизни не знают". Но те, кто потратили уйму времени, и те, кто не знают зачем они нужны - это все-таки разные люди.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 21 2015, 07:24
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimonomid @ Jan 20 2015, 18:39) *
Мда, интересно, из чего вы сделали такой вывод? Я вам приводил примеры использования мютексов для работы с флешкой, вы говорите про глобальные данные.
Когда это разумно, конечно я использую критические секции.

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

Как вы сказали, "разработчики потратили на мьютексы уйму времени, а зачем они нужны в жизни не знают". Но те, кто потратили уйму времени, и те, кто не знают зачем они нужны - это все-таки разные люди.


Ваш пример с SPI тоже не отличается прямизной. Для таких дел специально созданы сервисы очередей.
Зачем задачам которые должны абстрагироваться от аппаратуры лазить в SPI, разбираться с адресами , данными?
Это означает подкладывание под свой софт мины межплатформенной несовместимости.
Если на такую архитектуру софта рассчитана ваша RTOS, то я конечно дальше обсуждать не буду.

Но в целом создается впечатление, что некоторые мьютексы реализуют просто ради моды, коньюнктуры.

Nucleus Plus стоит на 3-х миллиардах дивайсов и не имеет мьютексов. Это должно кое о чем говорить.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 21 2015, 08:56
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(AlexandrY @ Jan 21 2015, 12:24) *
Ваш пример с SPI тоже не отличается прямизной. Для таких дел специально созданы сервисы очередей.
Зачем задачам которые должны абстрагироваться от аппаратуры лазить в SPI, разбираться с адресами , данными?

Совсем необязательно задачам, которым нужно так или иначе что-то прочитать из флеши, самостоятельно "разбираться с адресами, данными". К железу привязан только bsp-layer (board support package). Задача обычно вызывает функции далеко абстрагированного от железа модуля, который, прямо или косвенно, в итоге читает из флеши то, что ему нужно.

И расскажите, как здесь правильно пользоваться сервисами очередей.

Цитата(AlexandrY @ Jan 21 2015, 12:24) *
Nucleus Plus стоит на 3-х миллиардах дивайсов и не имеет мьютексов. Это должно кое о чем говорить.

Подобные аргументы говорят в первую очередь о хорошем маркетинге. Я не работал с Nucleus и поэтому о ней самой ничего не скажу, но аргумент типа количества установок говорит о маркетинге. Как следствие, конечно, большое сообщество и т.д.

В ThreadX есть мютексы и она стоит на миллиарде девайсов (как у них на сайте указано), ну и что.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 21 2015, 09:47
Сообщение #12


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimonomid @ Jan 21 2015, 10:56) *
Совсем необязательно задачам, которым нужно так или иначе что-то прочитать из флеши, самостоятельно "разбираться с адресами, данными". К железу привязан только bsp-layer (board support package). Задача обычно вызывает функции далеко абстрагированного от железа модуля, который, прямо или косвенно, в итоге читает из флеши то, что ему нужно.

И расскажите, как здесь правильно пользоваться сервисами очередей.


Таким подходом опять нарушается принцип реального времени.
Вызывая функции которые только опосредованно где-то могут обращаться с Flash и могут тормозить на мьютексах вы еще больше себе затрудняете анализ что называется schedulability.
Где детерминизм? Видим в тексте такую функцию вызова сервиса BSP и ничего не можем сказать о времени ее исполнения. Это уже не realtime приложение.

А надо было бы организовать во-первых задачу менеджера SPI шины.
Во-вторых остальные задачи менеджеру шлют свои командные структуры через сервис очередей.
В командных структурах можно и канал обратного сообщения указать для задач инициаторов обмена.
А можно и регистрировать подписчиков в задаче менеджере SPI для обратных сообщений.

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

Все на виду и анализируемо.


Цитата(dimonomid @ Jan 21 2015, 10:56) *
В ThreadX есть мютексы и она стоит на миллиарде девайсов (как у них на сайте указано), ну и что.


Методом от обратного было доказано, что мьютексы не есть необходимость для развитой RTOS и вообще для реального времени.
Следовательно и маркетинговый эффект от их реализации сомнительный.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 21 2015, 10:03
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(AlexandrY @ Jan 21 2015, 14:47) *
А надо было бы организовать во-первых задачу менеджера SPI шины.

Ничего не имею против такого подхода, и я уже писал об этом. Процитирую сам себя: Можно, конечно, на каждый ресурс делать задачу и слать ей сообщения. Иногда это разумно, иногда разумнее использовать мютекс. Панацеи нет.

Цитата(AlexandrY @ Jan 21 2015, 14:47) *
Методом от обратного было доказано, что мьютексы не есть необходимость для развитой RTOS и вообще для реального времени.

Конечно не есть необходимость, как я уже говорил, можно и без мютексов все написать, а можно и без РТОС. Дискуссия выходит на второй круг.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 21 2015, 10:11
Сообщение #14


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimonomid @ Jan 21 2015, 12:03) *
Ничего не имею против такого подхода, и я уже писал об этом. Процитирую сам себя: Можно, конечно, на каждый ресурс делать задачу и слать ей сообщения. Иногда это разумно, иногда разумнее использовать мютекс. Панацеи нет.


Конечно не есть необходимость, как я уже говорил, можно и без мютексов все написать, а можно и без РТОС. Дискуссия выходит на второй круг.



Панацеи нет, но есть плохие и хорошие лекарства. И это стоит обсуждать.
Что можно без RTOS, а что нельзя, кстати, тоже интересная тема.
Но нет так нет.
Значит ваша ось все таки ради искусства. wink.gif
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 21 2015, 12:29
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(AlexandrY @ Jan 21 2015, 15:11) *
Панацеи нет, но есть плохие и хорошие лекарства.

Не плохие и хорошие, а подходящие или не подходящие для решения конкретной задачи.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimonomid   TNeo: тщательно протестированная РТОС для Cortex-M0/M0+/M3/M4/M4F, PIC24/dsPIC, PIC32MX.   Jan 18 2015, 01:41
- - Aner   Под IAR c Cortex не планируется?   Jan 18 2015, 11:11
|- - dimonomid   Цитата(Aner @ Jan 18 2015, 15:11) Под IAR...   Jan 18 2015, 11:23
- - AlexandrY   Цитата(dimonomid @ Jan 18 2015, 03:41) По...   Jan 18 2015, 12:30
|- - dimonomid   Цитата(AlexandrY @ Jan 18 2015, 17:30) Не...   Jan 18 2015, 13:15
|- - AlexandrY   Цитата(dimonomid @ Jan 18 2015, 15:15) То...   Jan 18 2015, 21:42
|- - dimonomid   Цитата(AlexandrY @ Jan 19 2015, 02:42) Да...   Jan 18 2015, 22:52
- - nill   Планируете переносить TN NET на своё ядро? И есть ...   Jan 18 2015, 13:58
|- - dimonomid   Цитата(nill @ Jan 18 2015, 17:58) Планиру...   Jan 18 2015, 14:14
- - Xenia   Цитата(dimonomid @ Jan 18 2015, 04:41) Пр...   Jan 18 2015, 14:30
|- - dimonomid   Цитата(Xenia @ Jan 18 2015, 18:30) А скач...   Jan 18 2015, 14:39
|- - Xenia   Цитата(dimonomid @ Jan 18 2015, 17:39) Во...   Jan 18 2015, 15:09
|- - dimonomid   Цитата(Xenia @ Jan 18 2015, 20:09) 1. Изв...   Jan 18 2015, 15:32
|- - Xenia   Цитата(dimonomid @ Jan 18 2015, 18:32) Пр...   Jan 18 2015, 16:10
|- - dimonomid   Цитата(Xenia @ Jan 18 2015, 20:10) А как ...   Jan 18 2015, 16:31
- - Xenia   Цитата(dimonomid @ Jan 18 2015, 19:31) Та...   Jan 18 2015, 22:14
|- - AlexandrY   Цитата(Xenia @ Jan 19 2015, 00:14) В этой...   Jan 19 2015, 09:52
|- - dimonomid   Цитата(AlexandrY @ Jan 19 2015, 14:47) В ...   Jan 19 2015, 10:21
||- - megajohn   рассмотрите возможность 11. не плохо бы разместить...   Jan 19 2015, 10:34
|||- - dimonomid   Цитата(megajohn @ Jan 19 2015, 15:34) рас...   Jan 19 2015, 11:18
||- - AlexandrY   Цитата(dimonomid @ Jan 19 2015, 12:21) Мо...   Jan 19 2015, 11:40
||- - dimonomid   Цитата(AlexandrY @ Jan 19 2015, 16:40) Вс...   Jan 19 2015, 11:59
|- - den_po   Цитата(AlexandrY @ Jan 19 2015, 14:52) Та...   Jan 19 2015, 11:36
|- - dimonomid   Цитата(den_po @ Jan 19 2015, 16:36) http:...   Jan 19 2015, 11:40
|- - LightElf   QUOTE (dimonomid @ Jan 20 2015, 12:03) Хо...   Jan 20 2015, 09:46
||- - dimonomid   Цитата(LightElf @ Jan 20 2015, 13:46) Но ...   Jan 20 2015, 10:55
|- - den_po   Цитата(AlexandrY @ Jan 20 2015, 15:03) Не...   Jan 20 2015, 14:17
|- - AlexandrY   Цитата(dimonomid @ Jan 21 2015, 14:29) Не...   Jan 22 2015, 08:03
|- - dimonomid   Цитата(AlexandrY @ Jan 22 2015, 13:03) ...   Jan 22 2015, 09:52
|- - AlexandrY   Цитата(dimonomid @ Jan 22 2015, 11:52) По...   Jan 22 2015, 10:16
|- - dimonomid   Цитата(AlexandrY @ Jan 22 2015, 15:16) Я ...   Jan 22 2015, 11:12
- - Aner   Про то что FreeRTOS значительно медленнее TNKernel...   Jan 19 2015, 20:45
- - Mahagam   Aner, фриртос действительно тормознее других перек...   Jan 20 2015, 07:17
|- - Aner   QUOTE (Mahagam @ Jan 20 2015, 11:17) Aner...   Jan 20 2015, 09:20
|- - Mahagam   QUOTE (Aner @ Jan 20 2015, 12:20) кроме b...   Jan 20 2015, 11:33
||- - Aner   QUOTE (Mahagam @ Jan 20 2015, 15:33) поме...   Jan 20 2015, 14:45
||- - Mahagam   QUOTE (Aner @ Jan 20 2015, 17:45) Да блин...   Jan 20 2015, 17:10
|- - dimonomid   Насчет FreeRTOS: Цитата(Mahagam @ Jan 20 201...   Apr 7 2015, 23:58
- - Valentine Loginov   Спасибо! Будем смотреть. А тесты в открытом до...   Jan 20 2015, 08:06
|- - dimonomid   Цитата(Valentine Loginov @ Jan 20 2015, 12...   Jan 20 2015, 08:10
- - Aner   Шизу про догнал развивать не стоит. Я о тормозах и...   Jan 20 2015, 19:35
- - ViKo   Здесь много разговора про мьютексы. В Keil CMSIS-R...   Jan 22 2015, 10:01
|- - AHTOXA   Цитата(ViKo @ Jan 22 2015, 15:01) Я испол...   Jan 22 2015, 11:56
|- - ViKo   Цитата(AHTOXA @ Jan 22 2015, 14:56) То ес...   Jan 22 2015, 12:07
|- - AHTOXA   Цитата(ViKo @ Jan 22 2015, 17:07) Нет. Мь...   Jan 22 2015, 15:37
|- - ViKo   Цитата(AHTOXA @ Jan 22 2015, 18:37) Вот э...   Jan 22 2015, 16:51
|- - dimonomid   Цитата(ViKo @ Jan 22 2015, 21:51) Почитай...   Jan 22 2015, 17:13
- - _Pasha   Мне вообще даже эти все разговоры про ртосы не нра...   Jan 22 2015, 10:18
- - Alex B._   dimonomid – можно рассмотреть кейс, когда на...   Jan 22 2015, 11:26
|- - dimonomid   Цитата(Alex B._ @ Jan 22 2015, 16:26) dim...   Jan 22 2015, 11:35
|- - Alex B._   Цитата(dimonomid @ Jan 22 2015, 14:35) Я ...   Jan 22 2015, 11:40
- - ViKo   Хотите семафоров? - их есть у Кейла. Как говорится...   Jan 22 2015, 20:33
- - Valentine Loginov   Ай пошли войны. Создали бы тему или блог какой и о...   Jan 23 2015, 06:49
- - ViKo   Нашел принципиальное отличие мьютекса от семафора....   Jan 23 2015, 07:04
|- - LightElf   QUOTE (ViKo @ Jan 23 2015, 11:04) Так что...   Jan 23 2015, 12:01
|- - ViKo   Цитата(LightElf @ Jan 23 2015, 15:01) При...   Jan 23 2015, 12:42
- - zaicev_ekb   Прошу прошения. А почему такой древний компилятор ...   Feb 9 2015, 10:47
|- - dimonomid   Цитата(zaicev_ekb @ Feb 9 2015, 15:47) Пр...   Feb 9 2015, 16:30
- - dimonomid   Так, отставить, я ерунду написал в прошлом сообщен...   Apr 8 2015, 10:03
- - LightElf   QUOTE (dimonomid @ Apr 8 2015, 13:03) Так...   Apr 8 2015, 13:42
- - dimonomid   Цитата(LightElf @ Apr 8 2015, 17:42) Наск...   Apr 8 2015, 14:02
- - LightElf   QUOTE (dimonomid @ Apr 8 2015, 17:02) т к...   Apr 8 2015, 14:23
- - dimonomid   Цитата(LightElf @ Apr 8 2015, 18:23) Хм. ...   Apr 8 2015, 14:38
- - LightElf   QUOTE (dimonomid @ Apr 8 2015, 17:38) Мда...   Apr 8 2015, 14:46
- - dimonomid   Цитата(LightElf @ Apr 8 2015, 19:46) Во...   Apr 8 2015, 14:56
- - LightElf   QUOTE (dimonomid @ Apr 8 2015, 17:56) Вам...   Apr 8 2015, 15:05
- - dimonomid   Цитата(LightElf @ Apr 8 2015, 19:05) Так ...   Apr 8 2015, 15:13
- - LightElf   QUOTE (dimonomid @ Apr 8 2015, 18:13) Хм....   Apr 8 2015, 15:29


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 09:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01707 секунд с 7
ELECTRONIX ©2004-2016