Псевдоотладчик для Ардуино
- Войдите на сайт для отправки комментариев
Пнд, 11/01/2016 - 21:51
Коллеги! Есть такая идея. Поскольку у ардуины нет отладчика уменяпоявилась такая идея.
Натолкнуло на меня возможность через вставку в код команды
Serial.print(переменная) хоть что то получать для отладки и выводить в терминал.
Может кто изобретет код по следующему алгоритму:
берем из анализируемого кода требуемую переменную печатаем ее в терминале
и в нем же получаем через Serial.print ее значение.
язык и так детсадовский, я в нем разобрался за 2 часа....
иногда конечно пользуюсь принтом, но крайне редко, обычно или перефирийкаой видно (например светодид можно воткнуть) или вовсе нет ошибок
язык и так детсадовский, я в нем разобрался за 2 часа....
иногда конечно пользуюсь принтом, но крайне редко, обычно или перефирийкаой видно (например светодид можно воткнуть) или вовсе нет ошибок
Ну когда проект детсадовский то это понятно. Тут и отладчика не нужно. А вот когда он сложный - да и многие жалуются на его отсутствие. Хотелось бы услышать принципиальное мнение. А если проблема есть может кто и сообразит чего.
Может кто изобретет код по следующему алгоритму:
берем из анализируемого кода требуемую переменную печатаем ее в терминале
и в нем же получаем через Serial.print ее значение.
ок. давай алгоритм по которому будет вытаскиваться значение переменной в терминал.
лично я вижу два алгоритма:
язык и так детсадовский, я в нем разобрался за 2 часа....
иногда конечно пользуюсь принтом, но крайне редко, обычно или перефирийкаой видно (например светодид можно воткнуть) или вовсе нет ошибок
Ну когда проект детсадовский то это понятно. Тут и отладчика не нужно. А вот когда он сложный - да и многие жалуются на его отсутствие. Хотелось бы услышать принципиальное мнение. А если проблема есть может кто и сообразит чего.
Вы вероятно никогда в жизни не пробовали AutoLisp отлаживать... Вот там жестко все было в 90х....
а вообще главная проблемма отладки подобных вещей - это время, точнее зависимость циклов от времение и невозможность останавливать или вклиниватся в критические участки. И невозможность не в смысле реализации а в смысле что такая отладка будет изменять последовательность выполнения операторов, то есть отладка будет на одном коде а без отладки код будет другим...
подумайте над этим :)
подумайте над этим :)
над чем? способом вписать отладчик в код без вписывания отладчика в код? - не существует такого способа вне зависимости, пробовал я AutoLisp отлаживать или нет.
подумайте над этим :)
над чем? способом вписать отладчик в код без вписывания отладчика в код? - не существует такого способа вне зависимости, пробовал я AutoLisp отлаживать или нет.
над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.
над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.
ты больной? я тебя попросил описать словами алгоритм по которому ты собрался вытаскивать значение переменной из контроллера - зачем мне эта теория в стиле КО?
над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.
ты больной? я тебя попросил описать словами алгоритм по которому ты собрался вытаскивать значение переменной из контроллера - зачем мне эта теория в стиле КО?
я не собираюсь вытаскивать переменную, я против самой идеи дебугера,
единственный разумный вариант отладки ардуинки - это всякие эмуляторы....
единственный разумный вариант отладки ардуинки - это всякие эмуляторы....
кто тебе запрещает использовать всякие эмуляторы?
я от тебя дождусь вразумительного ответа, что ты хочешь вообще?
Коллеги! Есть такая идея. Поскольку у ардуины нет отладчика уменяпоявилась такая идея.
Натолкнуло на меня возможность через вставку в код команды
Serial.print(переменная) хоть что то получать для отладки и выводить в терминал.
Может кто изобретет код по следующему алгоритму:
берем из анализируемого кода требуемую переменную печатаем ее в терминале
и в нем же получаем через Serial.print ее значение.
Есть такой вариант: https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino
Мужики, мужики!!!!
Я конечно понимаю что в споре рождается истина, но давай те без личного! Я поэтому и обратился за помощью к вам как к спецам потому что в ардуине я пока еще 0. и поэтому для понимания работы алгоритма хотелось бы иметь переменные по которым алгоритм работает. Если это принципиально невозможно так и скажите! А если хоть какая то надежда есть то решение как говорится в студию! В виде кода желательно!!
Коллеги! Есть такая идея. Поскольку у ардуины нет отладчика уменяпоявилась такая идея.
Натолкнуло на меня возможность через вставку в код команды
Serial.print(переменная) хоть что то получать для отладки и выводить в терминал.
Может кто изобретет код по следующему алгоритму:
берем из анализируемого кода требуемую переменную печатаем ее в терминале
и в нем же получаем через Serial.print ее значение.
Есть такой вариант: https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino
А вот это уже очень интересно!! И очень реальная помощь!! Надо будет попробовать !!! СПАСИБО, старик!
Этот софт специфичный, однако на каком то этапе может помочь. Я им немного пользовался, но не всем он нравится. Пожалуйста, будешь должен ;) (шучу, конечно)
я не собираюсь вытаскивать переменную, я против самой идеи дебугера,
единственный разумный вариант отладки ардуинки - это всякие эмуляторы....
Я работаю с Протеусом. Вещь мощная! Но не получается выйти на отладку. В конце компиляции пишет про ошибку которую возвращает uoloader. Уточняю железная Ардуина у меня естессно не подключена!
Этот софт специфичный, однако на каком то этапе может помочь. Я им немного пользовался, но не всем он нравится. Пожалуйста, будешь должен ;) (шучу, конечно)
Насчет "должен" я долгов не забываю!! Щучу тоже конечно))) А вот твой реальный опыт в этом поднял бы долг на небывалую величину))
Коллеги! А может я вообще задачу для изобретения синхрофазатрона поставил? Упрощу ее. Есть Протеус - в нем эмулируется Ардуина. Требуется: вывести требуемые значения переменных при исполнении кода. Я делаю так: после вычисления переменной ставлю Serial.print и в виртуальном терминале Протеуса смотрю эту переменную. Но это ОЧЕНЬ неудобно. Вставляешь Serial.print в код, компилируешь, вставляешь HEX в эмулятор, запускаешь, смотришь!! Караул. Может как то проще можно?
над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.
Это не так! Для отладки критичных по скорости участков используется следующий подход.
1. Обявляется глобальный буфер и указатель на первый его байт.
2. В точке отладки. По созданому указателю пишется отладочная информация, по минимуму разумеется. Если надо то с меткой времени. Указатель инкрементится.
3. По завершению критичного по скорости участка или же принудительно по внешнему событию, все выводится куда хочется.
Различные эмуляторы применимы ограничено. В них не удастся задать специфику внешних устройств. Например серву, как устройство задать можна, можна даже учесть её скорость (а следовательно и время на позиционирование) а серву под нагрузкой уже не получится, т.к. эта нагрузка не всегда известна а её влияние на скорость производитель не декларирует.
Парни у меня не такой сложный код чтобы он влиял на время исполнения. Если переменная должна быть равна 2 например, то она и в Африке будет 2. Или не будет. Ну уж никак на 1.5. И если переменная содержит слово "дурак" значит так и есть! Или нет! Вот это "будет2 или "не будет", дурак или нет - важнее всего. А то как оно будет зависеть от тайминга это не столь важно!
Я делаю так: после вычисления переменной ставлю Serial.print и в виртуальном терминале Протеуса смотрю эту переменную. Но это ОЧЕНЬ неудобно. Вставляешь Serial.print в код, компилируешь, вставляешь HEX в эмулятор, запускаешь, смотришь!! Караул. Может как то проще можно?
если ты не заметил, то обращу твоё внимание - ты повторяешься.
ты уже говорил, что Serial.print тебе не подходит.
печатай в LCD-индикатор, если не подходит Serial
Я делаю так: после вычисления переменной ставлю Serial.print и в виртуальном терминале Протеуса смотрю эту переменную. Но это ОЧЕНЬ неудобно. Вставляешь Serial.print в код, компилируешь, вставляешь HEX в эмулятор, запускаешь, смотришь!! Караул. Может как то проще можно?
если ты не заметил, то обращу твоё внимание - ты повторяешься.
ты уже говорил, что Serial.print тебе не подходит.
печатай в LCD-индикатор, если не подходит Serial
Дружище, не обижайся но придется снова повториться. Serial подходит но очень неоперативно! Подскажи как сделать оперативнее.
Если переменная должна быть равна 2 например, то она и в Африке будет 2. Или не будет. Ну уж никак на 1.5. И если переменная содержит слово "дурак" значит так и есть! Или нет! Вот это "будет2 или "не будет", дурак или нет - важнее всего. А то как оно будет зависеть от тайминга это не столь важно!
это как??
приведи пример кода, где ты сделал a = 2; и у тебя оказалось а != 2;
Это не я сделал, а программа. В зависимости от определенных условий. И вот эту вилку значений переменной мне важно уловить. Это пример.
Дружище, не обижайся но придется снова повториться. Serial подходит но очень неоперативно! Подскажи как сделать оперативнее.
на светодиод выводи if (a == 2) {}
Это не я сделал, а программа. В зависимости от определенных условий. И вот эту вилку значений переменной мне важно уловить. Это пример.
приведи пример кода, иначе ты высасываешь несуществующие проблемы из реального пальца.
тогда придется затариваться кучей светодиодов для всех переменных объявленых в программе, для функций.
Я понял твою шутку юмора))
Это не я сделал, а программа. В зависимости от определенных условий. И вот эту вилку значений переменной мне важно уловить. Это пример.
приведи пример кода, иначе ты высасываешь несуществующие проблемы из реального пальца.
Ок чтобы абстрагироваться от кодов попробую сформулировать еще раз. Как организовать отслеживание переменных при выполнении кода. Если я буду знать это то сам смогу отследить как работает код.
Ок чтобы абстрагироваться от кодов попробую сформулировать еще раз.
я тебя прошу привести пример кода, где тебе критически не подходит Serial.print
после того, как ты убедишь меня, что проблема существует, а не выдумана тобой ради убийства моего личного времени - будем думать о применении телепатических методов
Дружище, если у тебя проблемы со временем для меня я же не настаиваю. Или я тупой не могу объяснить что хочу! Но у меня в коде нет Сериалов изначально )). Я их туда сам вставляю чтобы потом в терминале прочитать значение переменной. Так что боюсь ты бесполезно тратишь на меня время! Сорри за беспокойство!
Но у меня в коде нет Сериалов изначально )). Я их туда сам вставляю чтобы потом в терминале прочитать значение переменной.
у меня чисто энтомологический интерес к твоей личной проблеме.
кто за тебя должен сериалы вставлять?
Если не учитывать мою природную любознательность, то никто! Как мне еще исхитриться объяснить? Ну нет их там изначально! Нужно мне увидеть чему равна переменная, я вставляю Сериал и через терминал читаю! Прочитал выкинул! У меня проблема не во вставлении чего то в код, а в возможности прочитать переменную во время его исполнения. Забудь ты про этот Сериал. Не к ночи он будет упомянут. Подскажи как переменные отслеживать!
Подскажи как переменные отслеживать!
телепатически - иначе никак
ну, тоже результат)) хотя мнение других тоже хотелось бы услышать
Коллеги, а с этим кто нибудь встречался? Может кто помочь?
Я работаю с Протеусом. Вещь мощная! Но не получается выйти на отладку. В конце компиляции пишет про ошибку которую возвращает uoloader. Уточняю железная Ардуина у меня естессно не подключена!
А в самой Ардуине данный скетч компилируется?
У меня было такое, сменил версию Ардуино!
C компиляцией все в порядке. Версия Ардуины - последняя версия 1.6.8
Забыл сказать Протеус 8.1 SP1 Build 17358
берем из анализируемого кода требуемую переменную печатаем ее в терминале
эврика! ) так воскликнул архимед. Вы изобрели велосипед. В ардуине Serial и придуман для простой отладки без покупки каких либо отладчиков. Можно конечно попытаться автоматизировать эту часть, но если честно не вижу смысла. Руками вставить некоторое количество строк для печати информации так, чтобы по терминалу можно было отладить програму не сложно.
Ваша идея в некотором виде реализована в visualmicro, но за реализацию просят денег
Ваша идея не заменит нормальной отладки, даже рядом не стоит. Если хоть когда нибудь попробуете нормальный железный отладчик то сможете понять о чем я говорю. Увы, к сожалению отладчики для атмелов дорого, сейчас это в минимуме что то около 100 долларов и то если не здесь покупать. Китайских аналогов нормально работающих нет. Если повезет можно купить старый добрый AVRDRAGON или какой б/у отладчик. Я пользуюсь JTAGICE2, это конечно космос в сравнении с Serial.print
Ну есть еще один вариант - STM8/STM32, там отладчик стоит вполне нормально, особенно если брать китайца
ну и симулятор никто не отменял. некоторые вполне успешно делают отладку в Proteus
Ну так я и спорю с этим! Я же написал - псевдоотладчик. Мне ничего особенного и не нужно. Видеть бы переменные при работе программы по моему вводу их, а уж шаги то я сам отслежу. А за инфу спасибо. Поищу. Вот бы кто к врачу меня направил по Протеусу, а то не выходит у меня отладка на нем - вообще бы цены не было))
Протеус по умолчанию использует не ту Ардуино что установлена у Вас в системе а свою, которую он загружает в процесе установки и версия эта у меня была 1.0.6. Я ее сменил на 1.6.3 (более свежая выдавала ошибки). Так вот именно ту что использует Протеус необходимо обслуживать, тоесть в эту директорию ставить все библиотеки которые Вы используете.
Т е как я понял нужно 1.6.8 заменить на 1.6.3 ?
А с библиотеками я именно так и поступаю. Они стоят в Ардуиновской библиотеке.
Дружище, ты гений!
Я поступил так как ты посоветовал, поставил Ардуину 1.6.3 и отладчик в Протеусе пошел!!!
Спасибо!!