Псевдоотладчик для Ардуино

starcom
Offline
Зарегистрирован: 11.01.2016

Коллеги! Есть такая идея. Поскольку у ардуины нет отладчика уменяпоявилась такая идея.

Натолкнуло на меня возможность через вставку в код команды

Serial.print(переменная) хоть что то получать для отладки и выводить в терминал.

Может кто изобретет код по следующему алгоритму:

берем из анализируемого кода требуемую переменную печатаем ее в терминале

и в нем же получаем через Serial.print ее значение.

vde69
Offline
Зарегистрирован: 10.01.2016

язык и так детсадовский, я в нем разобрался за 2 часа....

иногда конечно пользуюсь принтом, но крайне редко, обычно или перефирийкаой видно (например светодид можно воткнуть) или вовсе нет ошибок

starcom
Offline
Зарегистрирован: 11.01.2016

vde69 пишет:

язык и так детсадовский, я в нем разобрался за 2 часа....

иногда конечно пользуюсь принтом, но крайне редко, обычно или перефирийкаой видно (например светодид можно воткнуть) или вовсе нет ошибок

Ну когда проект детсадовский то это понятно. Тут и отладчика не нужно. А вот когда он сложный - да и многие жалуются на его отсутствие. Хотелось бы услышать принципиальное мнение. А если проблема есть может кто и сообразит чего.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Может кто изобретет код по следующему алгоритму:

берем из анализируемого кода требуемую переменную печатаем ее в терминале

и в нем же получаем через Serial.print ее значение.

ок. давай алгоритм по которому будет вытаскиваться значение переменной в терминал.

лично я вижу два алгоритма:

1. вписываем в loop условие печатать в терминал значение переменной при получении имени этой переменной из терминала.
2. при наличии чего-то в буфере UART срабатывает прерывание - печатаем значение переменной в терминал.
 
т.е.
1. этот вариант ты можешь реализовать прямо сейчас - если сложно получать имя переменной, то прицепи кнопку и печатай себе лог всего, чего желаешь, при ея нажатии.
2. этот вариант малоценен - ты не будешь знать, в какой момент работы кода ты получил переменную. на то она и переменная, что принимает разные значения в разных участках кода.
 
итак:
твой 3-й вариант алгоритма.
vde69
Offline
Зарегистрирован: 10.01.2016

starcom пишет:

vde69 пишет:

язык и так детсадовский, я в нем разобрался за 2 часа....

иногда конечно пользуюсь принтом, но крайне редко, обычно или перефирийкаой видно (например светодид можно воткнуть) или вовсе нет ошибок

Ну когда проект детсадовский то это понятно. Тут и отладчика не нужно. А вот когда он сложный - да и многие жалуются на его отсутствие. Хотелось бы услышать принципиальное мнение. А если проблема есть может кто и сообразит чего.

 

Вы вероятно никогда в жизни не пробовали AutoLisp отлаживать... Вот там жестко все было в 90х....

а вообще главная проблемма отладки подобных вещей - это время, точнее зависимость циклов от времение и невозможность останавливать или вклиниватся в критические участки. И невозможность не в смысле реализации а в смысле что такая отладка будет изменять последовательность выполнения операторов, то есть отладка будет на одном коде а без отладки код будет другим...

 

подумайте над этим :)

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

vde69 пишет:

подумайте над этим :)

над чем? способом вписать отладчик в код без вписывания отладчика в код? - не существует такого способа вне зависимости, пробовал я AutoLisp отлаживать или нет.

vde69
Offline
Зарегистрирован: 10.01.2016

Клапауций 322 пишет:

vde69 пишет:

подумайте над этим :)

над чем? способом вписать отладчик в код без вписывания отладчика в код? - не существует такого способа вне зависимости, пробовал я AutoLisp отлаживать или нет.

 

над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

vde69 пишет:

над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.

ты больной? я тебя попросил описать словами алгоритм по которому ты собрался вытаскивать значение переменной из контроллера - зачем мне эта теория в стиле КО?

vde69
Offline
Зарегистрирован: 10.01.2016

Клапауций 322 пишет:

vde69 пишет:

над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.

ты больной? я тебя попросил описать словами алгоритм по которому ты собрался вытаскивать значение переменной из контроллера - зачем мне эта теория в стиле КО?

 

я не собираюсь вытаскивать переменную, я против самой идеи дебугера,

