Кстати, раз у нас ветка про память, точнее про обьем кода - позволю себе вопрос по теме, насчет оптимизации размера исполняемого кода в проекте.
Если взять классический пример наследования с переопределением методов родительского класса в дочернем:
class Parent
{
public:
virtual void X()
{
std::cout << "Parent!";
}
};
class Child : public Parent
{
public:
void X() override
{
std::cout << "Child!";
}
};
правильно ли я понимаю, что в машинный код будут скомпилированы оба метода X() - и родительский и дочерний, даже если в коде используется только последний? Если да - есть ли какой-то иной метод наследования. который не тащил бы в код методы родительсткого класса там, где они не нужны?
правильно ли я понимаю, что в машинный код будут скомпилированы оба метода X() - и родительский и дочерний, даже если в коде используется только последний? Если да - есть ли какой-то иной метод наследования. который не тащил бы в код методы родительсткого класса там, где они не нужны?
Правильно. А вот компоновщик неиспользованное выкинет, если его запустить с адекватными флагами.
тащил бы в код методы родительсткого класса там, где они не нужны?
В Ардуино - не стоит напрягаться. Это обеспечивает опция -lto "Линк Тайм Оптимамизейшн" - на руглище ;).
Помнишь тут года 4 назад битвы были про -lto? Типа выкидывает, что ни попадя. Так вот это про неё, родную. Если захочешь погрузиться в вопрос, то есть много статей на аглицком про LTO в GCC. Вот прям так и находятся в гугле.
Если пользоваться вне среды Ардуино, то опция -flto должна быть включена как для компиляции, так и для линка. Компилятор создает таблицу символов, которую линковщик использует и может выкинуть ненужное.
При правильном использовании LTO позволяет напихать все полезные методы в класс, а линковщик выкинет из кода ненужное. ;)) Это сильно упрощая, но так можно понимать.
Ардуина("дохлая") через ICSP шьется. Загрузчик через Arduino ISP пишется. Пробовал и от нано и от уно... Правда так и не понял как указать конкретный загрузчик, например скачал с гитхаба оптибут 8.0, но так и не понял как его вшить... :(
Архив(точнее из него одни hex'ы) распаковал по инструкции, в папку (hardware\arduino\avr\bootloaders\Optiboot-8.0)... Манипуляции с boards.txt вообще ни к чему не приводят. Я этот файл даже удалял, а в ИДЕ все равно ничего не меняется....
Заметил только если шить загрузчик от уно, то свободной памяти становится 32кб, а если нано - то 30...
И еще вопрос, если шить программу через Arduino ISP (т.е. одну нану через вторую, "загрузить через программатор") - загрузчик тоже пишется? Иначе почему при загрузке через ICSP пишет что "Скетч использует 24580 байт (80%) памяти устройства. Всего доступно 30720 байт." Или я уже запутался(
Без второй платы или программатора стереть загрузчик из IDE достаточно сложно. Загонять ячейки - маловероятно.
А может что-то случится с USB - > UART? Странно она себя ведет... вроде и начинает загружаться, мк перезагружается и на этом висит... Затем в лог вот это выдает(при загрузка пустого скеча):
Скетч использует 444 байт (1%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x0a
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x0a
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
почему при загрузке через ICSP пишет что "Скетч использует 24580 байт (80%) памяти устройства. Всего доступно 30720 байт." Или я уже запутался(
эта надпись никак не связана с реальным обьемом памяти в системе - эти цифры читаются из boards.txt. Какие цифры в файле напишете, такие и будут. Можете хоть 16 гиг написать :)
эти цифры читаются из boards.txt. Какие цифры в файле напишете, такие и будут. Можете хоть 16 гиг написать :)
Да вот что-то никаких результатов с изменением данного файла... Я пробовал имя менять nano.menu.cpu.atmega328old=ATmega328P (Old TEST Bootloader) (нана только через него до этого грузилась OLD, но потом пробовал и "новым") - ничего в меню не меняется
Да вот что-то никаких результатов с изменением данного файла... Я пробовал имя менять nano.menu.cpu.atmega328old=ATmega328P (Old TEST Bootloader) (нана только через него до этого грузилась OLD, но потом пробовал и "новым") - ничего в меню не меняется
если меню не меняется - значит у вас на компе несколько boards.txt и вы правите не тот
если меню не меняется - значит у вас на компе несколько boards.txt и вы правите не тот
[/quote]
Несколько. У меня нет установленных ИДЕ. Только зипы распакованные несколько штук... Но я правлю тот, откуда стартует arduino.exe.... И даже пробовал другие папки с версиями ардуины убирать в другую папку...
Но возможно где-то в реестр (хотя и там искал) есть что-то... В общем тоже подумал про вариант с boards.txt, но... незнаю. ИДЕ Должен читать из своих потрахов этот файл
К чему все эти манипуляции с загрузчиками? испортить бутлоадер операциями с кодом вы никак не могли. Думаю. проблема аппаратная, например частыми втыканиями кабеля расшатали USB разъем на плате и пайка треснула... или что-то подобное.
разберитесь лучше как это все работает. А то, на мой взгляд, вы тыркаетесь вслепую.
Ну не совсем в слепую. На делфи писал в свое время и системные вещи, немного помню как это все крутится на ПК. А так, да я всегда стараюсь разобраться в том, что делаю.
Цитата:
От установки кучи копий Ардуино ИДЕ будет только вред - будет непонятно, где правильные конфиги и что от чего зависит.
Ну тут от ПО конечно еще зависит.... если написано криво и конфиг используется не свой, то да.... проблемка)
К чему все эти манипуляции с загрузчиками? испортить бутлоадер операциями с кодом вы никак не могли. Думаю. проблема аппаратная, например частыми втыканиями кабеля расшатали USB разъем на плате и пайка треснула... или что-то подобное.
Возьмите другую ардуину и попробуйте
Вообще не расшатывал да и не втыкаю часто... по крайней мере пока пишу для нее вот как была в макетке так и торчит там не вынимаясь... Я в этом плане (разъемы и их втыкания очень аккуратен)
Ну раз испортить не мог программно, то скорее всего тогда что-то сгорело, но уж точно не отпаялось... Ладно, если с МИНИКОРЭ не получится ничего, буду ее через ICSP шить.... Жаль, а версия про неправильную скорость в параметрах мне была по душе
С MiniCore через другую ардуину тоже прошивается, бутлоадер загружается... После прошивки загрузчика светодиод начинает моргать два раза пауза два раза пауза и т.д. При подсоединении через USB при загрузке (Blink) ошибка:
Arduino: 1.8.16 (Windows 10), Плата:"ATmega328, Yes (UART0), EEPROM retained, 328P / 328PA, BOD 2.7V, LTO disabled, External 16 MHz"
Скетч использует 1030 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xdd
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xdd
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
В настройках выбрано ВСЕ сообщения от компилятора, ничего нового он не показывает
По предложенной ссылке смотрел, ничего там не понял.
Всё, помер USB? Или все таки где-то что-то я не доглядываю? Ведь при начале загрузки светодиоды начинают мыргать как и обычно, но недолго.... потом снова два мырга пауза... А в ИДЕ пишет, что идет загрузка и через несколько минут - ошибка.
invalid conversion from 'const char*' to 'char*' [-fpermissive]
Наверное нужно что-то где-то настраивать или переделывать...
Вернулся пока на стандартное ядро, хотя плюсы миникорэ понравились...
Выкинуть нанку жалко, работает же через внутрисхемное программирование, но не удобно...
Как узнать на какой скорости принимает загрузчик? Ведь они там вроде в хексе:
## Arduino Nano w/ ATmega328P (old bootloader)
## --------------------------
nano.menu.cpu.atmega328old=ATmega328P (Old Bootloader)
nano.menu.cpu.atmega328old.upload.maximum_size=30720
nano.menu.cpu.atmega328old.upload.maximum_data_size=2048
#nano.menu.cpu.atmega328old.upload.speed=57600 <--- Было
nano.menu.cpu.atmega328old.upload.speed=19200 В ATmegaBOOT_168.c подглядел, остальные hex
nano.menu.cpu.atmega328old.bootloader.low_fuses=0xFF
nano.menu.cpu.atmega328old.bootloader.high_fuses=0xDA
nano.menu.cpu.atmega328old.bootloader.extended_fuses=0xFD
nano.menu.cpu.atmega328old.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex
Но с 19200 тоже не работает. Но повторяюсь, при начале загрузке, сразу после компиляции, ардуина перезагружается, начинают мигать светодиоды, как обычно при загрузке - не долго, но когда ардуина загружается, то в ней начинает работать программа прошитая через ICSP а ИДЕ висит и затем ошибку выдает
Опа.... Вытащил из макетки, и с другой стороны один резистор, я его ногтем поддел - он и отвалился, не знаю на какой он линии.... сейчас поищу в интернете. Находится рядом с микросхемой USB (там их два(резистора) рядом... Возможно Вы правы. Но тогда это заводской(китайский) брак... Но нанка уже больше года торчит в этой макетке....
Наминал резистора не увидел, он сразу потерялся.... Ну слепой я уже( А тот, который остался, на нем тоже ни черта не видно... Но хуже всего - у меня смдшных нет и в своем городе вряд ли найду(
Есть еще пару жареных ардуин, мож с них чего подойдет...
Запаял я этот резистор. Такого мелкого не нашел, пришлось припаять чуть больше. Одну сторону на пятак, второй пятак оказался под резистором, пришлось проводок и на ногу Tx. Все равно не шьется через USB, но теперь хоть в порт шлет. Т.е. по ICSP прошил тестовую прошивку в сериал пишет раз в секунду, в мониторе порта видно. А если нажать загрузить скеч (пустой ) (через USB ), то в логе практически через две секунды после компиляции и начала загрузки:
Скетч использует 444 байт (1%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
Произошла ошибка при загрузке скетча
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
Может слепыми глазами где соплю повесил, хотя вроде мультиком прозвонил.... Или из-за проводка... Всё, сил больше нет сегодня ее реанимировать...
дело в том что на них(резисторах) не видно ничего... Тестером меряю, который рядом с отвалившимся на нем 11кОм. Сейчас доступны мне полуживая нана и уно(которая пока программатор ISP) Остальные наны в другом месте, за ними ехать надо)
В общем я перепаял на 1 кОм тоже в дип, получилось куда аккуратнее чем с смд.
Подключаю через ISP, загружаю - таже ошибка. А потом смотрю, старый я дурак, перепутал RESET с MISO
Вижу Start и потом Second'ы идут каждую секунду...
На отправку не реагирует.
Нет смысла впаивать 10 кОм и еще раз пробовать? Я понимаю, что вроде везде в схемах указаны 1 кОм, но китайцы... Да и тестер показывает у "верхнего" 11...(
ADD: Хотя при отправки из монитора (нажатие энтер) Led Rx вспыхивает, не ярко, но примерно так же как и Tx каждую секунду...
Или может верхний резистор, чего того не того, может его тоже заменить на килоом? Сейчас еще раз его померил (и прошлый раз и сейчас не выпаивал) - 12 с копейками показал. Странно( Хотя нижний, который впаял(дип) меряю - 1 кОм кажет.
Без второй платы или программатора стереть загрузчик из IDE достаточно сложно. Загонять ячейки - маловероятно.
можно, у меня вот так шрифты подключены:
работает в любой версии Ардуино ИДЕ
Что-то вы не так делаете
Кстати, раз у нас ветка про память, точнее про обьем кода - позволю себе вопрос по теме, насчет оптимизации размера исполняемого кода в проекте.
Если взять классический пример наследования с переопределением методов родительского класса в дочернем:
class Parent { public: virtual void X() { std::cout << "Parent!"; } }; class Child : public Parent { public: void X() override { std::cout << "Child!"; } };правильно ли я понимаю, что в машинный код будут скомпилированы оба метода X() - и родительский и дочерний, даже если в коде используется только последний? Если да - есть ли какой-то иной метод наследования. который не тащил бы в код методы родительсткого класса там, где они не нужны?
b707 по идее не должен (и не делает - проверил), если нет ни одного экземпляра родителя ...
код-
class Parent { public: virtual void X() { Serial.println("Child"); } }; class Child : public Parent { public: void X() override { Serial.println("Child"); } }; Child ch; void setup() { Serial.begin(9600); } void loop() { ch.X(); }C:\Windows\TEMP\arduino_build_876027/sketch_dec02a.ino.elf: file format elf32-avr Disassembly of section .text: 00000000 <__vectors>: __vectors(): ../../../../crt1/gcrt1.S:65 0: 0c 94 5b 00 jmp 0xb6 ; 0xb6 <__ctors_end> ../../../../crt1/gcrt1.S:67 4: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:68 8: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:69 c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:70 10: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:71 14: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:72 18: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:73 1c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:74 20: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:75 24: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:76 28: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:77 2c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:78 30: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:79 34: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:80 38: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:81 3c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:82 40: 0c 94 c6 02 jmp 0x58c ; 0x58c <__vector_16> ../../../../crt1/gcrt1.S:83 44: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:84 48: 0c 94 d0 01 jmp 0x3a0 ; 0x3a0 <__vector_18> ../../../../crt1/gcrt1.S:85 4c: 0c 94 02 02 jmp 0x404 ; 0x404 <__vector_19> ../../../../crt1/gcrt1.S:86 50: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:87 54: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:88 58: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:89 5c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:90 60: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:91 64: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:92 68: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:93 6c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:94 70: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:95 74: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:96 78: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:97 7c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:98 80: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:99 84: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:100 88: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:101 8c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:102 90: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:103 94: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:104 98: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:105 9c: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:106 a0: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:107 a4: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:108 a8: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:109 ac: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> ../../../../crt1/gcrt1.S:110 b0: 0c 94 83 00 jmp 0x106 ; 0x106 <__bad_interrupt> 000000b4 <__ctors_start>: __trampolines_start(): b4: 32 02 muls r19, r18 000000b6 <__ctors_end>: __dtors_end(): ../../../../crt1/gcrt1.S:230 b6: 11 24 eor r1, r1 ../../../../crt1/gcrt1.S:231 b8: 1f be out 0x3f, r1 ; 63 ../../../../crt1/gcrt1.S:232 ba: cf ef ldi r28, 0xFF ; 255 ../../../../crt1/gcrt1.S:241 bc: d8 e0 ldi r29, 0x08 ; 8 ../../../../crt1/gcrt1.S:242 be: de bf out 0x3e, r29 ; 62 ../../../../crt1/gcrt1.S:244 c0: cd bf out 0x3d, r28 ; 61 000000c2 <__do_copy_data>: __do_copy_data(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2409 c2: 11 e0 ldi r17, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2410 c4: a0 e0 ldi r26, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2411 c6: b1 e0 ldi r27, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2412 c8: ec ee ldi r30, 0xEC ; 236 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2413 ca: f6 e0 ldi r31, 0x06 ; 6 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2414 cc: 02 c0 rjmp .+4 ; 0xd2 <__do_copy_data+0x10> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2417 ce: 05 90 lpm r0, Z+ /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2422 d0: 0d 92 st X+, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2424 d2: a4 32 cpi r26, 0x24 ; 36 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2425 d4: b1 07 cpc r27, r17 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2426 d6: d9 f7 brne .-10 ; 0xce <__do_copy_data+0xc> 000000d8 <__do_clear_bss>: __do_clear_bss(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 d8: 21 e0 ldi r18, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 da: a4 e2 ldi r26, 0x24 ; 36 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 dc: b1 e0 ldi r27, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 de: 01 c0 rjmp .+2 ; 0xe2 <.do_clear_bss_start> 000000e0 <.do_clear_bss_loop>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 e0: 1d 92 st X+, r1 000000e2 <.do_clear_bss_start>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 e2: aa 3c cpi r26, 0xCA ; 202 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 e4: b2 07 cpc r27, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 e6: e1 f7 brne .-8 ; 0xe0 <.do_clear_bss_loop> 000000e8 <__do_global_ctors>: __do_global_ctors(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2466 e8: 10 e0 ldi r17, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2467 ea: cb e5 ldi r28, 0x5B ; 91 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2468 ec: d0 e0 ldi r29, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2472 ee: 04 c0 rjmp .+8 ; 0xf8 <__do_global_ctors+0x10> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2474 f0: 21 97 sbiw r28, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2480 f2: fe 01 movw r30, r28 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2481 f4: 0e 94 6e 03 call 0x6dc ; 0x6dc <__tablejump2__> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2483 f8: ca 35 cpi r28, 0x5A ; 90 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2484 fa: d1 07 cpc r29, r17 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2489 fc: c9 f7 brne .-14 ; 0xf0 <__do_global_ctors+0x8> ../../../../crt1/gcrt1.S:314 fe: 0e 94 b7 02 call 0x56e ; 0x56e <main> ../../../../crt1/gcrt1.S:315 102: 0c 94 74 03 jmp 0x6e8 ; 0x6e8 <_exit> 00000106 <__bad_interrupt>: __vector_38(): ../../../../crt1/gcrt1.S:209 106: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> 0000010a <Child::X()>: _ZN5Child1XEv(): C:\Windows\TEMP\arduino_modified_sketch_577453/sketch_dec02a.ino:15 class Child : public Parent { public: void X() override { Serial.println("Child"); 10a: 62 e0 ldi r22, 0x02 ; 2 10c: 71 e0 ldi r23, 0x01 ; 1 10e: 84 e2 ldi r24, 0x24 ; 36 110: 91 e0 ldi r25, 0x01 ; 1 112: 0c 94 9f 02 jmp 0x53e ; 0x53e <Print::println(char const*)> 00000116 <setup>: _ZN14HardwareSerial5beginEm(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.h:121 public: inline HardwareSerial( volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *ucsrc, volatile uint8_t *udr); void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } 116: 26 e0 ldi r18, 0x06 ; 6 118: 40 e8 ldi r20, 0x80 ; 128 11a: 55 e2 ldi r21, 0x25 ; 37 11c: 60 e0 ldi r22, 0x00 ; 0 11e: 70 e0 ldi r23, 0x00 ; 0 120: 84 e2 ldi r24, 0x24 ; 36 122: 91 e0 ldi r25, 0x01 ; 1 124: 0c 94 78 01 jmp 0x2f0 ; 0x2f0 <HardwareSerial::begin(unsigned long, unsigned char)> 00000128 <loop>: loop(): C:\Windows\TEMP\arduino_modified_sketch_577453/sketch_dec02a.ino:25 void setup() { Serial.begin(9600); } void loop() { ch.X(); 128: 80 e0 ldi r24, 0x00 ; 0 12a: 91 e0 ldi r25, 0x01 ; 1 12c: 0c 94 85 00 jmp 0x10a ; 0x10a <Child::X()> 00000130 <HardwareSerial::available()>: _ZN14HardwareSerial9availableEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:150 // clear any received data _rx_buffer_head = _rx_buffer_tail; } int HardwareSerial::available(void) { 130: fc 01 movw r30, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:151 return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE; 132: 91 8d ldd r25, Z+25 ; 0x19 134: 22 8d ldd r18, Z+26 ; 0x1a 136: 89 2f mov r24, r25 138: 90 e0 ldi r25, 0x00 ; 0 13a: 80 5c subi r24, 0xC0 ; 192 13c: 9f 4f sbci r25, 0xFF ; 255 13e: 82 1b sub r24, r18 140: 91 09 sbc r25, r1 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:152 } 142: 8f 73 andi r24, 0x3F ; 63 144: 99 27 eor r25, r25 146: 08 95 ret 00000148 <HardwareSerial::peek()>: _ZN14HardwareSerial4peekEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:155 int HardwareSerial::peek(void) { 148: fc 01 movw r30, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:156 if (_rx_buffer_head == _rx_buffer_tail) { 14a: 91 8d ldd r25, Z+25 ; 0x19 14c: 82 8d ldd r24, Z+26 ; 0x1a 14e: 98 17 cp r25, r24 150: 31 f0 breq .+12 ; 0x15e <HardwareSerial::peek()+0x16> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:159 return -1; } else { return _rx_buffer[_rx_buffer_tail]; 152: 82 8d ldd r24, Z+26 ; 0x1a 154: e8 0f add r30, r24 156: f1 1d adc r31, r1 158: 85 8d ldd r24, Z+29 ; 0x1d 15a: 90 e0 ldi r25, 0x00 ; 0 15c: 08 95 ret D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:157 } int HardwareSerial::peek(void) { if (_rx_buffer_head == _rx_buffer_tail) { return -1; 15e: 8f ef ldi r24, 0xFF ; 255 160: 9f ef ldi r25, 0xFF ; 255 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:161 } else { return _rx_buffer[_rx_buffer_tail]; } } 162: 08 95 ret 00000164 <HardwareSerial::read()>: _ZN14HardwareSerial4readEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:164 int HardwareSerial::read(void) { 164: fc 01 movw r30, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:166 // if the head isn't ahead of the tail, we don't have any characters if (_rx_buffer_head == _rx_buffer_tail) { 166: 91 8d ldd r25, Z+25 ; 0x19 168: 82 8d ldd r24, Z+26 ; 0x1a 16a: 98 17 cp r25, r24 16c: 61 f0 breq .+24 ; 0x186 <HardwareSerial::read()+0x22> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:169 return -1; } else { unsigned char c = _rx_buffer[_rx_buffer_tail]; 16e: a2 8d ldd r26, Z+26 ; 0x1a 170: ae 0f add r26, r30 172: bf 2f mov r27, r31 174: b1 1d adc r27, r1 176: 5d 96 adiw r26, 0x1d ; 29 178: 8c 91 ld r24, X D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:170 _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE; 17a: 92 8d ldd r25, Z+26 ; 0x1a 17c: 9f 5f subi r25, 0xFF ; 255 17e: 9f 73 andi r25, 0x3F ; 63 180: 92 8f std Z+26, r25 ; 0x1a D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:171 return c; 182: 90 e0 ldi r25, 0x00 ; 0 184: 08 95 ret D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:167 int HardwareSerial::read(void) { // if the head isn't ahead of the tail, we don't have any characters if (_rx_buffer_head == _rx_buffer_tail) { return -1; 186: 8f ef ldi r24, 0xFF ; 255 188: 9f ef ldi r25, 0xFF ; 255 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:173 } else { unsigned char c = _rx_buffer[_rx_buffer_tail]; _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE; return c; } } 18a: 08 95 ret 0000018c <HardwareSerial::availableForWrite()>: _ZN14HardwareSerial17availableForWriteEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:181 { #if (SERIAL_TX_BUFFER_SIZE>256) uint8_t oldSREG = SREG; cli(); #endif tx_buffer_index_t head = _tx_buffer_head; 18c: fc 01 movw r30, r24 18e: 53 8d ldd r21, Z+27 ; 0x1b D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:182 tx_buffer_index_t tail = _tx_buffer_tail; 190: 44 8d ldd r20, Z+28 ; 0x1c 192: 25 2f mov r18, r21 194: 30 e0 ldi r19, 0x00 ; 0 196: 84 2f mov r24, r20 198: 90 e0 ldi r25, 0x00 ; 0 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:186 #if (SERIAL_TX_BUFFER_SIZE>256) SREG = oldSREG; #endif if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail; 19a: 82 1b sub r24, r18 19c: 93 0b sbc r25, r19 19e: 54 17 cp r21, r20 1a0: 10 f0 brcs .+4 ; 0x1a6 <HardwareSerial::availableForWrite()+0x1a> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:186 (discriminator 1) 1a2: cf 96 adiw r24, 0x3f ; 63 1a4: 08 95 ret D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:187 return tail - head - 1; 1a6: 01 97 sbiw r24, 0x01 ; 1 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:188 } 1a8: 08 95 ret 000001aa <serialEventRun()>: _Z14serialEventRunv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:66 #endif void serialEventRun(void) { #if defined(HAVE_HWSERIAL0) if (Serial0_available && serialEvent && Serial0_available()) serialEvent(); 1aa: 88 e2 ldi r24, 0x28 ; 40 1ac: 92 e0 ldi r25, 0x02 ; 2 1ae: 89 2b or r24, r25 1b0: 49 f0 breq .+18 ; 0x1c4 <serialEventRun()+0x1a> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:66 (discriminator 1) 1b2: 80 e0 ldi r24, 0x00 ; 0 1b4: 90 e0 ldi r25, 0x00 ; 0 1b6: 89 2b or r24, r25 1b8: 29 f0 breq .+10 ; 0x1c4 <serialEventRun()+0x1a> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:66 (discriminator 3) 1ba: 0e 94 28 02 call 0x450 ; 0x450 <Serial0_available()> 1be: 81 11 cpse r24, r1 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:66 1c0: 0e 94 00 00 call 0 ; 0x0 <__vectors> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:69 #endif #if defined(HAVE_HWSERIAL1) if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1(); 1c4: 80 e0 ldi r24, 0x00 ; 0 1c6: 90 e0 ldi r25, 0x00 ; 0 1c8: 89 2b or r24, r25 1ca: 49 f0 breq .+18 ; 0x1de <serialEventRun()+0x34> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:69 (discriminator 1) 1cc: 80 e0 ldi r24, 0x00 ; 0 1ce: 90 e0 ldi r25, 0x00 ; 0 1d0: 89 2b or r24, r25 1d2: 29 f0 breq .+10 ; 0x1de <serialEventRun()+0x34> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:69 (discriminator 3) 1d4: 0e 94 00 00 call 0 ; 0x0 <__vectors> 1d8: 81 11 cpse r24, r1 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:69 1da: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:77 if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2(); #endif #if defined(HAVE_HWSERIAL3) if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3(); #endif } 1de: 08 95 ret 000001e0 <HardwareSerial::_tx_udr_empty_irq()>: _ZN14HardwareSerial17_tx_udr_empty_irqEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:82 // Actual interrupt handlers ////////////////////////////////////////////////////////////// void HardwareSerial::_tx_udr_empty_irq(void) { 1e0: fc 01 movw r30, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:85 // If interrupts are enabled, there must be more data in the output // buffer. Send the next byte unsigned char c = _tx_buffer[_tx_buffer_tail]; 1e2: a4 8d ldd r26, Z+28 ; 0x1c 1e4: a8 0f add r26, r24 1e6: b9 2f mov r27, r25 1e8: b1 1d adc r27, r1 1ea: a3 5a subi r26, 0xA3 ; 163 1ec: bf 4f sbci r27, 0xFF ; 255 1ee: 2c 91 ld r18, X D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:86 _tx_buffer_tail = (_tx_buffer_tail + 1) % SERIAL_TX_BUFFER_SIZE; 1f0: 84 8d ldd r24, Z+28 ; 0x1c 1f2: 90 e0 ldi r25, 0x00 ; 0 1f4: 01 96 adiw r24, 0x01 ; 1 1f6: 8f 73 andi r24, 0x3F ; 63 1f8: 99 27 eor r25, r25 1fa: 84 8f std Z+28, r24 ; 0x1c D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:88 *_udr = c; 1fc: a6 89 ldd r26, Z+22 ; 0x16 1fe: b7 89 ldd r27, Z+23 ; 0x17 200: 2c 93 st X, r18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:93 // clear the TXC bit -- "can be cleared by writing a one to its bit // location". This makes sure flush() won't return until the bytes // actually got written *_ucsra |= _BV(TXC0); 202: a0 89 ldd r26, Z+16 ; 0x10 204: b1 89 ldd r27, Z+17 ; 0x11 206: 8c 91 ld r24, X 208: 80 64 ori r24, 0x40 ; 64 20a: 8c 93 st X, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:95 if (_tx_buffer_head == _tx_buffer_tail) { 20c: 93 8d ldd r25, Z+27 ; 0x1b 20e: 84 8d ldd r24, Z+28 ; 0x1c 210: 98 13 cpse r25, r24 212: 06 c0 rjmp .+12 ; 0x220 <HardwareSerial::_tx_udr_empty_irq()+0x40> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:97 // Buffer empty, so disable interrupts *_ucsrb &= ~_BV(UDRIE0); 214: 02 88 ldd r0, Z+18 ; 0x12 216: f3 89 ldd r31, Z+19 ; 0x13 218: e0 2d mov r30, r0 21a: 80 81 ld r24, Z 21c: 8f 7d andi r24, 0xDF ; 223 21e: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:99 } } 220: 08 95 ret 00000222 <HardwareSerial::flush()>: _ZN14HardwareSerial5flushEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:191 if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail; return tail - head - 1; } void HardwareSerial::flush() { 222: cf 93 push r28 224: df 93 push r29 226: ec 01 movw r28, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:195 // If we have never written a byte, no need to flush. This special // case is needed since there is no way to force the TXC (transmit // complete) bit to 1 during initialization if (!_written) 228: 88 8d ldd r24, Y+24 ; 0x18 22a: 88 23 and r24, r24 22c: b9 f0 breq .+46 ; 0x25c <HardwareSerial::flush()+0x3a> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:198 return; while (bit_is_set(*_ucsrb, UDRIE0) || bit_is_clear(*_ucsra, TXC0)) { 22e: aa 89 ldd r26, Y+18 ; 0x12 230: bb 89 ldd r27, Y+19 ; 0x13 232: e8 89 ldd r30, Y+16 ; 0x10 234: f9 89 ldd r31, Y+17 ; 0x11 236: 8c 91 ld r24, X 238: 85 fd sbrc r24, 5 23a: 03 c0 rjmp .+6 ; 0x242 <HardwareSerial::flush()+0x20> 23c: 80 81 ld r24, Z 23e: 86 fd sbrc r24, 6 240: 0d c0 rjmp .+26 ; 0x25c <HardwareSerial::flush()+0x3a> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:199 if (bit_is_clear(SREG, SREG_I) && bit_is_set(*_ucsrb, UDRIE0)) 242: 0f b6 in r0, 0x3f ; 63 244: 07 fc sbrc r0, 7 246: f7 cf rjmp .-18 ; 0x236 <HardwareSerial::flush()+0x14> 248: 8c 91 ld r24, X 24a: 85 ff sbrs r24, 5 24c: f2 cf rjmp .-28 ; 0x232 <HardwareSerial::flush()+0x10> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:203 // Interrupts are globally disabled, but the DR empty // interrupt should be enabled, so poll the DR empty flag to // prevent deadlock if (bit_is_set(*_ucsra, UDRE0)) 24e: 80 81 ld r24, Z 250: 85 ff sbrs r24, 5 252: ed cf rjmp .-38 ; 0x22e <HardwareSerial::flush()+0xc> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:204 _tx_udr_empty_irq(); 254: ce 01 movw r24, r28 256: 0e 94 f0 00 call 0x1e0 ; 0x1e0 <HardwareSerial::_tx_udr_empty_irq()> 25a: e9 cf rjmp .-46 ; 0x22e <HardwareSerial::flush()+0xc> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:208 } // If we get here, nothing is queued anymore (DRIE is disabled) and // the hardware finished tranmission (TXC is set). } 25c: df 91 pop r29 25e: cf 91 pop r28 260: 08 95 ret 00000262 <HardwareSerial::write(unsigned char)>: _ZN14HardwareSerial5writeEh(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:211 size_t HardwareSerial::write(uint8_t c) { 262: ef 92 push r14 264: ff 92 push r15 266: 0f 93 push r16 268: 1f 93 push r17 26a: cf 93 push r28 26c: df 93 push r29 26e: ec 01 movw r28, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:212 _written = true; 270: 81 e0 ldi r24, 0x01 ; 1 272: 88 8f std Y+24, r24 ; 0x18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:217 // If the buffer and the data register is empty, just write the byte // to the data register and be done. This shortcut helps // significantly improve the effective datarate at high (> // 500kbit/s) bitrates, where interrupt overhead becomes a slowdown. if (_tx_buffer_head == _tx_buffer_tail && bit_is_set(*_ucsra, UDRE0)) { 274: 9b 8d ldd r25, Y+27 ; 0x1b 276: 8c 8d ldd r24, Y+28 ; 0x1c 278: 98 13 cpse r25, r24 27a: 16 c0 rjmp .+44 ; 0x2a8 <HardwareSerial::write(unsigned char)+0x46> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:217 (discriminator 1) 27c: e8 89 ldd r30, Y+16 ; 0x10 27e: f9 89 ldd r31, Y+17 ; 0x11 280: 80 81 ld r24, Z 282: 85 ff sbrs r24, 5 284: 11 c0 rjmp .+34 ; 0x2a8 <HardwareSerial::write(unsigned char)+0x46> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:218 *_udr = c; 286: ee 89 ldd r30, Y+22 ; 0x16 288: ff 89 ldd r31, Y+23 ; 0x17 28a: 60 83 st Z, r22 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:219 *_ucsra |= _BV(TXC0); 28c: e8 89 ldd r30, Y+16 ; 0x10 28e: f9 89 ldd r31, Y+17 ; 0x11 290: 80 81 ld r24, Z 292: 80 64 ori r24, 0x40 ; 64 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:242 } _tx_buffer[_tx_buffer_head] = c; _tx_buffer_head = i; *_ucsrb |= _BV(UDRIE0); 294: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:245 return 1; } 296: 81 e0 ldi r24, 0x01 ; 1 298: 90 e0 ldi r25, 0x00 ; 0 29a: df 91 pop r29 29c: cf 91 pop r28 29e: 1f 91 pop r17 2a0: 0f 91 pop r16 2a2: ff 90 pop r15 2a4: ef 90 pop r14 2a6: 08 95 ret 2a8: f6 2e mov r15, r22 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:222 if (_tx_buffer_head == _tx_buffer_tail && bit_is_set(*_ucsra, UDRE0)) { *_udr = c; *_ucsra |= _BV(TXC0); return 1; } tx_buffer_index_t i = (_tx_buffer_head + 1) % SERIAL_TX_BUFFER_SIZE; 2aa: 0b 8d ldd r16, Y+27 ; 0x1b 2ac: 10 e0 ldi r17, 0x00 ; 0 2ae: 0f 5f subi r16, 0xFF ; 255 2b0: 1f 4f sbci r17, 0xFF ; 255 2b2: 0f 73 andi r16, 0x3F ; 63 2b4: 11 27 eor r17, r17 2b6: e0 2e mov r14, r16 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:226 // If the output buffer is full, there's nothing for it other than to // wait for the interrupt handler to empty it a bit while (i == _tx_buffer_tail) { 2b8: 8c 8d ldd r24, Y+28 ; 0x1c 2ba: 8e 11 cpse r24, r14 2bc: 0c c0 rjmp .+24 ; 0x2d6 <HardwareSerial::write(unsigned char)+0x74> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:227 if (bit_is_clear(SREG, SREG_I)) { 2be: 0f b6 in r0, 0x3f ; 63 2c0: 07 fc sbrc r0, 7 2c2: fa cf rjmp .-12 ; 0x2b8 <HardwareSerial::write(unsigned char)+0x56> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:232 // Interrupts are disabled, so we'll have to poll the data // register empty flag ourselves. If it is set, pretend an // interrupt has happened and call the handler to free up // space for us. if(bit_is_set(*_ucsra, UDRE0)) 2c4: e8 89 ldd r30, Y+16 ; 0x10 2c6: f9 89 ldd r31, Y+17 ; 0x11 2c8: 80 81 ld r24, Z 2ca: 85 ff sbrs r24, 5 2cc: f5 cf rjmp .-22 ; 0x2b8 <HardwareSerial::write(unsigned char)+0x56> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:233 _tx_udr_empty_irq(); 2ce: ce 01 movw r24, r28 2d0: 0e 94 f0 00 call 0x1e0 ; 0x1e0 <HardwareSerial::_tx_udr_empty_irq()> 2d4: f1 cf rjmp .-30 ; 0x2b8 <HardwareSerial::write(unsigned char)+0x56> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:239 } else { // nop, the interrupt handler will free up space for us } } _tx_buffer[_tx_buffer_head] = c; 2d6: eb 8d ldd r30, Y+27 ; 0x1b 2d8: ec 0f add r30, r28 2da: fd 2f mov r31, r29 2dc: f1 1d adc r31, r1 2de: e3 5a subi r30, 0xA3 ; 163 2e0: ff 4f sbci r31, 0xFF ; 255 2e2: f0 82 st Z, r15 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:240 _tx_buffer_head = i; 2e4: 0b 8f std Y+27, r16 ; 0x1b D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:242 *_ucsrb |= _BV(UDRIE0); 2e6: ea 89 ldd r30, Y+18 ; 0x12 2e8: fb 89 ldd r31, Y+19 ; 0x13 2ea: 80 81 ld r24, Z 2ec: 80 62 ori r24, 0x20 ; 32 2ee: d2 cf rjmp .-92 ; 0x294 <HardwareSerial::write(unsigned char)+0x32> 000002f0 <HardwareSerial::begin(unsigned long, unsigned char)>: _ZN14HardwareSerial5beginEmh(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:104 } // Public Methods ////////////////////////////////////////////////////////////// void HardwareSerial::begin(unsigned long baud, byte config) { 2f0: cf 92 push r12 2f2: df 92 push r13 2f4: ef 92 push r14 2f6: ff 92 push r15 2f8: 1f 93 push r17 2fa: cf 93 push r28 2fc: df 93 push r29 2fe: ec 01 movw r28, r24 300: 6a 01 movw r12, r20 302: 7b 01 movw r14, r22 304: 12 2f mov r17, r18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:107 // Try u2x mode first uint16_t baud_setting = (F_CPU / 4 / baud - 1) / 2; *_ucsra = 1 << U2X0; 306: e8 89 ldd r30, Y+16 ; 0x10 308: f9 89 ldd r31, Y+17 ; 0x11 30a: 82 e0 ldi r24, 0x02 ; 2 30c: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:114 // hardcoded exception for 57600 for compatibility with the bootloader // shipped with the Duemilanove and previous boards and the firmware // on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot // be > 4095, so switch back to non-u2x mode if the baud rate is too // low. if (((F_CPU == 16000000UL) && (baud == 57600)) || (baud_setting >4095)) 30e: c1 14 cp r12, r1 310: 81 ee ldi r24, 0xE1 ; 225 312: d8 06 cpc r13, r24 314: e1 04 cpc r14, r1 316: f1 04 cpc r15, r1 318: a1 f0 breq .+40 ; 0x342 <HardwareSerial::begin(unsigned long, unsigned char)+0x52> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:106 (discriminator 1) // Public Methods ////////////////////////////////////////////////////////////// void HardwareSerial::begin(unsigned long baud, byte config) { // Try u2x mode first uint16_t baud_setting = (F_CPU / 4 / baud - 1) / 2; 31a: 60 e0 ldi r22, 0x00 ; 0 31c: 79 e0 ldi r23, 0x09 ; 9 31e: 8d e3 ldi r24, 0x3D ; 61 320: 90 e0 ldi r25, 0x00 ; 0 322: a7 01 movw r20, r14 324: 96 01 movw r18, r12 326: 0e 94 4c 03 call 0x698 ; 0x698 <__udivmodsi4> 32a: 21 50 subi r18, 0x01 ; 1 32c: 31 09 sbc r19, r1 32e: 41 09 sbc r20, r1 330: 51 09 sbc r21, r1 332: 56 95 lsr r21 334: 47 95 ror r20 336: 37 95 ror r19 338: 27 95 ror r18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:114 (discriminator 1) // hardcoded exception for 57600 for compatibility with the bootloader // shipped with the Duemilanove and previous boards and the firmware // on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot // be > 4095, so switch back to non-u2x mode if the baud rate is too // low. if (((F_CPU == 16000000UL) && (baud == 57600)) || (baud_setting >4095)) 33a: 21 15 cp r18, r1 33c: 80 e1 ldi r24, 0x10 ; 16 33e: 38 07 cpc r19, r24 340: 98 f0 brcs .+38 ; 0x368 <HardwareSerial::begin(unsigned long, unsigned char)+0x78> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:116 { *_ucsra = 0; 342: e8 89 ldd r30, Y+16 ; 0x10 344: f9 89 ldd r31, Y+17 ; 0x11 346: 10 82 st Z, r1 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:117 baud_setting = (F_CPU / 8 / baud - 1) / 2; 348: 60 e8 ldi r22, 0x80 ; 128 34a: 74 e8 ldi r23, 0x84 ; 132 34c: 8e e1 ldi r24, 0x1E ; 30 34e: 90 e0 ldi r25, 0x00 ; 0 350: a7 01 movw r20, r14 352: 96 01 movw r18, r12 354: 0e 94 4c 03 call 0x698 ; 0x698 <__udivmodsi4> 358: 21 50 subi r18, 0x01 ; 1 35a: 31 09 sbc r19, r1 35c: 41 09 sbc r20, r1 35e: 51 09 sbc r21, r1 360: 56 95 lsr r21 362: 47 95 ror r20 364: 37 95 ror r19 366: 27 95 ror r18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:121 } // assign the baud_setting, a.k.a. ubrr (USART Baud Rate Register) *_ubrrh = baud_setting >> 8; 368: ec 85 ldd r30, Y+12 ; 0x0c 36a: fd 85 ldd r31, Y+13 ; 0x0d 36c: 30 83 st Z, r19 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:122 *_ubrrl = baud_setting; 36e: ee 85 ldd r30, Y+14 ; 0x0e 370: ff 85 ldd r31, Y+15 ; 0x0f 372: 20 83 st Z, r18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:124 _written = false; 374: 18 8e std Y+24, r1 ; 0x18 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:132 #if defined(__AVR_ATmega8__) || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) \ || defined(__AVR_ATmega8535__) || defined(__AVR_ATmega16__)|| defined(__AVR_ATmega32__) \ || defined(__AVR_ATmega162__) config |= 0x80; // select UCSRC register (shared with UBRRH) #endif *_ucsrc = config; 376: ec 89 ldd r30, Y+20 ; 0x14 378: fd 89 ldd r31, Y+21 ; 0x15 37a: 10 83 st Z, r17 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:134 *_ucsrb |= _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0); 37c: ea 89 ldd r30, Y+18 ; 0x12 37e: fb 89 ldd r31, Y+19 ; 0x13 380: 80 81 ld r24, Z 382: 88 69 ori r24, 0x98 ; 152 384: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:135 *_ucsrb &= ~_BV(UDRIE0); 386: ea 89 ldd r30, Y+18 ; 0x12 388: fb 89 ldd r31, Y+19 ; 0x13 38a: 80 81 ld r24, Z 38c: 8f 7d andi r24, 0xDF ; 223 38e: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial.cpp:136 } 390: df 91 pop r29 392: cf 91 pop r28 394: 1f 91 pop r17 396: ff 90 pop r15 398: ef 90 pop r14 39a: df 90 pop r13 39c: cf 90 pop r12 39e: 08 95 ret 000003a0 <__vector_18>: __vector_18(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:50 #elif defined(USART_RXC_vect) ISR(USART_RXC_vect) #else #error "Don't know what the Data Received vector is called for Serial" #endif { 3a0: 1f 92 push r1 3a2: 0f 92 push r0 3a4: 0f b6 in r0, 0x3f ; 63 3a6: 0f 92 push r0 3a8: 11 24 eor r1, r1 3aa: 2f 93 push r18 3ac: 8f 93 push r24 3ae: 9f 93 push r25 3b0: ef 93 push r30 3b2: ff 93 push r31 _ZN14HardwareSerial16_rx_complete_irqEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:103 // Actual interrupt handlers ////////////////////////////////////////////////////////////// void HardwareSerial::_rx_complete_irq(void) { if (bit_is_clear(*_ucsra, UPE0)) { 3b4: e0 91 34 01 lds r30, 0x0134 ; 0x800134 <__data_end+0x10> 3b8: f0 91 35 01 lds r31, 0x0135 ; 0x800135 <__data_end+0x11> 3bc: 80 81 ld r24, Z 3be: e0 91 3a 01 lds r30, 0x013A ; 0x80013a <__data_end+0x16> 3c2: f0 91 3b 01 lds r31, 0x013B ; 0x80013b <__data_end+0x17> 3c6: 82 fd sbrc r24, 2 3c8: 1b c0 rjmp .+54 ; 0x400 <__EEPROM_REGION_LENGTH__> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:106 // No Parity error, read byte and store it in the buffer if there is // room unsigned char c = *_udr; 3ca: 90 81 ld r25, Z D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:107 rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE; 3cc: 80 91 3d 01 lds r24, 0x013D ; 0x80013d <__data_end+0x19> 3d0: 8f 5f subi r24, 0xFF ; 255 3d2: 8f 73 andi r24, 0x3F ; 63 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:113 // if we should be storing the received character into the location // just before the tail (meaning that the head would advance to the // current location of the tail), we're about to overflow the buffer // and so we don't write the character or advance the head. if (i != _rx_buffer_tail) { 3d4: 20 91 3e 01 lds r18, 0x013E ; 0x80013e <__data_end+0x1a> 3d8: 82 17 cp r24, r18 3da: 41 f0 breq .+16 ; 0x3ec <__vector_18+0x4c> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:114 _rx_buffer[_rx_buffer_head] = c; 3dc: e0 91 3d 01 lds r30, 0x013D ; 0x80013d <__data_end+0x19> 3e0: f0 e0 ldi r31, 0x00 ; 0 3e2: ec 5d subi r30, 0xDC ; 220 3e4: fe 4f sbci r31, 0xFE ; 254 3e6: 95 8f std Z+29, r25 ; 0x1d D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:115 _rx_buffer_head = i; 3e8: 80 93 3d 01 sts 0x013D, r24 ; 0x80013d <__data_end+0x19> __vector_18(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:52 Serial._rx_complete_irq(); } 3ec: ff 91 pop r31 3ee: ef 91 pop r30 3f0: 9f 91 pop r25 3f2: 8f 91 pop r24 3f4: 2f 91 pop r18 3f6: 0f 90 pop r0 3f8: 0f be out 0x3f, r0 ; 63 3fa: 0f 90 pop r0 3fc: 1f 90 pop r1 3fe: 18 95 reti _ZN14HardwareSerial16_rx_complete_irqEv(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:119 } } else { // Parity error, read byte but discard it *_udr; 400: 80 81 ld r24, Z __vector_18(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:52 402: f4 cf rjmp .-24 ; 0x3ec <__vector_18+0x4c> 00000404 <__vector_19>: __vector_19(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:63 #elif defined(USART0_UDRE_vect) ISR(USART0_UDRE_vect) #else #error "Don't know what the Data Register Empty vector is called for Serial" #endif { 404: 1f 92 push r1 406: 0f 92 push r0 408: 0f b6 in r0, 0x3f ; 63 40a: 0f 92 push r0 40c: 11 24 eor r1, r1 40e: 2f 93 push r18 410: 3f 93 push r19 412: 4f 93 push r20 414: 5f 93 push r21 416: 6f 93 push r22 418: 7f 93 push r23 41a: 8f 93 push r24 41c: 9f 93 push r25 41e: af 93 push r26 420: bf 93 push r27 422: ef 93 push r30 424: ff 93 push r31 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:64 Serial._tx_udr_empty_irq(); 426: 84 e2 ldi r24, 0x24 ; 36 428: 91 e0 ldi r25, 0x01 ; 1 42a: 0e 94 f0 00 call 0x1e0 ; 0x1e0 <HardwareSerial::_tx_udr_empty_irq()> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:65 } 42e: ff 91 pop r31 430: ef 91 pop r30 432: bf 91 pop r27 434: af 91 pop r26 436: 9f 91 pop r25 438: 8f 91 pop r24 43a: 7f 91 pop r23 43c: 6f 91 pop r22 43e: 5f 91 pop r21 440: 4f 91 pop r20 442: 3f 91 pop r19 444: 2f 91 pop r18 446: 0f 90 pop r0 448: 0f be out 0x3f, r0 ; 63 44a: 0f 90 pop r0 44c: 1f 90 pop r1 44e: 18 95 reti 00000450 <Serial0_available()>: _Z17Serial0_availablev(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:76 #endif // Function that can be weakly referenced by serialEventRun to prevent // pulling in this file if it's not otherwise used. bool Serial0_available() { return Serial.available(); 450: 84 e2 ldi r24, 0x24 ; 36 452: 91 e0 ldi r25, 0x01 ; 1 454: 0e 94 98 00 call 0x130 ; 0x130 <HardwareSerial::available()> 458: 21 e0 ldi r18, 0x01 ; 1 45a: 89 2b or r24, r25 45c: 09 f4 brne .+2 ; 0x460 <Serial0_available()+0x10> 45e: 20 e0 ldi r18, 0x00 ; 0 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:77 } 460: 82 2f mov r24, r18 462: 08 95 ret 00000464 <_GLOBAL__sub_I___vector_18>: _ZN5PrintC4Ev(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Print.h:46 size_t printNumber(unsigned long, uint8_t); size_t printFloat(double, uint8_t); protected: void setWriteError(int err = 1) { write_error = err; } public: Print() : write_error(0) {} 464: e4 e2 ldi r30, 0x24 ; 36 466: f1 e0 ldi r31, 0x01 ; 1 468: 13 82 std Z+3, r1 ; 0x03 46a: 12 82 std Z+2, r1 ; 0x02 _ZN6StreamC4Ev(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Stream.h:63 public: virtual int available() = 0; virtual int read() = 0; virtual int peek() = 0; Stream() {_timeout=1000;} 46c: 88 ee ldi r24, 0xE8 ; 232 46e: 93 e0 ldi r25, 0x03 ; 3 470: a0 e0 ldi r26, 0x00 ; 0 472: b0 e0 ldi r27, 0x00 ; 0 474: 84 83 std Z+4, r24 ; 0x04 476: 95 83 std Z+5, r25 ; 0x05 478: a6 83 std Z+6, r26 ; 0x06 47a: b7 83 std Z+7, r27 ; 0x07 _ZN14HardwareSerialC4EPVhS1_S1_S1_S1_S1_(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial_private.h:95 volatile uint8_t *ucsrc, volatile uint8_t *udr) : _ubrrh(ubrrh), _ubrrl(ubrrl), _ucsra(ucsra), _ucsrb(ucsrb), _ucsrc(ucsrc), _udr(udr), _rx_buffer_head(0), _rx_buffer_tail(0), _tx_buffer_head(0), _tx_buffer_tail(0) 47c: 82 e1 ldi r24, 0x12 ; 18 47e: 91 e0 ldi r25, 0x01 ; 1 480: 91 83 std Z+1, r25 ; 0x01 482: 80 83 st Z, r24 484: 85 ec ldi r24, 0xC5 ; 197 486: 90 e0 ldi r25, 0x00 ; 0 488: 95 87 std Z+13, r25 ; 0x0d 48a: 84 87 std Z+12, r24 ; 0x0c 48c: 84 ec ldi r24, 0xC4 ; 196 48e: 90 e0 ldi r25, 0x00 ; 0 490: 97 87 std Z+15, r25 ; 0x0f 492: 86 87 std Z+14, r24 ; 0x0e 494: 80 ec ldi r24, 0xC0 ; 192 496: 90 e0 ldi r25, 0x00 ; 0 498: 91 8b std Z+17, r25 ; 0x11 49a: 80 8b std Z+16, r24 ; 0x10 49c: 81 ec ldi r24, 0xC1 ; 193 49e: 90 e0 ldi r25, 0x00 ; 0 4a0: 93 8b std Z+19, r25 ; 0x13 4a2: 82 8b std Z+18, r24 ; 0x12 4a4: 82 ec ldi r24, 0xC2 ; 194 4a6: 90 e0 ldi r25, 0x00 ; 0 4a8: 95 8b std Z+21, r25 ; 0x15 4aa: 84 8b std Z+20, r24 ; 0x14 4ac: 86 ec ldi r24, 0xC6 ; 198 4ae: 90 e0 ldi r25, 0x00 ; 0 4b0: 97 8b std Z+23, r25 ; 0x17 4b2: 86 8b std Z+22, r24 ; 0x16 4b4: 11 8e std Z+25, r1 ; 0x19 4b6: 12 8e std Z+26, r1 ; 0x1a 4b8: 13 8e std Z+27, r1 ; 0x1b 4ba: 14 8e std Z+28, r1 ; 0x1c _GLOBAL__sub_I___vector_18(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/HardwareSerial0.cpp:77 4bc: 08 95 ret 000004be <Print::write(unsigned char const*, unsigned int)>: _ZN5Print5writeEPKhj(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Print.cpp:136 size_t Print::println(const String &s) { size_t n = print(s); n += println(); return n; } 4be: af 92 push r10 4c0: bf 92 push r11 4c2: cf 92 push r12 4c4: df 92 push r13 4c6: ef 92 push r14 4c8: ff 92 push r15 4ca: 0f 93 push r16 4cc: 1f 93 push r17 4ce: cf 93 push r28 4d0: df 93 push r29 4d2: 6c 01 movw r12, r24 4d4: 7b 01 movw r14, r22 4d6: 8b 01 movw r16, r22 4d8: 04 0f add r16, r20 4da: 15 1f adc r17, r21 4dc: eb 01 movw r28, r22 4de: 5e 01 movw r10, r28 4e0: ae 18 sub r10, r14 4e2: bf 08 sbc r11, r15 4e4: c0 17 cp r28, r16 4e6: d1 07 cpc r29, r17 4e8: 59 f0 breq .+22 ; 0x500 <Print::write(unsigned char const*, unsigned int)+0x42> 4ea: 69 91 ld r22, Y+ 4ec: d6 01 movw r26, r12 4ee: ed 91 ld r30, X+ 4f0: fc 91 ld r31, X 4f2: 01 90 ld r0, Z+ 4f4: f0 81 ld r31, Z 4f6: e0 2d mov r30, r0 4f8: c6 01 movw r24, r12 4fa: 09 95 icall 4fc: 89 2b or r24, r25 4fe: 79 f7 brne .-34 ; 0x4de <Print::write(unsigned char const*, unsigned int)+0x20> 500: c5 01 movw r24, r10 502: df 91 pop r29 504: cf 91 pop r28 506: 1f 91 pop r17 508: 0f 91 pop r16 50a: ff 90 pop r15 50c: ef 90 pop r14 50e: df 90 pop r13 510: cf 90 pop r12 512: bf 90 pop r11 514: af 90 pop r10 516: 08 95 ret 00000518 <Print::write(char const*) [clone .part.2]>: _ZN5Print5writeEPKc(): 518: fb 01 movw r30, r22 51a: 01 90 ld r0, Z+ 51c: 00 20 and r0, r0 51e: e9 f7 brne .-6 ; 0x51a <Print::write(char const*) [clone .part.2]+0x2> 520: 31 97 sbiw r30, 0x01 ; 1 522: af 01 movw r20, r30 524: 46 1b sub r20, r22 526: 57 0b sbc r21, r23 528: dc 01 movw r26, r24 52a: ed 91 ld r30, X+ 52c: fc 91 ld r31, X 52e: 02 80 ldd r0, Z+2 ; 0x02 530: f3 81 ldd r31, Z+3 ; 0x03 532: e0 2d mov r30, r0 534: 09 94 ijmp 00000536 <Print::println()>: 536: 60 e2 ldi r22, 0x20 ; 32 538: 71 e0 ldi r23, 0x01 ; 1 53a: 0c 94 8c 02 jmp 0x518 ; 0x518 <Print::write(char const*) [clone .part.2]> 0000053e <Print::println(char const*)>: _ZN5Print7printlnEPKc(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Print.cpp:139 size_t Print::println(const char c[]) { 53e: 0f 93 push r16 540: 1f 93 push r17 542: cf 93 push r28 544: df 93 push r29 546: 8c 01 movw r16, r24 _ZN5Print5writeEPKc(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Print.h:53 int getWriteError() { return write_error; } void clearWriteError() { setWriteError(0); } virtual size_t write(uint8_t) = 0; size_t write(const char *str) { if (str == NULL) return 0; 548: d0 e0 ldi r29, 0x00 ; 0 54a: c0 e0 ldi r28, 0x00 ; 0 54c: 61 15 cp r22, r1 54e: 71 05 cpc r23, r1 550: 19 f0 breq .+6 ; 0x558 <Print::println(char const*)+0x1a> 552: 0e 94 8c 02 call 0x518 ; 0x518 <Print::write(char const*) [clone .part.2]> 556: ec 01 movw r28, r24 _ZN5Print7printlnEPKc(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Print.cpp:141 size_t n = print(c); n += println(); 558: c8 01 movw r24, r16 55a: 0e 94 9b 02 call 0x536 ; 0x536 <Print::println()> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/Print.cpp:143 return n; } 55e: 8c 0f add r24, r28 560: 9d 1f adc r25, r29 562: df 91 pop r29 564: cf 91 pop r28 566: 1f 91 pop r17 568: 0f 91 pop r16 56a: 08 95 ret 0000056c <initVariant>: initVariant(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:28 int atexit(void (* /*func*/ )()) { return 0; } // Weak empty variant initialization function. // May be redefined by variant files. void initVariant() __attribute__((weak)); void initVariant() { } 56c: 08 95 ret 0000056e <main>: main(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:35 //void setupUSB() __attribute__((weak)); //void setupUSB() { } int main(void) { init(); 56e: 0e 94 10 03 call 0x620 ; 0x620 <init> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:37 initVariant(); 572: 0e 94 b6 02 call 0x56c ; 0x56c <initVariant> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:43 #if defined(USBCON) USBDevice.attach(); #endif setup(); 576: 0e 94 8b 00 call 0x116 ; 0x116 <setup> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:47 for (;;) { loop(); if (serialEventRun) serialEventRun(); 57a: c5 ed ldi r28, 0xD5 ; 213 57c: d0 e0 ldi r29, 0x00 ; 0 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:46 #endif setup(); for (;;) { loop(); 57e: 0e 94 94 00 call 0x128 ; 0x128 <loop> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:47 if (serialEventRun) serialEventRun(); 582: 20 97 sbiw r28, 0x00 ; 0 584: e1 f3 breq .-8 ; 0x57e <main+0x10> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/main.cpp:47 (discriminator 1) 586: 0e 94 d5 00 call 0x1aa ; 0x1aa <serialEventRun()> 58a: f9 cf rjmp .-14 ; 0x57e <main+0x10> 0000058c <__vector_16>: __vector_16(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:606 " brne 1b" // 2 cycles : /* no outputs */ : "w" (us) ); // return = 4 cycles } 58c: 1f 92 push r1 58e: 0f 92 push r0 590: 0f b6 in r0, 0x3f ; 63 592: 0f 92 push r0 594: 11 24 eor r1, r1 596: 2f 93 push r18 598: 3f 93 push r19 59a: 8f 93 push r24 59c: 9f 93 push r25 59e: af 93 push r26 5a0: bf 93 push r27 5a2: 80 91 c2 01 lds r24, 0x01C2 ; 0x8001c2 <timer0_millis> 5a6: 90 91 c3 01 lds r25, 0x01C3 ; 0x8001c3 <timer0_millis+0x1> 5aa: a0 91 c4 01 lds r26, 0x01C4 ; 0x8001c4 <timer0_millis+0x2> 5ae: b0 91 c5 01 lds r27, 0x01C5 ; 0x8001c5 <timer0_millis+0x3> 5b2: 30 91 c1 01 lds r19, 0x01C1 ; 0x8001c1 <timer0_fract> 5b6: 23 e0 ldi r18, 0x03 ; 3 5b8: 23 0f add r18, r19 5ba: 2d 37 cpi r18, 0x7D ; 125 5bc: 58 f5 brcc .+86 ; 0x614 <__vector_16+0x88> 5be: 01 96 adiw r24, 0x01 ; 1 5c0: a1 1d adc r26, r1 5c2: b1 1d adc r27, r1 5c4: 20 93 c1 01 sts 0x01C1, r18 ; 0x8001c1 <timer0_fract> 5c8: 80 93 c2 01 sts 0x01C2, r24 ; 0x8001c2 <timer0_millis> 5cc: 90 93 c3 01 sts 0x01C3, r25 ; 0x8001c3 <timer0_millis+0x1> 5d0: a0 93 c4 01 sts 0x01C4, r26 ; 0x8001c4 <timer0_millis+0x2> 5d4: b0 93 c5 01 sts 0x01C5, r27 ; 0x8001c5 <timer0_millis+0x3> 5d8: 80 91 c6 01 lds r24, 0x01C6 ; 0x8001c6 <timer0_overflow_count> 5dc: 90 91 c7 01 lds r25, 0x01C7 ; 0x8001c7 <timer0_overflow_count+0x1> 5e0: a0 91 c8 01 lds r26, 0x01C8 ; 0x8001c8 <timer0_overflow_count+0x2> 5e4: b0 91 c9 01 lds r27, 0x01C9 ; 0x8001c9 <timer0_overflow_count+0x3> 5e8: 01 96 adiw r24, 0x01 ; 1 5ea: a1 1d adc r26, r1 5ec: b1 1d adc r27, r1 5ee: 80 93 c6 01 sts 0x01C6, r24 ; 0x8001c6 <timer0_overflow_count> 5f2: 90 93 c7 01 sts 0x01C7, r25 ; 0x8001c7 <timer0_overflow_count+0x1> 5f6: a0 93 c8 01 sts 0x01C8, r26 ; 0x8001c8 <timer0_overflow_count+0x2> 5fa: b0 93 c9 01 sts 0x01C9, r27 ; 0x8001c9 <timer0_overflow_count+0x3> 5fe: bf 91 pop r27 600: af 91 pop r26 602: 9f 91 pop r25 604: 8f 91 pop r24 606: 3f 91 pop r19 608: 2f 91 pop r18 60a: 0f 90 pop r0 60c: 0f be out 0x3f, r0 ; 63 60e: 0f 90 pop r0 610: 1f 90 pop r1 612: 18 95 reti 614: 26 e8 ldi r18, 0x86 ; 134 616: 23 0f add r18, r19 618: 02 96 adiw r24, 0x02 ; 2 61a: a1 1d adc r26, r1 61c: b1 1d adc r27, r1 61e: d2 cf rjmp .-92 ; 0x5c4 <__vector_16+0x38> 00000620 <init>: init(): D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:612 void init() { // this needs to be called before setup() or some functions won't // work there sei(); 620: 78 94 sei D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:624 // On the ATmega168, timer 0 is also used for fast hardware pwm // (using phase-correct PWM would mean that timer 0 overflowed half as often // resulting in different millis() behavior on the ATmega8 and ATmega168) #if defined(TCCR0A) && defined(WGM01) TCCR0A |= _BV(WGM01) | _BV(WGM00); 622: 84 b5 in r24, 0x24 ; 36 624: 83 60 ori r24, 0x03 ; 3 626: 84 bd out 0x24, r24 ; 36 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:639 #if defined(WGM00) && defined(WGM01) // The ATmega8 doesn't have WGM00 and WGM01 TCCR0 |= _BV(WGM01) | _BV(WGM00); #endif #elif defined(TCCR0B) && defined(CS01) && defined(CS00) // This combination is for the standard 168/328/640/1280/1281/2560/2561 TCCR0B |= _BV(CS01) | _BV(CS00); 628: 85 b5 in r24, 0x25 ; 37 62a: 83 60 ori r24, 0x03 ; 3 62c: 85 bd out 0x25, r24 ; 37 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:651 // Enable timer 0 overflow interrupt #if defined(TIMSK) && defined(TOIE0) TIMSK |= _BV(TOIE0); #elif defined(TIMSK0) && defined(TOIE0) TIMSK0 |= _BV(TOIE0); 62e: ee e6 ldi r30, 0x6E ; 110 630: f0 e0 ldi r31, 0x00 ; 0 632: 80 81 ld r24, Z 634: 81 60 ori r24, 0x01 ; 1 636: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:662 // this is better for motors as it ensures an even waveform // note, however, that fast pwm mode can achieve a frequency of up // 8 MHz (with a 16 MHz clock) at 50% duty cycle #if defined(TCCR1B) && defined(CS11) && defined(CS10) TCCR1B = _BV(CS11); // Set timer 1 prescale factor to 64 638: e1 e8 ldi r30, 0x81 ; 129 63a: f0 e0 ldi r31, 0x00 ; 0 63c: 82 e0 ldi r24, 0x02 ; 2 63e: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:664 #if F_CPU >= 8000000L TCCR1B |= _BV(CS10); 640: 80 81 ld r24, Z 642: 81 60 ori r24, 0x01 ; 1 644: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:673 #if F_CPU >= 8000000L TCCR1 |= _BV(CS10); #endif #endif #if defined(TCCR1A) && defined(WGM10) TCCR1A |= _BV(WGM10); // Put timer 1 in 8-bit phase correct pwm mode 646: e0 e8 ldi r30, 0x80 ; 128 648: f0 e0 ldi r31, 0x00 ; 0 64a: 80 81 ld r24, Z 64c: 81 60 ori r24, 0x01 ; 1 64e: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:680 // Set timer 2 prescale factor to 64 #if defined(TCCR2) && defined(CS22) TCCR2 |= _BV(CS22); #elif defined(TCCR2B) && defined(CS22) TCCR2B |= _BV(CS22); 650: e1 eb ldi r30, 0xB1 ; 177 652: f0 e0 ldi r31, 0x00 ; 0 654: 80 81 ld r24, Z 656: 84 60 ori r24, 0x04 ; 4 658: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:689 // Configure timer 2 for phase correct pwm (8-bit) #if defined(TCCR2) && defined(WGM20) TCCR2 |= _BV(WGM20); #elif defined(TCCR2A) && defined(WGM20) TCCR2A |= _BV(WGM20); 65a: e0 eb ldi r30, 0xB0 ; 176 65c: f0 e0 ldi r31, 0x00 ; 0 65e: 80 81 ld r24, Z 660: 81 60 ori r24, 0x01 ; 1 662: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:695 //#else // Timer 2 not finished (may not be present on this CPU) #endif #if defined(TCCR3B) && defined(CS31) && defined(WGM30) TCCR3B |= _BV(CS31) | _BV(CS30); // Set timer 3 prescale factor to 64 664: e1 e9 ldi r30, 0x91 ; 145 666: f0 e0 ldi r31, 0x00 ; 0 668: 80 81 ld r24, Z 66a: 83 60 ori r24, 0x03 ; 3 66c: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:696 TCCR3A |= _BV(WGM30); // Put timer 3 in 8-bit phase correct pwm mode 66e: e0 e9 ldi r30, 0x90 ; 144 670: f0 e0 ldi r31, 0x00 ; 0 672: 80 81 ld r24, Z 674: 81 60 ori r24, 0x01 ; 1 676: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:705 TCCR4B |= _BV(CS42) | _BV(CS41) | _BV(CS40); // Set timer 4 prescale factor to 64 TCCR4D |= _BV(WGM40); // Put timer 4 in phase- and frequency-correct PWM mode TCCR4A |= _BV(PWM4A); // Enable PWM mode for comparator OCR4A TCCR4C |= _BV(PWM4D); // Enable PWM mode for comparator OCR4D #elif defined(TCCR4B) && defined(CS41) && defined(WGM40) TCCR4B |= _BV(CS41) | _BV(CS40); // Set timer 4 prescale factor to 64 678: e1 ea ldi r30, 0xA1 ; 161 67a: f0 e0 ldi r31, 0x00 ; 0 67c: 80 81 ld r24, Z 67e: 83 60 ori r24, 0x03 ; 3 680: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:706 TCCR4A |= _BV(WGM40); // Put timer 4 in 8-bit phase correct pwm mode 682: e0 ea ldi r30, 0xA0 ; 160 684: f0 e0 ldi r31, 0x00 ; 0 686: 80 81 ld r24, Z 688: 81 60 ori r24, 0x01 ; 1 68a: 80 83 st Z, r24 D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:717 #endif #if defined(ADCSRA) // set a2d prescaler so we are inside the desired 50-200 KHz range. #if F_CPU >= 16000000 // 16 MHz / 128 = 125 KHz ADCSRA = _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0) | _BV(ADEN); 68c: 87 e8 ldi r24, 0x87 ; 135 68e: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7f807a> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:737 // here so they can be used as normal digital i/o; they will be // reconnected in Serial.begin() #if defined(UCSRB) UCSRB = 0; #elif defined(UCSR0B) UCSR0B = 0; 692: 10 92 c1 00 sts 0x00C1, r1 ; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7f80c1> D:\SoftWare\arduino-1.8.13\portable\packages\MiniCore\hardware\avr\2.0.7\cores\MCUdude_corefiles/wiring.c:739 #endif } 696: 08 95 ret 00000698 <__udivmodsi4>: __udivmodsi4(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1638 698: a1 e2 ldi r26, 0x21 ; 33 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1639 69a: 1a 2e mov r1, r26 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1640 69c: aa 1b sub r26, r26 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1641 69e: bb 1b sub r27, r27 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1642 6a0: fd 01 movw r30, r26 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1644 6a2: 0d c0 rjmp .+26 ; 0x6be <__udivmodsi4_ep> 000006a4 <__udivmodsi4_loop>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1646 6a4: aa 1f adc r26, r26 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1647 6a6: bb 1f adc r27, r27 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1648 6a8: ee 1f adc r30, r30 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1649 6aa: ff 1f adc r31, r31 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1650 6ac: a2 17 cp r26, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1651 6ae: b3 07 cpc r27, r19 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1652 6b0: e4 07 cpc r30, r20 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1653 6b2: f5 07 cpc r31, r21 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1654 6b4: 20 f0 brcs .+8 ; 0x6be <__udivmodsi4_ep> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1655 6b6: a2 1b sub r26, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1656 6b8: b3 0b sbc r27, r19 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1657 6ba: e4 0b sbc r30, r20 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1658 6bc: f5 0b sbc r31, r21 000006be <__udivmodsi4_ep>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1660 6be: 66 1f adc r22, r22 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1661 6c0: 77 1f adc r23, r23 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1662 6c2: 88 1f adc r24, r24 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1663 6c4: 99 1f adc r25, r25 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1664 6c6: 1a 94 dec r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1665 6c8: 69 f7 brne .-38 ; 0x6a4 <__udivmodsi4_loop> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1667 6ca: 60 95 com r22 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1668 6cc: 70 95 com r23 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1669 6ce: 80 95 com r24 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1670 6d0: 90 95 com r25 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1672 6d2: 9b 01 movw r18, r22 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1674 6d4: ac 01 movw r20, r24 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1676 6d6: bd 01 movw r22, r26 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1678 6d8: cf 01 movw r24, r30 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:1680 6da: 08 95 ret 000006dc <__tablejump2__>: __tablejump2__(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2296 6dc: ee 0f add r30, r30 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2297 6de: ff 1f adc r31, r31 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2328 6e0: 05 90 lpm r0, Z+ /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2329 6e2: f4 91 lpm r31, Z /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2330 6e4: e0 2d mov r30, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2331 6e6: 09 94 ijmp 000006e8 <_exit>: exit(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 6e8: f8 94 cli 000006ea <__stop_program>: __stop_program(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avr5/libgcc/../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 6ea: ff cf rjmp .-2 ; 0x6ea <__stop_program>И ты в своей функции не вызываешь родительскую вручную
b707 по идее не должен (и не делает - проверил),
спасибо.
А чем дизассемблируешь?
У меня установлен пакет MiniCore и в нем свой platform.txt. Во временной папке (где IDE всё варит) сразу есть lst !!!
правильно ли я понимаю, что в машинный код будут скомпилированы оба метода X() - и родительский и дочерний, даже если в коде используется только последний? Если да - есть ли какой-то иной метод наследования. который не тащил бы в код методы родительсткого класса там, где они не нужны?
Правильно. А вот компоновщик неиспользованное выкинет, если его запустить с адекватными флагами.
в нем свой platform.txt. Во временной папке сразу есть lst !!!
а можешь выложить?
Видно что используется objdump ...
точнее avr-objdump
Спасибо.
В Ардуино - не стоит напрягаться. Это обеспечивает опция -lto "Линк Тайм Оптимамизейшн" - на руглище ;).
Помнишь тут года 4 назад битвы были про -lto? Типа выкидывает, что ни попадя. Так вот это про неё, родную. Если захочешь погрузиться в вопрос, то есть много статей на аглицком про LTO в GCC. Вот прям так и находятся в гугле.
Если пользоваться вне среды Ардуино, то опция -flto должна быть включена как для компиляции, так и для линка. Компилятор создает таблицу символов, которую линковщик использует и может выкинуть ненужное.
При правильном использовании LTO позволяет напихать все полезные методы в класс, а линковщик выкинет из кода ненужное. ;)) Это сильно упрощая, но так можно понимать.
wdrakula. спасибо, -flto знаю
А чем дизассемблируешь?
В VS есть Disassembled View
Ардуина("дохлая") через ICSP шьется. Загрузчик через Arduino ISP пишется. Пробовал и от нано и от уно... Правда так и не понял как указать конкретный загрузчик, например скачал с гитхаба оптибут 8.0, но так и не понял как его вшить... :(
Архив(точнее из него одни hex'ы) распаковал по инструкции, в папку (hardware\arduino\avr\bootloaders\Optiboot-8.0)... Манипуляции с boards.txt вообще ни к чему не приводят. Я этот файл даже удалял, а в ИДЕ все равно ничего не меняется....
Заметил только если шить загрузчик от уно, то свободной памяти становится 32кб, а если нано - то 30...
И еще вопрос, если шить программу через Arduino ISP (т.е. одну нану через вторую, "загрузить через программатор") - загрузчик тоже пишется? Иначе почему при загрузке через ICSP пишет что "Скетч использует 24580 байт (80%) памяти устройства. Всего доступно 30720 байт." Или я уже запутался(
AsNik Установите пакет MiniCore. В нём есть загрузчик optiboot. Выберите свою плату среди плат пакета MiniCore и залейте загрузчик через вторую плату.
Без второй платы или программатора стереть загрузчик из IDE достаточно сложно. Загонять ячейки - маловероятно.
А может что-то случится с USB - > UART? Странно она себя ведет... вроде и начинает загружаться, мк перезагружается и на этом висит... Затем в лог вот это выдает(при загрузка пустого скеча):
Информацию о плате выдает.
Может вы залили загрузчик ожидающий данные на другой скорости ?!
AsNik Установите пакет MiniCore. В нём есть загрузчик optiboot. Выберите свою плату среди плат пакета MiniCore и залейте загрузчик через вторую плату.
https://github.com/MCUdude/MiniCore
? Установил, появилось несколько новых меню.... разбираюсь. Спасибо. Сейчас буду пробовать ставить эксперименты на полудохлой нане...
загрузчик из комплекта miniCore должен решить проблему и памяти будет доступно 32к и загружать будет на 115200
почему при загрузке через ICSP пишет что "Скетч использует 24580 байт (80%) памяти устройства. Всего доступно 30720 байт." Или я уже запутался(
эта надпись никак не связана с реальным обьемом памяти в системе - эти цифры читаются из boards.txt. Какие цифры в файле напишете, такие и будут. Можете хоть 16 гиг написать :)
Может вы залили загрузчик ожидающий данные на другой скорости ?!
Может... Но как это определить?
Я заливал только стандартные из поставки Ардуино ИДЕ. Единственный нестандартный вариант - это Оптибут 8, но с ним у меня ничего не получилось.
Про файл boards.txt - я писал выше. Вернул его прежним на место, экспериментировал с его копией...
Про файл boards.txt - я писал выше. Вернул его прежним на место, экспериментировал с его копией...
к чему эти извращения, всё делается двумя-тремя тычками мышки по менюшкам IDE
эти цифры читаются из boards.txt. Какие цифры в файле напишете, такие и будут. Можете хоть 16 гиг написать :)
Да вот что-то никаких результатов с изменением данного файла... Я пробовал имя менять nano.menu.cpu.atmega328old=ATmega328P (Old TEST Bootloader) (нана только через него до этого грузилась OLD, но потом пробовал и "новым") - ничего в меню не меняется
Да вот что-то никаких результатов с изменением данного файла... Я пробовал имя менять nano.menu.cpu.atmega328old=ATmega328P (Old TEST Bootloader) (нана только через него до этого грузилась OLD, но потом пробовал и "новым") - ничего в меню не меняется
если меню не меняется - значит у вас на компе несколько boards.txt и вы правите не тот
к чему эти извращения, всё делается двумя-тремя тычками мышки по менюшкам IDE
Да нет, это я уже тоже делал, ну только не с миникорэ, а со стандартными.... потом и полез в этот файл...
МИНИкорэ установил, буду пробовать его. Спасибо
МИНИкорэ установил, буду пробовать его. Спасибо
вместо того чтобы ставить все новые пакеты - разберитесь лучше как это все работает. А то, на мой взгляд, вы тыркаетесь вслепую.
От установки кучи копий Ардуино ИДЕ будет только вред - будет непонятно, где правильные конфиги и что от чего зависит.
если меню не меняется - значит у вас на компе несколько boards.txt и вы правите не тот
[/quote]
Несколько. У меня нет установленных ИДЕ. Только зипы распакованные несколько штук... Но я правлю тот, откуда стартует arduino.exe.... И даже пробовал другие папки с версиями ардуины убирать в другую папку...
Но возможно где-то в реестр (хотя и там искал) есть что-то... В общем тоже подумал про вариант с boards.txt, но... незнаю. ИДЕ Должен читать из своих потрахов этот файл
К чему все эти манипуляции с загрузчиками? испортить бутлоадер операциями с кодом вы никак не могли. Думаю. проблема аппаратная, например частыми втыканиями кабеля расшатали USB разъем на плате и пайка треснула... или что-то подобное.
Возьмите другую ардуину и попробуйте
МИНИкорэ установил, буду пробовать его. Спасибо
вместо того чтобы ставить все новые пакеты
Поздно :)
разберитесь лучше как это все работает. А то, на мой взгляд, вы тыркаетесь вслепую.
Ну не совсем в слепую. На делфи писал в свое время и системные вещи, немного помню как это все крутится на ПК. А так, да я всегда стараюсь разобраться в том, что делаю.
От установки кучи копий Ардуино ИДЕ будет только вред - будет непонятно, где правильные конфиги и что от чего зависит.
Ну тут от ПО конечно еще зависит.... если написано криво и конфиг используется не свой, то да.... проблемка)
К чему все эти манипуляции с загрузчиками? испортить бутлоадер операциями с кодом вы никак не могли. Думаю. проблема аппаратная, например частыми втыканиями кабеля расшатали USB разъем на плате и пайка треснула... или что-то подобное.
Возьмите другую ардуину и попробуйте
Вообще не расшатывал да и не втыкаю часто... по крайней мере пока пишу для нее вот как была в макетке так и торчит там не вынимаясь... Я в этом плане (разъемы и их втыкания очень аккуратен)
Ну раз испортить не мог программно, то скорее всего тогда что-то сгорело, но уж точно не отпаялось... Ладно, если с МИНИКОРЭ не получится ничего, буду ее через ICSP шить.... Жаль, а версия про неправильную скорость в параметрах мне была по душе
Ну тут от ПО конечно еще зависит.... если написано криво и конфиг используется не свой, то да.... проблемка)
какой используется конфиг, узнать очень просто, при запущенной IDE открываете настройки и смотрите самую нижнюю строчку(большая красная стрелка):
Файл boards ищите где-то в той же директории
(на верхнюю красную стрелку не обращать внимания, картинка не моя :)
Ok, забыл я про этот аппдата... Давно еще хотел спросить про этот преференсес.тхт
Буду смотреть там чего хранит ИДЕ, Но уже миникоре там нашел... значит точно все версии имеющихся ИДЕ используют общую папку Ардуино15. Спасибо
С MiniCore через другую ардуину тоже прошивается, бутлоадер загружается... После прошивки загрузчика светодиод начинает моргать два раза пауза два раза пауза и т.д. При подсоединении через USB при загрузке (Blink) ошибка:
В настройках выбрано ВСЕ сообщения от компилятора, ничего нового он не показывает
По предложенной ссылке смотрел, ничего там не понял.
Всё, помер USB? Или все таки где-то что-то я не доглядываю? Ведь при начале загрузки светодиоды начинают мыргать как и обычно, но недолго.... потом снова два мырга пауза... А в ИДЕ пишет, что идет загрузка и через несколько минут - ошибка.
И мой код в МиниКорэ не компилится:
Но с 19200 тоже не работает. Но повторяюсь, при начале загрузке, сразу после компиляции, ардуина перезагружается, начинают мигать светодиоды, как обычно при загрузке - не долго, но когда ардуина загружается, то в ней начинает работать программа прошитая через ICSP а ИДЕ висит и затем ошибку выдает
Залей блинк через вторую плату и проверь с какой частотой моргает.
Сейчас еще раз попробую, но помоему (уже заливал) как положено один герц...
ADD
Да, частота один герц. Секунду горит, секунду нет.
И кстати через ICSP загружается с обычным загрузчиком, через USB эта нанка грузилась только с Old Bootloader...
Если моргает не раз в секунду - сбил фьюзы.
Если моргает раз в секунду - залей скетч с Serial.println и проверь есть ли вывод в порт.
Мог снести резисторы на дорожках от usb-uart к atmega.
Да нет) Я ее вообще не трогаю, торчит она себе в макетке и торчит...
Сейчас попробую с портом....
Нет, в Serial ничего не летит, но светодиоды горят Pow(понятно) и Tx постоянно...
Но... кстати, если что-то посылать в ардуину (в мониторе порта), то на ардуине вспыхивает Rx
Я бы с лупой изучил линию Tx. И макетку прозвонить на вопрос кз по тх на плюс и землю.
Опа.... Вытащил из макетки, и с другой стороны один резистор, я его ногтем поддел - он и отвалился, не знаю на какой он линии.... сейчас поищу в интернете. Находится рядом с микросхемой USB (там их два(резистора) рядом... Возможно Вы правы. Но тогда это заводской(китайский) брак... Но нанка уже больше года торчит в этой макетке....
Наминал резистора не увидел, он сразу потерялся.... Ну слепой я уже( А тот, который остался, на нем тоже ни черта не видно... Но хуже всего - у меня смдшных нет и в своем городе вряд ли найду(
Есть еще пару жареных ардуин, мож с них чего подойдет...
Вот на обратной стороне его красной стрелкой указал. Наверное на 1 кОм
Запаял я этот резистор. Такого мелкого не нашел, пришлось припаять чуть больше. Одну сторону на пятак, второй пятак оказался под резистором, пришлось проводок и на ногу Tx. Все равно не шьется через USB, но теперь хоть в порт шлет. Т.е. по ICSP прошил тестовую прошивку в сериал пишет раз в секунду, в мониторе порта видно. А если нажать загрузить скеч (пустой ) (через USB ), то в логе практически через две секунды после компиляции и начала загрузки:
Напишите эхо скетч для Serial
Пока не сможете из терминала посылать и принимать назад - надо разбираться с железом.
Тут свежем взглядом посмотрел. Т.н. тестером померил верхний резистор - он 10кОм (мультик показал 11.8 кОм)
Перепаял нижний на 10 и в дип корпусе Удобнее кстати и без провода... Но теперь и через ICSP ошибка при загрузке:
У вас же несколько плат ... Эти резисторы для защиты и они 1 кOm скорее всего. На 10 кОм сигнал потеряется...
У вас же несколько плат ...
дело в том что на них(резисторах) не видно ничего... Тестером меряю, который рядом с отвалившимся на нем 11кОм. Сейчас доступны мне полуживая нана и уно(которая пока программатор ISP) Остальные наны в другом месте, за ними ехать надо)
В общем я перепаял на 1 кОм тоже в дип, получилось куда аккуратнее чем с смд.
Подключаю через ISP, загружаю - таже ошибка. А потом смотрю, старый я дурак, перепутал RESET с MISO
В итоге залил Эхо через ICSP:
void setup() { Serial.begin(115200); Serial.print("Start"); } void loop() { if (Serial.available() > 0) { byte bb = Serial.read(); Serial.print((char)bb); } }Start в мониторе вижу и всё...
поменял на всякий случай
void setup() { Serial.begin(115200); Serial.println("Start"); } void loop() { if (Serial.available() > 0) { byte bb = Serial.read(); Serial.println((char)bb); } delay(1000); Serial.println("Second"); }Вижу Start и потом Second'ы идут каждую секунду...
Или может верхний резистор, чего того не того, может его тоже заменить на килоом? Сейчас еще раз его померил (и прошлый раз и сейчас не выпаивал) - 12 с копейками показал. Странно( Хотя нижний, который впаял(дип) меряю - 1 кОм кажет.