-
- ёмоё, ну откуда вы взяли этот маразм, что у RTOS скорость реакции напрямую зависит от частоты систика? Уже в который раз на него натыкаюсь в интернетах. lloyd(240 знак., 03.09.2019 15:06)
- Если ресурсов хватает, то нет таких границ. Быстрые короткие обработчики нужно делать в прерываниях хоть с, хоть без ртос. - =AlexD=(03.09.2019 09:03)
- Если ты готов реализовать алгоритм работы устройства целиком (в одиночку или коллективом) нахуй все РТОС, если нет, то это самое оно. - Codavr(02.09.2019 19:33 - 19:36)
- Если разработку будут вести несколько человек, то однозначно надо использовать RTOS при таких условиях. Что касается вашей задачи - Задача с требуемым периодом обработки просто висит на событии. Событие устанавливается в прерывании таймера с il-2(189 знак., 15.08.2019 18:43)
- У нас вот цикл 125 мкс, без rtos исторически так сложилось... но очень бы хотелось, потому как долгие неприоритетные задачи сейчас приходится "размазывать" руками - sav6622(14.08.2019 18:02)
- В чём проблема размазать? Вроде бы protothreads делает это довольно простой задачей. - SciFi(14.08.2019 18:07)
- Анализировал я их для применения, но чего то так и не дошел, непомню что остановило. Надо бы вернуться взвесить снова. - sav6622(14.08.2019 18:35)
- Кооперативную не хотите попробовать? Написана на С, без ассемблера - =AK=(02.09.2019 05:37, ссылка)
- 1) Гм, если размер int не равен разрядности процессора - можно огрести забавных глюков. LightElf(230 знак., 02.09.2019 17:32)
- Я с 8-битными Ардунками пользовал, глюков не заметил. =AK=(112 знак., 03.09.2019 00:17)
- 1) просто везло или не заметили. У вас счётчик задержки модифицируется и основной задачей и обработчиком прерывания, без каких-либо средств обеспечения атомарности LightElf(67 знак., 03.09.2019 01:11)
- Под Ардуиной я даже прерывания не использую, задержки сделаны на основе millis() - =AK=(03.09.2019 02:13, ссылка)
- Если б я еще знал, что такое millis(). Вообще, использовать setjmp/longjmp нужно аккуратно и вдумчиво, там граблей разложено много. Конкретно у вас есть конструкция res = setjmp(bla-bla), которая, ЕМНИП, с точки зрения стандарта есть Undefined LightElf(724 знак., 03.09.2019 09:54 - 10:20, ссылка)
- millis(0 - стандартная функция Ардуино, возвращает uint32_t, кол-во миллисекунд с момента старта. Об атомарности позаботились в ней. =AK=(2209 знак., 03.09.2019 11:24 - 11:51)
- Кстати, да. Но допилить вроде бы несложно. - SciFi(03.09.2019 10:39)
- Это да. Но там еще грабли есть со стеком. Суть, кагбэ, в том, что вообще говоря никто не гарантирует, что выпрыгнув однажды из функции по longjmp можно будет в нее потом запрыгнуть назад. Компилятор имеет полное право раскладывать на стеке свои LightElf(249 знак., 03.09.2019 11:08)
- Вот, кстати, прекрасная цитата. "Оставь надежду, всяк сюда входящий": SciFi(380 знак., 03.09.2019 11:49)
- Это мне не понятно. Я же не надеюсь на постоянство содержимого стека, при выходе сохраняю контекст, при входе - восстанавливаю. Какая при этом разница, кто там что перезатер в промежутке? - =AK=(03.09.2019 11:30)
- Компилятор имеет полное право раскладывать в стеке свое грязное белье и никому об этом не говорить. - LightElf(03.09.2019 11:55)
- Не вижу, как это соотносится с моим предыдущим высказыванием. - =AK=(03.09.2019 12:16)
- setjmp сохраняет регистры процессора и указатель стека. Содержимое стека она не сохраняет. А там компилятор может разложить всякое, после longjmp это всякое окажется ниже указателя стека и его может порушить любой залетевший дятел. - LightElf(03.09.2019 13:18)
- В описании ограничений coos ясно сказано, что из функций вызывать DELAY() нельзя, можно только из самой задачи. =AK=(410 знак., 03.09.2019 13:32 - 13:57, ссылка)
- Сама задача (COOS_Task0, COOS_Task1 и тыды в файле main.c LightElf(90 знак., 03.09.2019 14:32)
- Угу, функция. Но для ее восстановления стек не нужен, только регистры, а главное - PC. Как из нее вышли, так в нее и вернемся. - =AK=(03.09.2019 14:35)
- Не буду повторяться - LightElf(03.09.2019 14:58, ссылка)
- C ESP32 бабушка натрое сказала =AK=(444 знак., 03.09.2019 15:22 - 15:25)
- Не буду повторяться - LightElf(03.09.2019 14:58, ссылка)
- Угу, функция. Но для ее восстановления стек не нужен, только регистры, а главное - PC. Как из нее вышли, так в нее и вернемся. - =AK=(03.09.2019 14:35)
- Что вижу (сорец на гитхабе) - о том и пою. Обсуждать какой-то другой код за глаза - не готов. - LightElf(03.09.2019 14:08)
- Там к сорцам еще описание приложено, README.md Как интегральная составная часть. А за "проверку на вшивость" - спасибо. - =AK=(03.09.2019 14:12 - 14:26)
- Сама задача (COOS_Task0, COOS_Task1 и тыды в файле main.c LightElf(90 знак., 03.09.2019 14:32)
- В описании ограничений coos ясно сказано, что из функций вызывать DELAY() нельзя, можно только из самой задачи. =AK=(410 знак., 03.09.2019 13:32 - 13:57, ссылка)
- setjmp сохраняет регистры процессора и указатель стека. Содержимое стека она не сохраняет. А там компилятор может разложить всякое, после longjmp это всякое окажется ниже указателя стека и его может порушить любой залетевший дятел. - LightElf(03.09.2019 13:18)
- Не вижу, как это соотносится с моим предыдущим высказыванием. - =AK=(03.09.2019 12:16)
- Компилятор имеет полное право раскладывать в стеке свое грязное белье и никому об этом не говорить. - LightElf(03.09.2019 11:55)
- Э-э, так нечестно. Если компилятор любит так безобразничать, пусть отслеживает, что вот тут longjmp, отставить безобразия. - SciFi(03.09.2019 11:28)
- Это да. Но там еще грабли есть со стеком. Суть, кагбэ, в том, что вообще говоря никто не гарантирует, что выпрыгнув однажды из функции по longjmp можно будет в нее потом запрыгнуть назад. Компилятор имеет полное право раскладывать на стеке свои LightElf(249 знак., 03.09.2019 11:08)
- Если б я еще знал, что такое millis(). Вообще, использовать setjmp/longjmp нужно аккуратно и вдумчиво, там граблей разложено много. Конкретно у вас есть конструкция res = setjmp(bla-bla), которая, ЕМНИП, с точки зрения стандарта есть Undefined LightElf(724 знак., 03.09.2019 09:54 - 10:20, ссылка)
- Под Ардуиной я даже прерывания не использую, задержки сделаны на основе millis() - =AK=(03.09.2019 02:13, ссылка)
- 1) просто везло или не заметили. У вас счётчик задержки модифицируется и основной задачей и обработчиком прерывания, без каких-либо средств обеспечения атомарности LightElf(67 знак., 03.09.2019 01:11)
- Я с 8-битными Ардунками пользовал, глюков не заметил. =AK=(112 знак., 03.09.2019 00:17)
- Спасибо, интересно - Vit(02.09.2019 11:28)
- "Написана без ассемблера", а setjmp и longjmp что такое? - Ale3000(02.09.2019 10:37)
- Это функции стандартной библиотеки С setjmp. =AK=(168 знак., 02.09.2019 11:43)
- Тогда и оператор if/while за ассемблер посчитаем, там же JC/JNC/JZ/JNZ используется. - Dingo(02.09.2019 10:46)
- Нет. Здесь longjmp из одной функции в другую ходит. На С такое сделать нельзя никак. - Ale3000(02.09.2019 11:18)
- Тогда уж и protothreads от Adam Dunkels посмотрите. - Dingo(02.09.2019 06:12 - 06:17, ссылка, ссылка)
- Я смотрел, не понравилось. Вижу единственное достоинство в том, что она вообще ни от чего не зависит. =AK=(212 знак., 02.09.2019 11:47 - 11:54)
- Что не понравилось? Как по мне, НАЗВАНИЯ_МАКРОСОВ оставляют желать, а в остальном всё прекрасно. - SciFi(02.09.2019 12:11)
- Неудобно пользоваться. =AK=(343 знак., 02.09.2019 12:45)
- Нет ничего проще: SciFi(286 знак., 02.09.2019 13:17)
- Ну а в coos это просто DELAY(val); - =AK=(02.09.2019 13:25)
- Можно ещё сократить: DLY(v) :=) - SciFi(02.09.2019 13:29)
- Важнее pt выбросить. На кой этим голову забивать. - =AK=(02.09.2019 13:33)
- Можно ещё сократить: DLY(v) :=) - SciFi(02.09.2019 13:29)
- Ну а в coos это просто DELAY(val); - =AK=(02.09.2019 13:25)
- а как с задержками в функциях, которые вызываются в задачах? - Vit(02.09.2019 13:12)
- Задержки можно только в задачах, это ограничение coos. Нет в мире совершенства. =AK=(298 знак., 02.09.2019 13:16 - 13:18)
- Нет ничего проще: SciFi(286 знак., 02.09.2019 13:17)
- Неудобно пользоваться. =AK=(343 знак., 02.09.2019 12:45)
- Что не понравилось? Как по мне, НАЗВАНИЯ_МАКРОСОВ оставляют желать, а в остальном всё прекрасно. - SciFi(02.09.2019 12:11)
- Я смотрел, не понравилось. Вижу единственное достоинство в том, что она вообще ни от чего не зависит. =AK=(212 знак., 02.09.2019 11:47 - 11:54)
- 1) Гм, если размер int не равен разрядности процессора - можно огрести забавных глюков. LightElf(230 знак., 02.09.2019 17:32)
- Кооперативную не хотите попробовать? Написана на С, без ассемблера - =AK=(02.09.2019 05:37, ссылка)
- Анализировал я их для применения, но чего то так и не дошел, непомню что остановило. Надо бы вернуться взвесить снова. - sav6622(14.08.2019 18:35)
- В чём проблема размазать? Вроде бы protothreads делает это довольно простой задачей. - SciFi(14.08.2019 18:07)
- Есть разные реализации RTOS. Но если делать период 50микросекунд, то это может вызвать пробуксовку OS. Основное время будет тратится на переключение задач. misyachniy(195 знак., 14.08.2019 17:35)
- 50 мкс - это обращайтесь к прерываниям (по таймеру, например). RTOS это не запрещает. - SciFi(14.08.2019 17:32)
- 50 мкс это как пример. А если 15 мкс (сейчас такая задача)? Это периодический процесс, фактически аналог задачи RTOS. А в прерываниях это получается ниже уровня RTOS? Это нормальная ситуация, дозволено так делать или такая подковёрная активность Peter_M(34 знак., 14.08.2019 17:44)
- я бы с таких периодов начинал втыкать FPGA в проект. и во время еды аппетит придёт - будете свою задачу уже гонять с циклом 1us, и меньше. - Mahagam(15.08.2019 16:24)
- если у вас контроллер генерит только один меандр и больше ничего, то тут ртос не нужен, а если кнопку поставишь, то можно и с ртос. обработчик кнопки и антидребезг на задаче вполне можно реализовать, сформировать "scancod"ы при отбитии разных abivan(279 знак., 14.08.2019 18:15)
- Недавно тут обсуждали RTOS. Там почти всё субъективное. ВСЁ можно сделать без RTOS. Да и вообще можно сразу накодить в хексе. RTOS приносит свой головняк - синхронизацию, гонки попробуй отлови. Зато вкусный чужой код может требовать потоки... - SciFi(14.08.2019 17:49)
- 50 мкс это как пример. А если 15 мкс (сейчас такая задача)? Это периодический процесс, фактически аналог задачи RTOS. А в прерываниях это получается ниже уровня RTOS? Это нормальная ситуация, дозволено так делать или такая подковёрная активность Peter_M(34 знак., 14.08.2019 17:44)