Как извлечь программу из ардуино

Я сделал эскиз, но потом потерял его. Тем не менее, я загрузил его в 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.

Arduino UNO R3

Рис. 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 как программатор».

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.

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

Немаловажны объём памяти и число выводов микроконтроллера. Если памяти мало, программа может просто в ней не поместиться. А недостаточное число выводов не позволит подключить к микроконтроллеру все нужные внешние устройства.

Чтобы избежать проблем, рекомендуется для окончательной компиляции отлаженного скетча выбрать в пункте меню «Инструменты->Плата:» плату именно с тем микроконтроллером, который предполагается применить, и использовать полученный НЕХ-файл.

Принципиальная схема макета простого велоспидометра с платой Arduino UNO

Рис. 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».

Схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU

Рис. 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru