-
- А как обмен между модулями реализован? Указатели передаете? - rezident(25.04.2013 15:58)
- Доступ к любым данным ведется только через функции. - Леонид Иванович(25.04.2013 17:30)
- Буду весьма признателен, если покажешь, как в рамках этой парадигмы организовать вот такую модель: MBedder(1099 знак., 27.04.2013 16:06 - 16:11)
- требования к риалтайму есть? (зачем "Фоновые процессы работают по квазикооперативной модели"?) - Vit(27.04.2013 19:48)
- Скорее не требования, а ограничения - ничто принятое не должно пропасть - MBedder(27.04.2013 19:55)
- Под готовой ОСРВ - элементарно, например через MailBox. И не надо никакой квазикооперативности. - tesla(27.04.2013 16:11)
- Пока вычеркиваем - интересует просто вариант решения без глобальных и extern - MBedder(27.04.2013 16:12)
- Так а в чем вопрос? Обращение к глобальной переменной всегда можно заменить вызовом интерфейсной функции модуля, в которой будет обращение к скрытой в этом модуле переменной. Такой подход применим везде, и везде он даёт ухудшение эффективности. - Леонид Иванович(27.04.2013 19:22)
- Конечно. Зато, в случае применения ОСРВ (извиняюсь за выражение)имеем универсальность подхода и прочие плюсы. - tesla(27.04.2013 19:39)
- А какие интерфейсные функции могут быть у ISR? - MBedder(27.04.2013 19:29)
- ISR принадлежит модулю и работает с приватными данными модуля. Другой модуль получает доступ к этим данным через интерфейсные функции. Леонид Иванович(539 знак., 27.04.2013 19:39 - 19:56)
- Ну давай предельно упростим мою модель - ISR складывает данные в кольцевой буфер и, получив CRLF, выставляет флаг и обновляет указатель LastBytePtr. Фон, увидев этот флаг, обрабатывает данные от LastBytePtr до предыдущего CRLF - как всей MBedder(20 знак., 27.04.2013 20:07)
- Фон должен не читать напрямую флаг, а вызвать функцию, которая вернёт значение этого флага. Да, лишние накладные, зато очень легко вносить изменения в реализацию и таскать модули между проектами. - =AlexD=(27.04.2013 20:54)
- В принципе согласен, но жаба душит из-за накладных - MBedder(27.04.2013 20:58)
- у меня что-то подобное. накладные уменьшаю тем, что имею возможность сделать кольцевые буфера (куда всё складывает даже не софт, а DMA) оочень большими, такими, чтобы с запасом хватило при любых затыках, если они вдруг будут. - Mahagam(28.04.2013 00:41)
- Это само собой, но иногда памяти впритык, а иногда и ДМА нетути - MBedder(28.04.2013 00:42)
- Любая красота в программе вредит её эффективности. Но ведь предназначение человека - создавать в первую очередь красивые вещи, и только во вторую - работоспособные. - Леонид Иванович(27.04.2013 21:42)
- Я всю жизнь стремлюсь создавать красивые работоспособные вещи - пока получалось :)) - MBedder(27.04.2013 21:51)
- Красивые и работоспособные - это вообще идеал. Леонид Иванович(135 знак., 27.04.2013 21:57)
- Я для РС написал всего несколько программ - на Васике в конце 80-х и на TASM в 90-х, и больше туда не совался (и не собираюсь) - MBedder(27.04.2013 22:16)
- Увы, для сопроводжения "всякого своего дерьмеца", приходится, как минимум, вяско-разно "помахать дельфями". Например, для сопряжения с 1С делами. Или для конфигурирования этого "всякого своего дерьмеца". - Гудвин(27.04.2013 22:34)
- РС-шную задачу я легко могу сформулировать программисту, а МК-шную - с очень большим трудом и непредсказуемым результатом. Вот и пишу для МК сам, а для РС держу пару придворных щелкоперов :)) - MBedder(28.04.2013 00:21)
- Так речь не идет о том, что нужно собственноручно писать программы для PC. Просто на "взрослых" машинах ушли далеко вперед в вопросах архитектуры программ. Особенно с использованием ООП. Микроконтролерщики варятся в собственном соку, а правильнее Леонид Иванович(51 знак., 28.04.2013 02:18)
- там просто есть ресурсы на то, чтобы каждый класс задач реализовывать на своём языке. зачастую ни разу не оптимальном с точки зрения скорости исполнения, зато средства языка оптимальны для задачи. а даже eLua далеко не во всякий контроллер влезет. - Mahagam(28.04.2013 05:40)
- Скорее не опыт, а стиль, архитектуру и приемы - MBedder(28.04.2013 02:34)
- Ну у меня такой роскоши нет :) 1С программеры свое дело делают. Туда лезу только для "накропать OLE приблудку"+ "тестилку" для совокупления. - Гудвин(28.04.2013 00:29)
- "Делиться надо!"(с) Лившиц, R.I.P. :(( - MBedder(28.04.2013 00:44)
- Так речь не идет о том, что нужно собственноручно писать программы для PC. Просто на "взрослых" машинах ушли далеко вперед в вопросах архитектуры программ. Особенно с использованием ООП. Микроконтролерщики варятся в собственном соку, а правильнее Леонид Иванович(51 знак., 28.04.2013 02:18)
- РС-шную задачу я легко могу сформулировать программисту, а МК-шную - с очень большим трудом и непредсказуемым результатом. Вот и пишу для МК сам, а для РС держу пару придворных щелкоперов :)) - MBedder(28.04.2013 00:21)
- Увы, для сопроводжения "всякого своего дерьмеца", приходится, как минимум, вяско-разно "помахать дельфями". Например, для сопряжения с 1С делами. Или для конфигурирования этого "всякого своего дерьмеца". - Гудвин(27.04.2013 22:34)
- Я для РС написал всего несколько программ - на Васике в конце 80-х и на TASM в 90-х, и больше туда не совался (и не собираюсь) - MBedder(27.04.2013 22:16)
- Красивые и работоспособные - это вообще идеал. Леонид Иванович(135 знак., 27.04.2013 21:57)
- Я всю жизнь стремлюсь создавать красивые работоспособные вещи - пока получалось :)) - MBedder(27.04.2013 21:51)
- "Самый страшный зверь - это жаба. Она душила многих наших современников." А если серьёзно, то пока измерения не покажут необходимость оптимизации, то вся эта гонка за эффективностью - пустая трата драгоценного времени. - SciFi(27.04.2013 21:06)
- С++ рулит, флаг может быть статическим членом класса, а функция инлайновой. Тогда накладных нет. - =AlexD=(27.04.2013 21:00)
- Не факт. Есть ведь мелие MCU. - tesla(27.04.2013 21:07)
- Для мелких С++ вдвойне востребован. Если он вообще есть в наличии. - =AlexD=(27.04.2013 21:08)
- Эт чем же он востребован? Будем писать классы для ATtiny2313 ? tesla(25 знак., 27.04.2013 21:21)
- для ATtiny2313 ? Не, не классы. Шаблоны! - =AlexD=(27.04.2013 21:56)
- Эт чем же он востребован? Будем писать классы для ATtiny2313 ? tesla(25 знак., 27.04.2013 21:21)
- Для мелких С++ вдвойне востребован. Если он вообще есть в наличии. - =AlexD=(27.04.2013 21:08)
- Ага, ща я попрусь в С++, едва вступив в С :)) - MBedder(27.04.2013 21:04)
- Ага :-) бомж(28.04.2013 00:21)
- :)) - MBedder(28.04.2013 00:25)
- Пожалуй, поддержу призыв посмотреть в сторону C++. Монстроподобность его слишком преувеличена теми, кто с ним не знаком. - Леонид Иванович(27.04.2013 21:44)
- Может быть, может быть - но явно не в этой жизни :)) - MBedder(28.04.2013 00:22)
- Лучше не задерживайся на полдороге :-) - =AlexD=(27.04.2013 21:08)
- "Не царское это дело - в п#зде ковыряться, прикажу - в&ебут!"(с) :)) - MBedder(27.04.2013 21:17)
- Ага :-) бомж(28.04.2013 00:21)
- Не факт. Есть ведь мелие MCU. - tesla(27.04.2013 21:07)
- у меня что-то подобное. накладные уменьшаю тем, что имею возможность сделать кольцевые буфера (куда всё складывает даже не софт, а DMA) оочень большими, такими, чтобы с запасом хватило при любых затыках, если они вдруг будут. - Mahagam(28.04.2013 00:41)
- В принципе согласен, но жаба душит из-за накладных - MBedder(27.04.2013 20:58)
- Фон должен не читать напрямую флаг, а вызвать функцию, которая вернёт значение этого флага. Да, лишние накладные, зато очень легко вносить изменения в реализацию и таскать модули между проектами. - =AlexD=(27.04.2013 20:54)
- Ну давай предельно упростим мою модель - ISR складывает данные в кольцевой буфер и, получив CRLF, выставляет флаг и обновляет указатель LastBytePtr. Фон, увидев этот флаг, обрабатывает данные от LastBytePtr до предыдущего CRLF - как всей MBedder(20 знак., 27.04.2013 20:07)
- Долго думал. Думал, может я не прав. Нет, ни фига. Никаких интерфейсных функций у ISR быть не может! - tesla(27.04.2013 19:44)
- Хорошо задал вопрос. А то ить некоторые предполагают, что вызов функции из прерывания - это самое оно. tesla(129 знак., 27.04.2013 19:35)
- ISR принадлежит модулю и работает с приватными данными модуля. Другой модуль получает доступ к этим данным через интерфейсные функции. Леонид Иванович(539 знак., 27.04.2013 19:39 - 19:56)
- Так а в чем вопрос? Обращение к глобальной переменной всегда можно заменить вызовом интерфейсной функции модуля, в которой будет обращение к скрытой в этом модуле переменной. Такой подход применим везде, и везде он даёт ухудшение эффективности. - Леонид Иванович(27.04.2013 19:22)
- Пока вычеркиваем - интересует просто вариант решения без глобальных и extern - MBedder(27.04.2013 16:12)
- требования к риалтайму есть? (зачем "Фоновые процессы работают по квазикооперативной модели"?) - Vit(27.04.2013 19:48)
- А с быстродействием - как? - tesla(27.04.2013 16:04)
- За всё нужно платить, за красоту в том числе. Описанный подход работет, если вычислительных ресурсов намного больше, чем нужно. - Леонид Иванович(27.04.2013 19:12)
- Инкапсуляция это правильный подход, одобрямс. К сожалению вызов ф-и в прерывании в некоторых компиляторах процов "проф. уровня"(С)fk0 приводит к жуткому оверхеду. Поэтому приходится писать "функцию" как макрос и использовать глобальные переменные. abivan(50 знак., 26.04.2013 12:23)
- Совершенно непонятно, почему все прицепились к прерываниям? Обработчик прерывания - это функция, закопанная глубоко в недрах модуля, его внутреннее дело. И работает с приватными переменными модуля. Зачем из прерывания вызывать интерфейсные функции Леонид Иванович(16 знак., 26.04.2013 12:40)
- в PIC18 это не так у него один вектор прерывания. Поэтому где только можно использую PIC24(если новый проект и цены сопоставимы) у которого у каждого прерывания свой вектор. Вот тогда обработчик располагается в модуле и можно использовать static. - abivan(26.04.2013 13:08)
- у 18-ого 2 вектора, у 16-ого один. Nikolay801_(30 знак., 26.04.2013 13:25)
- Увы, с профессиональными контроллерами не знаком. - Леонид Иванович(26.04.2013 13:16)
- Бывает надо... Поместить принятые данные в fifo, например. Такая архитектура, что очередь в другом модуле. Либо чисто по техническим причинам оно в другом модуле, сложно всё засунуть в один C-файл. Либо какие-либо чисто вычислительные функции fk0(99 знак., 26.04.2013 12:59)
- +1. Тоже жутко негодую по этому поводу. - SciFi(26.04.2013 12:44)
- Например, общий системный тик, который должен дергать все модули. Я то вызываю функции, но постоянно отслеживаю ресурсы, допуская, что их может не хватить. Что тогда? - Vladimir Ljaschko(26.04.2013 12:42)
- Ужос. Вот мой обработчки прерывания таймера, который генерирует системный тик: Леонид Иванович(181 знак., 26.04.2013 12:59)
- А как Вы делаете, когда один "процесс" или "модуль" требует обслуживание высокоприоритетное обслуживание, скажем 250 мкс, и средне-приоритетное (10мс), и вообще редкое (1с)? - Vladimir Ljaschko(26.04.2013 16:30)
- как-то рассказывал в общем как оно у меня - Vit(29.04.2013 10:03, ссылка)
- Тут такое дело: Леонид Иванович(309 знак., 26.04.2013 22:51)
- ха. в системе с многозадачностью я легко могу отдать всё свободное время на какую-либо фоновую задачу, которой абсолютно не требуется реалтайм. и наличие такой задачи вообще никак не повлияет на работу остальных. тайминги вызова остальных Mahagam(399 знак., 27.04.2013 00:58)
- Про тайминги остальных поясните плз, если мне нужен сервисы из 5 модулей каждые 500 мкс, как это я должен реализовать это под RTOS? - Vladimir Ljaschko(27.04.2013 17:04)
- В курятниках такого не бывает. - Леонид Иванович(27.04.2013 01:19)
- и одна из причин этого... Mahagam(34 знак., 27.04.2013 01:22)
- Нет. Отсутствие такой необходимости. Леонид Иванович(46 знак., 27.04.2013 01:40)
- Конечно, у Вас курятники, крутизна и правильность, а у меня один "ужос". Нехорошо получается...Нелогично ;) - Vladimir Ljaschko(27.04.2013 13:29)
- Не путайте, это у Вас крутизна, а у меня - курятники. - Леонид Иванович(27.04.2013 15:18)
- красивые курятники. И ужасная крутизна koyodza(50 знак., 27.04.2013 15:32)
- Не путайте, это у Вас крутизна, а у меня - курятники. - Леонид Иванович(27.04.2013 15:18)
- Конечно, у Вас курятники, крутизна и правильность, а у меня один "ужос". Нехорошо получается...Нелогично ;) - Vladimir Ljaschko(27.04.2013 13:29)
- Нет. Отсутствие такой необходимости. Леонид Иванович(46 знак., 27.04.2013 01:40)
- и одна из причин этого... Mahagam(34 знак., 27.04.2013 01:22)
- ха. в системе с многозадачностью я легко могу отдать всё свободное время на какую-либо фоновую задачу, которой абсолютно не требуется реалтайм. и наличие такой задачи вообще никак не повлияет на работу остальных. тайминги вызова остальных Mahagam(399 знак., 27.04.2013 00:58)
- Для 250 мкс часто можно прерваться и всего-лишь обслужить по минимуму (инкрементнуть чего, в буфер загнать и т.п.) и не потерять событие, а потом
медленно спуститься и покрыть всё стадоостальную обработку сделать в фоне. Для 10 мс опять же Vit(227 знак., 26.04.2013 22:01 - 22:04) - обычно на это разные функции-обработчики. Но все они должны выполняться быстро. Если что-то требует долгого ожидания, оно разбивается таким образом, чтобы каждая часть выполнялась быстро - koyodza(26.04.2013 16:48, ссылка)
- Ну вот рассудите. У меня есть 1) расчеты на десяток миллисекунд с периодом 100мс 2) расчеты на 1 мс с периодом 10 мс 2) обслуживание 5-6 логических модулей с периодом 500 мкс. Как совместить? Я не могу разделить на части формулу с long long - что Vladimir Ljaschko(12 знак., 26.04.2013 17:41)
- смешались кони с котлетами koyodza(2082 знак., 26.04.2013 18:00)
- Вы потянули слишком сильно в грубины RTOS. Имеем жесткий быстрый реал-тайм в нескольких логических модулей плюс мягкий разноуровневый реалтайм. Я реализую как последовательные вызовы функций из каждого модуля в прерываниях по системному тику, плюс Vladimir Ljaschko(358 знак., 27.04.2013 16:58)
- поясните, что Вы называете "жестким реалтаймом"? На примере, пожалуйста - koyodza(27.04.2013 20:30)
- Например ногодрыганье квантами 500 мкс с джиттером до 5-10 мкс и наличие других процессов с тем же периодом, пусть большим джиттером (например, программный опрос счетчиков). Поясните плз Вашу альтернативу без ISR и вызова функций. - Vladimir Ljaschko(27.04.2013 20:46)
- там, где тайминги важны, нужно максимально делать аппаратно. То, что не получается делать аппаратно - делается с использованием прерываний, но с минимумом работы внутри прерывания koyodza(1395 знак., 27.04.2013 21:00)
- К сожалению, требования появились через 3-4 года после начала выпуска, поэтому аппаратуру (в том числе ISR в полном объеме) использовать не получается :( В части завышения требований есть пара слабых мест, но они существенно не спасают. Vladimir Ljaschko(228 знак., 27.04.2013 21:23)
- Ну вот и ответ. Попытки впихнуть дополнительный функционал в старое железо - это особый случай, тут все методы хороши. Но не следует на этом примере строить свой стиль программирования. - Леонид Иванович(27.04.2013 21:52)
- Мой стиль идеален для множества идеальных микроконтроллеров ибо знание архитектуры и периферии не требуется. Простое портирование проекта только по критериям быстродействия ядра. Поставил бы ARM - все проблемы бы отпали при сохранения стиля! :) - Vladimir Ljaschko(27.04.2013 22:13)
- Вы сильно заблуждаетесь: бардак имеет свойство нарастать, если ему предоставлять дополнительные ресурсы - koyodza(27.04.2013 22:22)
- +100500 - koyodza(27.04.2013 21:55)
- Мой стиль идеален для множества идеальных микроконтроллеров ибо знание архитектуры и периферии не требуется. Простое портирование проекта только по критериям быстродействия ядра. Поставил бы ARM - все проблемы бы отпали при сохранения стиля! :) - Vladimir Ljaschko(27.04.2013 22:13)
- изначально неправильно спроектированную систему вряд-ли удастся превратить в нормальную, но можно по крайней мере попытаться не усугублять ситуацию. А какой там МК - не важно, если его в принципе хватает - koyodza(27.04.2013 21:43)
- Ну вот и ответ. Попытки впихнуть дополнительный функционал в старое железо - это особый случай, тут все методы хороши. Но не следует на этом примере строить свой стиль программирования. - Леонид Иванович(27.04.2013 21:52)
- К сожалению, требования появились через 3-4 года после начала выпуска, поэтому аппаратуру (в том числе ISR в полном объеме) использовать не получается :( В части завышения требований есть пара слабых мест, но они существенно не спасают. Vladimir Ljaschko(228 знак., 27.04.2013 21:23)
- Собственно, я выше указал. - Vladimir Ljaschko(27.04.2013 20:48, ссылка)
- там, где тайминги важны, нужно максимально делать аппаратно. То, что не получается делать аппаратно - делается с использованием прерываний, но с минимумом работы внутри прерывания koyodza(1395 знак., 27.04.2013 21:00)
- Например ногодрыганье квантами 500 мкс с джиттером до 5-10 мкс и наличие других процессов с тем же периодом, пусть большим джиттером (например, программный опрос счетчиков). Поясните плз Вашу альтернативу без ISR и вызова функций. - Vladimir Ljaschko(27.04.2013 20:46)
- Присоединяюсь к вопросу, который задал fk0 ниже: какой-такой жесткий реалтайм? Придумываете несуществующие требования, чтобы только оправдать свою точку зрения. - Леонид Иванович(27.04.2013 19:24)
- поясните, что Вы называете "жестким реалтаймом"? На примере, пожалуйста - koyodza(27.04.2013 20:30)
- просцыте великодушно, но почему бы вытесняющую многозадачность не влепить? - Mahagam(26.04.2013 19:46)
- накуа? Чтобы ничего не контролировать? Хватит с меня и винды, в МК по-возможности минимизирую использование чужого кода - koyodza(26.04.2013 20:10)
- я без исходников (или с малочитаемыми) многозадачку и не рассматриваю. а та которая понята - та полностью под контролем. - Mahagam(26.04.2013 20:34)
- мне эта понятнее. Вытесняемость пока не нужна - koyodza(26.04.2013 21:28)
- а по мне так оно куда как проще получается. - Mahagam(26.04.2013 20:12)
- Как в вытесняющей многозадачности сделать два параллельных strtok() ? Или как многозадачность -- так вытесняющая. А как библиотечные функции -- не используем. (можно сделать, но не на всякой libc) - fk0(26.04.2013 20:35)
- да, нужна аккуратность. Либо abivan(2420 знак., 27.04.2013 14:07)
- и много таких однопоточных функций? если придётся отказаться от strtok() ради всего удобства многозадачности - то почему бы и нет? - Mahagam(26.04.2013 21:36)
- Если явно то не указано -- вся C-библиотека. И масса собственного кода, если не принималось мер против того. Любая static переменная всё портит же. Что характерно во многих "ОС" нет понятия thread local storage. Что наводит мысль на крайнюю их fk0(14 знак., 26.04.2013 22:28)
- галимейший фриртос портировали на всё что может исполнять хоть какое-то подобие программ. сделали поддержку чуть ли не всех существующих компиляторов, и кагбээ проблем особо не возникает. вы про все Си-либы серьёзно? да? - Mahagam(27.04.2013 01:06)
- В "галимейшем фриртосе" как раз проблема с отсутствием глобальной переменной позволяющей хранить thread specific data. А проблем не возникает потому, что фриртос используют совместно с весьма специфическими программами. Где библиотечных функций не fk0(1061 знак., 27.04.2013 11:57)
- Пардон за вмешательство.Это не FF виноват. saifullin(82 знак., 27.04.2013 20:24)
- у меня 98% вызовов библиотечных функций - это тупо memcpy() да memset(). всё. остальное - свой код, который пишется вручную. а вы что? используете кодогенераторы? или как? Mahagam(1016 знак., 27.04.2013 13:15)
- А malloc? rand? А errno, наконец? А на errno, между прочим, завязана масса функций из math.h -- всё это неиспользовать, написать своё? Уже маразм в полную силу, не кажется? И попрошу заметить, во вменяемых ОС с потокобезопасностью всего этого fk0(2841 знак., 27.04.2013 16:47)
- malloc() пусть горит в огне. нехватало ещё нарваться на утечки памяти да отказ в выделении. цена крэша ~100k$, а MMU прикручивать пока что нет времени и возможностей. ведь на примитивном уровне TLS - это стек потока, ну так избавится от статиков Mahagam(1310 знак., 28.04.2013 01:37)
- Изначально речь шла про FreeRTOS, а не CrossWorks. Так вот в FreeRTOS невозможно ожидать множество событий. Это принципиальное ограничение. - fk0(28.04.2013 16:06)
- Утечки и фрагментация памяти -- это миф, как мне кажется, про который любят очень рассказывать те, кто их в глаза не видел. Только в узком круге задач возможна фрагментация или требуется гарантированное выделение памяти. Там и там можно тем же fk0(179 знак., 28.04.2013 16:02)
- MMU притянут за уши. Для реализации TLS нужна всего лишь некая глобальная переменная-указатель меняющая значение при переключении задач. MMU для неё не нужен и при наличии MMU она автоматически не появится, если её нет. - fk0(28.04.2013 15:31)
- MMU и будет менять адрес с переключением задач. - Mahagam(28.04.2013 15:37)
- "цена крэша ~100k$" - чуть не помер от хохота. Пальцы веером у Вас, наверное, даже во сне? - Леонид Иванович(28.04.2013 02:14)
- какое отношение имеет сон к суровой реальности? - Mahagam(28.04.2013 14:48)
- Уважаемый Леонид Иванович, не смейтесь, знаете, как тяжело отлаживать софт, не имея возможности протестировать все на рабочем объекте? Потому как сделать это можно всего один раз, ибо цена, скажем так, "включения" этого объекта, несколько alex68(187 знак., 28.04.2013 03:35)
- Да ладно Вам, знаю я, какие космические корабли тут запускают с крыш курятников. Один-единственный фирменный БП на весь форум говорит о многом. - Леонид Иванович(28.04.2013 11:56)
- разные есть. Но те, что громче кричат о "сотнях к$" обычно об этом только мечтают. Фирменное оборудование - тоже не показатель серьёзности/ответственности проектов, а только показатель количества выделяемых на его закупку денег koyodza(285 знак., 28.04.2013 12:58)
- Конечно, дело не в том, что кушать нечего. Леонид Иванович(115 знак., 28.04.2013 13:08)
- возможно, точно так же никто ни разу не уперся в проблему, когда нужен лабораторный БП от агилента, всех устраивают mastech и подобные, а выкидывать кучу денег непонятно на что мало кому хочется. Так зачем Вы всё время об этом вспоминаете? - koyodza(28.04.2013 14:51)
- Off. Не очень понял - меня пинают всуе за то, что имел наглость купить себе дешевый фирменный блок питания? :) Или за то, что написал здесь про это? - alex68(28.04.2013 15:26)
- Наоборот, только Вам я могу поверить, что участвуете в проектах за килобаксы. Кстати, хотел спросить: Леонид Иванович(149 знак., 28.04.2013 18:13)
- Они не бывают на форумах. Но спросите здесь, я узнаю всё у них. - alex68(28.04.2013 18:32)
- не Вас, а ЛИ: за то, что он всех пинает за то, что все рассказывают о "крутых проектах", а сами не хотят покупать дорогие блоки питания - koyodza(28.04.2013 15:47)
- В это верю - проекты на работе, а не дома , а руководство жмется на оборудование. У нас редкое исключение, покупают СВЧ анализаторы и тому подобное за реально большие деньги. Но без них невозможно обеспечить требуемые параметры. - alex68(28.04.2013 15:58)
- это понятно koyodza(212 знак., 28.04.2013 16:02)
- У нас не так. Просто так не покупают даже простой отладчик. Надо подойти к начальнику (иногда и ко мне) и внятно сказать зачем оно надо :) - alex68(28.04.2013 16:31)
- У "крутого" оборудования есть и масса других недостатков - масса, габариты, шумящее охлаждение, долгая загрузка Windows XP... :-)) - =AlexD=(28.04.2013 16:25)
- Если нужно увидеть шумы на уровне минус 160-170 децибел, то без разницы, сколько весит аппарат, хоть центнер. Либо глянуть на работу фазового модулятора на гигагерцах :) - alex68(28.04.2013 16:35)
- Это я не к тому, что крутое оборудование - плохо, а к тому, что покупка чего попроще может быть сознательным выбором, а не прихотью начальства :-). - =AlexD=(28.04.2013 17:08)
- +100500. В этом вопросе тоже полезна бывает умеренность - koyodza(28.04.2013 17:09)
- Это я не к тому, что крутое оборудование - плохо, а к тому, что покупка чего попроще может быть сознательным выбором, а не прихотью начальства :-). - =AlexD=(28.04.2013 17:08)
- К слову, Linux загружается на менее крутом оборудовании не сильно быстрее - Alex B.(28.04.2013 16:33)
- бывает и 95 или даже NT3.51 :=) - koyodza(28.04.2013 16:26)
- Если нужно увидеть шумы на уровне минус 160-170 децибел, то без разницы, сколько весит аппарат, хоть центнер. Либо глянуть на работу фазового модулятора на гигагерцах :) - alex68(28.04.2013 16:35)
- это понятно koyodza(212 знак., 28.04.2013 16:02)
- В это верю - проекты на работе, а не дома , а руководство жмется на оборудование. У нас редкое исключение, покупают СВЧ анализаторы и тому подобное за реально большие деньги. Но без них невозможно обеспечить требуемые параметры. - alex68(28.04.2013 15:58)
- Наоборот, только Вам я могу поверить, что участвуете в проектах за килобаксы. Кстати, хотел спросить: Леонид Иванович(149 знак., 28.04.2013 18:13)
- Off. Не очень понял - меня пинают всуе за то, что имел наглость купить себе дешевый фирменный блок питания? :) Или за то, что написал здесь про это? - alex68(28.04.2013 15:26)
- возможно, точно так же никто ни разу не уперся в проблему, когда нужен лабораторный БП от агилента, всех устраивают mastech и подобные, а выкидывать кучу денег непонятно на что мало кому хочется. Так зачем Вы всё время об этом вспоминаете? - koyodza(28.04.2013 14:51)
- Конечно, дело не в том, что кушать нечего. Леонид Иванович(115 знак., 28.04.2013 13:08)
- Речь не о космосе, там стоимость запуска много выше :) Ну и не все говорят всю правду о себе и работе :) Повторюсь - не имея сколько нибудь адекватного стенда, отлаживаться очень трудно, и стоимость ошибок очень велика. Приходится все отлаживать alex68(57 знак., 28.04.2013 12:44)
- В таком случае есть какая-то модель объекта, симулятор. Не надо перегибать палку. - fk0(28.04.2013 16:10)
- Нет, совет должен быть другим. Леонид Иванович(144 знак., 28.04.2013 18:10)
- По этому поводу могу сказать, что всегда говорю программистам - не получается что-то, не молчите, скажите, будем разбираться вместе, либо найдем еще кого-то для консультации. А то тянут до сдачи этапа :) Ну а простых задач у нас нет вообще. - alex68(28.04.2013 18:36)
- Никогда не понимал, почему некоторые люди идут, например, в шахтеры, ведь более легкая работа всегда есть. - Леонид Иванович(28.04.2013 18:41)
- есть места, где другой работы практически нет, всё завязано на шахту. Альтернатива - только менять место жительства koyodza(147 знак., 28.04.2013 18:54)
- Никогда не понимал, почему некоторые люди идут, например, в шахтеры, ведь более легкая работа всегда есть. - Леонид Иванович(28.04.2013 18:41)
- По этому поводу могу сказать, что всегда говорю программистам - не получается что-то, не молчите, скажите, будем разбираться вместе, либо найдем еще кого-то для консультации. А то тянут до сдачи этапа :) Ну а простых задач у нас нет вообще. - alex68(28.04.2013 18:36)
- Блин, сами идите и полетайте, а потом пишите :) - alex68(28.04.2013 17:20)
- модель часто сильно отличается от реальности в крупных проектах, где задействован не только электронщик с программистом, а токари, слесари, строители и прочие, а сама модель строится по чисто теоретическим оценкам какого-то математика, зачастую не koyodza(65 знак., 28.04.2013 16:18)
- плюс мильярд :) - alex68(28.04.2013 17:22)
- Нет, совет должен быть другим. Леонид Иванович(144 знак., 28.04.2013 18:10)
- В таком случае есть какая-то модель объекта, симулятор. Не надо перегибать палку. - fk0(28.04.2013 16:10)
- разные есть. Но те, что громче кричат о "сотнях к$" обычно об этом только мечтают. Фирменное оборудование - тоже не показатель серьёзности/ответственности проектов, а только показатель количества выделяемых на его закупку денег koyodza(285 знак., 28.04.2013 12:58)
- Да ладно Вам, знаю я, какие космические корабли тут запускают с крыш курятников. Один-единственный фирменный БП на весь форум говорит о многом. - Леонид Иванович(28.04.2013 11:56)
- Ну и напрасно. "Есть многое на свете, друг Горацио, что и не снилось нашим мудрецам"(с) - MBedder(28.04.2013 02:33)
- malloc() пусть горит в огне. нехватало ещё нарваться на утечки памяти да отказ в выделении. цена крэша ~100k$, а MMU прикручивать пока что нет времени и возможностей. ведь на примитивном уровне TLS - это стек потока, ну так избавится от статиков Mahagam(1310 знак., 28.04.2013 01:37)
- А malloc? rand? А errno, наконец? А на errno, между прочим, завязана масса функций из math.h -- всё это неиспользовать, написать своё? Уже маразм в полную силу, не кажется? И попрошу заметить, во вменяемых ОС с потокобезопасностью всего этого fk0(2841 знак., 27.04.2013 16:47)
- ы? -> - Snaky(27.04.2013 12:16, ссылка)
- жаль, было бы интересно почитать - koyodza(27.04.2013 12:00)
- В "галимейшем фриртосе" как раз проблема с отсутствием глобальной переменной позволяющей хранить thread specific data. А проблем не возникает потому, что фриртос используют совместно с весьма специфическими программами. Где библиотечных функций не fk0(1061 знак., 27.04.2013 11:57)
- галимейший фриртос портировали на всё что может исполнять хоть какое-то подобие программ. сделали поддержку чуть ли не всех существующих компиляторов, и кагбээ проблем особо не возникает. вы про все Си-либы серьёзно? да? - Mahagam(27.04.2013 01:06)
- Если явно то не указано -- вся C-библиотека. И масса собственного кода, если не принималось мер против того. Любая static переменная всё портит же. Что характерно во многих "ОС" нет понятия thread local storage. Что наводит мысль на крайнюю их fk0(14 знак., 26.04.2013 22:28)
- проще, не спорю - по крайней мере для случаев, когда есть асинхронные задачи, выполняющиеся долго. Но лучше обойдусь без этого. Вопросы надёжности и разделения ответственности мне более важны, чем простота использования - koyodza(26.04.2013 20:13)
- Как в вытесняющей многозадачности сделать два параллельных strtok() ? Или как многозадачность -- так вытесняющая. А как библиотечные функции -- не используем. (можно сделать, но не на всякой libc) - fk0(26.04.2013 20:35)
- я без исходников (или с малочитаемыми) многозадачку и не рассматриваю. а та которая понята - та полностью под контролем. - Mahagam(26.04.2013 20:34)
- накуа? Чтобы ничего не контролировать? Хватит с меня и винды, в МК по-возможности минимизирую использование чужого кода - koyodza(26.04.2013 20:10)
- Вы потянули слишком сильно в грубины RTOS. Имеем жесткий быстрый реал-тайм в нескольких логических модулей плюс мягкий разноуровневый реалтайм. Я реализую как последовательные вызовы функций из каждого модуля в прерываниях по системному тику, плюс Vladimir Ljaschko(358 знак., 27.04.2013 16:58)
- смешались кони с котлетами koyodza(2082 знак., 26.04.2013 18:00)
- Ну вот рассудите. У меня есть 1) расчеты на десяток миллисекунд с периодом 100мс 2) расчеты на 1 мс с периодом 10 мс 2) обслуживание 5-6 логических модулей с периодом 500 мкс. Как совместить? Я не могу разделить на части формулу с long long - что Vladimir Ljaschko(12 знак., 26.04.2013 17:41)
- у меня немного иначе koyodza(64 знак., 26.04.2013 13:33)
- Такой вариант тоже использую, иногда сочетаю и флаг, и счетчик. - Леонид Иванович(26.04.2013 14:04)
- Сложность контроля за ресурсами намного возрастает - нужно проверять задержку каждой задачи. А у меня рухнула система - аха, понятно :) - Vladimir Ljaschko(26.04.2013 13:05)
- У меня кооперативка, задачи сразу проектируются так, чтобы не кушать больше положенного кванта времени. - Леонид Иванович(26.04.2013 13:14)
- и я плюсану - abivan(26.04.2013 13:46)
- +1 - koyodza(26.04.2013 13:34)
- У меня кооперативка, задачи сразу проектируются так, чтобы не кушать больше положенного кванта времени. - Леонид Иванович(26.04.2013 13:14)
- А как Вы делаете, когда один "процесс" или "модуль" требует обслуживание высокоприоритетное обслуживание, скажем 250 мкс, и средне-приоритетное (10мс), и вообще редкое (1с)? - Vladimir Ljaschko(26.04.2013 16:30)
- Ужос. Переделать всё немедленно. - SciFi(26.04.2013 12:45)
- Нэ буду. Мне и так хорошо - одно прерывание на все модули, все красиво и понятно. - Vladimir Ljaschko(26.04.2013 13:03)
- Ужос. Вот мой обработчки прерывания таймера, который генерирует системный тик: Леонид Иванович(181 знак., 26.04.2013 12:59)
- в PIC18 это не так у него один вектор прерывания. Поэтому где только можно использую PIC24(если новый проект и цены сопоставимы) у которого у каждого прерывания свой вектор. Вот тогда обработчик располагается в модуле и можно использовать static. - abivan(26.04.2013 13:08)
- Это у многих МК так: Apтём(330 знак., 26.04.2013 12:38)
- Это потому, что у программистов проф. уровня вся программа пишется в одном C-файле. Я недавно пример давал (в теме про goto). Тогда никакого оверхеда. - fk0(26.04.2013 12:38)
- Кто ж спорит. Вопрос оверхеда нужно решать на самом входе: писать программу так, как удобно машине, или так, как удобно человеку. - Леонид Иванович(26.04.2013 13:01)
- Да ладно, ты тогда базарил, что "программисты профессионального уровня на Паскале ваяют". Что за разброд и шатания? - tesla(26.04.2013 12:53)
- Совершенно непонятно, почему все прицепились к прерываниям? Обработчик прерывания - это функция, закопанная глубоко в недрах модуля, его внутреннее дело. И работает с приватными переменными модуля. Зачем из прерывания вызывать интерфейсные функции Леонид Иванович(16 знак., 26.04.2013 12:40)
- Буду весьма признателен, если покажешь, как в рамках этой парадигмы организовать вот такую модель: MBedder(1099 знак., 27.04.2013 16:06 - 16:11)
- Через облако :-) Вообще-то кошерный способ - вызывать функции. - SciFi(25.04.2013 16:10)
- Интересно, а как передавать информацию, получаемую через прерывания? - Bill(25.04.2013 16:26)
- Через статические переменные модуля. Ну а дальше - опять через функции. - SciFi(25.04.2013 16:30)
- Если статическая переменная модуля сохраняется вне области видимости модуля - чем она отличается от глобальной переменной программы. Ведь под нее будет навсегда отведено место в памяти в том и в другом случае. Немного недопонимаю.. - ut1wpr(25.04.2013 18:01)
- Разделение интерфейса и реализации. Короче, ООП (в хорошем смысле). А если будете всё время байты считать, то за деревьями лес потеряете. - SciFi(25.04.2013 18:38)
- До ООП в своих поделках не дорос. Наверное потому и не понял упрека в байтсэйвинге. Никогда им не страдал и не заморачивался. "Разделение интерфейса и реализации" - это крутое объяснение крутого спеца, стоящего на верхушке Гималаев тем, кто у ut1wpr(333 знак., 25.04.2013 21:02)
- Даже не используя ООП можно представить, что каждый модуль программы - это объект. Он должен что-то знать (хранить в переменных какие-то данные) и что-то уметь (выполнять какие-то функции). Умение делиться знаниями - это одна из функций. А Леонид Иванович(413 знак., 25.04.2013 23:42)
- Модульность. Разделение программы на части (по возможности независимые). Если программа имеет объём 1000 строк, то это всё пустой звук, и разницы нет. А если 100000, то разница огромная. - SciFi(25.04.2013 21:34)
- До ООП в своих поделках не дорос. Наверное потому и не понял упрека в байтсэйвинге. Никогда им не страдал и не заморачивался. "Разделение интерфейса и реализации" - это крутое объяснение крутого спеца, стоящего на верхушке Гималаев тем, кто у ut1wpr(333 знак., 25.04.2013 21:02)
- Разделение интерфейса и реализации. Короче, ООП (в хорошем смысле). А если будете всё время байты считать, то за деревьями лес потеряете. - SciFi(25.04.2013 18:38)
- Именно так. - Леонид Иванович(25.04.2013 17:31)
- Вы правы. Но и для любых правил иногда можно делать исключения. Особенно это касается контроллеров профессионального уровня. В целях упрощения опять же. - stub(25.04.2013 16:59, )
- Исключения были, но со временем все подчистил. Тут даже было дело не в упрощении, а в экономии ресурсов. Но теперь ресурсов много, а каждый MIPS или килобайт нужно ведь куда-то деть. - Леонид Иванович(25.04.2013 17:34)
- Компиляторы тоже не стоят на месте. Появилась такая штука, как Link Time Optimization (AKA Multifile Compilation). - SciFi(25.04.2013 17:58)
- Это замечательно. Позволит уменьшить ущерб, который наносит эффективности программ хороший стиль программирования. - Леонид Иванович(25.04.2013 19:45)
- Я бы сказал, что хороший стиль программирования больше должен бы влиять на эффективность работы самого программиста. С этой точки зрения нет единого универсального стиля для разных архитектур и людей. - stub(26.04.2013 13:46, )
- Это замечательно. Позволит уменьшить ущерб, который наносит эффективности программ хороший стиль программирования. - Леонид Иванович(25.04.2013 19:45)
- Компиляторы тоже не стоят на месте. Появилась такая штука, как Link Time Optimization (AKA Multifile Compilation). - SciFi(25.04.2013 17:58)
- Исключения были, но со временем все подчистил. Тут даже было дело не в упрощении, а в экономии ресурсов. Но теперь ресурсов много, а каждый MIPS или килобайт нужно ведь куда-то деть. - Леонид Иванович(25.04.2013 17:34)
- Если статическая переменная модуля сохраняется вне области видимости модуля - чем она отличается от глобальной переменной программы. Ведь под нее будет навсегда отведено место в памяти в том и в другом случае. Немного недопонимаю.. - ut1wpr(25.04.2013 18:01)
- Через статические переменные модуля. Ну а дальше - опять через функции. - SciFi(25.04.2013 16:30)
- Интересно, а как передавать информацию, получаемую через прерывания? - Bill(25.04.2013 16:26)
- Доступ к любым данным ведется только через функции. - Леонид Иванович(25.04.2013 17:30)
- А как обмен между модулями реализован? Указатели передаете? - rezident(25.04.2013 15:58)