единственный разумный вариант отладки ардуинки - это всякие эмуляторы....

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

vde69 пишет:

единственный разумный вариант отладки ардуинки - это всякие эмуляторы....

кто тебе запрещает использовать всякие эмуляторы?

я от тебя дождусь вразумительного ответа, что ты хочешь вообще?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

starcom пишет:

Коллеги! Есть такая идея. Поскольку у ардуины нет отладчика уменяпоявилась такая идея.

Натолкнуло на меня возможность через вставку в код команды

Serial.print(переменная) хоть что то получать для отладки и выводить в терминал.

Может кто изобретет код по следующему алгоритму:

берем из анализируемого кода требуемую переменную печатаем ее в терминале

и в нем же получаем через Serial.print ее значение.

Есть такой вариант: https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino

 

 

starcom
Offline
Зарегистрирован: 11.01.2016

Мужики, мужики!!!!

Я конечно понимаю что в споре рождается истина, но давай те без личного! Я поэтому и обратился за помощью к вам как к спецам потому что в ардуине я пока еще 0. и поэтому для понимания работы алгоритма хотелось бы иметь переменные по которым алгоритм работает. Если это принципиально невозможно так и скажите! А если хоть какая то надежда есть то решение как говорится в студию!  В виде кода желательно!!

starcom
Offline
Зарегистрирован: 11.01.2016

kisoft пишет:

starcom пишет:

Коллеги! Есть такая идея. Поскольку у ардуины нет отладчика уменяпоявилась такая идея.

Натолкнуло на меня возможность через вставку в код команды

Serial.print(переменная) хоть что то получать для отладки и выводить в терминал.

Может кто изобретет код по следующему алгоритму:

берем из анализируемого кода требуемую переменную печатаем ее в терминале

и в нем же получаем через Serial.print ее значение.

Есть такой вариант: https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino

А вот это уже очень интересно!! И очень реальная помощь!! Надо будет попробовать !!! СПАСИБО, старик!

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Этот софт специфичный, однако на каком то этапе может помочь. Я им немного пользовался, но не всем он нравится. Пожалуйста, будешь должен ;) (шучу, конечно)

 

starcom
Offline
Зарегистрирован: 11.01.2016

vde69 пишет:

я не собираюсь вытаскивать переменную, я против самой идеи дебугера,

единственный разумный вариант отладки ардуинки - это всякие эмуляторы....

Я работаю с Протеусом. Вещь мощная! Но не получается выйти на отладку. В конце компиляции пишет про ошибку которую возвращает uoloader. Уточняю железная Ардуина у меня естессно не подключена!

starcom
Offline
Зарегистрирован: 11.01.2016

kisoft пишет:

Этот софт специфичный, однако на каком то этапе может помочь. Я им немного пользовался, но не всем он нравится. Пожалуйста, будешь должен ;) (шучу, конечно)

Насчет "должен" я долгов не забываю!! Щучу тоже конечно))) А вот твой реальный опыт в этом поднял бы долг на небывалую величину))

starcom
Offline
Зарегистрирован: 11.01.2016

Коллеги! А может я вообще задачу для изобретения синхрофазатрона поставил? Упрощу ее. Есть Протеус - в нем эмулируется Ардуина. Требуется: вывести требуемые значения переменных при исполнении кода. Я делаю так: после вычисления переменной ставлю Serial.print и в виртуальном терминале Протеуса смотрю эту переменную. Но это ОЧЕНЬ неудобно. Вставляешь Serial.print в код, компилируешь, вставляешь HEX в эмулятор, запускаешь, смотришь!! Караул. Может как то проще можно?

Logik
Offline
Зарегистрирован: 05.08.2014

vde69 пишет:

 

над тем, что приложения ардуинки привязаны по тайму к железу, и их банально НЕЛЬЗЯ отлаживать, по тому как один и то-же код будет выполнятся по разному из-за задержки в 0.01 сек на отсылку данных в порт. Это особенность любого низкоуровневого программирования.

Это не так! Для отладки критичных по скорости участков используется следующий подход.

1. Обявляется глобальный буфер и указатель на первый его байт.

2. В точке отладки. По созданому указателю пишется отладочная информация, по минимуму разумеется. Если надо то с меткой времени. Указатель инкрементится.

