-
- Некоторый вывод из холивара -> - Evgeny_CD(25.07.2013 22:47, ссылка)
- А нафига ты его вывел отдельной темой? - Codavr(25.07.2013 23:52)
- А там будут обсуждаться оСы, которых пока нет. Текущий топик и так разросся. - Evgeny_CD(25.07.2013 23:54)
- А нафига ты его вывел отдельной темой? - Codavr(25.07.2013 23:52)
- А использовал ли кто-нибудь кайловскую RTX RTOS для кортексов? Что скажете про неё в сравнении с другими RTOS? - бомж(25.07.2013 21:42)
- Я использую для STM32F2. Беру в исходниках ту, что они бесплатно раздают у себя на сайте (по ссылке). Доволен. - VAI(26.07.2013 16:47, ссылка)
- OK главное, что я желал услышать - доволен. Тоже хочу применить в маленьком но быстром проекте. - бомж(26.07.2013 22:10)
- А чо так конкретно ? Я использовал UCOS и для кортексов, и для не кортексов (ARM7, и даже, давненько под i8051), в чем проблема ? tesla(89 знак., 25.07.2013 22:59)
- Я использую для STM32F2. Беру в исходниках ту, что они бесплатно раздают у себя на сайте (по ссылке). Доволен. - VAI(26.07.2013 16:47, ссылка)
- Не нужно использовать ртос. И тогда мой портфолио будет толще вашего :-) abivan(137 знак., 25.07.2013 10:24)
- Эх, жаль, Иван, что ты москвич :) - Alex B.(25.07.2013 15:25)
- Опыт использования никогда не лишний. Даже если на пиках только светодиодами мигал. А вот использовать для этого ось или нет вопрос конкретной задачи. А портфолио должно материальную отдачу приносить, иначе это лишний груз, и таскать его с одной Codavr(32 знак., 25.07.2013 11:09)
- мне принесло. - abivan(25.07.2013 12:07)
- Ну и славненько. - Codavr(25.07.2013 12:13)
- мне принесло. - abivan(25.07.2013 12:07)
- Да я вообще хочу отползти от МК желательно повыше. Надоело уже. - SciFi(25.07.2013 10:58)
- вот пока не отполз пытайся хотябы ртосью скрасить себе жизнь. РТОС сокращает процент кодерской(низкоквалифицированной) работы в проекте и увеличивает % архитекторской работы. А уж кому какая работа больше нравится тот такую и выбирает. Не все abivan(44 знак., 25.07.2013 12:03)
- Тута процесс с двусторонним движением. То, что выше - оно тоже активно ползет в низ. Embedded платки на x86, достаточные для комфортной работы Win7, сейчас около $300 стоят (включая ОЗУ и SSD). Начиная от 400 Мгц АРМ9 микроконтроллерный мир Evgeny_CD(113 знак., 25.07.2013 12:02)
- Ну очень хочется применить Vybrid, а его пока нет... SciFi(19 знак., 25.07.2013 23:36)
- Пастбище там большое, но пасется шибко много живности и волков немеряно. - Codavr(25.07.2013 11:34)
- и это правильно, но это уже другая тема. - abivan(25.07.2013 11:09)
- Для ST32 применяю и FreeRTOS и Round-Robin. А для AVR пробегалла соответствующая работенка, было интересно, но не нашел яровского порта под старшие модели. Нашел только для m32. Сам портировать на m1280 убоялся так как и времени не было, и не Юра(64 знак., 25.07.2013 10:05, )
- на CM3-TnKernel делаю DTMF-декодирование. Занимает 30% процессорного времени. + обеспечивается PCM-поток по SSP. Как это совместить на MainLoop даже не представляю (если только алгоритм DTMF дробить до 8 байт ). А в RTOS на SSP максимальный MegaJohn(50 знак., 25.07.2013 01:37)
- немного приврал. DTMF - не 30% а 3%. А 30% это алгоритм переноса спектра голоса. Вообщем, тоже операция блочная и рвать на маленькие части ради MainLoop не хочется - MegaJohn(26.07.2013 08:19)
- Интересно, какой размер стека Вы выделили для DTMF декодера? - Evgeny_CD(25.07.2013 21:52)
- временные буферы на куче. Вот этот проект[>] - MegaJohn(26.07.2013 08:14, ссылка)
- Говорят в PIC16 DTMF декодировали...в 1-2 кБ помещалось...А у вас на CM3 - 30% это занимает...Какая частота кстати и МК? Apтём(289 знак., 25.07.2013 02:24 - 03:56)
- В пике копеечный корелляционный алгоритм. А в арме - неверняка Герцель. Вещи из разных плоскостей как по ресурсам так и по результату - 1111111(25.07.2013 09:23)
- угу, Герцель. Гдето на сахаре давал ссылку на готовый код - MegaJohn(26.07.2013 08:08)
- Для начала нужно перестать сравнивать кислое с красным. Объём памяти и количество процессорного времени суть разные понятия. - =AlexD=(25.07.2013 07:30)
- В пике копеечный корелляционный алгоритм. А в арме - неверняка Герцель. Вещи из разных плоскостей как по ресурсам так и по результату - 1111111(25.07.2013 09:23)
- А если светодиодами дрыгать, то да - RTOS не нужен - MegaJohn(25.07.2013 01:39)
- Можно ли жить на Main Loop, если какая-то периферия требует долгих таймаутов при обмене? Например: Ксения(830 знак., 24.07.2013 23:55)
- Берете библиотеку Protothreads и пишете как ни в чем не бывало. Скрипач(308 знак., 25.07.2013 19:52 - 22:05, ссылка)
- я cделал проще - выделил по таймеру на задачу, в диспетчере (или в начале задачи перед PT_BEGIN) синхронно с глобальным 1мс-флагом - декремент. В результате задержка сводится к макросу: zeleny(95 знак., 28.07.2013 23:58)
- Можно и так. Из плюсов: лучше себя ведет в пошаговой отладке. Еще лучше - отдельный массив таймеров, как у Мазура. Таймеров задаче может понадобится несколько. Всякий раз править код "перед PT_BEGIN"...не халяльно. Скрипач(152 знак., 29.07.2013 00:09 - 00:11)
- Пока делаю так: шаг увеличивается в задачах созданием дополнительных счетчиков в ОЗУ и инкрементированием с заданным шагом. Вообще интересный вопрос. Спасибо что подняли его. Уже появилась идея. Массив таймеров из трехбайтных блоков остается. mazur(539 знак., 29.07.2013 08:39 - 08:43)
- много таймеров нужно очень редко, в 99% случаев хватает 1го, 16-битного. Нужно больше - как уже писал, перед PT_BEGIN обрабатывается все специфичное для данной задачи. - zeleny(29.07.2013 00:27)
- Можно и так. Из плюсов: лучше себя ведет в пошаговой отладке. Еще лучше - отдельный массив таймеров, как у Мазура. Таймеров задаче может понадобится несколько. Всякий раз править код "перед PT_BEGIN"...не халяльно. Скрипач(152 знак., 29.07.2013 00:09 - 00:11)
- А не Timer-Timestamp? А не uint16? - Юра(25.07.2013 22:42, )
- Злые вы :))) - Скрипач(25.07.2013 22:43)
- А не надо секасом на площади заниматься :-) - amusin(25.07.2013 22:50)
- Злые вы :))) - Скрипач(25.07.2013 22:43)
- а где "staic"? - Гудвин(25.07.2013 21:16)
- Упс. добавил. - Скрипач(25.07.2013 22:04)
- А операцию вычитание в еще одни скобки взять не хотите? :) - rezident(25.07.2013 22:13)
- Тогда и YIELD'у нужно ссылку на контекст передать. А еще, готовый PT_WAIT_UNTIL есть. Скрипач(986 знак., 25.07.2013 22:26)
- +1 :) - Evgeny_CD(25.07.2013 22:20)
- А операцию вычитание в еще одни скобки взять не хотите? :) - rezident(25.07.2013 22:13)
- Упс. добавил. - Скрипач(25.07.2013 22:04)
- я cделал проще - выделил по таймеру на задачу, в диспетчере (или в начале задачи перед PT_BEGIN) синхронно с глобальным 1мс-флагом - декремент. В результате задержка сводится к макросу: zeleny(95 знак., 28.07.2013 23:58)
- Проблема пробок на автотрассе из-за того, что какие-то участники движения едут, как черепахи, решается не светофорами, а обеспечением возможности ОБГОНА! Поскольку перед черпахами дофига свободной дороги. Main loop подобна этой автотрассе - пробки Ксения(335 знак., 25.07.2013 13:34 - 13:36)
- Есть такой трюк, как несколько лупов поменьше, в прерываниях таймеров с соответствующими приоритетами и вложениями. Одна беда - на AVR этот трюк не катит ;) - Vladimir Ljaschko(25.07.2013 16:42)
- Несколько заЛупов поменьше - имитация RTOS. Нафиг. При производительности современных камней... Слушайте, может мы к DOS вернемся. Она уж на Атомах точно летать будет. - tesla(29.07.2013 00:33)
- Вполне катит и на АВР - в медленном таймерном прерывании разрешаются вложенные прерывания (чтобы могло работать быстрое таймерное прерывание), в быстром таймерном прерывании через сколько-то раз разрешается медленное таймерное прерывание. Таких Apтём(53 знак., 25.07.2013 16:48)
- Ага, лёгкое извращение. - Vladimir Ljaschko(25.07.2013 17:05)
- Малая скорость это не помеха. Ехали бы 50 км/ч за пенсионером - уже хорошо. Помеха - нет разгонных полос при въездах(съездах) на магистрали. - Юра(25.07.2013 16:04, )
- никогда вообще в своих программах не использовал задержек, и все таймауты прекрасно формируются - AVF(25.07.2013 14:24)
- Ну о чем и речь. Процедура вывода символов проверяет, истекло ли время ожидания. Если не истекло - сразу выход в Main Loop. Если истекло - выводим символ, выставляем новое значение таймаута и выходим опять же в Main Loop. - LightElf(25.07.2013 13:42)
- Здрасти! Пауза же не в конце процедуры стоит, а после КАЖДОГО выведенного на дисплей символа впадает в ожидание. Если я при первом же ожидании в Main loop вернусь, то следующие цифры никогда не будут прописаны. - Ксения(25.07.2013 15:19)
- Где-то у вас что-то не продумано. Koyodza мне подсказал этот способ. Создается буфер. Скажем, 20x4=80 байт. Пусть раз в 1 мс выводим посимвольно из буфера на дисплей. При 20x4 обновление всего экрана 84 мс. 80 символов, 4 адреса строк. Я мог бы mazur(175 знак., 25.07.2013 16:03, youtube)
- И вам не хворать :) LightElf(202 знак., 25.07.2013 15:48 - 15:55)
- Можно и всю строку выводить, но тогда очиску FIFO можно поручить таймерному прерыванию, которое будет за один вызов писать один символ на экран. - Apтём(25.07.2013 19:46)
- А как быть, если в начале/конце строки есть дополнительная работа (например, на очистку экрана) с особо большой задержкой? Тогда таймирование подравнивать под эту большую задержку, чтобы было поровну, или ту большую задержку разбивать на много Ксения(17 знак., 25.07.2013 19:11)
- Ну вот как-то примерно так. lcd_put просто складывает строку в буфер fifo. lcd_poll вызывается из main loop. LightElf(1581 знак., 26.07.2013 13:29 - 13:44)
- В вашем случае FIFO - это означает, что отправка символьных сообщений происходит всегда из одного места? Не проще ли работать с буфером символьного дисплея? Мне как показал Koyodza этот способ, я даже семисегментники перевел на этот способ. С mazur(34 знак., 26.07.2013 14:51)
- Ну нет, lcd_put можно из разных мест звать. С буфером в моем случае не лучший вариант. Текст для дисплея (кроме нескольких сообщений об ошибках) поступает снаружи устройства и содержит вперемешку еще всякие дополнительные коды (команды контроллера LightElf(205 знак., 26.07.2013 15:07)
- 1 - В том-то и прикол, что с буфером без разницы с чем работать. Это независимый модуль. А модули устройств уже из буфера отправляют символы. Все независимо. Как в вашем FIFO определить знакоместа символов? Вот я хочу отправить на 1 строку, mazur(66 знак., 26.07.2013 15:31)
- У меня ни текст, ни его форматирование, ни спецэффекты, ни тип дисплея неизвестны на этапе компиляции прошивки. - LightElf(26.07.2013 16:18 - 16:31)
- В смысле? Как это неизвестны? Как вы пишете тогда программу, если вам неизвестно с чем вы работаете, какие возможности вам доступны. Спецэффекты бесполезны в случае знакосинтезирующих дисплеев и семисегментников. - mazur(26.07.2013 16:39)
- Я пишу программу, которая будет работать с любым дисплеем, имеющим интерфейс типа HD44780. Я не знаю заранее его разрешение (от 1x8 до 4x40), конкретную кодировку и все такое прочее (у VFD от Futaba кодировка вообще левая, дисплеи от МЭЛТ работают LightElf(284 знак., 26.07.2013 17:28 - 17:31)
- Хочу заметить, что вы с mazur-ом о разных уровнях абстракции беседуете. - rezident(26.07.2013 17:36)
- Ну, Ксения о конкретной проблеме заикнулась. Что у нее проблемы с задержками при работе с дисплеем. Мои соображения, что она говорила о модуле для работы с конкретным дисплеем. Поэтому, если упоминаются разные уровни абстракции, то получается, что mazur(177 знак., 26.07.2013 18:17)
- Наверно. Мое дело - плата с прошивкой. Кто-то подключит к ней какой-то дисплей. Кто-то другой напишет управляющий софт (на сервере). Кто-то третий придумает выводимый текст. Желательно, чтобы все эти "кто-то" не парили каждый раз мозг мне :) - LightElf(26.07.2013 17:49)
- Хочу заметить, что вы с mazur-ом о разных уровнях абстракции беседуете. - rezident(26.07.2013 17:36)
- Я пишу программу, которая будет работать с любым дисплеем, имеющим интерфейс типа HD44780. Я не знаю заранее его разрешение (от 1x8 до 4x40), конкретную кодировку и все такое прочее (у VFD от Futaba кодировка вообще левая, дисплеи от МЭЛТ работают LightElf(284 знак., 26.07.2013 17:28 - 17:31)
- В смысле? Как это неизвестны? Как вы пишете тогда программу, если вам неизвестно с чем вы работаете, какие возможности вам доступны. Спецэффекты бесполезны в случае знакосинтезирующих дисплеев и семисегментников. - mazur(26.07.2013 16:39)
- У меня ни текст, ни его форматирование, ни спецэффекты, ни тип дисплея неизвестны на этапе компиляции прошивки. - LightElf(26.07.2013 16:18 - 16:31)
- 1 - В том-то и прикол, что с буфером без разницы с чем работать. Это независимый модуль. А модули устройств уже из буфера отправляют символы. Все независимо. Как в вашем FIFO определить знакоместа символов? Вот я хочу отправить на 1 строку, mazur(66 знак., 26.07.2013 15:31)
- Ну нет, lcd_put можно из разных мест звать. С буфером в моем случае не лучший вариант. Текст для дисплея (кроме нескольких сообщений об ошибках) поступает снаружи устройства и содержит вперемешку еще всякие дополнительные коды (команды контроллера LightElf(205 знак., 26.07.2013 15:07)
- В вашем случае FIFO - это означает, что отправка символьных сообщений происходит всегда из одного места? Не проще ли работать с буфером символьного дисплея? Мне как показал Koyodza этот способ, я даже семисегментники перевел на этот способ. С mazur(34 знак., 26.07.2013 14:51)
- Я начинаю понимать, что мне придется просто свой исходник привести, бо косноязычен зело и описать словами не могу. - LightElf(26.07.2013 12:17)
- Про какой дисплей вы говорите? Если взять ЖКИ на HD44780, то команда очистки 1,5 мс. Установили таймер, новое состояние автомата, новую точку входа прототреда, вышли. Делаете свои дела дальше. При следующей итерации проверка таймера. Время вышло? mazur(360 знак., 25.07.2013 20:16 - 20:19, youtube)
- Ну вот как-то примерно так. lcd_put просто складывает строку в буфер fifo. lcd_poll вызывается из main loop. LightElf(1581 знак., 26.07.2013 13:29 - 13:44)
- Здрасти! Пауза же не в конце процедуры стоит, а после КАЖДОГО выведенного на дисплей символа впадает в ожидание. Если я при первом же ожидании в Main loop вернусь, то следующие цифры никогда не будут прописаны. - Ксения(25.07.2013 15:19)
- Никакого тупика. Решение для обгона есть, но вы его упорно игнорируете -> - SciFi(25.07.2013 13:41, ссылка)
- Есть такой трюк, как несколько лупов поменьше, в прерываниях таймеров с соответствующими приоритетами и вложениями. Одна беда - на AVR этот трюк не катит ;) - Vladimir Ljaschko(25.07.2013 16:42)
- Я пользую timer.c, честно выкушенный из стека uIP - неблокирующиеся софтверные таймеры. - LightElf(25.07.2013 13:16)
- элементарно (автомат состояний), но оно надо? сделайте один проект под ось, потом будете просто задачи добавлять/менять - AVF(25.07.2013 13:15)
- Странно это слышать от вас. Да запросто это сделать в программе Main Loop. Стараюсь писать свои программы без долгих зацикливаний. Потихоньку перетаскиваю этот принцип на си. К примеру ваш пример. С дисплеем. mazur(3447 знак., 25.07.2013 05:55 - 06:23, youtube)
- А если, к примеру, у вас Proc_Heat_Init_2 ожидания не дождется ("один год"), то у вас вся Main loop от этого в пробку встанет? - Ксения(25.07.2013 13:23)
- Вы про программный косяк или как работает Proc_Timer? Или про то, что RTOS по времянке или завершению задачи переключится на другую? mazur(838 знак., 25.07.2013 15:22 - 15:35)
- А если, к примеру, у вас Proc_Heat_Init_2 ожидания не дождется ("один год"), то у вас вся Main loop от этого в пробку встанет? - Ксения(25.07.2013 13:23)
- при нличии свободного счётчика - запросто. Д.ARMоед(478 знак., 25.07.2013 01:31)
- Это не поможет. Число на дисплее приходится обновлять каждую секунду, а беда в том, что почти половину из этой секунды пожирает Display_Step(). Причем расходуется не на дело, а на таймауты. Не будь этих таймаутов, то Display_Step() можно было хоть Ксения(318 знак., 25.07.2013 13:05)
- Поможет. Display_Step() рубить нельзя. Д.ARMоед(829 знак., 25.07.2013 14:14)
- -> SciFi(82 знак., 25.07.2013 13:07, ссылка, ссылка)
- Смотрела уже, но пока не в восторге. Буду разбираться, в какой код это выливается. Чудес не бывает, protothreads это или нет, должна быть идея о том, как это делается. Последнее дело тыкать пальцем в чужие библиотеки, полагая, что те делают дело Ксения(26 знак., 25.07.2013 13:14)
- Уже обсуждалось -> SciFi(726 знак., 25.07.2013 13:28, ссылка)
- Это же всего лишь набор макросов, нет там ничего сверхестественного. - =AlexD=(25.07.2013 13:27)
- Но какая-то кривота в них чуствуется. - Apтём(25.07.2013 15:51)
- Смотрела уже, но пока не в восторге. Буду разбираться, в какой код это выливается. Чудес не бывает, protothreads это или нет, должна быть идея о том, как это делается. Последнее дело тыкать пальцем в чужие библиотеки, полагая, что те делают дело Ксения(26 знак., 25.07.2013 13:14)
- Это не поможет. Число на дисплее приходится обновлять каждую секунду, а беда в том, что почти половину из этой секунды пожирает Display_Step(). Причем расходуется не на дело, а на таймауты. Не будь этих таймаутов, то Display_Step() можно было хоть Ксения(318 знак., 25.07.2013 13:05)
- Как вам таймаут в один год? :) - Скрипач(25.07.2013 00:36)
- Да не вопрос! А лучше сразу 10 :-) SciFi(41 знак., 25.07.2013 08:41)
- У меня есть алгоритмы с задержкой 1год :) Работают. Нужно только озаботится сохранением значения таймеров при пропадании питания. - Скрипач(25.07.2013 08:53)
- попросить юзера продлить лицензию? :> - Snaky(25.07.2013 08:58)
- У меня есть алгоритмы с задержкой 1год :) Работают. Нужно только озаботится сохранением значения таймеров при пропадании питания. - Скрипач(25.07.2013 08:53)
- Да не вопрос! А лучше сразу 10 :-) SciFi(41 знак., 25.07.2013 08:41)
- Решение возможно: испльзуйте конечные автоматы (так кажется называлось), оно же - автоматное программирование. Apтём(227 знак., 25.07.2013 00:08)
- Очевидно, вы не в курсе, что существует protothreads. Как и многие из нижеподписавшихся, впрочем. - SciFi(24.07.2013 23:57)
- co-routines от FreeRTOS то же самое что protothreads? - _VVB(27.07.2013 16:17, )
- Ага. Только в FreeRTOS приделали ещё и некий планировщик для них. - SciFi(27.07.2013 16:53)
- co-routines от FreeRTOS то же самое что protothreads? - _VVB(27.07.2013 16:17, )
- посмотрите protothreads - Vit(24.07.2013 23:57)
- Берете библиотеку Protothreads и пишете как ни в чем не бывало. Скрипач(308 знак., 25.07.2013 19:52 - 22:05, ссылка)
- "Специалист подобен флюсу - полнота его одностороняя". Идеализм с полновытесняющей RTOS доступен только в толстых системах. Подход "без ОСи" достоин сжигания. Evgeny_CD(1332 знак., 24.07.2013 22:16)
- Напомнило (ссылка). "Опытный программист" :) Скрипач(121 знак., 25.07.2013 19:45, ссылка)
- Ни разу ни так. Если ОСь сложнее совокупности решаемых под ее управлением задача во всей совокупности классов устройств, в которых использована ОС - тогда, может что-то и неверно. - Evgeny_CD(25.07.2013 20:19)
- Чтобы прикладной код не менялся вообще!(C) - завсегда борюсь за это. Пока кооперативок хватает. - Vit(25.07.2013 12:25)
- "Подход "без ОСи" достоин сжигания" а какую ось использовать для написания ОСи или драйвера к ней, г-н Великий Инквизитор? - Codavr(25.07.2013 12:19)
- Это была жалкая перепевка одной из прибауток fk0. Суть в следующем. Evgeny_CD(305 знак., 25.07.2013 12:22)
- Ващета это суть операционных систем ВООБЩЕ. Главная причина по которой их придумали :) - Codavr(25.07.2013 12:32)
- Это была жалкая перепевка одной из прибауток fk0. Суть в следующем. Evgeny_CD(305 знак., 25.07.2013 12:22)
- В кооперативной ОС локальные переменные задачи зачастую надо объявлять static. В вытесняющей это не нужно. - amusin(24.07.2013 23:02)
- Рискую быть закиданным тапкам, но локальные переменные вообще зло в embedded мире. Все больше и больше прихожу к такому выводу. Evgeny_CD(308 знак., 25.07.2013 20:28)
- зло - только в тех местах, где нужна реентрантность или потокобезопасность, или обе вместе. а чтобы предложенная abc_loc в таких местах не глючила, ещё нужно поработать. да, и "хочешь быть джинном - получи всё что причитается" - тяжёлый GC или Д.ARMоед(20 знак., 25.07.2013 21:57)
- Смарт ptr бегут нам на помощь... С++ форЁва, похоже. - Evgeny_CD(25.07.2013 22:02)
- пока знаю один вменяемый рисёчЬ без GC и кучи помошников. Д.ARMоед(25.07.2013 22:39)
- А мы еще знаем Ironclad C++, a library-augmented type-safe subset of C++ Evgeny_CD(25.07.2013 22:50)
- ужас. процу больше делать нечего, кроме как pointer lifetime invariant вычислять. но занятно. - Д.ARMоед(25.07.2013 23:28)
- Хвастаются относительно низкими оверхедами. - Evgeny_CD(25.07.2013 23:44)
- да, я посмотрел бенчи; но такое чувство, что где-то
нннабманули. - Д.ARMоед(25.07.2013 23:54)- Понятно где - я вот исходники так и не смог найти. Или это я ступил? - Evgeny_CD(25.07.2013 23:55)
- понять академические вещи по исходнику довольно сложно. часто присутствует глубокая оптимизация. и кроме гуроватости в цэпепе надо быть ещё и телепатом. - Д.ARMоед(26.07.2013 00:06)
- Я про другое. Бумаги они написали. А вот кода в паблике я пока не нашел. Или плохо искал? Некоторые их идеи мне показались интересными для того, чтобы рискнуть в С++ коде поковыряться... - Evgeny_CD(26.07.2013 00:17)
- почему-то на страничке одного из авторов этот айронклад связан с прототипом под другим именем - Д.ARMоед(26.07.2013 00:49, ссылка, ссылка)
- Да, но оно тут чуть другое. Full Memory Safety for C Но сорцы есть, это радует. - Evgeny_CD(26.07.2013 00:54)
- может ребрендинг происходит? - Д.ARMоед(26.07.2013 00:57)
- Или разборка вчерашних соратников, что более вероятно :) - Evgeny_CD(26.07.2013 00:58)
- может ребрендинг происходит? - Д.ARMоед(26.07.2013 00:57)
- Да, но оно тут чуть другое. Full Memory Safety for C Но сорцы есть, это радует. - Evgeny_CD(26.07.2013 00:54)
- почему-то на страничке одного из авторов этот айронклад связан с прототипом под другим именем - Д.ARMоед(26.07.2013 00:49, ссылка, ссылка)
- Я про другое. Бумаги они написали. А вот кода в паблике я пока не нашел. Или плохо искал? Некоторые их идеи мне показались интересными для того, чтобы рискнуть в С++ коде поковыряться... - Evgeny_CD(26.07.2013 00:17)
- понять академические вещи по исходнику довольно сложно. часто присутствует глубокая оптимизация. и кроме гуроватости в цэпепе надо быть ещё и телепатом. - Д.ARMоед(26.07.2013 00:06)
- Понятно где - я вот исходники так и не смог найти. Или это я ступил? - Evgeny_CD(25.07.2013 23:55)
- да, я посмотрел бенчи; но такое чувство, что где-то
- Хвастаются относительно низкими оверхедами. - Evgeny_CD(25.07.2013 23:44)
- А еще есть ANSI/ISO C Specification Language -> и его реализация... - Evgeny_CD(25.07.2013 22:59, ссылка)
- ужас. процу больше делать нечего, кроме как pointer lifetime invariant вычислять. но занятно. - Д.ARMоед(25.07.2013 23:28)
- А мы еще знаем Ironclad C++, a library-augmented type-safe subset of C++ Evgeny_CD(25.07.2013 22:50)
- пока знаю один вменяемый рисёчЬ без GC и кучи помошников. Д.ARMоед(25.07.2013 22:39)
- Смарт ptr бегут нам на помощь... С++ форЁва, похоже. - Evgeny_CD(25.07.2013 22:02)
- Лови тапок за чрезмерное обобщение. Нет, сапог. Тяжёлый :-) - SciFi(25.07.2013 20:31)
- За уменьшение потребления памяти в разы - сапогом? - Evgeny_CD(25.07.2013 20:54)
- какой такой памяти, если локальные переменные почти все на регистрах? - Mahagam(26.07.2013 00:06)
- Вот и будет прога "почти работать", если не учитывать тонкие эффекты локальных переменных. - Evgeny_CD(26.07.2013 00:18)
- Регистров не хватит на все локальные. - Apтём(26.07.2013 00:16)
- ну так в стек - только излишки. а если всё выделять отдельно - жирно будет - Mahagam(26.07.2013 00:18)
- какой такой памяти, если локальные переменные почти все на регистрах? - Mahagam(26.07.2013 00:06)
- За уменьшение потребления памяти в разы - сапогом? - Evgeny_CD(25.07.2013 20:54)
- зло - только в тех местах, где нужна реентрантность или потокобезопасность, или обе вместе. а чтобы предложенная abc_loc в таких местах не глючила, ещё нужно поработать. да, и "хочешь быть джинном - получи всё что причитается" - тяжёлый GC или Д.ARMоед(20 знак., 25.07.2013 21:57)
- Рискую быть закиданным тапкам, но локальные переменные вообще зло в embedded мире. Все больше и больше прихожу к такому выводу. Evgeny_CD(308 знак., 25.07.2013 20:28)
- Напомнило (ссылка). "Опытный программист" :) Скрипач(121 знак., 25.07.2013 19:45, ссылка)
- Использую две крайности: Big-Loop и Linux. Впечатления. Скрипач(392 знак., 24.07.2013 19:13)
- Вот. Хорошо сказал. - Codavr(24.07.2013 19:28)
- когда количество состояний автомата разрастется до спагетти-кода, тогда придете к пониманию полезности хотя бы Protothreads - zeleny(24.07.2013 19:20)
- А вот Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес говорят что, в таких случаях, нужно использовать
наследованиеполиморфизм. Кому верить? :) - Скрипач(24.07.2013 19:35 - 19:38)- при чем тут ООП и полиморфизм ? - zeleny(24.07.2013 20:21)
- И каким боком Прототридс стали RTOS, умник? - Скрипач(24.07.2013 19:23)
- ну как минимум позволяет выполнять параллельно несколько задач: останавливать/запускать/переключаться/создавать новые процесы. В расширениях етсь мьютексы и прочая разная хрень. Минимальный планировщик с синхронизацией и таймерами - сотня строк. zeleny(284 знак., 24.07.2013 19:25 - 19:31)
- Прототридс я использую много, но от этого Big-Loop не становится <R>eal <T>ime OS (под которой топик-стартер однозначно понимает ВЫТЕСНЯЮЩУЮ многозадачность, а не кооперативную) Скрипач(53 знак., 24.07.2013 19:31)
- Смотря что понимать под "Real". Если устраивает минимальный tick в 20..30мкс, то вполне себе Real. - zeleny(24.07.2013 19:34)
- В сад. - Скрипач(24.07.2013 19:36)
- Смотря что понимать под "Real". Если устраивает минимальный tick в 20..30мкс, то вполне себе Real. - zeleny(24.07.2013 19:34)
- Прототридс я использую много, но от этого Big-Loop не становится <R>eal <T>ime OS (под которой топик-стартер однозначно понимает ВЫТЕСНЯЮЩУЮ многозадачность, а не кооперативную) Скрипач(53 знак., 24.07.2013 19:31)
- ну как минимум позволяет выполнять параллельно несколько задач: останавливать/запускать/переключаться/создавать новые процесы. В расширениях етсь мьютексы и прочая разная хрень. Минимальный планировщик с синхронизацией и таймерами - сотня строк. zeleny(284 знак., 24.07.2013 19:25 - 19:31)
- А вот Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес говорят что, в таких случаях, нужно использовать
- Кстати, в тему: по ссылке рассказано, как устроен стек в RTOS RTX166 Tiny. В двух словах: все потоки делят общее пространство стека, при переключении контекста стек активной задачи сдвигается, освобождая место для следующей. Креативненько! SciFi(123 знак., 24.07.2013 16:38, ссылка)
- Ну вроде как во FreeRTOS на C8051F как-то похоже. Там при переключении задачи ее стек копируется в XRAM. Соответственно указатель на локальную переменную становится своеобразной сущностью. - LightElf(25.07.2013 14:03)
- Мысль гениальная, но очень стремная при использовании "где попало". Evgeny_CD(895 знак., 24.07.2013 21:53)
- Есть подвох: поскольку стек "ползает", нельзя использовать указатели на локальные переменные, например sprintf(local_buf, ...). Ну и что там с прерываниями, когда стек копируется, - не помню. - SciFi(24.07.2013 23:24)
- Черт, счастье было так близко... - Evgeny_CD(25.07.2013 11:57)
- Сегментные регистры их бы спасли. - poe(25.07.2013 10:49, )
- Есть подвох: поскольку стек "ползает", нельзя использовать указатели на локальные переменные, например sprintf(local_buf, ...). Ну и что там с прерываниями, когда стек копируется, - не помню. - SciFi(24.07.2013 23:24)
- Не могли бы разъяснить "стек активной сдвигается"? Пока мои представления о RTOS такие: есть 5 задач, есть жестко отведенные 5 массивов под стек. Как стек можно сдвинуть, не представляю. - mazur(24.07.2013 16:52)
- Там на картинке нарисовано. Сдвигается == копируется. Конечный результат состоит в том, что не нужно каждому потоку давать стек с запасом: запас общий для всех потоков. Востребованная фича, на мой взгляд. - SciFi(24.07.2013 16:54)
- Куда копируется? В ОЗУ? Тогда в чём экономия? - Apтём(24.07.2013 16:56)
- На мой взгляд, там всё достаточно понятно написано и нарисовано. Хватит тормозить. - SciFi(24.07.2013 17:12)
- Куда копируется? В ОЗУ? Тогда в чём экономия? - Apтём(24.07.2013 16:56)
- Там на картинке нарисовано. Сдвигается == копируется. Конечный результат состоит в том, что не нужно каждому потоку давать стек с запасом: запас общий для всех потоков. Востребованная фича, на мой взгляд. - SciFi(24.07.2013 16:54)
- А чо тут холиварить. На небольших задачах и слабом железе ось нахер не надо и не лезет. А на больших задачах (слабое железо тут не канает автоматом) петля автоматически перерастет в ось. Остается определиться взять готовую или в муках рожать свою. Codavr(140 знак., 24.07.2013 16:34)
- ты не поверишь. Но для слабого железа PIC10(нет прерываний и аппаратный стек глубиной 2) ртос это палочка-выручалочка. - abivan(24.07.2013 17:14, ссылка)
- Первый раз познакомился с RTOS на железе PIC24(очень понравилось разбиение на задачи и читаемость кода), затем перенес проект Main Loop на железе Mega8 на RTOS. Это я про то, что слабое железо - это все относительно. - Dany(24.07.2013 16:57)
- И что за великие дела потребовали РТОСа на 8 меге? Особенно забавно на ей поробовать под управлением RTOS чонить с плавающей точкой сосчитать :) - Codavr(24.07.2013 18:53 - 19:32)
- Дела обыденные(такты считать нет нужды), структурирование кода в разрезе задач понравилось, поэтому при оказии Main Loop был заменен на RTOS. - Dany(25.07.2013 10:40)
- Есть проблемы float посчитать? Какие? - Apтём(24.07.2013 19:45)
- Есть проблема всунуть туда кроме оси и библиотек для плавучки еще чонить полезное. А других проблем нет. - Codavr(24.07.2013 19:48)
- А, понятно - места мало... - Apтём(24.07.2013 19:56)
- Есть проблема всунуть туда кроме оси и библиотек для плавучки еще чонить полезное. А других проблем нет. - Codavr(24.07.2013 19:48)
- И что за великие дела потребовали РТОСа на 8 меге? Особенно забавно на ей поробовать под управлением RTOS чонить с плавающей точкой сосчитать :) - Codavr(24.07.2013 18:53 - 19:32)
- я не представлюю для себя программирования без ртос. К хорошему быстро привыкаешь. Использую ртос всегда и везде для задачи любой сложности. Кооперативка не требует много ресурсов. abivan(1488 знак., 24.07.2013 14:38)
- при размещении кода во флеши удаление задачи это примерно то же что "дверь бывает открыта, закрыта, ...и незакрыта"(С) - Vit(24.07.2013 16:10)
- Ну и что? Идея не в экономии флеши, а в удобстве проектирования - Alex B.(24.07.2013 17:02)
- Экономить тут точно нечего, о том-то и речь. Считаю мелкие самоликвидирующиеся задачи примером того как не стОит
проектироватьделать, если на то нет явной необходимости. - Vit(24.07.2013 18:24)- Для ликвидируемых задач, если одна заменяется на другую, выгодно использовать один стек. - amusin(24.07.2013 21:08)
- наверно. интересно, а при такой замене какие проверки делаются? - Vit(24.07.2013 21:48)
- Проверки чего? Задача создается, ей как обычно подсовывается начало/конец (смотря куда растет указатель) массива, выделенного под стек. - amusin(24.07.2013 21:54)
- а если уже создана? а если закрываемая осталась в очередях? - Vit(24.07.2013 22:40)
- 1. Я же четко прописал - одна задача вместо другой. Т.е. старая удаляется, новая после этого создается. amusin(194 знак., 24.07.2013 22:46)
- 1) если задача уже создана, то что? 2) ну там отложенные запуски всякие - тем очередям никуа не передашь - они глухие, потому форс низзя просто так. Убиваться нужно уметь. Этот риплейс только для команды из одного программера. - Vit(24.07.2013 22:58)
- Как правило, при создании задачи планировщик не запускается, поэтому можно спокойненько создать задачу из той, которую собрался придушить. Перед тем как. Alex B.(115 знак., 24.07.2013 23:30)
- 1. Создавать и удалять задачи из одного места (из одной задачи-менеджера), и не будет лебедя, рака и щуки. amusin(181 знак., 24.07.2013 23:14)
- во-вторых, я о том, что не поделки не только позволяют реализовать хорошие идеи, но и требуют не всегда заметных накладных при реализации. а во-первых, ещё раз повторюсь, считаю убиение не такой концептуально простой штукой, чтобы постоянно Vit(300 знак., 24.07.2013 23:37)
- создание и удаление задач использую штатно в большинстве больших проектов. abivan(827 знак., 25.07.2013 09:46)
- во-вторых, я о том, что не поделки не только позволяют реализовать хорошие идеи, но и требуют не всегда заметных накладных при реализации. а во-первых, ещё раз повторюсь, считаю убиение не такой концептуально простой штукой, чтобы постоянно Vit(300 знак., 24.07.2013 23:37)
- 1) если задача уже создана, то что? 2) ну там отложенные запуски всякие - тем очередям никуа не передашь - они глухие, потому форс низзя просто так. Убиваться нужно уметь. Этот риплейс только для команды из одного программера. - Vit(24.07.2013 22:58)
- 1. Я же четко прописал - одна задача вместо другой. Т.е. старая удаляется, новая после этого создается. amusin(194 знак., 24.07.2013 22:46)
- а если уже создана? а если закрываемая осталась в очередях? - Vit(24.07.2013 22:40)
- Проверки чего? Задача создается, ей как обычно подсовывается начало/конец (смотря куда растет указатель) массива, выделенного под стек. - amusin(24.07.2013 21:54)
- наверно. интересно, а при такой замене какие проверки делаются? - Vit(24.07.2013 21:48)
- Для ликвидируемых задач, если одна заменяется на другую, выгодно использовать один стек. - amusin(24.07.2013 21:08)
- Экономить тут точно нечего, о том-то и речь. Считаю мелкие самоликвидирующиеся задачи примером того как не стОит
- Ну и что? Идея не в экономии флеши, а в удобстве проектирования - Alex B.(24.07.2013 17:02)
- +1. тоже подсел на оси. - AVF(24.07.2013 15:39)
- +1 - Dany(24.07.2013 15:08)
- при размещении кода во флеши удаление задачи это примерно то же что "дверь бывает открыта, закрыта, ...и незакрыта"(С) - Vit(24.07.2013 16:10)
- Если надо проектом один программер работает, не используя никакого стороннего кода (а вероятность дальнейшей поддержки другим программером очень низка) - то пофигу. Alex B.(1397 знак., 24.07.2013 14:26)
- Без RTOS в мигании светодиода на плате появляется заметный на глаз джиттер при более-менее заметной нагрузке другими задачами. - =AlexD=(24.07.2013 14:18)
- Все фигня, RTOS действительно нужна только в одном случае - когда нужно рвать выполнение из чужих пакетов. Например, файловой системы. При наличии навыков все отлично пишется рвано, еще и даром логичное разбиение на модули :) - Vladimir Ljaschko(24.07.2013 13:45)
- Наш человек :-) - SciFi(24.07.2013 13:48)
- Это я еще про "полный контроль" не начинал ;) - Vladimir Ljaschko(24.07.2013 13:57)
- И что с "полным контролем"? Где-то его нет или слишком много? - Apтём(24.07.2013 16:04)
- Ну естественно, на С без RTOS полный контроль, а RTOS - не полный контроль :) Если серьезно Vladimir Ljaschko(498 знак., 24.07.2013 18:41)
- нет не полный. Полный АСМ. Нельзя быть частично беременным :-) Вы уж определитесь, либо удобство в разарботке, либо полный контроль. - abivan(25.07.2013 10:27)
- Времена меняются, теперь С = полный контроль :) - Vladimir Ljaschko(25.07.2013 19:37)
- с чего это, или оптимизацию отменили и глюков в компиляторах больше нет? Даже изменение одной строчки кода может привести к подвижкам адресации переменных и как следствие может проявится ошибка в ПО(порча памяти, например) которая до этого не abivan(137 знак., 26.07.2013 11:24)
- Ну не знаю, подобные эффекты бывает происходят в новом проекте, но потом как-то все притирается, даже с полной оптимизацией часто вношу исправления и отправляю заказчику без проверки. - Vladimir Ljaschko(26.07.2013 12:59)
- если после изменения строчки кода появляются баги, то в 99.99% случаев виноваты кривые ручонки, а не компилятор или ещё что. - Mahagam(26.07.2013 12:08)
- Что никак не умаляет важность тестирования. Кривые руки - факт жизни. Только в далёком светлом будущем кривизна рук будет побеждена методами генетики :-) - SciFi(26.07.2013 13:46)
- Сталкивался с подобным лет 10 назад в профессиональных контроллерах PIC16F877 + компилятор HiTech. Из-за его сегментов во флэшь и ОЗУ. Программа с включённой оптимизацией занимала около 90% флэшь. Так вот там перестановка местами функций в файле VAI(100 знак., 26.07.2013 12:35)
- т.е. расслабился. теперь все под контролем техасских инструментов:-) - abivan(26.07.2013 12:48)
- теперь под контролем ARM. :-) А ПИКи вспоминаю - и волосы дыбом встают... - VAI(26.07.2013 16:18)
- т.е. расслабился. теперь все под контролем техасских инструментов:-) - abivan(26.07.2013 12:48)
- с чего это, или оптимизацию отменили и глюков в компиляторах больше нет? Даже изменение одной строчки кода может привести к подвижкам адресации переменных и как следствие может проявится ошибка в ПО(порча памяти, например) которая до этого не abivan(137 знак., 26.07.2013 11:24)
- Времена меняются, теперь С = полный контроль :) - Vladimir Ljaschko(25.07.2013 19:37)
- а потом надо всунуть какой-нить долгосчитающийся алгоритм и всё рассыпается. ага. - Mahagam(24.07.2013 19:00)
- Угу, не поспоришь. - Vladimir Ljaschko(24.07.2013 19:26)
- нет не полный. Полный АСМ. Нельзя быть частично беременным :-) Вы уж определитесь, либо удобство в разарботке, либо полный контроль. - abivan(25.07.2013 10:27)
- "полный контроль" поставляется в комплекте с "ведром компрессии" :) - ыыыы(24.07.2013 16:34)
- Ну естественно, на С без RTOS полный контроль, а RTOS - не полный контроль :) Если серьезно Vladimir Ljaschko(498 знак., 24.07.2013 18:41)
- И что с "полным контролем"? Где-то его нет или слишком много? - Apтём(24.07.2013 16:04)
- Это я еще про "полный контроль" не начинал ;) - Vladimir Ljaschko(24.07.2013 13:57)
- Наш человек :-) - SciFi(24.07.2013 13:48)
- со своей колокольни: Mahagam(1257 знак., 24.07.2013 12:56)
- времянка в вытесняющих RTOS-ах проще удовлетворяется, чужой код берется нахаляву - засунул в низкоприорететную задачу и все само само заработало (можно повторить N раз если есть таймслайсинг), в команде проще программить (и опять же времянку ыыыы(238 знак., 24.07.2013 12:52)
- под RTOS программить легче. все остальное - от экономии на песке. - Snaky(24.07.2013 12:28)
- вопрос в изучении РТОС, и собствено говоря во времени на изучение, перевод сознания на новые рельсы и связанные с этим новые глюки. - RED_DRAGON(24.07.2013 12:48)
- Перевод сознания - хорошо сказал. Недавно освоил(хотя ещё в процессе) FreeRTOS, поначалу трудно, но потом проще. Есть свои трудности вроде атомарности, реентерабельности функций но плюшек всё же больше. Сейчас старый проект где нет RTOS Молодой коллега(221 знак., 24.07.2013 16:28)
- фриртос гавно )) - Mahagam(24.07.2013 16:32)
- конечно конечно, всенепременно гавно! а что не гавно? - Молодой коллега(24.07.2013 16:38)
- я, хотя бы, пробовал остальное. CTL получше будет. а вообще где-то затерялась линка, где видно, что фриртос самая тормознутая - Mahagam(24.07.2013 16:46)
- "Всё фигня, кроме пчёл!" (c) - amx(24.07.2013 16:41)
- конечно конечно, всенепременно гавно! а что не гавно? - Молодой коллега(24.07.2013 16:38)
- фриртос гавно )) - Mahagam(24.07.2013 16:32)
- Перевод сознания - хорошо сказал. Недавно освоил(хотя ещё в процессе) FreeRTOS, поначалу трудно, но потом проще. Есть свои трудности вроде атомарности, реентерабельности функций но плюшек всё же больше. Сейчас старый проект где нет RTOS Молодой коллега(221 знак., 24.07.2013 16:28)
- вопрос в изучении РТОС, и собствено говоря во времени на изучение, перевод сознания на новые рельсы и связанные с этим новые глюки. - RED_DRAGON(24.07.2013 12:48)
- Некоторый вывод из холивара -> - Evgeny_CD(25.07.2013 22:47, ссылка)