-
- Так что ле ? [+] megajohn(294 знак., 13.10.2010 11:18)
- Вот именно после того как я озадачился темой задержек и реализовал это в убогом виде,было принято решение перейти на кооперативную ось. abivan(293 знак., 13.10.2010 10:50)
- Кстати, для тех, кто не в курсе (ни на кого не намекаю), вместо "оси" часто полезна такая штука, как protothreads с реализацией в виде пары хедеров от Адама Дункельса -> - SciFi(13.10.2010 12:12, ссылка)
- IMHO, вот это перспективнее, из-за "очередей ожидания" нет тупой траты тактов (допилил бы кто... до рабочего виду) -> fk0(37 знак., 13.10.2010 13:06)
- а что там недопиленного? - Snaky(13.10.2010 16:34)
- IMHO, вот это перспективнее, из-за "очередей ожидания" нет тупой траты тактов (допилил бы кто... до рабочего виду) -> fk0(37 знак., 13.10.2010 13:06)
- Кстати, для тех, кто не в курсе (ни на кого не намекаю), вместо "оси" часто полезна такая штука, как protothreads с реализацией в виде пары хедеров от Адама Дункельса -> - SciFi(13.10.2010 12:12, ссылка)
- Уже отвечал на этот вопрос Скрипач(842 знак., 12.10.2010 23:16 - 23:27)
- Хм... А do ... while(0); это зачем? - Bill(13.10.2010 06:59)
- Переменные X,Y используются только в этом блоке. Скрипач(496 знак., 13.10.2010 08:59)
- Для оформления блока достаточно поставить скобки {...}. Это будет подсказкой и для программиста, и для компилятора. Bill(13 знак., 13.10.2010 09:05)
- В макросах удобнее do-while, чтоб компилятор потребовал ';' поставить... - fk0(13.10.2010 11:13)
- видимо, именно из макросов и растут эти ноги - koyodza(13.10.2010 11:45)
- +1 - Snaky(13.10.2010 09:09)
- Видимо какой-то компилятор "просто-пару-скобок" не понимал. Текущий GCC, вы правы, понимает и так. - Скрипач(13.10.2010 09:16)
- Ы-ы-ы... Кто же то такой был? Ещё «до-ансишные» копиляторы по «первому K&R» в середине 80-ых на ДВК это понимали. Ну два из трёх точно, а один упрощённый столько всего не понимал (начиная от вложенных структур), что сразу был задвинут ReAl(250 знак., 13.10.2010 09:24)
- в MPLAB-C16 такое точно было - Vit(13.10.2010 09:52)
- Не помню. Думаю это был какой-то "левый", который позволял на Си для ATtiny1200 писать. Да и так ли это важно? - Скрипач(13.10.2010 09:46)
- Ы-ы-ы... Кто же то такой был? Ещё «до-ансишные» копиляторы по «первому K&R» в середине 80-ых на ДВК это понимали. Ну два из трёх точно, а один упрощённый столько всего не понимал (начиная от вложенных структур), что сразу был задвинут ReAl(250 знак., 13.10.2010 09:24)
- Видимо какой-то компилятор "просто-пару-скобок" не понимал. Текущий GCC, вы правы, понимает и так. - Скрипач(13.10.2010 09:16)
- В макросах удобнее do-while, чтоб компилятор потребовал ';' поставить... - fk0(13.10.2010 11:13)
- Для оформления блока достаточно поставить скобки {...}. Это будет подсказкой и для программиста, и для компилятора. Bill(13 знак., 13.10.2010 09:05)
- иногда полезная конструкция, но в данном случае очевидно бессмысленна. - Snaky(13.10.2010 07:08)
- Интересно, а в каких случаях она является полезной? - Bill(13.10.2010 07:29)
- использую как минимум в двух случаях: Snaky(1220 знак., 13.10.2010 07:49 - 07:52)
- В ссылке на stackoverflow как всегда смешное, рекомендую читать man free для начала и не писать говнокода, откуда такие заблуждения вообще пошли? Вот натыкался: fk0(219 знак., 13.10.2010 11:24)
- ссылки я позже нагуглил и добавил, отредактировав сообщение. мопед не мой (с) :> - Snaky(13.10.2010 13:23)
- О! Замена goto. Интересная мысль. - SciFi(13.10.2010 09:07)
- Понятно! Ну, макросами я не особо пользуюсь. А вот использовать do...while(0); или goto это дело вкуса программиста. Лично я Bill(170 знак., 13.10.2010 08:12)
- ну это упрощенный пример - набросал прямо по ходу. на самом деле может быть более сложный, например такой блок: Snaky(469 знак., 13.10.2010 08:25 - 08:27)
- На самом деле такое использование break -- ЗАМАСКИРОВАННЫЙ GOTO!!! А goto, как известно, абсолютное зло во всех вселенных. А ведь можно вместо break с таким же успехом и longjmp... Хотя академически-правильно по-моему иметь вложенные функции и из fk0(128 знак., 13.10.2010 11:27)
- Да, наглядность превыше всего! Или нет? - Bill(13.10.2010 08:30)
- ну дык. не последняя вещь. а от многоэтажных вложенных if-else-if голова кружится :> - Snaky(13.10.2010 08:36)
- в примере есть каммент // etc etc - там может быть Ваша реклама;) - Vit(13.10.2010 08:18)
- ну это упрощенный пример - набросал прямо по ходу. на самом деле может быть более сложный, например такой блок: Snaky(469 знак., 13.10.2010 08:25 - 08:27)
- В ссылке на stackoverflow как всегда смешное, рекомендую читать man free для начала и не писать говнокода, откуда такие заблуждения вообще пошли? Вот натыкался: fk0(219 знак., 13.10.2010 11:24)
- использую как минимум в двух случаях: Snaky(1220 знак., 13.10.2010 07:49 - 07:52)
- Интересно, а в каких случаях она является полезной? - Bill(13.10.2010 07:29)
- Переменные X,Y используются только в этом блоке. Скрипач(496 знак., 13.10.2010 08:59)
- Можно попроще, словами? А то я тоже щас свои коды накидаю... - mazur(12.10.2010 23:24)
- В двух словах Скрипач(583 знак., 12.10.2010 23:37 - 23:43)
- Я прикрепил ваш пример. mazur(534 знак., 14.10.2010 00:59 - 01:04)
- Нет, _10mS константа с которой сравнивают. Получение разности системного таймера с сохраненным значением "спрятано" в Timer() - Скрипач(14.10.2010 09:29 - 09:55)
- Только вот при использовании такой архитектуры напрямую сильно страдает модульность программы, вплоть до превращения её в говнокод. ya(1123 знак., 13.10.2010 11:18, )
- Ы-ы-ы, о чем вы? Был же (там->) пример, как работать с задержками изнутри задач. Без описанных вами извратов. - Скрипач(13.10.2010 21:57, ссылка)
- Во-первых надуманно, во-вторых есть методы обхода. Да, у каждого модуля есть функция, которую нужно вызывать регулярно. Не обязательно раз в 10мс, как можно чаще, но не реже, чем раз в 100мс -- вот так верней. Функция внутри сама проверяет время fk0(1971 знак., 13.10.2010 11:44)
- Этот и ответ Vit-а решает две мои проблемы. Как с каруселькой, так и с с параллельными автоматами. - mazur(12.10.2010 23:43)
- Мы с Vit посоветовали одно и тоже. На самом деле, такая организация системы - классика. Скрипач(447 знак., 12.10.2010 23:50 - 13.10.2010 00:02)
- Я прикрепил ваш пример. mazur(534 знак., 14.10.2010 00:59 - 01:04)
- В двух словах Скрипач(583 знак., 12.10.2010 23:37 - 23:43)
- Хм... А do ... while(0); это зачем? - Bill(13.10.2010 06:59)
- использую для большинства задач "мягкий риалтайм", если не требуется иного. Vit(890 знак., 12.10.2010 23:25)
- О как! Точно! И не надо лишних флагов, лишних ресурсов (ОЗУ, регистры). Цепочку автоматов прогнал и в sleep. Все равно у меня все действия по таймерам и прерываниям пинаются. mazur(34 знак., 12.10.2010 23:35)
- Насчёт sleep не всё просто. Разные задачи могут требовать различные уровни энергопотребления и ожидать различных событий из тех же обработчиков прерываний. - Vit(13.10.2010 12:18)
- Разница считается по обычному вычитанию unsigned (int например) из такого же unsigned. Вычислительная математика даёт усегда (если интервал не длиннее размерности счётчика) правильный (положительный) результат - Vit(12.10.2010 23:39)
- Главное, разницу иметь уже не unsigned. Я бы рекомендовал использовать тут только знаковые типы и не морочить мозг, а то дороже выйдет. Я вот нарывался, при чём при переезде с одного 8-битного на другой -- переставало работать. Вот и думай. Хотя, fk0(203 знак., 13.10.2010 11:55)
- Бред! Машины времени пока не существует, а посему время отрицательным не бывает! - rezident(13.10.2010 16:12)
- Если "сейчас" принять за ноль, то "вчера" с минусом, а "завтра" с плюсом, или наоборот... - fk0(13.10.2010 16:22)
- А в каком планировщике задач "вчера" бывает? - rezident(13.10.2010 17:37)
- А временные интервалы не ограничиваются "планировщиками задач", битами и флагами. - fk0(13.10.2010 17:49)
- Событие которое должно было произойти "еще вчера" может (за)интересовать только человека (пользователя), а не аппаратуру. Если же рассматривать случаи восстановления после аппаратного сбоя (типа пропадание штатного питания), то для планировщика rezident(400 знак., 13.10.2010 19:57)
- Чушь и ересь. Использование беззнаковых переменных не позволяет использовать вполне естесственную для человека арифметику. Ну подумаешь справа налево перенёс и минус пририсовал. Ты ж даже не задумаешься! А без знака там такого насчитается, что fk0(19 знак., 14.10.2010 11:30)
- Против природы не попрешь - время движется только вперед. "Отрицательное" время это лишь человеческая абстракция. И то при этом люди говорят, не "минус два года", а "два года тому назад". - rezident(14.10.2010 12:32)
- Мы говорим об элементарном случае из вычислительной математики, а не о некоей "естесственной для человека арифметике". - Vit(14.10.2010 11:52)
- Чушь и ересь. Использование беззнаковых переменных не позволяет использовать вполне естесственную для человека арифметику. Ну подумаешь справа налево перенёс и минус пририсовал. Ты ж даже не задумаешься! А без знака там такого насчитается, что fk0(19 знак., 14.10.2010 11:30)
- Событие которое должно было произойти "еще вчера" может (за)интересовать только человека (пользователя), а не аппаратуру. Если же рассматривать случаи восстановления после аппаратного сбоя (типа пропадание штатного питания), то для планировщика rezident(400 знак., 13.10.2010 19:57)
- А временные интервалы не ограничиваются "планировщиками задач", битами и флагами. - fk0(13.10.2010 17:49)
- А в каком планировщике задач "вчера" бывает? - rezident(13.10.2010 17:37)
- Если "сейчас" принять за ноль, то "вчера" с минусом, а "завтра" с плюсом, или наоборот... - fk0(13.10.2010 16:22)
- неправильно в корне. в пределах переполняющегося счётчика интервал всегда положителен. знаковым должен быть только difftime, а это из немного другой оперы. - Vit(13.10.2010 14:43)
- Сравнение знаковое, ибо difftime знаковый. В итоге проще всё иметь знаковое, иначе легко наткнуться на собственную неаккуратность и различия в подходя к знаковости у разных компиляторов. - fk0(13.10.2010 14:51)
- не надо смешивать всё в кучу. перечитайте моё предыдущее сообщение, плз - Vit(13.10.2010 15:33)
- Сравнение знаковое, ибо difftime знаковый. В итоге проще всё иметь знаковое, иначе легко наткнуться на собственную неаккуратность и различия в подходя к знаковости у разных компиляторов. - fk0(13.10.2010 14:51)
- Бред! Машины времени пока не существует, а посему время отрицательным не бывает! - rezident(13.10.2010 16:12)
- Именно это я и оценил. - mazur(12.10.2010 23:40)
- Главное, разницу иметь уже не unsigned. Я бы рекомендовал использовать тут только знаковые типы и не морочить мозг, а то дороже выйдет. Я вот нарывался, при чём при переезде с одного 8-битного на другой -- переставало работать. Вот и думай. Хотя, fk0(203 знак., 13.10.2010 11:55)
- О как! Точно! И не надо лишних флагов, лишних ресурсов (ОЗУ, регистры). Цепочку автоматов прогнал и в sleep. Все равно у меня все действия по таймерам и прерываниям пинаются. mazur(34 знак., 12.10.2010 23:35)