Как пошагово проверить созданную программу

grey-vsm
grey-vsm аватар
Offline
Зарегистрирован: 01.12.2016

В ARDUINO IDE 1.6.9 Genuino разве нет возможности пошаговой проверки программ. Я написал простую программу

/*
 * Бегущий огонек, два огонька от центра к краям и обратно. Шкала светодиодов подключена к группе пинов 

расположенных
 * подряд от 2 до 11 pin.
 */
   #define FIST_LED_PIN 2
   #define LAST_LED_PIN 9
   #define pause 1000
   int pin;

   void setup() 
     {
      /*
       * Выполняем pinMode в цикле for для каждого пина
       * (переменная pin) от первого ( =FIST_LED_PIN) до
       * последнего включительно ( <=LAST_LED_PIN), всякий раз продвигаясь
       * к следующиму ( ++pin увеличивает значение pin на единицу).
       * Так все пины от 2-го по 11-й друг за другом станут выходами
       */
      for (int pin=FIST_LED_PIN; pin<=LAST_LED_PIN; pin++)
         {
          pinMode(pin, OUTPUT);
          digitalWrite(pin, LOW);
         }
      }

   void loop() 
     {       
      // Цикл движения огоньков от центра к крайним светодиодам
       for (int i=0;i<4;i++)
        {
         pin=4+i;
         digitalWrite(pin, HIGH);
         pin=3-i;
         digitalWrite(pin, HIGH);
         delay(pause);
         pin=4+i;
         digitalWrite(pin, LOW);
         pin=3-i;
         digitalWrite(pin, LOW);
         delay(pause);
          }

      // Цикл движения огоньков от крайних светодиодов к центральным
       for (int i=4;i<0;i--)
        {
         pin=3+i;
         digitalWrite(pin, HIGH);
         pin=4-i;
         digitalWrite(pin, HIGH);
         delay(pause);
         pin=3+i;
         digitalWrite(pin, LOW);
         pin=4-i;
         digitalWrite(pin, LOW);
         delay(pause);
          }
        }
но она собранная на монтажной плате не работает так как нужно, но при просчете каждого шага программы на бумаге выходит так как задумывалось. Поэтому хотелось бы используя пошаговый режим работы программы просматреть как она работает с 
 
просмотром выходных регистров.
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Выводите всё, что Вам нужно в монитор порта и смотрите.

nik182
Offline
Зарегистрирован: 04.05.2015

Вы бы написали как нужно и как работает и чем работа и нужно отличается. Тогда бы можно было подумать над листингом. А так  не понятно что вас не устраивает. Программа рабочая. 

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

grey-vsm пишет:

В ARDUINO IDE 1.6.9 Genuino разве нет возможности пошаговой проверки программ. Я написал простую программу

/*
 * Бегущий огонек, два огонька от центра к краям и обратно. Шкала светодиодов подключена к группе пинов 

расположенных
 * подряд от 2 до 11 pin.
 */
   #define FIST_LED_PIN 2
   #define LAST_LED_PIN 9
   #define pause 1000
   int pin;

   void setup() 
     {
      /*
       * Выполняем pinMode в цикле for для каждого пина
       * (переменная pin) от первого ( =FIST_LED_PIN) до
       * последнего включительно ( <=LAST_LED_PIN), всякий раз продвигаясь
       * к следующиму ( ++pin увеличивает значение pin на единицу).
       * Так все пины от 2-го по 11-й друг за другом станут выходами
       */
      for (int pin=FIST_LED_PIN; pin<=LAST_LED_PIN; pin++)
         {
          pinMode(pin, OUTPUT);
          digitalWrite(pin, LOW);
         }
      }

   void loop() 
     {       
      // Цикл движения огоньков от центра к крайним светодиодам
       for (int i=0;i<4;i++)
        {
         pin=4+i;
         digitalWrite(pin, HIGH);
         pin=3-i;
         digitalWrite(pin, HIGH);
         delay(pause);
         pin=4+i;
         digitalWrite(pin, LOW);
         pin=3-i;
         digitalWrite(pin, LOW);
         delay(pause);
          }

      // Цикл движения огоньков от крайних светодиодов к центральным
       for (int i=4;i<0;i--)
        {
         pin=3+i;
         digitalWrite(pin, HIGH);
         pin=4-i;
         digitalWrite(pin, HIGH);
         delay(pause);
         pin=3+i;
         digitalWrite(pin, LOW);
         pin=4-i;
         digitalWrite(pin, LOW);
         delay(pause);
          }
        }
