отладка программ Arduino Uno

Тема в разделе "Arduino & Shields", создана пользователем xasm, 21 ноя 2011.

  1. xasm

    xasm Нуб

    Всем привет!

    Подскажите плз, а есть ли для Arduino Uno нормальный отладчик (с breakpoints, пошаговым исполнением и прочими вкусняшками?). А то программировать вслепую как-то грустно. Как-будто в 96 год вернулся. )
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Насколько мне известно, прямо такого решения с бряками, step-in, step-over, watcher'ами нет. Однако вы можете дебажить «принтами». В нужных местах вставляйте print через serial, и если нужно приостановиться делайте serial read: так вы застынете на месте до отправки чего бы то ни было на устройство. Этого всего вполне хватает.

    Алсо, я сам — довольно опытный разработчик. Уже лет 10 в сферах game-, web-, а теперь ещё и embedded- программирования. Давным-давно я тоже пользовался дебагерами. Но с момента освоения разработки через тестирование (TDD) ни разу не ставил breakpoint, уже лет 5. И от этого нисколько не страдаю.

    Расценивайте это, как прыжок в год 2012-й :)
     
    shpock нравится это.
  3. xasm

    xasm Нуб

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

    Ну да ладно. Чувствую, придется доставать с полки RS232 Pro и вспоминать молодость)
     
  4. IDis

    IDis Нуб

    вот уже 2016 год настал. Есть ли в этом прогресс?

    хотел попросить можите дать пример кода принт с сериалом
    int i=3;
    Serial.println(i);
    но он работает только если плата к компу подключена. А можно вывести значение без подключения платы?
     
  5. Onkel

    Onkel Гуру

    можно, если использовать atmel studio и полноценно программировать в atmel studio.
     
  6. AlexU

    AlexU Гуру

    Если память не изменяет, Atmel Studio с плагином для поддержки Arduino (http://www.visualmicro.com/) предоставляет средства отладки. Можно пошагово выполнять скетч непосредственно на контроллере Arduino UNO без каких-либо дополнительных устройств-отладчиков. Так же в студии есть симулятор контроллеров AVR -- можно отладить скетч до прошивки в контроллер.
     
  7. IDis

    IDis Нуб

    а можно вывести сообщение в консоль? туда где ошибки пишутся?
     
  8. Airbus

    Airbus Радиохулиган Модератор

    А не проще писать компилить и отлаживать в Студии сразу под 328 Мегу 16 Мгц (оно же есть Ардуино)?А потом тупо загружать в плату через RX/TX?И не такой чудовищный (по размеру)код получиться?Вчера посмотрел Blink из IDE и Blink из Студии раза в 3 больше как минимум.:eek:
     
  9. AlexU

    AlexU Гуру

    Полагаю, что в Студии делали 'Debug' сборку (Arduino IDE поддерживат только один вид сборки -- 'Release'). В 'Debug' сборку Студия добавляет вспомогательный код, который позволяет производить отладку (пошаговое выполнение и т.п.) без специальных устройств. Этот вспомогательный код и увеличивает размер итогового кода. Если сделаете 'Release' сборку, то размер будет примерно таким же как и в Arduino IDE.
     
  10. Airbus

    Airbus Радиохулиган Модератор

    Я немного о другом.Зачем писать на wiring потом городить огород с отладкой в Студии когда можно сразу на чистом Си отладить и загрузить в Ардуину?ИМХО чудовищный размер НЕХ фаила даёт IDE компилятор я даже не в курсе как там оптимизируется код.Я например так и не почувствовал прелести wiring пишу на Си или Асме а НЕХ сразу гружу в плату.Никому не предлагаю писать ни на Асме ни тем более в машинных кодах (а раньше так и делали?)но вот вся эта канитель в виде wiringа или для 10 летних детей или для совсем уж...Где то видел примочку для IDE там вообще ничего писать не надо складываешь пазлы с картинками и всё
     
  11. DrProg

    DrProg Вечный нерд

    Если Blink в той же IDE переписать заменив digitalWrite() на PORTX, то получившийся код вас приятно удивит. )
    А на эмулятор IDE в AVRS выдает точно такие же hex до байта. Все дело в библиотечных функциях, ну или почти все. )
     
    shpock нравится это.
  12. Unixon

    Unixon Оракул Модератор

    Кто мешает в проект студии подключить весь Wiring и там его отлаживать?
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Зачем в Wiringе?
     
  14. Unixon

    Unixon Оракул Модератор

    Ну если вам так нравится каждый раз переписывать куски стандартной библиотеки заново, то пожалуйста. Она хоть и весьма корява в коде, но достаточно проста в API. По каждому чиху привязываться к портам и регистрам конкретного контроллера это не совсем правильно.
     
  15. Airbus

    Airbus Радиохулиган Модератор

    Ну да Вы правы но всё же есть и на чистом Си и код получается компактнее и Голова начинает думать.А по каждому чиху это Асм плиз!люблю писать на ём простые телодвижения вход-вкл выход-выкл или наоборот.Да и с USART проще.
     
  16. AlexU

    AlexU Гуру

    Не первый раз сталкиваюсь с фразой "чистый Си" на этом форуме и всё ни как понять не могу, что это такое -- "чистый Си". Свои прошивки собираю при помощи компилятора avr-gcc/avr-g++ (тот самый, что используют Atmel Studio, Arduino IDE, Code::Blocks, Eclipse CPP и т.п.). При создании прошивок для плат a-la Arduino иногда, если позволяет память и нет ограничений к производительности, использую библиотеки из комплекта Arduino IDE (при чём саму Arduino IDE не использую потому, что эта среда абсолютно не удобна для программирования). В последнем проекте добавил библиотеку STL (Standart Template Library), библиотку работы со временем, назовём её "Time", а так же библиотеку Wiring (не язык, как некоторые думают, а именно библиотеку, из комплекта Arduino IDE). И что теперь -- это не "чистый Си"?
    Порой складывается впечатление, что по термином "чистый Си" некоторые пользователи понимают то, что прошивка пишется только с использованием стандартных библиотек из комплекта компилятора. Тогда, пользователи, -- "Добро пожаловать в клуб Изобретателей Велосипедов". Есть такое звание -- "Изобретатель Велосипедов" -- присваивается разработчикам (не обязательно программистам, а вообще креаторам), которые вместо изучения существующего опыта решения той или иной проблемы, пытаются решить такую проблему своими силами с нуля -- тратят силы и время, а в итоге результат не всегда получается качественным или, в лучшем случае, аналогичным существующему способу/методу решения этой проблемы. И вот тут встаёт вопрос -- зачем было тратить силы и время на "изобретение велосипеда", если "всё придумано до нас".
    Вполне согласен, что библиотека Wiring написана не оптимально, но она позволяет абстрагироваться от аппаратного уровня различных платформ Arduino, т.е. библиотека может быть применена для плат с разными контроллерами без доработки кода с минимумом затрат.
    Главное-то -- с умом подходить к решению поставленной задачи.
     
  17. Onkel

    Onkel Гуру

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

    Airbus Радиохулиган Модератор

    Я тоже об этом думал
    Я тож думаю что вся фишка в них Вот Blink из Atmel Studio на Асме тот который я написал для Dr Prog в другой теме под Мегу 8 там мигают ВСЕ порты (при желании код можно ещё укоротить если мигать ОДНИМ портом)
    Код (C++):
    :
    :020000020000FC
    :1000000000C00FE50DBF04E00EBF0FEF07BB04BB40
    :1000100001BB08BB05BB02BB07D0002708BB05BB63
    :1000200002BB02D00FEFF5CF16E02AE130E83150E5
    :0800300020401040E0F70895A4
    :00000001FF
     
    А Вот он из Среды Ардуино под Мегу 328 стандартный где мигает ОДИН порт!
    Код (C++):
    :100000000C945C000C946E000C946E000C946E00CA
    :100010000C946E000C946E000C946E000C946E00A8
    :100020000C946E000C946E000C946E000C946E0098
    :100030000C946E000C946E000C946E000C946E0088
    :100040000C9488000C946E000C946E000C946E005E
    :100050000C946E000C946E000C946E000C946E0068
    :100060000C946E000C946E00000000080002010069
    :100070000003040700000000000000000102040863
    :100080001020408001020408102001020408102002
    :10009000040404040404040402020202020203032E
    :1000A0000303030300000000250028002B000000CC
    :1000B0000000240027002A0011241FBECFEFD8E043
    :1000C000DEBFCDBF21E0A0E0B1E001C01D92A930AC
    :1000D000B207E1F70E9403020C9413020C94000093
    :1000E00061E08DE00C94930161E08DE00E94CC0111
    :1000F00068EE73E080E090E00E94F50060E08DE043
    :100100000E94CC0168EE73E080E090E00C94F50072
    :100110001F920F920FB60F9211242F933F938F933C
    :100120009F93AF93BF938091010190910201A091A1
    :100130000301B09104013091000123E0230F2D371A
    :1001400020F40196A11DB11D05C026E8230F0296DB
    :10015000A11DB11D20930001809301019093020124
    :10016000A0930301B09304018091050190910601D1
    :10017000A0910701B09108010196A11DB11D8093C6
    :10018000050190930601A0930701B0930801BF9168
    :10019000AF919F918F913F912F910F900FBE0F9034
    :1001A0001F9018953FB7F894809105019091060132
    :1001B000A0910701B091080126B5A89B05C02F3F6B
    :1001C00019F00196A11DB11D3FBF6627782F892F19
    :1001D0009A2F620F711D811D911D42E0660F771FDE
    :1001E000881F991F4A95D1F708958F929F92AF92D9
    :1001F000BF92CF92DF92EF92FF926B017C010E943F
    :10020000D2004B015C01C114D104E104F104F1F00E
    :100210000E9412020E94D200681979098A099B097A
    :10022000683E73408105910570F321E0C21AD10840
    :10023000E108F10888EE880E83E0981EA11CB11C2D
    :10024000C114D104E104F10429F7DDCFFF90EF9050
    :10025000DF90CF90BF90AF909F908F90089578944B
    :1002600084B5826084BD84B5816084BD85B58260BB
    :1002700085BD85B5816085BDEEE6F0E08081816059
    :100280008083E1E8F0E01082808182608083808159
    :1002900081608083E0E8F0E0808181608083E1EB31
    :1002A000F0E0808184608083E0EBF0E08081816019
    :1002B0008083EAE7F0E080818460808380818260CF
    :1002C00080838081816080838081806880831092B8
    :1002D000C1000895833081F028F4813099F0823094
    :1002E000A1F008958730A9F08830B9F08430D1F4B6
    :1002F000809180008F7D03C0809180008F778093F4
    :100300008000089584B58F7702C084B58F7D84BD49
    :1003100008958091B0008F7703C08091B0008F7DE9
    :100320008093B0000895CF93DF9390E0FC01E458F0
    :10033000FF4F2491FC01E057FF4F8491882349F13E
    :1003400090E0880F991FFC01E255FF4FA591B491F1
    :100350008C559F4FFC01C591D4919FB7611108C086
    :10036000F8948C91209582238C93888182230AC0F3
    :10037000623051F4F8948C91322F309583238C9312
    :100380008881822B888304C0F8948C91822B8C9373
    :100390009FBFDF91CF9108950F931F93CF93DF936A
    :1003A0001F92CDB7DEB7282F30E0F901E859FF4F93
    :1003B0008491F901E458FF4F1491F901E057FF4F80
    :1003C00004910023C9F0882321F069830E946A0107
    :1003D0006981E02FF0E0EE0FFF1FEC55FF4FA59174
    :1003E000B4919FB7F8948C91611103C0109581234B
    :1003F00001C0812B8C939FBF0F90DF91CF911F91F4
    :100400000F91089508950E942F010E9402020E94F8
    :100410007000C0E0D0E00E9474002097E1F30E94D9
    :0A0420000000F9CF0895F894FFCF13
    :00000001FF
     
    без бутлоадера-с ним он ещё в 2 раза больше.Как гриться почувствуйте разницу.На Си не писал нету времени но завтра смогу выложить для сравнения.
     
    Последнее редактирование: 8 фев 2016
  19. Onkel

    Onkel Гуру

    имхо без разницы, битовые операции ( в псевдокоде, в реале вроде регистр 5 соотв. Д?)
    PORTD=0;
    PORTD=0xFF;

    и (для одного пина, например)
    PORTD.1=1;
    PORTD.1=0
    занимают столько же места.
     
  20. DrProg

    DrProg Вечный нерд

    Вот blink сделанный на С++ AS 7.0
    Код (C++):
    :1000000012C019C018C017C016C015C014C013C044
    :1000100012C011C010C00FC00EC00DC00CC00BC06C
    :100020000AC009C008C011241FBECFE5D4E0DEBF5E
    :10003000CDBF02D018C0E4CF8FEF87BBC49A2FEF9B
    :1000400089E698E1215080409040E1F700C000002F
    :10005000C4982FEF89E698E1215080409040E1F765
    :0A00600000C00000EBCFF894FFCFC2
    :00000001FF
     
    (для Atmega8)
     
    Последнее редактирование: 8 фев 2016