Всем привет! Подскажите плз, а есть ли для Arduino Uno нормальный отладчик (с breakpoints, пошаговым исполнением и прочими вкусняшками?). А то программировать вслепую как-то грустно. Как-будто в 96 год вернулся. )
Насколько мне известно, прямо такого решения с бряками, step-in, step-over, watcher'ами нет. Однако вы можете дебажить «принтами». В нужных местах вставляйте print через serial, и если нужно приостановиться делайте serial read: так вы застынете на месте до отправки чего бы то ни было на устройство. Этого всего вполне хватает. Алсо, я сам — довольно опытный разработчик. Уже лет 10 в сферах game-, web-, а теперь ещё и embedded- программирования. Давным-давно я тоже пользовался дебагерами. Но с момента освоения разработки через тестирование (TDD) ни разу не ставил breakpoint, уже лет 5. И от этого нисколько не страдаю. Расценивайте это, как прыжок в год 2012-й
Мда. Пичалько. Последний раз я писал софт под PIC с внутрисхемным эмулятором, который позволял делать с контроллером все и еще чуть-чуть. И думал, что уж обратно к TDD не вернусь никогда ибо прогресс и все такое. )) Ну да ладно. Чувствую, придется доставать с полки RS232 Pro и вспоминать молодость)
вот уже 2016 год настал. Есть ли в этом прогресс? хотел попросить можите дать пример кода принт с сериалом int i=3; Serial.println(i); но он работает только если плата к компу подключена. А можно вывести значение без подключения платы?
Если память не изменяет, Atmel Studio с плагином для поддержки Arduino (http://www.visualmicro.com/) предоставляет средства отладки. Можно пошагово выполнять скетч непосредственно на контроллере Arduino UNO без каких-либо дополнительных устройств-отладчиков. Так же в студии есть симулятор контроллеров AVR -- можно отладить скетч до прошивки в контроллер.
А не проще писать компилить и отлаживать в Студии сразу под 328 Мегу 16 Мгц (оно же есть Ардуино)?А потом тупо загружать в плату через RX/TX?И не такой чудовищный (по размеру)код получиться?Вчера посмотрел Blink из IDE и Blink из Студии раза в 3 больше как минимум.
Полагаю, что в Студии делали 'Debug' сборку (Arduino IDE поддерживат только один вид сборки -- 'Release'). В 'Debug' сборку Студия добавляет вспомогательный код, который позволяет производить отладку (пошаговое выполнение и т.п.) без специальных устройств. Этот вспомогательный код и увеличивает размер итогового кода. Если сделаете 'Release' сборку, то размер будет примерно таким же как и в Arduino IDE.
Я немного о другом.Зачем писать на wiring потом городить огород с отладкой в Студии когда можно сразу на чистом Си отладить и загрузить в Ардуину?ИМХО чудовищный размер НЕХ фаила даёт IDE компилятор я даже не в курсе как там оптимизируется код.Я например так и не почувствовал прелести wiring пишу на Си или Асме а НЕХ сразу гружу в плату.Никому не предлагаю писать ни на Асме ни тем более в машинных кодах (а раньше так и делали?)но вот вся эта канитель в виде wiringа или для 10 летних детей или для совсем уж...Где то видел примочку для IDE там вообще ничего писать не надо складываешь пазлы с картинками и всё
Если Blink в той же IDE переписать заменив digitalWrite() на PORTX, то получившийся код вас приятно удивит. ) А на эмулятор IDE в AVRS выдает точно такие же hex до байта. Все дело в библиотечных функциях, ну или почти все. )
Ну если вам так нравится каждый раз переписывать куски стандартной библиотеки заново, то пожалуйста. Она хоть и весьма корява в коде, но достаточно проста в API. По каждому чиху привязываться к портам и регистрам конкретного контроллера это не совсем правильно.
Ну да Вы правы но всё же есть и на чистом Си и код получается компактнее и Голова начинает думать.А по каждому чиху это Асм плиз!люблю писать на ём простые телодвижения вход-вкл выход-выкл или наоборот.Да и с USART проще.
Не первый раз сталкиваюсь с фразой "чистый Си" на этом форуме и всё ни как понять не могу, что это такое -- "чистый Си". Свои прошивки собираю при помощи компилятора 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, т.е. библиотека может быть применена для плат с разными контроллерами без доработки кода с минимумом затрат. Главное-то -- с умом подходить к решению поставленной задачи.
вряд ли аналогия с велосипедом уместна,потому что мне часто проще написать свой код, чем разбираться с библиотеками, особенно если библиотеки используют прерывания.
Я тоже об этом думал Я тож думаю что вся фишка в них Вот 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 раза больше.Как гриться почувствуйте разницу.На Си не писал нету времени но завтра смогу выложить для сравнения.
имхо без разницы, битовые операции ( в псевдокоде, в реале вроде регистр 5 соотв. Д?) PORTD=0; PORTD=0xFF; и (для одного пина, например) PORTD.1=1; PORTD.1=0 занимают столько же места.
Вот blink сделанный на С++ AS 7.0 Код (C++): :1000000012C019C018C017C016C015C014C013C044 :1000100012C011C010C00FC00EC00DC00CC00BC06C :100020000AC009C008C011241FBECFE5D4E0DEBF5E :10003000CDBF02D018C0E4CF8FEF87BBC49A2FEF9B :1000400089E698E1215080409040E1F700C000002F :10005000C4982FEF89E698E1215080409040E1F765 :0A00600000C00000EBCFF894FFCFC2 :00000001FF (для Atmega8)