3. По завершению критичного по скорости участка или же принудительно по внешнему событию, все выводится куда хочется.

Различные эмуляторы применимы ограничено. В них не удастся задать специфику внешних устройств. Например серву, как устройство задать можна, можна даже учесть её скорость (а следовательно и время на позиционирование) а серву под нагрузкой уже не получится, т.к. эта нагрузка не всегда известна а её влияние на скорость производитель не декларирует.

starcom
Offline
Зарегистрирован: 11.01.2016

Парни у меня не такой сложный код чтобы он влиял на время исполнения. Если переменная должна быть равна 2 например, то она и в Африке будет 2. Или не будет. Ну уж никак на 1.5. И если переменная содержит слово "дурак" значит так и есть! Или нет! Вот это "будет2 или "не будет", дурак или нет -  важнее всего. А то как оно будет зависеть от тайминга это не столь важно!

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Я делаю так: после вычисления переменной ставлю Serial.print и в виртуальном терминале Протеуса смотрю эту переменную. Но это ОЧЕНЬ неудобно. Вставляешь Serial.print в код, компилируешь, вставляешь HEX в эмулятор, запускаешь, смотришь!! Караул. Может как то проще можно?

если ты не заметил, то обращу твоё внимание - ты повторяешься.

ты уже говорил, что Serial.print тебе не подходит.

печатай в LCD-индикатор, если не подходит Serial

starcom
Offline
Зарегистрирован: 11.01.2016

Клапауций 322 пишет:

starcom пишет:

Я делаю так: после вычисления переменной ставлю Serial.print и в виртуальном терминале Протеуса смотрю эту переменную. Но это ОЧЕНЬ неудобно. Вставляешь Serial.print в код, компилируешь, вставляешь HEX в эмулятор, запускаешь, смотришь!! Караул. Может как то проще можно?

если ты не заметил, то обращу твоё внимание - ты повторяешься.

ты уже говорил, что Serial.print тебе не подходит.

печатай в LCD-индикатор, если не подходит Serial

Дружище, не обижайся но придется снова повториться. Serial подходит но очень неоперативно! Подскажи как сделать оперативнее.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Если переменная должна быть равна 2 например, то она и в Африке будет 2. Или не будет. Ну уж никак на 1.5. И если переменная содержит слово "дурак" значит так и есть! Или нет! Вот это "будет2 или "не будет", дурак или нет -  важнее всего. А то как оно будет зависеть от тайминга это не столь важно!

это как??

приведи пример кода, где ты сделал a = 2; и у тебя оказалось а != 2;

starcom
Offline
Зарегистрирован: 11.01.2016

Это не я сделал, а программа. В зависимости от определенных условий. И вот эту вилку значений переменной мне важно уловить. Это пример.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Дружище, не обижайся но придется снова повториться. Serial подходит но очень неоперативно! Подскажи как сделать оперативнее.

на светодиод выводи if (a == 2) {}

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Это не я сделал, а программа. В зависимости от определенных условий. И вот эту вилку значений переменной мне важно уловить. Это пример.

приведи пример кода, иначе ты высасываешь несуществующие проблемы из реального пальца.

starcom
Offline
Зарегистрирован: 11.01.2016

тогда придется затариваться кучей светодиодов для всех переменных объявленых в программе, для функций.

Я понял твою шутку юмора))

starcom
Offline
Зарегистрирован: 11.01.2016

Клапауций 322 пишет:

starcom пишет:

Это не я сделал, а программа. В зависимости от определенных условий. И вот эту вилку значений переменной мне важно уловить. Это пример.

приведи пример кода, иначе ты высасываешь несуществующие проблемы из реального пальца.

Ок чтобы абстрагироваться от кодов попробую сформулировать еще раз. Как организовать отслеживание переменных при выполнении кода. Если я буду знать это то сам смогу отследить как работает код.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Ок чтобы абстрагироваться от кодов попробую сформулировать еще раз.

я тебя прошу привести пример кода, где тебе критически не подходит Serial.print

после того, как ты убедишь меня, что проблема существует, а не выдумана тобой ради убийства моего личного времени - будем думать о применении телепатических методов

starcom
Offline
Зарегистрирован: 11.01.2016

