Я сделал эскиз, но потом потерял его. Тем не менее, я загрузил его в Arduino, прежде чем потерять его. Можно ли как-нибудь вернуть его обратно?
electronics.stackexchange.com/questions/28211/… но, как говорят другие, это выплевывает только файлы .hex, а не исходный C-источник.
Межсайтовый обман: reverseengineering.stackexchange.com/q/125/189
Это должно быть возможно, пока бит безопасности не установлен. Этот вопрос был задан на EE некоторое время назад.
Но вы не получите код Arduino, который вы написали обратно. Код скомпилирован в сборку, и вам придется преобразовать его обратно в C самостоятельно.
Этот ответ не дает прямого ответа на вопрос, но все равно приведет к тому же конечному результату.
В Arduino IDE используются временные каталоги для хранения файлов сборки, включая исходный эскиз, а также HEX и промежуточные файлы.
На Mac они по умолчанию находятся в папках / var /, а на компьютере с Windows они находятся в . Local Settings Temp (что в зависимости от версии Windows может находиться в нескольких местах).
Как передавать и принимать данные из Arduino в компьютер и обратно? Очень просто!
Я обнаружил, что особенно в Windows эти файлы сборки не удаляются при закрытии эскиза или IDE, поэтому они могут существовать на вашем компьютере гораздо дольше, чем вы думаете.
Кроме того, по умолчанию Crashplan, Backblaze и Time Machine выполняют резервное копирование этих расположений, поэтому даже если они были удалены, они все равно могут находиться в резервной копии.
Преимущество здесь в том, что вы будете восстанавливать код C, а не ASM.
Это лучшее решение ИМХО. Очень креативно тоже .
Вы можете найти это в /tmp/ каталогах на Linux (и даже Mac). cf arduino.cc/en/Hacking/BuildProcess
Эхо комментария от принятого ответа: чтение необработанного гексагона: forum.arduino.cc/index.php?topic=6150.0 и автоматическая разборка: forum.arduino.cc/index.php/topic,46843.0.html
Вы можете скачать шестнадцатеричный дамп файла, но нет простого способа получить весь код C ++ и комментарии. Если вы понимаете сборку, вы можете пересоздать программу, но это займет некоторое время. Для некоторых устройств доступны дизассемблеры, я не знаю насчет arduino.
Для arduino нет дизассемблеров, потому что это не тип MCU. Там являются несколько ATMEGA дизассемблеров (Google atmega disassembler ).
Если у вас есть arduino envitonment, у вас уже есть avr-objdump, так как он поставляется с avr-gcc.
Я думаю, что есть другой способ сделать это, не извлекая код из платы Arduino. Поменяйте дату создания эскиза и найдите его в C: Users User AppData Local Temp (например: C: Users User AppData Local Temp untitled4390292704786567977.tmp sketch_jan19a). Вы можете найти свой несохраненный код, если он не был удален какой-либо «программой освобождения места». Удачи!
Если ваша цель не состоит в том, чтобы просто скопировать идентичный код на другое устройство, простой ответ: нет
Как было указано в других ответах, вы можете превратить шестнадцатеричный код на устройстве обратно в код ассемблера.
10 полезных фишек Arduino IDE
Например (когда вы скопировали код с устройства обратно на диск):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Запустите на одном из файлов загрузчика я получаю эти результаты (частично):
00007e00 sec1>: 7e00: 11 24 eor r1, r1 7e02: 84 b7 in r24, 0x34 ; 52 7e04: 14 be out 0x34, r1 ; 52 7e06: 81 ff sbrs r24, 1 7e08: f0 d0 rcall .+480 ; 0x7fea 7e0a: 85 e0 ldi r24, 0x05 ; 5 7e0c: 80 93 81 00 sts 0x0081, r24 7e10: 82 e0 ldi r24, 0x02 ; 2 7e12: 80 93 c0 00 sts 0x00C0, r24 7e16: 88 e1 ldi r24, 0x18 ; 24 7e18: 80 93 c1 00 sts 0x00C1, r24 7e1c: 86 e0 ldi r24, 0x06 ; 6 7e1e: 80 93 c2 00 sts 0x00C2, r24 7e22: 80 e1 ldi r24, 0x10 ; 16 7e24: 80 93 c4 00 sts 0x00C4, r24 7e28: 8e e0 ldi r24, 0x0E ; 14 7e2a: c9 d0 rcall .+402 ; 0x7fbe 7e2c: 25 9a sbi 0x04, 5 ; 4
Как видите, не особенно полезно для воспроизведения того, что сделал ваш эскиз. Вероятно, будет один из двух сценариев:
- Ваш эскиз был коротким, и в этом случае вы могли бы после нескольких недель работы превратить ассемблерный код обратно в C
- Ваш эскиз был длинным, и в этом случае было бы практически невозможно превратить его в C
В случае с «коротким наброском» лучше переписать с нуля. Это было бы быстрее, почти наверняка. В случае «длинного наброска» — это просто не стоит. Ни одно из имен переменных не сохраняется, и то, как компилятор оптимизирует код, даже структуру кода будет трудно определить.
Источник: qastack.ru
Как перенести проект с Arduino в отдельный AVR микроконтроллер
Предлагаемый метод переноса программы, разработанной и отлаженной в среде Arduino IDE, на микроконтроллер, установленный не на плате Arduino, а в другом устройстве, даёт возможность создать законченное устройство меньших габаритов и стоимости. В настоящее время платы Arduino весьма популярны, поскольку обеспечивают простой вход в мир программирования. Выпускают много вариантов плат этого семейства, различающихся размерами, функциями и ценами.
Но все они относятся к числу отладочных. Используя их, можно быстро собрать макет устройства, разработать и отладить его программу. Однако использовать плату Arduino в готовом устройстве бывает неудобно.
Кроме того, встроив такую плату в законченное устройство, приходится для дальнейшей разработки и отладки программ разбирать его либо приобретать ещё одну плату Arduino.
Рис. 1. Arduino UNO R3.
В некоторых вариантах плат этого семейства, например, в оригинальной Arduino UNO R3 (рис. 1), микроконтроллер установлен в панель. Завершив отработку программы, его можно извлечь из панели и прочитать с помощью программатора содержимое его памяти.
Копию этого содержимого можно загрузить в память другого аналогичного микроконтроллера, который и использовать в своей разработке. Но даже если установленный на плате Arduino микроконтроллер снять с нее без пайки невозможно (рис. 2), доступ к его памяти можно получить, подключив программатор к выводам платы D11 (MOSI), D12 (MISO), D13 (SCK), а также RST, +5V и GND.
Эти цепи выведены не только на главные разъёмы платы, но и на шестиконтактный разъём ICSP, который на рис. 1 и рис. 2 виден справа.
Однако существует и более простой способ загрузки программы, разработанной в среде программирования Arduino IDE, в отдельный, не установленный на плате Arduino, микроконтроллер.
Для этого достаточно найти в памяти компьютера, на котором производилась трансляция исходного текста (скетча) программы, созданный в ходе этого процесса НЕХ-файл программы и загрузить его в память своего микроконтроллера с помощью программатора.
Послужить программатором может сама плата Arduino. Чтобы узнать, как это сделать, достаточно набрать в любой поисковой системе запрос «Arduino как программатор».
Рис. 2. Arduino с запаянным микроконтроллером.
Но найти этот НЕХ-файл до недавнего времени было довольно трудно. Arduino IDE помещала его вместе с прочими генерируемыми в процессе компиляции служебными файлами в специальную папку со всякий раз другим длинным цифровым именем. Имя этой папки нужно было искать в сообщениях, выводимых во время компиляции. Однако задачу можно упростить.
Для этого нужно открыть любым текстовым редактором файл preferences.txt, путь к которому указан в окне «Файл->Настройки» системы разработки.
В этот файл нужно добавить строку «build.path Скетч» появился пункт «Экспорт бинарного файла». Если после успешного завершения компиляции выбрать этот пункт, готовый к загрузке НЕХ-файл программы появится под именем *.standard, hex в папке с её скетчем. Место звёздочки займёт имя скетча.
Ещё один файл по имени *.with_bootloader.standard.hex появится там же, но в рассматриваемом случае он не потребуется.
Вместо слова standard в имени файла может стоять другое, отражающее особенности платы, для которой выполняется компиляция. Например, для платы Arduino Nano, имеющей дополнительные аналоговые входы А6 и А7, это будет «eightanaloginputs» — даже в том случае, если эти входы программа не использует.
Для примера рассмотрим принципиальную схему макета простого велоспидометра с платой Arduino UNO, изображённую на рис.3. Программа для него приложена к статье. Как собрать такое устройство, заменив в нём плату Arduino одиночным микроконтроллером?
Лучше всего, если это будет микроконтроллер того же типа, что установлен на плате. В данном случае — ATmega328P (возможно, в другом корпусе). Вполне возможна и замена, например, на АТтеда168 или АТтеда8.
В других случаях следует убедиться, что выбранный микроконтроллер совместим с заменяемым по системе команд, числу, назначению и адресам регистров и их разрядов.
Немаловажны объём памяти и число выводов микроконтроллера. Если памяти мало, программа может просто в ней не поместиться. А недостаточное число выводов не позволит подключить к микроконтроллеру все нужные внешние устройства.
Чтобы избежать проблем, рекомендуется для окончательной компиляции отлаженного скетча выбрать в пункте меню «Инструменты->Плата:» плату именно с тем микроконтроллером, который предполагается применить, и использовать полученный НЕХ-файл.
Рис. 3. Принципиальная схема макета простого велоспидометра с платой Arduino UNO.
Например, платы Arduino Nano бывают как с микроконтроллерами ATmega328, так и ATmega168, а платы Arduino NT — с ATmega168 или ATmega8. Причём для компиляции скетча подключать к компьютеру выбранную плату вовсе не обязательно.
Анализ приведённой на рис. 3 схемы показывает, что в велоспидометре использованы дискретные выходы D2-D7 и дискретный вход D10 платы Arduino.
Такой же вывод можно сделать, изучив текст программы. Номера используемых выводов Arduino указаны в её строках Liquidcrystal lcd(2, 3, 4, 5, 6, 7); int pin = 10;
Осталось найти соответствие между именами выводов Arduino и номерами выводов микроконтроллера, с которыми они соединены. Это можно сделать, воспользовавшись таблицей. Она составлена для микроконтроллеров ATmega328P в корпусе TQFP32 (индекс -AU), в корпусе VQFN28 (индекс -ММ) и в корпусе PDIP28 (индекс -PU).
Аналогичную таблицу для микроконтроллеров других типов или в других корпусах можно составить, ориентируясь на их описания и названия выводов согласно справочным данным.
ATmega328P | Вывод Arduino | |||
Назв. вывода | Номер вывода | |||
-AU | -MM | -PU | ||
РВ6, XTAL1 | 7 | 5 | 9 | — |
РВ7, XTAL2 | 8 | 6 | 10 | — |
VСС | 4 | 3 | 7 | +5V |
VСС | 6 | — | — | +5V |
VСС | 18 | 16 | 20 | +5V |
РС0, ADC0 | 23 | 19 | 23 | A0 |
PCI, ADC1 | 24 | 20 | 24 | A1 |
PC2, ADC2 | 25 | 21 | 25 | A2 |
PC3, ADC3 | 26 | 22 | 26 | A3 |
PC4, ADC4 | 27 | 23 | 27 | A4, SDA |
PC5, ADC5 | 28 | 24 | 28 | A5, SCL |
ADC6 | 19 | — | — | A6 |
ADC7 | 22 | — | — | A7 |
AREF | 20 | 17 | 21 | AREF |
PDO, RXD | 30 | 26 | 2 | D0, RXD |
PD1, TXD | 31 | 27 | 3 | D1,TXD |
PD2, INTO | 32 | 28 | 4 | D2 |
PD3, INTI | 1 | 1 | 5 | D3 |
PD4, TO | 2 | 2 | 6 | D4 |
PD5, T1 | 9 | 7 | 11 | D5 |
PD6, AIN0 | 10 | 8 | 12 | D6 |
PD7, AIN1 | 11 | 9 | 13 | D7 |
PBO, CLKO | 12 | 10 | 14 | D8 |
PB1, OC1A | 13 | 11 | 15 | D9 |
PB2, SS | 14 | 12 | 16 | D10 |
PB3, MOSI | 15 | 13 | 17 | D11, MOSI |
PB4, MISO | 16 | 14 | 18 | D12, MISO |
PB5, SCK | 17 | 15 | 19 | D13, SCK |
GND | 3 | — | — | GND |
GND | 5 | 4 | 8 | GND |
GND | 21 | 18 | 22 | GND |
RSJ, PC6 | 29 | 26 | 1 | RST |
Fla рис. 4 показана схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU (DD1). Позиционные обозначения элементов, имевшихся на схеме рис. 3, здесь сохранены.
Добавлены необходимый для работы микроконтроллера кварцевый резонатор ZQ1 на 16 МГц с конденсаторами С4 и С6, а также цепь установки микроконтроллера в исходное состояние R3C2 с кнопкой SB1 «Reset».
Рис. 4. Схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU.
Предусмотрен также интегральный стабилизатор DA1, формирующий, как и в Arduino, из напряжения 7. 12 В стабилизированное напряжение 5 В для питания микроконтроллера и ЖКИ.
Рис. 5. Конфигурация микроконтроллера.
Если загрузить в память микроконтроллера DD1 коды из полученного, как было описано выше, с помощью Arduino IDE НЕХ-файла, а конфигурацию микроконтроллера установить в соответствии с рис. 5, то велоспидометр, собранный по схеме рис. 4, будет вести себя точно так же, как собранный по схеме рис. 3.
Н. Камнев, г. Москва. Р-12-17.
Источник: radiostorage.net
[Решено] Как получить hex файл из Arduino IDE?
И снова здравствуйте) У меня такой вопрос — где-то должен ведь создаваться hex-файл при компиляции проекта в Arduino IDE. Как его найти?
Topic starter Размещено : 03.03.2023 13:53
Top level Admin
Привет ) По-быстрому нашел вариант сейчас, может есть попроще пути. Итак, заходим в Arduino IDE в File>Preferences: Выставляем чекбокс «compilation» в разделе «Show verbose output during»:
Компилируем скетч как обычно и в инфо-области находим нужные пути:
Все, hex там
Ответить Цитата
Размещено : 03.03.2023 14:42
Источник: microtechnics.ru