но она собранная на монтажной плате не работает так как нужно, но при просчете каждого шага программы на бумаге выходит так как задумывалось. Поэтому хотелось бы используя пошаговый режим работы программы просматреть как она работает с 
 
просмотром выходных регистров.

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

grey-vsm
grey-vsm аватар
Offline
Зарегистрирован: 01.12.2016

nik182 пишет:

Вы бы написали как нужно и как работает и чем работа и нужно отличается. Тогда бы можно было подумать над листингом. А так  не понятно что вас не устраивает. Программа рабочая. 

Вообще я считал что в коментариях которые я написал в программе было понятно что должна делать программа. Тогда так: Я хотел зделать бегущие огоньки Два огонька двигаются от центра к краям, затем обратно и так далее.

grey-vsm
grey-vsm аватар
Offline
Зарегистрирован: 01.12.2016

ЕвгенийП пишет:

Выводите всё, что Вам нужно в монитор порта и смотрите.

А как это делается. Я еще тока начинаю работать с Arduino и мне еще много-чево не знакомо

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Serial.print("a=");
Serial.println(a);

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Предвижу ошибку компиляции типа "a doesn't declared in this scope"...

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012
      for (int pin=FIST_LED_PIN; pin<=LAST_LED_PIN; pin++)

не проще было написать цифру 2 и цифру 9? или пины у вас динамические по дуине бегают?

хороший программист, ленивый программист :))

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

повторитель на стоп?

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

сколько всего светодиодов?

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Цитата:

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

Пошаговая отладка есть только в серьёзных IDE, типа Atmel Studio. Там можно пошагово смотреть выполнение программы. При этом видно содержимое регистров, переменных и т.д. Но нужен ещё железный отладчик. В общем, с ардуино этот вариант не получится.

knack пишет:

Наверное потому что, программа выполняется не в иде , а в мк, как вы себе это представляете?

Представьте, в серьёзных IDE такое возможно. Информация из МК через отладчик передаётся обратно в IDE и можно видеть выполнение программы в IDE.

nik182
Offline
Зарегистрирован: 04.05.2015

Ну тогда в 46 строке i<0 поменяйте на i<1

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Можно проверить при помощи виртуальной машины отладки.

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

Jeka_M пишет:

Цитата:

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

Пошаговая отладка есть только в серьёзных IDE, типа Atmel Studio. Там можно пошагово смотреть выполнение программы. При этом видно содержимое регистров, переменных и т.д. Но нужен ещё железный отладчик. В общем, с ардуино этот вариант не получится.

knack пишет:

Наверное потому что, программа выполняется не в иде , а в мк, как вы себе это представляете?

Представьте, в серьёзных IDE такое возможно. Информация из МК через отладчик передаётся обратно в IDE и можно видеть выполнение программы в IDE.

Представляю, но форум вроде о опенсурс фри балалайке ардуине???

хотя к PDE  вроде прикрутили какой то.

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012
boolean tudaSuda = true;
int ledPin = 0;

void loop(){
for(int i = 0; i<10; i++){
  if (i==10||i==0 )tudaSuda = !tudaSuda;
  if(tudaSuda == false){
    digitaWrite(ledPin, HIGH);
    delay(50);
    ledPin++;
    digitaWrite(ledPin-1, LOW);
  }else{
    digitalWrite(ledPin, LOW);
    delay(50);
    ledPin--;
    digitalWrite(ledPin+1, HIGH);
  
  }
} 
}

 

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

На самом деле можно отлаживать код Arduino и при помощи AVR Studio, используя HappyJTAG2, но для этого нужны две вещи: подключиться к выводам JTAG и иметь объектный файл проекта, собранный с отладочными ключами. Владельцы ардуино не способны, к сожалению, ни на первое, ни на второе. Поэтому они считают, что отладка не поддерживается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

uni пишет:

На самом деле можно отлаживать код Arduino и при помощи AVR Studio, используя HappyJTAG2, но для этого нужны две вещи: подключиться к выводам JTAG и иметь объектный файл проекта, собранный с отладочными ключами. Владельцы ардуино не способны, к сожалению, ни на первое, ни на второе. Поэтому они считают, что отладка не поддерживается.

Так на Ардуино она действительно не поддерживается (см. документацию по Ардуино).

negavoid
Offline
Зарегистрирован: 09.07.2016
uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