Дружище, если у тебя проблемы со временем для меня я же не настаиваю. Или я тупой не могу объяснить что хочу! Но у меня в коде нет Сериалов изначально )). Я их туда сам вставляю чтобы потом в терминале прочитать значение переменной. Так что боюсь ты бесполезно тратишь на меня время! Сорри за беспокойство!

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Но у меня в коде нет Сериалов изначально )). Я их туда сам вставляю чтобы потом в терминале прочитать значение переменной.

у меня чисто энтомологический интерес к твоей личной проблеме.

кто за тебя должен сериалы вставлять?

starcom
Offline
Зарегистрирован: 11.01.2016

Если не учитывать мою природную любознательность, то никто! Как мне еще исхитриться объяснить? Ну нет их там изначально! Нужно мне увидеть чему равна переменная, я вставляю Сериал и через терминал читаю! Прочитал выкинул! У меня проблема не во вставлении чего то в код, а в возможности прочитать переменную во время его исполнения. Забудь ты про этот Сериал. Не к ночи он будет упомянут. Подскажи как переменные отслеживать!

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

starcom пишет:

Подскажи как переменные отслеживать!

телепатически - иначе никак

starcom
Offline
Зарегистрирован: 11.01.2016

ну, тоже результат)) хотя мнение других тоже хотелось бы услышать

starcom
Offline
Зарегистрирован: 11.01.2016

Коллеги, а с этим кто нибудь встречался? Может кто помочь?

Я работаю с Протеусом. Вещь мощная! Но не получается выйти на отладку. В конце компиляции пишет про ошибку которую возвращает uoloader. Уточняю железная Ардуина у меня естессно не подключена!

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

А в самой Ардуине данный скетч компилируется?

У меня было такое, сменил версию Ардуино!

starcom
Offline
Зарегистрирован: 11.01.2016

C компиляцией все в порядке. Версия Ардуины - последняя версия 1.6.8

Забыл сказать Протеус 8.1 SP1 Build 17358

axill
Offline
Зарегистрирован: 05.09.2011

starcom пишет:

берем из анализируемого кода требуемую переменную печатаем ее в терминале

эврика! ) так воскликнул архимед. Вы изобрели велосипед. В ардуине Serial и придуман для простой отладки без покупки каких либо отладчиков. Можно конечно попытаться автоматизировать эту часть, но если честно не вижу смысла. Руками вставить некоторое количество строк для печати информации так, чтобы по терминалу можно было отладить програму не сложно.

Ваша идея в некотором виде реализована в visualmicro, но за реализацию просят денег

Ваша идея не заменит нормальной отладки, даже рядом не стоит. Если хоть когда нибудь попробуете нормальный железный отладчик то сможете понять о чем я говорю. Увы, к сожалению отладчики для атмелов дорого, сейчас это в минимуме что то около 100 долларов и то если не здесь покупать. Китайских аналогов нормально работающих нет. Если повезет можно купить старый добрый AVRDRAGON или какой б/у отладчик. Я пользуюсь JTAGICE2, это конечно космос в сравнении с Serial.print

Ну есть еще один вариант - STM8/STM32, там отладчик стоит вполне нормально, особенно если брать китайца

ну и симулятор никто не отменял. некоторые вполне успешно делают отладку в Proteus

starcom
Offline
Зарегистрирован: 11.01.2016

Ну так я и спорю с этим! Я же написал - псевдоотладчик. Мне ничего особенного и не нужно. Видеть бы переменные при работе программы по моему вводу их, а уж шаги то я сам отслежу. А за инфу спасибо. Поищу. Вот бы кто к врачу меня направил по Протеусу, а то не выходит у меня отладка на нем - вообще бы цены не было))

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Протеус по умолчанию использует не ту Ардуино что установлена у Вас в системе а свою, которую он загружает в процесе установки и версия эта у меня была 1.0.6. Я ее сменил на 1.6.3 (более свежая выдавала ошибки). Так вот именно ту что использует Протеус необходимо обслуживать, тоесть в эту директорию ставить все библиотеки которые Вы используете.  

starcom
Offline
Зарегистрирован: 11.01.2016

Т е как я понял нужно 1.6.8 заменить на 1.6.3 ?

А с библиотеками я именно  так и поступаю. Они стоят в Ардуиновской библиотеке.

starcom
Offline
Зарегистрирован: 11.01.2016

Дружище, ты гений!

Я поступил так как ты посоветовал, поставил Ардуину 1.6.3 и отладчик в Протеусе пошел!!!

Спасибо!!