simavr — это симулятор AVR для Linux или любой платформы, использующей avr-gcc. Он использует собственное определение регистра avr-gcc, чтобы упростить создание новых целей для поддерживаемых устройств AVR. Ядро было сделано небольшим, компактным и легко взломанным, что позволило быстро создать прототип проекта AVR. Ядро AVR теперь стабильно для использования с частями с флэш-памятью <= 128 КБ, а также с предварительной поддержкой более крупных частей. Симулятор загружает файлы ELF напрямую, и есть даже способ указать параметры моделирования непосредственно в эмулируемом коде, используя раздел .elf. Вы также можете загружать составные файлы HEX.
- _simavr_ is provided **AS IS**. If you think you should report "security vulnerabilities"
- and waste everyones time with them, you are either a grifter OR an idiot, or both. And
- anyone checking the CV you brag about it will see this paragraph, first.
В OSX мы рекомендуем использовать доморощенный вариант:
brew tap osx-cross/avr
brew install --HEAD simavr
В Ubuntu SimAVR доступен в исходном коде пакета Bionic:
apt-get install simavr
(Обратите внимание, что команда доступна под именем simavr
а не run_avr
.)
В противном случае, make
достаточно просто начать использовать bin/simavr . Чтобы установить команду simavr для всей системы, make install RELEASE=1
.
Патчи всегда приветствуются! Пожалуйста, отправьте свои изменения через запросы на включение Github.
simavr может выводить большую часть своих выводов, переменных прошивки, прерываний и некоторых других вещей в виде сигналов, которые нужно сбросить в файл, который можно построить с помощью gtkwave для дальнейшего точного анализа. Прошивка может содержать инструкции для simavr, чтобы знать, что отслеживать, и файл создается автоматически. Пример:
const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = {
{ AVR_MCU_VCD_SYMBOL("UDR0"), .what = (void*)&UDR0, },
{ AVR_MCU_VCD_SYMBOL("UDRE0"), .mask = (1 << UDRE0), .what = (void*)&UCSR0A, },
};
Скажет simavr генерировать трассировку каждый раз, когда изменяется регистр UDR0 и каждый раз, когда возникает прерывание (в UCSR0A). Тег MMCU сообщает gcc, что его необходимо скомпилировать, но он не будет связан с вашей программой, поэтому он занимает буквально ноль байт. Это частный раздел кода для simavr , он бесплатен! Программа, выполняющая эти инструкции и записывающая данные в последовательный порт, сгенерирует файл, который отобразит:
$ ./simavr/run_avr tests/atmega88_example.axf
AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
Loaded 1780 .text
Loaded 114 .data
Loaded 4 .eeprom
Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
atmega88 init
avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
Creating VCD trace file 'gtkwave_trace.vcd'
Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
Read from eeprom 0xcafef00d -- should be 0xcafef00d..
simavr: sleeping with interrupts off, quitting gracefully
И когда файл загружается в gtkwave, вы видите:
Вы получаете очень точную временную разбивку любого изменения, которое вы добавляете в трассировку, вплоть до цикла AVR.
Simavr действительно создан для того, чтобы быть центром эмуляции ваших собственных AVR-проектов, а не только отладчиком, но и эмуляцией периферийных устройств, которые вы будете использовать в своей прошивке, поэтому вы можете тестировать и разрабатывать в автономном режиме, а затем время от времени пробовать это на оборудовании. .
Вы также можете использовать simavr для тестирования вашей поставляемой прошивки, чтобы проверить ее перед отправкой новой версии, чтобы предотвратить регрессии или ошибки.
У simavr есть несколько «полных проектов», демонстрирующих это, большинство из них в какой-то момент были созданы с использованием реального оборудования, и двоичный файл прошивки — это именно тот, который работал на оборудовании. Ключевым моментом здесь является эмуляция частей или периферийных устройств, подключенных к AVR. Конечно, вам не обязательно полностью эмулировать аппаратное обеспечение, вам просто нужно сгенерировать правильный стимул, чтобы AVR был обманут.
В этом примере плата подключает Atmega48 к эмулируемому ЖК-дисплею HD44780 и отображает счетчик хода на «ЖК-дисплее». Все эмулируется, прошивка работает именно так на реальном железе.
А это gtkwave-трассировка того, что делает прошивка. Вы можете увеличивать масштаб, измерять и т. д. в gtkwave, выбирать трассы для просмотра и т. д.
Есть еще немало примеров!