simavr adalah simulator AVR untuk linux, atau platform apa pun yang menggunakan avr-gcc. Ia menggunakan definisi register avr-gcc sendiri untuk menyederhanakan pembuatan target baru untuk perangkat AVR yang didukung. Inti dibuat menjadi kecil dan kompak, dan dapat diretas sehingga memungkinkan pembuatan prototipe proyek AVR dengan cepat. Inti AVR kini stabil untuk digunakan dengan komponen dengan flash <= 128KB, dan dengan dukungan awal untuk komponen yang lebih besar. Simulator memuat file ELF secara langsung, dan bahkan ada cara untuk menentukan parameter simulasi secara langsung dalam kode yang ditiru menggunakan bagian .elf. Anda juga dapat memuat file HEX multi-bagian.
- _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.
Di OSX, kami merekomendasikan penggunaan homebrew:
brew tap osx-cross/avr
brew install --HEAD simavr
Di Ubuntu, SimAVR tersedia dalam sumber paket Bionic:
apt-get install simavr
(Perhatikan bahwa perintah ini tersedia dengan nama simavr
bukan run_avr
.)
Jika tidak, make
sudah cukup untuk mulai menggunakan bin/simavr . Untuk menginstal perintah simavr di seluruh sistem, make install RELEASE=1
.
Tambalan selalu diterima! Silakan kirimkan perubahan Anda melalui permintaan tarik Github.
simavr dapat menampilkan sebagian besar pin, variabel firmware, interupsi, dan beberapa hal lainnya sebagai sinyal untuk dimasukkan ke dalam file yang dapat diplot menggunakan gtkwave untuk analisis lebih lanjut dan tepat. Firmware dapat berisi instruksi agar simavr mengetahui apa yang harus dilacak, dan file tersebut dibuat secara otomatis. Contoh:
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, },
};
Akan memberitahu simavr untuk menghasilkan jejak setiap kali register UDR0 berubah dan setiap kali interupsi dimunculkan (dalam UCSR0A). Tag MMCU memberi tahu gcc bahwa ia perlu dikompilasi, tetapi tidak akan ditautkan ke program Anda, jadi secara harfiah dibutuhkan nol byte, ini adalah bagian kode yang bersifat pribadi untuk simavr , gratis! Sebuah program yang dijalankan dengan instruksi ini dan menulis ke port serial akan menghasilkan file yang akan menampilkan:
$ ./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
Dan ketika file dimuat di gtkwave, Anda melihat:
Anda mendapatkan perincian waktu yang sangat tepat untuk setiap perubahan yang Anda tambahkan ke jejak, hingga siklus AVR.
simavr benar-benar dibuat untuk menjadi pusat untuk meniru proyek AVR Anda sendiri, bukan hanya debugger, tetapi juga meniru periferal yang akan Anda gunakan di firmware Anda, sehingga Anda dapat menguji dan mengembangkannya secara offline, dan sesekali mencobanya di perangkat keras .
Anda juga dapat menggunakan simavr untuk melakukan pengujian unit pada firmware pengiriman Anda untuk memvalidasinya sebelum Anda mengirimkan versi baru, untuk mencegah regresi atau kesalahan.
simavr memiliki beberapa 'proyek lengkap/ yang menunjukkan hal ini, sebagian besar dibuat menggunakan perangkat keras nyata di beberapa titik, dan biner firmware persis seperti yang dijalankan pada perangkat keras tersebut. Kuncinya di sini adalah meniru bagian atau periferal yang terhubung ke AVR. Tentu saja, Anda tidak harus meniru seluruh perangkat keras, Anda hanya perlu menghasilkan stimulus yang tepat agar AVR dapat tertipu.
Papan contoh ini menghubungkan Atmega48 ke LCD HD44780 yang ditiru dan menampilkan penghitung berjalan di 'lcd'. Semuanya ditiru, firmware berjalan persis seperti ini pada perangkat keras sebenarnya.
Dan ini adalah jejak gtkwave dari apa yang dilakukan firmware. Anda dapat memperbesar, mengukur, dll di gtkwave, memilih jejak untuk dilihat, dll.
Cukup banyak contoh lain yang tersedia!