Есть ли средства отладки программ на Ардуино?

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Доброго времени суток!

Подскажите как отлаживать программу на языке Ардуино?

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

void switch_light (byte lamps) {
byte tmp;
    tmp = current_state_lights & lamps; 
    // запрашиваемые лампы горят?
    if (tmp == lamps) 
    {
    // Исключаем из текущего состояния  лампы
    current_state_lights = current_state_lights & ~lamps; 
    } 
    else
    {
    // Добавляем к текущему состоянию лампы
    current_state_lights = current_state_lights | lamps;
    }
}

Другая функция включения и выключения ламп с такими же побитовыми операциями работает.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Может быть есть сторонние отладчики?

dmw
Offline
Зарегистрирован: 24.03.2013

Proteus http://robocraft.ru/blog/arduino/114.html

Или Serial.println(); на каждом шаге.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

попробую по USB.

С Протеусом надо конкретно разбираться, возьму на заметку, спасибо.

Толко не понятно, почему же функция не работает? Ведь оператор if должен по любому совершить одно из двух действий, но не совершает...

Пробовал и switch применить - тоже самое. Такое ощущение, что функция не вызывается.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Есть идея!

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

А после каждого оператора в коде поставить Serial.println() и delay(2000) чтобы успевать нажать кнопку.

Будет работать такой пошаговый режим и надо ли в обработчике запрещать прерывания на время его выполнения?

ites
Offline
Зарегистрирован: 26.12.2013

vadim.tusur пишет:

Доброго времени суток!

Подскажите как отлаживать программу на языке Ардуино?

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

 

А какие признаки "не работает" и как именно вызывается эта функция?

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

Можете попробовать такой отладчик (правда не понятно, какой у Вас Ардуино):

https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino

Подключается в виде библиотеки. Я раньше пользовался на своем Леонардо.

 

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

ites: функция типа процедура, вызывается в цикле loop, ничего особенного. А не работает - не переключает светодиоды.

kisoft: Ардуино Уно

 

 

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Спасибо большое за библиотеку!!!!!

Нашел проблему!

if работает как надо, перед завершением процедуры забыл отправить новое значение в порт :)

Sobachnik
Offline
Зарегистрирован: 24.04.2014

Я проделал все в точности:

Kisoft: Можете попробовать такой отладчик (правда не понятно, какой у Вас Ардуино):

            https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino

            Подключается в виде библиотеки. Я раньше пользовался на своем Леонардо.

но, к в результате в окне Serial Monitor выскочила какая-то абра-кадабра из непонятных символов. Подскажите, как с этим бороться? Уменя Ардуино Мега 2560.

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

Serial.print - основной отладчик ардуино)

Есть еще пакет в visualmicro.com, но стоит денег (сама среда бесплатна, денег стоит отладчик). Сам не пробовал.

про протеус вам уже написали, правда нельзя назвать протеус отладчиком, это симулятор всего лишь

права все перечисленное меркнет перед железными отладчиками от атмела ))) но увы ардуина с ними не дружит. Особенно прелестна отладка по JTAG, как раз atmega2560 поддерживает такую отладку. В железном отладчике можно ставить точки останова, видеть состояние портов (не симулятор, а железо!), редактировать значения переменных, eeprom во время отладки без перепрошивки и т.д.

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

Sobachnik пишет:

Я проделал все в точности:

Kisoft: Можете попробовать такой отладчик (правда не понятно, какой у Вас Ардуино):

            https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino

            Подключается в виде библиотеки. Я раньше пользовался на своем Леонардо.

но, к в результате в окне Serial Monitor выскочила какая-то абра-кадабра из непонятных символов. Подскажите, как с этим бороться? Уменя Ардуино Мега 2560.


Увы, я не телепат. Что выводит то? Скорость порта в мониторе соответствует тому, что в программе?

n00b
Offline
Зарегистрирован: 14.02.2014

kisoft пишет:
Можете попробовать такой отладчик (правда не понятно, какой у Вас Ардуино):

https://sites.google.com/site/vanyambauseslinux/arduino/otladka-sketcej-arduino

Подключается в виде библиотеки. Я раньше пользовался на своем Леонардо.

 

Как раз вчера наткнулся на фиготень Visual Micro. На робокрафте был пост про неё, правда старенький.

Раньше эта либа (плагин?) цеплялась на MS Visual Studio. Теперь умеет цепляться ещё и на бесплатную среду Atmel Studio 6.2.  (в этой среде, я так понял, используется т.н."изолированная" либа от того же Visual Studio).

Правда, среда бесплатная, а вот эта Микра - 30 уёв за 1 экземпляр хотят. Так триал ставится, не понял, на какое время.

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

Вероятно, задействован именно этот механизм, что и по ссылке товарища kisoft.

Сухой остаток, мало чего я понял, разве что одно: ЕСТЬ инструменты для отладки на Ардуине! :)

ЗЫ сорри, два поста назад эту прогу упоминают уже. Ну да может кто поставит, да подскажет, как эти брыкпойнты активизировать :) а то пока не получилось....

vvk
Offline
Зарегистрирован: 05.01.2015

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

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

vvk пишет:
Че-то не пойму, а что для адрудино действительно нормального отладчика нет?

Зачем Вам отладчик? Хотите трахаться, как нормальные пацаны, берите STM с JTAG, а не ардуино. Здесь, как выше уже было замечено, основной отладчик - Serial.print.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Если  нужна отладка, пишите в AVR Studio на чистом ''C".

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

И чем поможет написание на чистом С с точки зрения отладки?

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

kisoft пишет:
И чем поможет написание на чистом С с точки зрения отладки?

не Си, а AVR Studio, я так понимаю

alex_r61
Offline
Зарегистрирован: 20.06.2012

В AVR Studio есть отладчик и можно использовать аппаратные средства отладки. Но зачастую

хватает простого прогона.  А если знаком с ассемблером, то можно загнать hex файл от Arduino

и прогнать по шагам.

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

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

alex_jk
Offline
Зарегистрирован: 10.07.2011

Я хоть и новичок но имхо Arduino ide полное УГ, пользуюсь visual studio + visualmicro, там и автодополнение кода, и дебагер, русский язык, и уже все безплатно ! русскоязычной литератури, и титориулов мало, но я буквально за 1 вечер в общих очертаниях разобрался, так что рекомендую !