ЕвгенийП пишет:

uni пишет:

На самом деле можно отлаживать код Arduino и при помощи AVR Studio, используя HappyJTAG2, но для этого нужны две вещи: подключиться к выводам JTAG и иметь объектный файл проекта, собранный с отладочными ключами. Владельцы ардуино не способны, к сожалению, ни на первое, ни на второе. Поэтому они считают, что отладка не поддерживается.

Так на Ардуино она действительно не поддерживается (см. документацию по Ардуино).

Я отлаживаю код Arduino под отладчиком JTAG ICE mkII в AVR Studio, а вы продолжайте смотреть в документацию.

Отладка Arduino

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Так выглядит отладка в AVR Studio (кликабельно).

v5froz0gg.png

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

uni пишет:

Я отлаживаю код Arduino под отладчиком JTAG ICE mkII в AVR Studio, а вы продолжайте смотреть в документацию.

О_О

ебанутся туфли гнутся! - кто-то в тырнете пользуется отладчиком JTAG ICE mkII в AVR Studio.

inspiritus
Offline
Зарегистрирован: 17.12.2012

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

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

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

перед do-while вставлять вывод в монитор требуемых переменных.

фактически Вы получаете достаточно информативный отладчик.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Жаль, что на этом форуме нет модерации. Бан здесь плачет уже по многим. Развелось пустословов и матершинников немеряно, превратив сайт в флудопомойку. Такой форум стыдно куму показать или сослаться.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

uni пишет:

Так на Ардуино она действительно не поддерживается (см. документацию по Ардуино).

Я отлаживаю код Arduino под отладчиком JTAG ICE mkII в AVR Studio

 

Вы может отлаживать код в AVR студии или ешё в чём-нибудь. Но делаете Вы это в AVR студии именно потому, что Ардуино таки вещей не поддерживает.

Вы, похоже, не видите разницы между понятиями "Ардуино" и "любая плата на основе МК AVR". МК понимает такие вещи, а Ардуино - нет. Ардуино - некая вполне определённая концепция, но до Вас это пока не дошло.

Если у Вас другое мнение, имейте его на здоровье.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

ЕвгенийП, Arduino IDE специально собирает проект с отладочной информацией. Поэтому в выходной папке есть elf-файл, который используется для отладки.

> Ардуино - некая вполне определённая концепция, но до Вас это пока не дошло.

Не надо выдумывать ерунду. Это обычная простейшая плата с мк AVR и небольшой обвязкой. Её программирование ничем не отличается от программирования мк AVR. ТО ЕСТЬ вообще НИЧЕМ, поскольку Arduino IDE использует компилятор avr-gcc, в который встроена поддержка отладки. Компилятор является частью Arduino IDE (может вы действительно не знаете этого?), поэтому Arduino IDE в части результатов компиляции отладку поддерживает, чем некоторые и пользуются (см. выше про elf-файл).

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

uni пишет:

ЕвгенийП, Arduino IDE специально собирает проект с отладочной информацией. Поэтому в выходной папке есть elf-файл, который используется для отладки.

> Ардуино - некая вполне определённая концепция, но до Вас это пока не дошло.

Не надо выдумывать ерунду. Это обычная простейшая плата с мк AVR и небольшой обвязкой. Её программирование ничем не отличается от программирования мк AVR. ТО ЕСТЬ вообще НИЧЕМ, поскольку Arduino IDE использует компилятор avr-gcc, в который встроена поддержка отладки. Компилятор является частью Arduino IDE (может вы действительно не знаете этого?), поэтому Arduino IDE в части результатов компиляции отладку поддерживает, чем некоторые и пользуются (см. выше про elf-файл).

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

(с) Я.Гашек.

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

uni пишет:

Не надо выдумывать ерунду.

сам бы не выдумывал ерунду - пока Атмел не опубликует исходники своего JTAG ICE mkII под свободной лицензией, можешь не постить ересь.

разница в лицензировании:

Дуино - бесплатно или за деньги.

Атмел Студио - только за деньги.

*кстати, вкуда канул http://www.simonqian.com/en/AVRminiProg/ ? загнобили копирасты или где?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

uni пишет:

> Ардуино - некая вполне определённая концепция, но до Вас это пока не дошло.

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

Ну, я же говорю: "не дошло".

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

uni пишет:

Не надо выдумывать ерунду. Это обычная простейшая плата...

Ардуино - это не плата.